最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

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

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

关注

评论

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

网易云信 QUIC 应用优化实践

网易云信

音视频开发

Java培训MySQL体系构架、存储引擎和索引结构

@零度

MySQL JAVA开发

Java8新特性-Optional

爱好编程进阶

Java 程序员 后端开发

web前端培训React 中Router的必备知识点

@零度

前端开发 React

云电脑的四重守护,安全有谱

天翼云开发者社区

安全 云电脑

Demo:第三章:权限框架spring security oauth2

爱好编程进阶

程序员 后端开发

dubbo实战之二:与SpringBoot集成

爱好编程进阶

Java 程序员 后端开发

npm install xxxx --legacy-peer-deps命令是什么?

华为云开发者联盟

前端 npm install 依赖树 对等依赖关系

DM 是如何处理 DML 的丨TiDB 工具分享

PingCAP

使用xdebug调试php详细教程

CRMEB

GitHub上超火的阿里调优专家的677页Java性能调优笔记,已让我拿下5个offer

爱好编程进阶

Java 程序员 后端开发

聊聊如何在华为云IoT平台进行产品开发

华为云开发者联盟

物联网平台 IoT 华为云 iotda 设备接入

助力提升研发效能的“黄金三角”

博文视点Broadview

简述数仓的时间域函数

华为云开发者联盟

数据库 时间 时间戳 GaussDB(DWS) 时间域函数

秒云 (元来云志)获邀加入中国开源云联盟,共筑开源生态

MIAOYUN

开源 开源生态 开源中国

Docker Swarm从部署到基本操作

爱好编程进阶

Java 程序员 后端开发

java不使用客户端授权密码直接用账号密码发送带附件的邮件

爱好编程进阶

程序员 后端开发

OpenHarmony新增两个分布式能力!快来了解~

科技汇

Go 语言入门很简单:net/http 包

宇宙之一粟

HTTP Go web 4月月更

Java-进阶:集合框架1

爱好编程进阶

程序员 后端开发

使用APICloud & MobTech SDK 快速实现分享到社交平台功能

YonBuilder低代码开发平台

APP开发 APICloud MobTech袤博科技 社交分享

curl 的用法指南

爱好编程进阶

Java 程序员 后端开发

Hibernate实现CRUD(附项目源码)

爱好编程进阶

Java 程序员 后端开发

Java中当对象不再使用时,不赋值为null会导致什么后果?

爱好编程进阶

Java 程序员 后端开发

与多家机构战略合作,背后彰显PlatoFarm元宇宙龙头的实力

西柚子

HDI硬件设备接口介绍

科技汇

低通信量是筛选分布式多方安全计算常用安全协议方案的先决条件

易观分析

安全多方计算 低通信量

BIO、NIO、AIO 介绍和适用场景分析

爱好编程进阶

Java 程序员 后端开发

Choreographer全解析

爱好编程进阶

Java 程序员 后端开发

git(8)Git 与其他系统

爱好编程进阶

Java 程序员 后端开发

JAVA API调用elasticsearch实现基本增删改查

爱好编程进阶

程序员 后端开发

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