写点什么

百度贴吧王伟冰:跳出历史技术栈,谨慎寻找最佳优化思路

  • 2016-06-23
  • 本文字数:3669 字

    阅读完需:约 12 分钟

从 2003 年诞生到现在,基于兴趣聚合的百度贴吧已经走过了 13 年,随着用户、流量的不断增长,业务的不断复杂化,研发团队的规模不断扩张,百度贴吧这 13 年经历了 LAMP 化、服务化、私有云化等阶段。然而面对每一次架构调整,贴吧是如何在无数优化方向中选择最适合现状同时又兼容未来的技术方案?其中贴吧团队又需要经过多少调研多少试验才能进行判断与落实?

2016 年 7 月 15-16 日, ArchSummit 全球架构师峰会将在深圳举行。本届大会,我们邀请了百度贴吧架构师王伟冰,前来分享《百度贴吧性能优化之路》的内容,讲述的是站在历史13 年的视角上看百度贴吧是如何一点一滴归纳总结得来不易的性能优化思路和经验的。

现在我们就来采访王伟冰老师,让我们提前预览每一次架构变动背后的细节与故事吧。

受访嘉宾介绍

王伟冰,2010 年加入百度,参与设计开发百度Memcached、Redis、通用反作弊等通用服务,服务百度50+ 产品线,日pv 上万亿。负责百度LNMP 基础设施(Nginx、PHP、HHVM、RPC 中间件、扩展、基础库等)开发维护;负责百度OXP 私有云平台建设; 负责百度贴吧性能优化;优化PC、移动、Native 客户端的用户访问速度;建立了全面的性能评估、分析、监控体系等工作。

InfoQ: 您从 2010 年开始加入百度至今已经 6 年了,能否谈谈这些年您经历了哪些团队变化和成长,这些年给您最大的收获和教训是什么?

王伟冰:前四年我一直在社区基础技术 - 架构团队,做过各种通用服务和通用组件,如 Memcached、Redis、Antispam、HHVM 等等,服务于百度内部的各种业务,包括知识、贴吧、移动云等。近两年也参与了贴吧业务,做过性能优化、业务监控等。

基础技术的视角和业务的视角是很不一样的,两方面都做过之后看问题会更全面。比如做基础技术的时候会从业务的角度去想,业务为什么需要这样的技术,为什么会用你提供的东西;而做业务的时候也会想,这个东西如何抽象,做成更通用的技术让更多人可以使用。

InfoQ: 您曾参与开发设计百度 Memcached、Redis 等数据缓存技术方案,能否谈谈它们各自的业务范围以及为什么选用了它们?能否简单介绍百度的存储架构设计经历了怎样的迭代与发展?

王伟冰:做 Memcached 是 2011 年,当时公司内不少业务在用 Memcached 来做缓存,但都各自运维,在集群化方案、高可用方案、一致性方案上都有一些缺陷,所以我们就做了一个基于 Memcached 的通用缓存服务,并提供封装好的客户端,用户不需要再关心分布式、高可用上的细节,并提供延迟删除的功能来解决 Cache 与 DB 数据不一致的问题。

当时我们也有高写入性能、持久化存储的需求,比如浏览计数、最近访问列表,那时 Redis 还没有火,我们基于 Berkeley DB 做了一套小数据 kv、klist 存储服务,解决了当时的业务问题。到了 2012 年,我们有了一些更复杂的需求,比如列表 top 排序、过期自动失效,这时我们发现有 Redis 这个东西,非常适合做这个事情,而且性能很高,所以开始做 Redis 存储服务。

百度的存储架构,这个 Topic 太大了,比如网页库存储就是一套非常复杂的体系。具体到社区业务而言,主要是经历了 3 个阶段:08 年以前,是专有 C 模块存储;08-12 年,逐步 LAMP 化,Mysql+Cache 成为主流;12 年到今,则是 Mysql+Nosql 并存,Nosql 除了 Memcached/Redis, 还有各种百度内部实现的 kv、klist、table 系统,满足各种不同的业务需求。

InfoQ: 你们逐渐从 LAMP 架构转移至 OXP 私有云架构,能否简单介绍开发 OXP 的初衷和背景分别是什么?OXP 是如何统筹兼顾开发框架、测试环境、运维平台、监控系统等模块以及各模块之间是如何联系如何协同工作的?

王伟冰:LAMP 化、服务化、私有云化是贴吧架构的 3 个重要的变革点,LAMP 化是提升单个模块开发效率,服务化是提升大团队协作开发效率,而私有云化则是提升运维效率。

