推荐序二
2012年年初,我在百度担任运维部主任架构师,一直在思考对整个系统架构的梳理和优化。当时我加入百度已经有几个月的时间,对其系统架构有了比较清楚的了解,发现百度在前期业务的快速发展中,缺乏在基础架构上的系统思考和构建。那个时候,百度已经有很多个不同的业务线,但是对于各个业务的技术后台,很多是各自独立发展起来的,因此,在架构上比较分散,服务部署也比较分散,运维流程比较多样化。这种异构的、分散的系统架构给高效运维带来了很大挑战。例如,我们很难了解和把控一些新的服务的部署,很难对各个服务的健康状况进行统一监控,很难对百度的整个平台的流量进行统计,很难对海量的用户请求进行服务调度,很难对大量的后台服务器做负载均衡,很难对安全漏洞进行系统防御,例如对 DDoS攻击进行自动应对,也很难对恶意爬虫进行识别和屏蔽。
这当然不是行业内出现的新问题。我加入百度之前在谷歌的 SRE(Site Reliability Engineering)团队工作。谷歌也有着极其复杂多样的产品、规模庞大的流量、全球异地部署的服务和数据中心。但是其精心设计的基础架构和运维工具,让工程师可以从互联网的任何一个角落进行系统运维和流量调度——只需要一两行命令和几分钟时间。这个设计中的关键之一,是一个统一的流量接入层 GFE(Google Frontend)。
基于在谷歌的工作经验,我决定先着手搭建百度的统一流量接入层,于是在2012年年初,组建了一个四人的小团队,在开源的 Web服务器Lighttpd的基础上,开发了 BFE的初版。最初,我们只在 BFE上接入了少量的业务系统,并在自动化运维、软件的灰度发布、流量的负载均衡等方面收到了不错的效果;后来逐渐扩展到接入百度全部流量,并和百度的安全团队、爬虫团队等多个团队配合,在 BFE上实现了越来越多的功能。
章淼是在2012年 BFE项目成立不久后加入的,并在我离开百度之后全面接手了 BFE的工作,使得 BFE的功能得以持续发展和迭代。尤其在后来,章淼又以极大的勇气和技术自信对 BFE用 Go语言进行了重写,这也是国内首个用 Go语言实现的大型项目。BFE有比较好的架构和代码质量,很大原因是来自章淼的把控。作为清华计算机系的毕业生,章淼对于编程的艺术是有着持续的追求的。他在百度也专门开设了一门课程“代码的艺术”,听说在百度内部也备受好评。我们期待 BFE也能够成为一个比较好的编程的范例。
回过头来看,BFE项目从启动至今已经有9年时间了,但是还保持着活力。这一方面是因为章淼对技术的不断追求,另一方面是因为百度巨大的用户流量所带来的持续的挑战,同时也因为项目在开源之后来自开源社区的很多优秀的工程师的积极参与。BFE项目在过去几年已经培养了一批优秀的软件工程师,团队早期的部分同学后来从百度“毕业”,陆续成为很多其他互联网公司的中流砥柱。
我期待,BFE项目以及章淼的这本书可以帮助到更多软件工程师的成长。
夏华夏
美团首席科学家
2020年6月27日