高性能的内核Socket实现-Fastsocket
Fastsocket 是一个高扩展性的 Socket 以及 Linux 内核的底层网络实现。可以在多核机器上提供极好的性能,此外使用和维护还非常简单。目前该项目已经在新浪的生产环境中使用。该项目由清华大学和新浪网联合组成的 Fastos 团队开发,该团队的使命是提升 Linux 内核的效率。采用C/C++开发并在GPLv2协议下授权。Fastsocket is a highly scalable socket and its underlying networking implementation of Linux kernel. With the straight linear scalability, Fastsocket can provide extremely good performance in multicore machines. In addition, it is very easy to use and maintain. As a result, it has been deployed in the production environment of SINA.
Fastsocket 目前已经使用在新浪微博的生产环境上,主要用于提供负载均衡服务的 HAProxy,线上实际性能提升一倍,从2014年3月份稳定运行至今,预计2014年底完成负载均衡全部集群的 Fastsocket 升级。
Fastsocket 完全兼容 BSD Socket API,现有各类基于 Socket 的网络应用可以直接使用 Fastsockt。 目前经过兼容测试的常用服务软件有:HAProxy、Nginx、Lighttpd、Redis 和 Memcached。
Fastsocket 作者林晓峰访谈实录
作者介绍:
林晓峰: 前新浪网高级系统开发工程师,关注网络,关注高性能,关注Linux内核。
李晓栋: 新浪网研发中心高级技术经理,有十年的互联网工作经验,是“新浪软件负载均衡系统” 和“ 新浪操作系统管理与优化”方面的重要开拓者. 在fastsocket项目中,发挥了资源协调、技术方案评估、稳定性测试的作用,也是FastOS 计划和管理理念的提出者。
1.简单介绍一下你自己(技术背景、工作经历、学习经历)
Hello,我是林晓峰,很高兴可以通过开源中国这个平台和大家交流。我本科就读大连理工大学,硕士北京邮电大学,2009年在新浪网基础架构部实习,毕业后留在新浪一直工作到2014年10月。对高性能网络和服务器端软件一直有浓厚兴趣,持续关注和开发Linux网络协议栈。
2.简单介绍一下Fastsocket项目的发展历程
新浪使用Haproxy提供七层交换服务,Fastsocket 最初源于新浪生产环境中对于七层交换性能提升的迫切需求。当时我们面临两条技术路线选择,一是:以DPDK等技术为依托,实现完整的用户态协议栈 ,二是:对现有内核协议栈及相关实现进行潜能挖掘。基于对人力、稳定性、开发周期及后续维护成本等方面的评估,我们选择了后者。经过数次版本迭代后,形成了今天大家所看到的fastsocket。在这个过程中,我们有幸协调到了来自Intel、清华大学OS中心、哲思自由软件社区 的大力支持和深度合作,并由Fastsocket项目衍生出了FastOS计划。
3.能否概括一下Fastsocket核心特点?
首先Fastsocket是高性能的,尤其体现在多核扩展性上,充分发挥出多核处理器的性能。
然后是Fastsocket的通用性,因为它本质是对内核网络协议栈的系列优化,这些优化对应用程序是透明的。例如Haproxy、Nginx和Redis这些应用已经过我们实测,都可以在Fastsocket上直接稳定运行,且都可以获得显著的性能提升。最后,Fastsocket是运维友好的,可以对对指定的应用启动Fastsocket,疑是故障时可迅速的回退到标准内核。正是以上的特点,使得Fastsocket可以在新浪七层交换的生产环境上全面部署。
4.哪些应用场景适合Fastsocket?
Fastsocket解决的是内核网络协议栈的效率问题,所以网络IO密集的应用场景最合适使用Fastsocket。例如:代理服务器、CDN和内存型的数据缓存。新浪七层负载均衡服务已经在Haproxy生产环境上全面部署Fastsocket,单机系统容量提升近一倍,并且稳定运行至今。个人推荐,Haproxy的使用者如果有性能提升的需要,可以尝试使用Fastsocket。
5. 能否介绍一下Fastsocket在研发过程的重要阶段?
很幸运可以从零开始研发Fastsocket这个项目,并最终推动项目应用到新浪的生产环境中。
整体上,Fastsocket项目的研发可以分为以下几个阶段:
技术方案选型阶段,研究现有技术方案,参考前沿学术论文,结合团队现状和交付需求,最终确定优化现有内核的网络协议栈来提升Haproxy性能。
核心功能开发阶段,逐个解决系统的性能瓶颈,基本完成核心特性的开发
兼容和运维增强阶段,牺牲少许性能提升,来完全兼容保持BSD socket API,调整Fastsocket使用方式,运维人员可以”傻瓜式“的使用Fastsocket。现在回想起来,这阶段的工作,对于Fastsocket线上生产环境的成功部署至关重要。
功能和压力测试阶段,详尽的功能测试和极限压力测试,历时近两个月,修复大小BUG十余个,有力的保证Fastsocket的稳定性品质: 上线至今无故障。
灰度上线测试阶段,在新浪负载均衡运维团队有力配合下,积极和稳妥的推进Fastsocket在生产环境上的部署。
6.为何想要把Fastsocket开源呢?
从个人的角度来说,这是一个很有趣且有价值的项目,我们希望将它分享出来,很简单的初衷。同时,开源可以促进项目更好的发展。为什么呢?首先,开源可以鼓励和鞭策开发人员写出高质量的代码,因为代码要公诸于世么,如此大范围的丢人决不能够啊。更重要的是,开源可以借助社区的力量,增强项目本身,提高项目的生命力和活力。例如,核心开发人员离职导致项目废弃的例子比比皆是,然而项目开源后,开发人员即使离职,也有可能继续维护项目。又例如,项目开源可以吸引志同道合的开发者一同参与来扩展功能和增强性能,目前Fastsocket已经有高手在贡献代码了。
7.可以讲讲Fastsocket的开发现状和未来的计划?
目前Fastsocket在对TCP长连接的场景进行性能优化,例如memcached和redis等内存数据缓存服务,通常使用TCP长连接来提供服务。到现在为止,已经取得了阶段性成果,并发布到github上,并且经过了稳定性测试。Redis启动Fastsocket后,性能最多可以提升近50%。这些新的特性还在进一步优化中,预计在完成调优并经过生产环境的稳定性检测后,会在V1.1版本正式发布。
对于Fastsocket的未来发展,我个人的想法是把它定义成一个对应用程序透明的高性能网络库(需要Fastsocket内核支持),应用程序只需把这个库链接进来,便可以享用高性能的socket网络I/O。我们会持续自主开发增强Fastsocket,同时也会把上游的提升网络性能的新特性集成进来,并且提供与Fastsocket配套的工具或者脚本自动的把系统配置成最佳网络性能模式,使得程序开发人员和系统运维人员可以专注于自己的事情,把网络性能交给Fastsocket。
另外,对于Fastsocket项目的发展,我们是完全开放的,真诚的欢迎有兴趣的公司和个人参与进来。非常高兴的是,Fastsocket开源不到两周已经有很多同学表示感兴趣,而且已经高手贡献代码了。
8.介绍一下Fastsocket应用现状?
Fastsocket由新浪开源到现在只有两周,目前仅仅在新浪Haproxy生产环境下已经全面部署。据我所知,目前国内几家大型互联网公司都对Fastsocket比较有兴趣。期望未来Fastsokcet有更多的应用。
9. 前面提到FastOS计划,能介绍一下它的理念吗?
从技术层面讲,FastOS计划要做的是:根据生产环境的需求,对 Linux内核不同子系统开展专项性优化。比方说:fastsocket 是FastOS计划中的第一个子项目,解决的是TCP连接的多核扩展问题;未来我们还会推出FastTCP、FastI/O 等不同的子项目。
从管理层面讲,FastOS期望打造的是一个开放的生态系统,可参与该计划的人员不仅有来自新浪内部的开发人员,更包括: 硬件提供商、高校实验室、国内外自由软件组织、互联网同行以及对我们计划感兴趣的任何开发者。可以这么说,FastOS计划是没有公司界限的,开放的。借助FastOS,不仅可实现各参与方的资源整合,更为重要的是:合作成果的最大化分享及成果的持续化维护。在这里,我们也诚挚地欢迎大家加入进来。
Fastsocket can further exploit more from the hardware:
With Fastsocket, Hyper-Threading can make an extra 20% performance increase.
With Fastsocket, NIC that support Flow-Director(like Intel 82599) can increase the throughput by 15% if the server works as a proxy(like HAProxy).
下面是一些使用了 Fastsocket 后的性能测试结果:

最新版本:
项目主页:https://github.com/fastos/fastsocket