早期的贴吧,作为一个高性能社区,功能相对单一,全部采取C措辞开拓,系统可重用程度低,开拓、测试效率低,运维方面的积累也很少。为了提高效率,开始考试测验 LAMP 架构,经由几年的发展,贴吧已全部迁移到了 LAMP。随着产品规模急剧膨胀,30+ 子系统,150+ 模块,500+ 机器,10亿+流量,在 LAMP 架构方面积累了很多履历,逐渐形成了快速迭代的一体化方案。如下图所示:
该办理方案由开拓阶段、测试阶段、运维阶段组成。开拓阶段又分成接入层、业务逻辑层、存储层。该办理方案支撑大规模的线上运用,同时保持了快速迭代的特性。基于该办理方案,开拓职员能专注于业务逻辑开拓,测试职员能专注于持续集成,运维本钱能大大降落。
开拓
开拓方面分为接入层、业务逻辑层、存储层。
接入层处于浏览器和后端做事之间,用来解析 http 协议并组织成相应的协议格式,完成客户端和做事器之间的通信,还包括攻击戒备、页面缓存、负载均衡等多种功能。Web Server 是其核心组成部分。接入层的目标是通过统一的方案供应大略可依赖的接入层架构,经由全面调研 nginx 具有通用性强、效率高、功能全面、配置灵巧等特点,是 webserver 未来发展的主力军,确定采取 nginx 统一接入层。
业务逻辑层包含了 PHP 框架、业务逻辑、LIB 库、交互层。业务逻辑层常常包含一些开拓规范,这些规范就像法律一样,我们不仅要有法可依,还要有法必依。在我们的办理方案中,PHP 框架=规范+库,规范比如目录支配规范、URL 规范、配置规范等,这些规范通过相应的库实现,以达到有法必依的目的。
LIB 库封装常用的功能。基于这个办理方案,开拓者开拓运用,只需完成业务逻辑部分。
中间层,如下图所示,包含在业务逻辑层中,对付业务逻辑层的快速迭代非常主要。中间层对下做交互抽象,支持各种协议屏蔽协议细节;通过资源定位屏蔽支配细节;通过负载均衡提高系统稳定性。中间层对上做接口抽象,支持做事整合、接口适配、公共逻辑。
中间层首先建立系统–子系统–模块的体系,进行做事整合,图中的 API-LIB 便是根据子系统划分,将各模块的接口(MIDL: Module IDL)转化为子系统接口(SIDL: Service IDL);接口适配,SERVICE 的接口通过 SIDL 描述,让接口描述、接口文档、线上代码等自动同步,可掩护性大大提高,同时通过元数据规范担保全部系的接口同等,易用性大大提高;收敛公共逻辑,对付公共逻辑,比如权限逻辑,收敛起来可掩护性大大提高。
存储层,供应各种通用做事、组件。个中的通用数据存储框架供应通用的数据存储和访问办理方案,以一种统一的设计模式来支持大多数数据存储模块的设计和实现;统一数据访问接口,对外部屏蔽数据拆分和存储的细节;做到数据存储的良好扩展性,通过通用的数据拆分模式来应对数据增长;将具有共性的需求抽象成通用做事或通用库,以简化设计和开拓。
基于该办理方案,开拓一个运用只须要:在接入层配置相应的分流,在业务逻辑层开拓业务逻辑,利用存储层得当的做事或基于框架完成数据模块开拓。能大大的提高开拓效率,支持快速迭代。
测试
测试方面,为了支持快速迭代,必须提高自动化程度。而影响自动化的紧张成分便是环境自动构建,常见的问题有:环境繁芜,比如关联关系繁芜;环境搭建代价过大;环境功能不完全等。采取基准环境能办理这一问题,项目上线后自动从 scmpf 更新到基准环境;测试环境/开拓环境从基准环境同步。基于基准环境,系统级别的持续集成也成为可能,同时可以集中大量测试工具。
运维
运维方面面临着很多问题:做事迁移本钱高,环境不一致带来各种回滚,机器利用率不屈衡,运维自动化程度低。为理解决这些问题,提出 PHP 系统运维方案。环境同步方面,紧张是代码同步的问题,采取运维规范+监控的方案;性能监控方面,基于交互层完成要求状态、交互性能监控,基于调度中央获取机器状态;机器调度方面,通过调度中央完成动态/半自动机器调度。如下图所示:
展望
通过该 LAMP 办理方案,在开拓、测试、运维方面都能极大的提高效率。未来在 LAMP 架构方面,须要更多的在规范化、平台化高下功夫。规范之后才能开展这种自动化的事情提高效率;平台化可以把各种规范固化下来,供应自动化的支持。