HTTP 服务使用 F-Stack 在不同业务场景下的性能表现

为何选用HTTP服务器进行测试

HTTP 协议因其易用性和普适性得到了大规模的普及,我们说HTTP协议是互联网的基石一点也不为过,当前提供HTTP服务的Server性能要求越来越高,如何提高 HTTP 服务器的性能变得非常重要。近年来网卡性能快速发展,给高性能HTTP服务提供了硬件支持,但是linux 内核却越来越成为高性能网络服务器的瓶颈。

HTTP 的传输层协议为 TCP ,TCP作为面向连接的协议能够提供可靠传输,但是在性能有非常大的短板,尤其在短连接网络业务服务中,受限于PCB表锁竞争等因素,系统内核大并发创建 TCP 连接的性能(CPS)非常低。实际HTTP服务开发中我们一般会尽量使用长连接来优化网络性能,但是在部分面向终端用户的业务中很难完全使用长连接,而且即便是长连接,其性能在某些应用上依然无法让人满意。

为了提高网络服务器性能,业界提出了好几个 Kernel Bypass 方案,比如Intel DPDK、NetMap、PF_RING等,这些方法的入门槛较高,而且主要是提供二层的收发包能力,没有提供完整的协议栈能力。 F-Stack 提供了一个低门槛、高性能、完整协议栈能力的网络服务器解决方案,F-Stack 使用 Intel DPDK 开发套件提高网络收发包性能,移植 FreeBSD 协议栈至用户态,提供了 Posix 和 微线程的编程接口,并集成了 Nginx 等实用应用程序,适用大部分的 HTTP 网络服务器场景并尽量降低业务接入 F-Stack 的接入门槛,HTTP 网络服务器无需改动业务代码或替换系统的网络API即可快速接入,并获得更高的性能。

名词解释

F-Stack:F-Stack是一个全用户态的高性能的网络接入开发包,基于DPDK、FreeBSD协议栈、微线程接口等,适用于各种需要网络接入的业务,用户只需要关注业务逻辑,简单的接入F-Stack即可实现高性能的网络服务器。

CPS:Connections Per Second,每秒钟新建(断开)连接数,本文主要指服务器每秒钟可以建立的 TCP 连接数。

TPS:Transactions per second,每秒钟事务数,在本文中指从客户端发起并完成一个完整的 HTTP 请求,过程包括建立 TCP 连接,发起 HTTP GET请求,F-Stack 服务器接收并回复 body 大小为600字节的数据(总数据包大小为),客户端接收完成相应数据,断开连接。

测试表现

本节介绍 F-Stack 在适用于不同业务场景状态下的测试及结果表现,所有测试数据由 Nginx 直接返回内存中缓存的数据,实际业务性能还受业务逻辑的影响,具体测试环境如下:

网卡:Intel Corporation Ethernet Controller XL710 for 40GbE QSFP+
CPU:Intel(R) Xeon(R) CPU E5-2670 v3 @ 2.30GHz
内存:128G
操作系统:CentOS Linux release 7.2 (Final)
内核版本:3.10.104-1-tlinux2-0041.tl2
数据包大小:HTTP HEADER 239字节, body 600 字节或 body 3.7k 字节(仅达到线速的测试使用该大小),包越大整体带宽表现会越好。

短连接

腾讯云的 HttpDNS 服务是一个典型的短连接服务,受限于系统内核 CPS 的性能瓶颈,在万兆网卡上原系统性能只有5万 TPS。在接入 F-Stack 之后,性能可以达到百万 TPS,F-Stack 使用了多进程的架构,每个进程有单独的协议栈,无资源共享和竞争,虽然单进程协议栈提升并不明显(约20%-50%),但是整体系统性能有了质的提升。下图为 F-Stack 上进行短连接的 HTTP TPS 测试数据。

混合连接

