导读:天下武功,唯快不破。对日益激烈的互联网竞争你所拥有的利器就是快!本文来自百度贴吧的LAMP解决方案介绍,摘录至此旨在研究分享,看看其是如何全面支持快速迭代的。

文章内容如下:

贴吧是功能性产品,唯快不破是永恒的准则,这一特点决定了快速迭代是需要解决的关键性问题。快速迭代,分解开来有如下部分:开发阶段,快速开发;测试阶段,包含了环境快速搭建、自动化测试工具;运维阶段,包含了集群管理技术、自动化运维工具;同时,这三方面的工作需要一个整体性的解决方案衔接起来。

早期的贴吧,作为一个高性能社区,功能相对单一,全部采用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架构方面,需要更多的在规范化、平台化上下功夫。规范之后才能开展这种自动化的工作提高效率;平台化可以把各种规范固化下来,提供自动化的支持。

百度贴吧10亿量级LAMP架构分享相关推荐

  1. 使用HAProxy、PHP、Redis和MySQL支撑10亿请求每周架构细节

    2019独角兽企业重金招聘Python工程师标准>>> [编者按]在公司的发展中,保证服务器的可扩展性对于扩大企业的市场需要具有重要作用,因此,这对架构师提出了一定的要求.Octiv ...

  2. 使用HAProxy、PHP、Redis和MySQL支撑每周10亿请求的架构细节【转】

    [编者按]在公司的发展中,保证服务器的可扩展性对于扩大企业的市场需要具有重要作用,因此,这对架构师提出了一定的要求.Octivi联合创始人兼软件架构师Antoni Orfin将向你介绍一个非常简单的架 ...

  3. 百度投资创维10亿,联手构建智能家居AI生态

    作者 | 明明 3月16日,百度与创维共同宣布达成全面战略合作.创维集团子公司深圳酷开网络科技有限公司获得百度公司战略投资10.10亿元,百度持股比例为11%,成为酷开第二大股东.酷开的估值达到95. ...

  4. 10亿量级数据(long)存储

    10亿个整型(长整型)数据的存储,如果按照一般的int类型或者long类型存储的话,那会占据较大的内存空间: 比如使用long类型存储10亿个数据,一个long类型为64位二进制,即8个字节(8B), ...

  5. 鹿班|一人设计10亿图片,这个“设计师”如何演进?

    作者| 鲍军(推开) 出品|阿里巴巴新零售淘系技术部 本文内容提炼: 1.如何建立图片数据与用户注意力之间的连接? 2.如何进行结构化规模化的图片生产? 2019 年双十一期间,鹿班面向集团电商场景输 ...

  6. 1 分钟抗住 10 亿请求!某些 App 是怎么做到的? | 原力计划

    作者 | 阿凡博客 出品 | CSDN博客 封图 | 视觉中国 某些App怎么扛住1分钟10亿请求? 架构的演进路线 百万级并发:1秒100万次请求. 千万级并发:一分钟6亿次请求,差不多就是需求的极 ...

  7. 1 分钟抗住 10 亿请求!某些 App 怎么做到的?

    某些App怎么扛住1分钟10亿请求? 架构的演进路线 百万级并发:1秒100万次请求. 千万级并发:一分钟6亿次请求,差不多就是需求的极限. 架构的设计和架构优化要符合需求本身,不能无限制优化. 基本 ...

  8. java数据库的量级_百度万亿量级数据库Tera架构应用、设计与实践全攻略

    信息技术发展突飞猛进,网络数据呈现爆炸之势,搜索引擎的实时性面临巨大挑战.百度搜索引擎每天处理着数万亿次的链接分析和数百亿次的互联网资源采集.作为百度搜索引擎的核心数据库Tera,是如何支撑万亿量级的 ...

  9. 10亿次+消息、40亿次+总请求丨以58帮帮为例看58同城典型技术架构演变

    10亿次+消息.40亿次+总请求丨以58帮帮为例看58同城典型技术架构演变 来源:<程序员>2015年10月期 作者:孙玄 作者介绍:58赶集集团系统架构师,技术负责人,技术委员会架构组主 ...

最新文章

  1. ASP.NET上传文件管理控件
  2. jieba分词_从语言模型原理分析如何jieba更细粒度的分词
  3. [LeetCode] Combinations
  4. python多进程关闭socket_用Python制作一个多进程UDP服务器,一个进程监听一个p
  5. (二)流--递归算法
  6. convert.todatetime指定日期格式_MATLAB的时间与日期
  7. 线程Blocked--SynchronizedDemo
  8. js根据已知数组长度创建一个一样长度的数组并初始化值为0
  9. [转]小品:宋江同志在梁山泊招安动员大会上的讲话
  10. Hive Union操作中的隐式转换
  11. 去除地址栏带#的问题
  12. shiro学习详解(开篇)
  13. springboot学习笔记(三)使用JDBC以及整合spring data jpa
  14. python开发中级_针对中级Python开发人员的13个项目构想
  15. 详解命令-pstack
  16. python翻译成中文蟒蛇_python为什么叫大蟒蛇
  17. 程序员一般通过什么途径接私活?怎样做兼职程序员接私活?
  18. 面积法判断多边形顺逆时针
  19. 四篇文章带你快速入门Jetpck(中)之ViewModel,DataBinding
  20. php 网页只能在微信浏览器中打开

热门文章

  1. Qt开发技巧:编写.pro文件,在构建流程中加入命令行的方法
  2. 【Python CheckiO 题解】The Most Numbers
  3. 【机器学习】 - keras中的模型可视化plot_model模块(含依赖包pydot和graphviz的详细安装过程与注意事项)
  4. 【PAT - 甲级1024】Palindromic Number (25分)(大数,模拟)
  5. 【CodeForces - 518D】Ilya and Escalator(概率dp,数学期望)
  6. 【HDU - 6016】Count the Sheep (思维,类似二分图)
  7. 8.Using Categorical Data with One Hot Encoding
  8. RabbitMQ初识
  9. 判断集合相等_数学启蒙的每个关键阶段之集合分类
  10. android标题栏消失,安卓标题栏为什么没有显示