作者:微信小助手
发布时间:2020-03-03T16:33:06
点击上方蓝色“程序猿DD”,选择“设为星标”
回复“资源”获取独家整理的学习资料!
作者 | 杨钦民
贝聊成立于2013年,是中国幼儿园家长工作平台,致力于通过互联网产品及定制化解决方案,帮助幼儿园解决展示、通知、沟通等家长工作中的痛点,促进家园关系和谐。贝聊是威创股份(A股幼教第一股)、清华启迪、网易联手投资的唯一品牌。在短短几年内,用户规模迅速达到千万级别,每年DAU均呈倍数级增长。
面对如此快速的发展,原有的技术架构很难支撑越来越复杂的业务场景,在系统可用性以及稳定性方面,都给贝聊技术团队带来了很大的压力。因此,如何针对当前需求,选择合适的技术架构,保证架构平滑演进,值得我们深入思考。
贝聊架构总体经历了三次重大历程,由几台服务器搭建的单体架构到目前的几百台分布式部署架构,在整个变化过程中,我们踩过了很多坑,遇到过很多重大技术挑战。
创业初期,我们的初始创业团队在进行架构选型时,主要基于以下几点进行考虑:
正是基于以上几点考虑,最终选择了经典的LNMP技术架构,贝聊V1.0架构就这样诞生了,为了加快产品研发速度,尽快上线产品,首期通过外包公司实现了研发以及部署,后续由我们的PHP研发人员接手,并进行后续的迭代开发。
初期部署时,部署了三台ECS服务器,其中接入层nginx与系统部署在同一台机器,RDS数据库一台机器,Memcached缓存一台机器,V1.0架构具有以下特点:
LNMP架构支撑贝聊业务发展了将近一年半左右的时间,简单、易维护的架构为贝聊的快速发展做出了很大的贡献,期间业务发展迅速,用户体量也越来越大,原有架构逐渐暴露出越来越多的问题。
我是在2015年初加入了贝聊,初始研发团队只有三人,有幸在这一时期
主导了贝聊技术架构重构,并经历了贝聊后续的几次架构演进路程,将原有PHP单体架构重构为JAVA分布式架构。
首先谈一谈我们做技术架构重构的契机,重构并非难在怎么做,而是难在何时开始做,所以我们做架构重构的契机主要基于以下几点:
由于公司业务高速发展,如果停下来专门做技术架构重构是不可能的,我们选择了在维护现有系统的基础上,同时进行新的技术架构重构工作。重构期间,在原有PHP研发团队的大力支援下,我们的重构工作还算非常顺利,既保障了业务的快速迭代需求,又成功完成了新的技术架构重构,新的V2.0架构如下:
在V2.0架构时期,初步实现了分布式部署架构,根据不同的功能以及业务逻辑,完成系统级别的拆分,同时对第三方服务进行解耦,拆分出了独立的服务模块,针对DB,我们实现了系统级拆分以及物理独立部署,并实现了数据库主从分离,同时引入了MQ消息队列,并使用SLB实现了负载均衡和带宽流量入口统一。
V2.0时期的架构具有以下特点:
系统拆分和DB拆分
针对系统拆分以及DB拆分,我们通过两个阶段来完成该项工作。
第一阶段
首先在系统层面进行拆分,将原有的大系统拆分出多个业务逻辑独立的子系统,而DB暂时不进行拆分,多套系统还继续共用一个DB,只是根据业务逻辑划分各个系统所依赖的表,不同业务逻辑系统之间不能互相访问表,这样新系统只访问自己所归属的表,通过此种方案,可以保证原有系统业务不受影响,同时新拆分的业务系统研发工作也可以顺利进行,此阶段大概花费了我们几个月的时间,最终顺利完成系统层面的拆分。
第二阶段
在完成系统层面拆分之后,我们紧接着实施DB层面的拆分,将各个子系统所依赖的表独立拆分出来,分别放置到不同的RDS数据库,实现物理的隔离,同时实现了数据库主从分离。最终实现效果如下图:
初步服务化
本阶段,我们采用了比较简单易用的Hessian实现初期的RPC服务化。针对第三方公共服务,从原有系统中解耦出来,独立拆分出服务化组件,并做独立部署,供其余业务系统统一调用。而系统间调用也通过Hessian来实现RPC远程调用。
SLB负载均衡