腾讯云的 CDN 业务是主要使用长连接的业务,长连接能大幅提升用户的访问速度,但是在实际用户访问统计中,平均一个 TCP 连接只会处理2-3个 HTTP 请求,系统内核的 CPS 性能瓶颈依然会极大影响 CDN 的整体性能,而且即便单个连接处理更多的请求,其性能差距依然十分巨大。下图为使用 F-Stack 与系统内核进行的对比测试结果,分别为每个连接处理3个和10个 HTTP 请求。

每个连接处理3个HTTP请求

每个连接处理10个HTTP请求

长连接

当数据传输不涉及到终端用户时,就比较容易在服务器间使用长连接提提升性能,且随着处理的数据包越来越大时,系统内核 CPS 性能瓶颈的影响将会逐渐减小,如长连接大包的业务场景下使用系统内核依然能达到 40GE 网卡的线速。

但是 F-Stack 此时依然有其实用价值,因为 F-Stack 除了多进程对共享资源的优化外,全用户态的协议栈同时也对锁竞争、内存拷贝、中断处理、上下文切换等进行了优化,能够消耗更少的资源达到相同的性能表现。 下图为长连接场景下小文件(典型场景如通信服务器之间的数据传输)与较大文件(典型场景如 CDN 业务中边缘节点和中间源间的数据传输)时 F-Stack 与系统内核的对比测试。

长连接小文件(Nginx表示未将网卡队列中断到不同CPU)

长连接较大文件

F-Stack交流

GITHUB, 欢迎业务使用、 或者加入开发、 顺便star一下我们的项目,有任何问题可以提ISSUSES或直接RTX联系我们。

官方网站,官网资源持续完善中,如果您的项目使用了 F-Stack,也希望通知我们,让我们加入到应用列表中。

微信公众号:搜索公众号 FStack 关注,会不定期发布F-Stack的技术细节、使用技巧和应用场景等文章,同时欢迎投稿。

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

Greenplum数据仓库迁移小记

迁移无小事,所以从开始计划将公司的Greenplum集群迁移,到最后落地,整个过程虽然说不上是波折,但是也算是有不少的故事,各种准备和协调。

1013
来自专栏北京马哥教育

Linux 容器 vs 虚拟机 —— 谁更胜一筹

自从Linux上的容器变得流行以来,了解Linux容器和虚拟机之间的区别变得更加棘手。本文将向您提供详细信息,以了解Linux容器和虚拟机之间的差异。 Linu...

2604
来自专栏JAVA高级架构

缓存架构之防雪崩设计

缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,但是出于容错的考虑,如果从存储层查不到数据则不写入缓存层

993
来自专栏腾讯技术工程官方号的专栏

让互联网更快的协议,QUIC 在腾讯的实践及性能优化

本文将主要介绍 QUIC 协议在腾讯内部及腾讯云上的实践和性能优化。

5066
来自专栏Rainbond开源「容器云平台」

技术解读Rainbond Service Mesh微服务架构_开源PaaS Rainbond

1232
来自专栏Java架构师学习

前阿里开发工程师的分享微服务之基于Docker的分布式企业级实践前言Microservice 和 Docker服务发现模式服务端发现模式服务注册第三方注册模式 Third party registra

前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Docker 的技术体系的...

3958
来自专栏北京马哥教育

Ansible vs SaltStack 谁才是自动化运维好帮手?

豌豆贴心提醒,本文阅读时间5分钟 概述 互联网技术发展越来越快,机房服务器也越来越多,运维工作的重要性不断上升。在上升的背后,运维工作的层...

3699
来自专栏windealli

系统性能的影响因素和优化方向小结

系统性能是系统设计、实施中的重要目标。这里简单小结下影响系统性能的几个常见因素,以及优化方案。

2387
来自专栏Netkiller

压力测试中存在的问题

压力测试中存在的问题 (What) 什么是压力测试 软件压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。软件压力测试的基本思路很简单: 不是...

3064
来自专栏文渊之博

初识kafka

Kafka经常用于实时流数据架构,用于提供实时分析。本篇将会简单介绍kafka以及它为什么能够广泛应用。

723

扫码关注云+社区