NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

  • 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:003980
用户头像

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

关注

评论

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

糟糕,数据库异常不可用怎么办?

华为云开发者联盟

数据库 后端 华为云 12 月 PK 榜

不让Bug陪你过年,StarRocks年终抓虫派对重金相邀!

StarRocks

#数据库

Java程序员:为了跳槽刷完1000道真题,没想到老板直接给我升职了

钟奕礼

Java 程序员 java面试 java编程

公司CTO:高性能开发,你不会Netty,怎么好意思拿20K?

钟奕礼

Java 程序员 java面试 java编程

老板答应了我,只要回答对几道简单的Spring问题,就给我涨3K

钟奕礼

Java 程序员 java面试 java编程

聚焦稳定性,Dubbo 发版规划公布

Apache Dubbo

Java 开源 微服务 云原生 dubbo

模块一作业

陈实

「架构实战营」

VoneBaaS荣获第二届中国可信区块链安全攻防大赛优秀案例奖

旺链科技

区块链 产业区块链 VoneBaaS 12 月 PK 榜

更快更稳更安全!天翼云CDN了解一下

天翼云开发者社区

从react源码看hooks的原理

flyzz177

React

Node.js 基于区块链的游戏应用的首选

devpoint

JavaScript node.js 区块链 12月月更

双机双工是什么意思?与双机热备有什么区别?

行云管家

双机热备 双机双工

北京等保备案预约平台是哪个?多久能办好?

行云管家

等保 等保测评 等保备案 北京

天翼云电脑为医共体建设加buff!

天翼云开发者社区

从输入URL到渲染的过程中到底发生了什么?

loveX001

JavaScript

CleanMyMac X2023永久版下载教程及使用许可证

茶色酒

CleanMyMac X CleanMyMac X2023

技术分享| anyRTC音视频与微信小程序互通实践

anyRTC开发者

小程序 音视频 WebRTC RTMP 视频格式转换

iptables 命令和 iptables.service 服务的区别

山河已无恙

12月月更

深度分析React源码中的合成事件

goClient1992

React

工作中常用的设计模式--适配器模式

lpe234

后端 设计模式 适配器模式 spring-boot

令人头秃的js隐式转换面试题,你能做对吗

loveX001

JavaScript

StoneDB 首席架构师李浩:如何选择一款 HTAP 产品?

StoneDB

MySQL HTAP 数据库· StoneDB 12 月 PK 榜

腾讯云与流媒体服务商BeLive达成合作,助力提升东南亚与周边地区直播水平

科技热闻

数字先锋| 农业农村部大数据公共平台基座上线,天翼云擎起乡村振兴新希望!

天翼云开发者社区

react的useState源码分析

flyzz177

React

低代码平台,企业业务创新的最佳路径

元年技术洞察

低代码 数字化转型 #方舟平台

天天预约 | 2022年11月产品更新

天天预约

小程序 SaaS 软件系统 产品分析 预约工具

百度前端二面常考面试题

loveX001

JavaScript

拼多多电商部java岗三面落选,记下的面试题,不睡觉都要背下来!

钟奕礼

Java 程序员 java面试 java编程

民办二本程序员阿里、百度、平安等五厂面经,5份offer(含真题)

钟奕礼

Java 程序员 java面试 java编程

从recat源码角度看setState流程

flyzz177

React

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