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 条评论
登录 后参与评论

相关文章

来自专栏phodal

微信小程序「官方示例代码」浅析【上】

从某个微信群里,拿到了这个IDE的下载地址,然后就有了这个: ? 根本登不上去,怎么办,怎么办呢? 看代码啊。。。 反正我又没有保密协议,解压缩一看NodeW...

26580
来自专栏网络

ASLRay:一个可以绕过ASLR的工具

ASLR(Address Space Layout Randomization,即地址空间格局随机化)是指利用随机方式配置数据地址,一般现代系统中都加设这一机制...

294100
来自专栏13blog.site

Spring+SpringMVC+MyBatis+easyUI整合优化篇(一)Java语言中System.out.print与Log的比较

作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载。 前言 距离上一次更新博...

32280
来自专栏小狼的世界

基于Mapabc API的周边查询应用

现在,越来越多的 Location Based 应用,或者Geolocation的应用出现在网络、手机等各种各样的终端上,为人们的日常生活、出行和工作都提供了不...

11420
来自专栏Java学习网

13 年的 Bug 调试经验总结

编码 下面这些都是我经历过的会导致难点bug的问题: 1.事件顺序。在处理事件时,提出下列问题会很有成效:事件可以以不同的顺序到达吗?如果我们没有接收到此事件会...

32950
来自专栏java一日一条

13 年的 Bug 调试经验总结

在《Learning From Your Bugs》一文中,我写了关于我是如何追踪我所遇到的一些最有趣的bug。最近,我回顾了我所有的194个条目(从13岁开始...

11320
来自专栏程序人生 阅读快乐

细说PHP(第2版) - 高洛峰

《细说PHP(第2版)》共六个部分,分为30个章节,每一章都是PHP独立知识点的总结。内容涵盖了动态网站开发的前台技术(HTML+CSS)、PHP编程语言的语法...

11920
来自专栏FreeBuf

ASLRay:一个可以绕过ASLR的工具

ASLR(Address Space Layout Randomization,即地址空间格局随机化)是指利用随机方式配置数据地址,一般现代系统中都加设这一机制...

24080
来自专栏SDNLAB

OpenDaylight发布第七个版本Nitrogen(氮)

2017年9月26日,Linux基金会领导下的开源SDN控制器项目OpenDaylight发布了第七个版本Nitrogen(氮),该版本缩短了开发时间,以借此实...

31750
来自专栏云计算

助你成功搭建云应用的12条方法

你好,开发者们!你是否想了解应用程序在云端的最佳应用体验?那么,你最好使用12-Factor App,将你的程序部署为Saas(Software-as-a-Se...

266100

扫码关注云+社区

领取腾讯云代金券