百度万亿流量转发平台背后的故事

主要内容
• 项目背景简介
• BFE团队的历程和理念
• 项目研发的指导思想
• 研发过程的管控
• 文档,代码,项目管理
• 研发和运维的一体化
• 提升工程能力的意义

展开查看详情

1.百度万亿流量转发平台 背后的故事 章淼 博士 百度云架构师 百度代码规范委员会主席

2.个人简介 1994-2004,清华大学计算机系,本科,博士 1997-2006,清华大学,互联网协议 / 网络体系结构研究 2006-2012,多家公司(搜狗、腾讯等),用户产品研发 2012-,百度, 2012-2020,运维部/系统部BFE团队技术负责人 2020-, 百度云BFE商业化团队负责人 2018- , 百度代码规范委员会主席 微信公众号: 章老师说(科技,教育,文化)

3.主要内容 • 项目背景简介 • BFE团队的历程和理念 • 项目研发的指导思想 • 研发过程的管控 • 文档,代码,项目管理 • 研发和运维的一体化 • 提升工程能力的意义

4.BFE是什么? • 统一的七层流量转发平台 • HTTP, HTTPS, HTTP/2, QUIC • 2012年开始建设 • 每日转发请求约1万亿,日峰值超 过1KW QPS • 2020年,核心转发引擎成为 CNCF Sandbox Project • BFE => Beyond Front End • https://github.com/bfenetworks/bfe

5.百度网络接入架构 GTC: 外网流量调度 HTTPDNS: 在网络入口间对外网流量 BGW: 四层负载均衡 BFE: 七层负载均衡 移动域名解析 进行调度。基于DNS生效 HTTPDNS GTC PoP BGW BFE 华北服务集群 华北用户 B2 B1 Internet PoP BGW BFE 华东服务集群 华东用户 GSLB: 内网流量调度 BFE的子功能 PoP BGW BFE 华南服务集群 华南用户

6.BFE团队的历程(2012 – 2020) • 2012 • 2016 • BFE第一版上线(转发,黑名单封 • BFE数据分析模块研发 禁) • 2017 • 启动流量调度(GTC & GSLB)的研发 • 外网流量调度GTC大规模覆盖 • 2013 • 2018 • 内网流量调度GSLB上线 • 移动端技术研发(QUIC,HTTPDNS) • 2014 • 2019 • WAF研发上线 • 春晚活动支持 • 转发引擎重构(基于Go语言) • BFE转发引擎开源 • 启动HTTPS研发 • 2020 • 2015 • BFE开源项目被CNCF接受为Sandbox • HTTPS大规模落地 Project • BFE管理平台研发启动

7.BFE团队的理念 如果你的人生目标是成为Jeff Dean那样的技术专家,那么你正是BFE团队 想要寻找的人 在这个浮躁的时代,BFE团队相信只有宁静才能致远 只有对技术足够痴迷,你才能抵挡无数的诱惑、到达一般人无法企及的 境界 相比“码农”,BFE团队寻找的是真正的Software Engineer(SE) 对真正的SE来说,30岁只是开始,写代码只是无数的必备素质之一

8.BFE团队的理念(cont.) 在这个普遍看重KPI的时代,BFE团队最看重寻找和培养人才 只有一流的精英才能创造出最精彩的产品和技术 在这个普遍看重结果的时代,BFE团队最看重过程 如果没有正确的方法,成功只是偶然 在这个普遍加班的时代,BFE团队只需要975 努力工作,更需要聪明的工作;平衡了工作和生活,会更有创造力 BFE团队相信,在中国也可以做出和美国一样顶级的技术

9. 4大研发方向(2014年确立) 项目研发的指导思想 • 接入和转发 • 流量调度 • 意识 => 看见 => 行动 • 安全和防攻击 • 数据分析 • BFE ó Nginx? • BFE不只是一个系统 涉及的技术方向 • BFE • 网络协议 • 涉及多个研究和技术方向 • 网络安全 • 涉及多个产品方向的平台化产品 • 网络测量 • 网络接入服务 • 网络流量调度 • 需要严格执行软件工程原则 • 高性能、分布式系统 • 数据分析

10.网络接入的趋势 • 网络传输的加密化 • 数据驱动的运营 • 网络协议技术门槛的提高 • 包括:报表 & 监控 & 智能控制 • 协议进化:HTTP/2, QUIC等 • 自动化 / 智能化的控制 • 移动化对网络接入的影响 • 如:流量调度 • NA的比例提高 • 软件化 / 服务化 / 开源化 • 传输协议的私有化 • 云原生化 • HTTPDNS的兴起 • 服务的云原生化 • 网络安全防护的重要性提高 • 网络接入系统的云原生化 • DDOS防护 和 WAF成为标配 参见:移动和云原生下的新一代网络接入服务

11.研发过程的管控 • 质量,来源于对研发过程的严格管控 • 主要的把控点 • 代码 • 研发文档 • 项目管理

12.代码的管控 • 编程规范 • 做项目前,必须要有编程规范 • BFE团队是百度go语言编程规范的发起方 • 建立优秀代码的标准 • Code Review • 建立可复用的基础库 更多细节可参见 • 代码的艺术 • 如何做好Python代码的Code Review

