百度贴吧10亿量级LAMP架构分享

贴吧是功能性产品,唯快不破是永恒的准则,这一特点决定了快速迭代是需要解决的关键性问题 。快速迭代,分解开来有如下部分:开发阶段,快速开发;测试阶段,包含了环境快速搭建、自动化测试工具;运维阶段,包含了集群管理技术、自动化运维工具;同时,这三方面的工作需要一个整体性的解决方案衔接起来 。
早期的贴吧,作为一个高性能社区,功能相对单一,全部采用C语言开发,系统可重用程度低,开发、测试效率低,运维方面的积累也很少 。为了提高效率,开始尝试 LAMP 架构,经过几年的发展,贴吧已全部迁移到了 LAMP 。随着产品规模急剧膨胀,30+ 子系统,150+ 模块,500+ 机器,10亿+流量,在 LAMP 架构方面积累了很多经验,逐渐形成了快速迭代的一体化方案 。如下图所示:

百度贴吧10亿量级LAMP架构分享

文章插图
 
该解决方案由开发阶段、测试阶段、运维阶段组成 。开发阶段又分成接入层、业务逻辑层、存储层 。该解决方案支撑大规模的线上应用,同时保持了快速迭代的特性 。基于该解决方案,开发人员能专注于业务逻辑开发,测试人员能专注于持续集成,运维成本能大大降低 。
开发
开发方面分为接入层、业务逻辑层、存储层 。
接入层处于浏览器和后端服务之间,用来解析 http 协议并组织成相应的协议格式,完成客户端和服务器之间的通信,还包括攻击防范、页面缓存、负载均衡等多种功能 。Web Server 是其核心组成部分 。接入层的目标是通过统一的方案提供简单可依赖的接入层架构,经过全面调研 Nginx 具有通用性强、效率高、功能全面、配置灵活等特点,是 webserver 未来发展的主力军,确定采用 nginx 统一接入层 。
业务逻辑层包含了 php 框架、业务逻辑、LIB 库、交互层 。业务逻辑层常常包含一些开发规范,这些规范就像法律一样,我们不仅要有法可依,还要有法必依 。在我们的解决方案中,PHP 框架=规范+库,规范比如目录部署规范、URL 规范、配置规范等,这些规范通过相应的库实现,以达到有法必依的目的 。
LIB 库封装常用的功能 。基于这个解决方案,开发者开发应用,只需完成业务逻辑部分 。
中间层,如下图所示,包含在业务逻辑层中,对于业务逻辑层的快速迭代非常重要 。中间层对下做交互抽象,支持各种协议屏蔽协议细节;通过资源定位屏蔽部署细节;通过负载均衡提高系统稳定性 。中间层对上做接口抽象,支持服务整合、接口适配、公共逻辑 。
中间层首先建立系统–子系统–模块的体系,进行服务整合,图中的 API-LIB 就是根据子系统划分,将各模块的接口(MIDL: Module IDL)转化为子系统接口(SIDL: Service IDL);接口适配,SERVICE 的接口通过 SIDL 描述,让接口描述、接口文档、线上代码等自动同步,可维护性大大提高,同时通过元数据规范保证全系统的接口一致,易用性大大提高;收敛公共逻辑,对于公共逻辑,比如权限逻辑,收敛起来可维护性大大提高 。
百度贴吧10亿量级LAMP架构分享

文章插图
 
存储层,提供各种通用服务、组件 。其中的通用数据存储框架提供通用的数据存储和访问解决方案,以一种统一的设计模式来支持大多数数据存储模块的设计和实现;统一数据访问接口,对外部屏蔽数据拆分和存储的细节;做到数据存储的良好扩展性,通过通用的数据拆分模式来应对数据增长;将具有共性的需求抽象成通用服务或通用库,以简化设计和开发 。
 
百度贴吧10亿量级LAMP架构分享

文章插图
【百度贴吧10亿量级LAMP架构分享】 
 
基于该解决方案,开发一个应用只需要:在接入层配置相应的分流,在业务逻辑层开发业务逻辑,使用存储层合适的服务或基于框架完成数据模块开发 。能大大的提高开发效率,支持快速迭代 。
测试
测试方面,为了支持快速迭代,必须提高自动化程度 。而影响自动化的首要因素就是环境自动构建,常见的问题有:环境复杂,比如关联关系复杂;环境搭建代价过大;环境功能不完整等 。采用基准环境能解决这一问题,项目上线后自动从 scmpf 更新到基准环境;测试环境/开发环境从基准环境同步 。基于基准环境,系统级别的持续集成也成为可能,同时可以集中大量测试工具 。
百度贴吧10亿量级LAMP架构分享


推荐阅读