在 LAMP 化的过程, 我们抽取出一套通用的开发框架和平台,称为 ODP(Online Develop Platform),用这套框架业务可以快速地开发新应用。但是随着业务规模越来越复杂,机器规模越来越大,测试、运维方面的问题变得越来越突出,开发人员更多的时间都花在搭建测试环境、上线、处理线上问题。我们意识到要提升全流程的效率,而不仅仅是开发阶段的效率。因此我们做了全流程的解决方案,包括开发 (Develop)、测试 (Testing)、运维 (Operation)、监控与问题定位 (Monitor),这就是 OXP 私有云。

在 OXP 私有云中,我们通过定义一系列的规范,比如目录规范、日志规范、RPC 规范,把整个流程串起来。只要用我们的开发框架进行开发,应用就是符合规范的,我们就可以按照这个规范去运维、去构建测试环境、去采集日志进行监控分析。规范就像一个协议,每个服务、每个平台都遵守这个协议,那么整个流程就可以很好地串起来。

在迁移私有云的过程中,难点在于如此庞大的业务如何平滑地进行迁移。每一次架构的大改动,都需要花费数月的时间。在这个期间,新老系统是并存的,我们设计了一些方案,保证一个业务可以同时存在新系统和老系统,代码自动同步,流量可以自由切换,然后再逐个业务去切换。

InfoQ: 服务端上,贴吧分别在 Native 端和 WebApp 上的优化思路有什么不同,在各端上贴吧应该分别侧重哪些环节和服务?

王伟冰:Native 和 WebApp 存在很大的不同,Native 的行为更可控,我们在网络协议上做了很多优化。WebApp 的优势在于渲染上比较灵活,所以我们做在延迟加载、分段加载等方面做更多功夫。

Native 和 WebApp 的融合也是近年的一个趋势。我们也在尝试多个思路,比如用配置来控制 Native 的展现、用脚本来控制 Native 展现(如 React Native)、嵌入浏览器内核的 Hybrid 模式,这些方法都各有各的优缺点:

  1. 配置方式的性能最好,但灵活性差 ;
  2. 浏览器方式的灵活性最好,但性能差;
  3. 脚本方式兼顾了性能和灵活性,但实现成本又较高,更容易出问题。

目前来说还没有看到哪一种有特别明显的优势,所以目前是根据不同业务的需求场景来选择合适的技术,比如产品核心页面更重性能,可以用配置方式; 运营类页面更重灵活性,可以用浏览器方式;脚本方式作为一种比较新的技术,可以在新业务上进行尝试。

InfoQ: 您曾负责百度贴吧性能优化,节约过半服务器,能否具体谈谈该阶段的优化背景,你们团队在各环节做了哪些优化以达到这个效果?在贴吧性能优化上有没有长期的指导思想(优化思路)?

王伟冰:14 年初的时候,贴吧流量涨得很厉害,服务器规模大涨,所以决定做性能优化。最主要是做了两件事情,RPC 中间件优化和迁移 HHVM,这个优化效果是贴吧历史上优化最好的,节省了过半的前端服务器。性能优化最主要有两个思路,一是尝试引入新技术(如 HHVM),二是分析业务的性能瓶颈并做针对性的优化,这两个方案往往是最有效的。

新技术的引入是需要比较谨慎的,选择 HHVM 我们也是观察了较长时间,在内部做了很多试点,发现 HHVM 性能确实很高,兼容性、稳定性也还不错,同时社区很活跃,所以才决定全面迁移。除了主动地做性能优化,更重要的是防止退化。我们现在设计了一些监控算法,能够实时地发现性能的变化。当发现性能变化时,我们会对比分析性能的构成,看看哪部分的模块或者哪部分的函数耗时发生了变化,同时我们也会查找当时的变更事件,看看是否是有相关的上线变更操作,导致性能发生了变化。

InfoQ: 贴吧已经是 13 岁的“老”产品了,您和您的同事是否遇到过不敢处理的“似是而非”的代码?遇到这种情况应该怎么处理?能否分享面对具有大量历史代码的产品的处理经验?

王伟冰:老代码肯定是存在的。不过由于贴吧历史上经历了多次大规模的架构改造,大部分代码都被重写了,剩下小部分,也是一些很边缘、不重要的功能,平时并不怎么会接触到。

在性能优化的过程中,我们是尽量避免去改业务代码的。即使要改,也会尽量地兼容以前的逻辑,不管这些代码是新的还是老的。当做大的重构项目的时候,我们会去梳理所有的业务逻辑,对于不再有用的代码,和产品确认之后,就会去掉。

