2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

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

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

关注

评论

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

BH1750 传感器实战教学 —— 驱动移植篇

矜辰所致

传感器 I2C 6 月 优质更文活动

立即报名 | Microservices June 微服务之月再度开启

NGINX开源社区

nginx 微服务

跨平台开发工具 kbone 实操经验分享

Onegun

小程序 跨平台 前端框架 kbone

Serverless: AI everywhere的下一块拼图

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

当“代码农”遇上“码农”:揭秘主干开发的那些事儿 | 京东云技术团队

京东科技开发者

敏捷开发 单元测试 代码评审 主干开发 企业号 6 月 PK 榜

跨端框架的兴起:WePY(微信小程序容器技术)

没有用户名丶

Github127k点赞!堪称最强 Java面试指南!已跳槽字节涨15K

Java java面试 Java八股文 Java面试题 Java面试八股文

线程池性能提升之道:核心线程数选择与定制实战

Java 多线程 线程池

漫画告诉你什么是生成式AI(一)

FN0

AIGC

【Netty】「NIO」(二)阻塞模式与非阻塞模式

sidiot

Java 后端 Netty 6 月 优质更文活动

“古老”编程语言的最新选择!华为云发布CodeArts IDE for C/C++

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

【堡垒机】北京堡垒机品牌哪家好?优势有哪些?

行云管家

堡垒机 IT运维 北京

进阶篇丨链路追踪(Tracing)很简单:链路成本指南

阿里巴巴云原生

阿里云 云原生 链路追踪

深入理解Java线程池:线程池参数调优与技巧

xfgg

Java 线程池 6 月 优质更文活动

山东淄博市具有资质的等保测评机构有几家?咨询电话多少?

行云管家

等保 等级测评 淄博

Java面试卷到家了?分享经典Java万字笔记,查漏补缺,备战面试

Java java面试 Java八股文 Java面试题 Java面试八股文

漫画告诉你什么是生成式 AI(二)

FN0

AIGC

选择优质的led透明屏的7个步骤

Dylan

产品、 LED显示屏 售后服务

Flink实例:处理IoT事件流

TiAmo

IoT Flink实例 事件流 6 月 优质更文活动

人工智能创新挑战赛:海洋气象预测Baseline[4]完整版(TensorFlow、torch版本)含数据转化、模型构建、MLP、TCNN+RNN、LSTM模型训练以及预测

汀丶人工智能

人工智能 数据挖掘 深度学习 LSTM 6 月 优质更文活动

【体验有奖】玩转 AIGC,函数计算 x 通义千问预体验,一键部署 AI 应用赢 Airpods

阿里巴巴云原生

阿里云 云原生 AIGC

测试左移右移,到底是什么?

老张

测试右移 测试左移

Maxcompute数据上云一致性比对

阿里云大数据AI技术

大数据 数据集 企业号 6 月 PK 榜

直播平台源码画面质量功能的实现

山东布谷科技

软件开发、 云算力模式系统开发源码 源码解读 直播系统 直播平台源码

慢 SQL 优化之索引的作用是什么? | 京东云技术团队

京东科技开发者

MySQL 数据库 innodb 慢SQL 企业号 6 月 PK 榜

jvm中类和对象定义存储基础知识 | 京东云技术团队

京东科技开发者

Java JVM 虚拟机 企业号 6 月 PK 榜 对象定义存储

AntDB数据库入选艾媒金榜《2023年中国信创数据库企业TOP15》,位列前三

亚信AntDB数据库

AntDB 数据库· AntDB数据库 企业号 6 月 PK 榜

软件测试/测试开发丨学习笔记Allure2添加用例标题、用例步骤

测试人

程序员 软件测试 测试开发 测试报告 Allure

如何从抓包文件中分析慢请求

蓝胖子的编程梦

Wireshark tcpdump 抓包 网络抓包 抓包分析

面试官:什么时候 MySQL 查询会变慢?

Java MySQL 数据库

深度学习应用篇-计算机视觉-图像分类[2]:LeNet、AlexNet、VGG、GoogleNet、DarkNet模型结构、实现、模型特点详细介绍

汀丶人工智能

人工智能 深度学习 计算机视觉 图像分类 6 月 优质更文活动

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