13.一流代码的特性 • 鲁棒 (Solid and Robust) • 高效 (Fast) 正确和性能 • 简洁 (Maintainable and Simple) • 简短 (Small) 可读和可维护 • 可测试 (Testable) • 共享 (Re-usable) 共享和重用 • 可移植 (Portable) • 可监控 (Monitorable) / 可观测(Observable) 运维和运营 • 可运维 (Operational) • 可扩展(Scalable & Extensible) 注:前7条来自《写好代码的十个秘诀》by 林斌, 2000

14.Code review的重要性 • #1 way to improve code quality • Peer code reviews are the single biggest thing you can do to improve your code • There’s no better way to mentor someone

15.认真做好每次code review

16.建立可复用的基础库 • 不断的抽出可被多个项目复用的基础库 • 减少各业务模块的代码量和工作量 • 建立可复用基础库的前提 • 知道怎么切分模块

17.对于项目文档的误区 • 互联网行业关于项目文档普遍不很重视 • 敏捷 = 不写/少写项目文档? • 好的代码 可以替代 项目文档? • 写文档是浪费时间?没时间写文档? • 文档本身也是产出:coding的时间少于30% • 写文档是整理思路的过程:打字的速度应该快于思考的速度 • 没有文档,后期会花费更多的维护成本 • 没写需求和设计文档就开始写程序? • 修改文档,比修改代码的成本小的多 • 这是个简单的项目/问题,不需要文档? • 项目的延续时间和复杂性往往超出预期 • 早期的“偷懒”,往往在后期会付出代价

18. 项目文档的重要性 • 文档的目的: 《软件开发的201个原则》 • 提高沟通的效率 • 提升对"思考过程"的管理 • 项目中,超过50%的时间用于沟通 • 提高沟通的效率非常重要 • 沟通的方式 • 口头,文档,代码 • 对"思考过程"的管理 • 项目中常常面临数不清的问题(“线 头”) • 理清问题,挑出重点,深入挖掘 • 不会写文档 => 不会做设计!

19.BFE团队在项目文档方面的实践 • 明确的文档规范 • 代码未动,文档先行 • 首先要完成文档评审,才能开始写代码 • 文档的review更新可能达到10次以上 • 以“项目”为单位,建立文档索引 更多细节 • 怎么写项目文档 • 做研究的一些体会

20.项目管理 《软件开发的201个原则》 • 项目管理的重要性被严重低估 • 代码/技术最重要? • 懂项目管理的软件工程师极少 • 95%的人不会做项目管理

21.BFE团队在项目管理方面的实践 • 项目的规划和启动 • 项目执行 • 周报:每个人都可能成为项目owner • 迭代管理 • 项目总结和回顾

22. 项目周报的例子 3.进展和计 1. 做好任 划的对应 4. 做好 务拆分 2. 跟进长期 计划 计划 子项目 总体计划 上周计划 本周进展 下周计划 名称 后台系统 • 1.10 完成开发 • 开发模块A-1(张三) • 开发模块A-1(张三): • 开发模块A-2(李四) A • 1.17完成开发 • 开发模块A-2(李四) 完成 • 1.15 完成测试 • 开发模块A-2(李四): • 1.22 完成测试 由于其它工作插入,未 • 1.20 完成上线 完成。delay至下周 • 1.27 完成上线 后台系 … … … … 统B 5. 责任 7. 做好 6. 风险 到人 调整 呈现

23.研发和运维一体化 • 研发和运维分离的问题 • 研发不考虑运维的痛点 • 可运维能力,是系统的重要考虑 • BFE团队的模式:Devops • 在系统设计中,充分考虑运维的需求 • 不断通过优化系统来降低运维成本

24.BFE开源可运维能力支持 • 各种日志的支持 • 配置热加载 • Server Log, Access Log, TLS Key • 不影响已建立的连接 Log • 异常处理 • 内部状态的展示 • 可以对异常进行捕获,不会导致程 • 独立的web server用于暴露状态 序崩溃 • 向外提供数千个状态 • 易于添加新的状态 • 和各类监控系统配合,如 Prometheus • 对Distributed Tracing的支持 • 支持Jaeger, Zipkin, Elastic等

25.

26.努力提升工程能力 • 比尔盖茨:写软件代表的是世界的将来 • 整个世界终究是为技术所驱动的 • 团队/企业的工程能力,对于产品/软件的成功至关重要 • 中国互联网的荒蛮时代已经结束 • 996是不正常的,既无法持久,也无法保证效率和质量 • 使用正规、科学的研发方法,不断提升工程能力,才是解决之道 • 是否使用科学的方法,效果相差十倍、百倍、千倍、甚至是从0到1 的差距

27.延伸阅读 • 写在百度万亿流量转发引擎BFE开源之际 • 移动和云原生下的新一代网络接入服务 • 关于Golang的一些思考 • 代码的艺术 • 百度 代码的艺术训练营 培训大纲 • 如何做好Python代码的Code Review 章老师说 • 怎么写项目文档 教育、学习、思考、实践, • 做研究的一些体会 为了一个更好的中国 • 如何突破996.ICU的迷雾

28.世运之明晦 人才之盛衰 其表在政 其里在学

29.Thanks