InfoQ: 从 13 年开始贴吧已经面临 100 亿流量的规模了,能否谈谈现在移动化 + 社交背景下,贴吧架构现在面临了哪些瓶颈、遇到了哪些新的挑战并且如何应对?

王伟冰:性能优化是无止境的,一方面业务还在变得更复杂,流量还在涨;另一方面,比较好做的优化我们都已经做了,未来的优化将会更难,这对我们是很大的挑战。这时候需要跳出原来的技术栈,从更上层或者更低层的技术栈来看优化。比如从上层角度看,业务需求本身是可以优化的,例如有些需求不一定合理,有些功能不一定有用,把这些干掉性能就上去了;从低层角度看,资源层还有较大的优化空间,通过资源的合理混布、智能调度可以让资源更加节省。

除了性能之外,研发效率是更大的挑战。从业务上看,贴吧的产品形态正在变得越来越多元化,对研发效率的要求也越来越高,我们也在不断地完善私有云,以支撑业务更快地迭代。

InfoQ:感谢王伟冰老师接受我们的采访。期待您在 ArchSummit 全球架构师峰会上的分享。


感谢陈兴璐对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-06-23 19:004470
用户头像

发布了 26 篇内容, 共 98724 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

左耳听风 - 优质代码「读书打卡 day 11」

Java 工程师蔡姬

读书笔记 程序员 个人成长 职业发展 优质代码

如何使用MindStudio轻松搞定大模型全流程开发

华为云开发者联盟

人工智能 华为云 大模型 华为云开发者联盟

夜读 PingCAP CTO 文章总结 TiDB 三个特性

TiDB 社区干货传送门

7.x 实践

喜讯!云起无垠获评“德勤海淀明日之星”

云起无垠

软件测试|拒绝上市公司的 Offer,选择自己喜爱的行业,这么从容不迫他凭什么?

霍格沃兹测试开发学社

软件测试|测试管理训练营马上开营! 快来免费领取试听课吧~

霍格沃兹测试开发学社

SD-WAN保障服务质量的五大核心功能

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商

求求你别用轮询了!手把手教你封装WebSocket消息推送,告别轮询方式!

陇锦

JavaScript 前端 websocket

IPQ4019: A powerful boost in the field of wireless communications

wallysSK

回顾 2023,NebulaGraph 的这一年的变化

NebulaGraph

图数据库

快速玩转 Mixtral 8x7B MOE大模型!阿里云机器学习 PAI 推出最佳实践

阿里云大数据AI技术

图像处理-Java-背景色平滑/反色

alexgaoyh

Java 图像处理 背景色平滑 反色

文心一言 VS 讯飞星火 VS chatgpt (182)-- 算法导论13.4 6题

福大大架构师每日一题

福大大架构师每日一题

判断SD-WAN是否适用于你的企业的关键问题

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商

每日一题:LeetCode-153. 寻找旋转排序数组中的最小值

Geek_4z9ami

面试 算法 LeetCode 二分查找 Go 语言

鸿蒙生态进入第二阶段,加速千行百业应用鸿蒙化

华为云开发者联盟

华为 鸿蒙 开发者 华为云开发者联盟

HarmonyOS SDK,助力开发者打造焕然一新的鸿蒙原生应用

HarmonyOS开发者

HarmonyOS

拒绝上市公司Offer,选择自己喜爱的行业,从容不迫他凭什么?

测试人

软件测试 测试 自动化测试 测试开发 测试工程师

聊聊TiDB里面如何实现读写分离

TiDB 社区干货传送门

实践案例

数字化企业与传统企业有何区别?

天津汇柏科技有限公司

企业数字化

静态分析工具的评估测试

华为云PaaS服务小智

华为云

小程序开发实战案例五 | 小程序如何嵌入H5页面

盐焗代码虾

小程序 支付宝 web-view

使用 HyBench 测试 TiDB

TiDB 社区干货传送门

性能测评 7.x 实践

SD-WAN零接触部署解析

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商

彰显科技硬实力!天翼云在国际顶刊JoCCASA发表论文

编程猫

MySQL Update语句一个非常经典的“坑”

伤感汤姆布利柏

精通 GraphQL API 设计:最佳实践指南

Apifox

程序员 前端 后端 graphql GraphQL API

百度贴吧王伟冰:跳出历史技术栈,谨慎寻找最佳优化思路_架构_李东辉_InfoQ精选文章