前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >F-Stack 助力 HTTP 网络服务器性能提升

F-Stack 助力 HTTP 网络服务器性能提升

作者头像
F-Stack
发布2018-01-31 10:35:32
5.9K1
发布2018-01-31 10:35:32
举报

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地址: https://github.com/f-stack/f-stack, 您的使用、 加入开发、 star 一下,都是对我们最好的支持。

官方网站: http://www.f-stack.org/,如果您的项目使用了 F-Stack,希望通知我们,我们会加入您项目的相关信息。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FStack 微信公众号,前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 名词解释
  • 实战表现
    • 短连接
      • 混合连接
        • 长连接
        • 附录
        相关产品与服务
        内容分发网络 CDN
        内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档