随着公司业务量的飞速发展,项目面临的挑战已经远远大于业务,需求量不断增加,技术人员数量也在不断增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进过程.

当网站流量很小时,为了节约成本,可以将所有功能都部署在一起,以减少部署的节点和成本.此时用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键.

-
可以快速开发,开发成本低;
-
部署简单,部署成本低;
-
代码耦合性高,开发维护困难;
-
无法针对不同模块进行针对性优化;
-
无法水平扩展,可伸缩性差;
-
单点容错率低,并发能力差;
-
交付周期变长;
-
新人培养周期变长.
当访问量增大,为了提高并发量和业务需求,我们可以根据业务功能对系统进行拆分.
-
系统拆分实现了流量分担,解决了并发问题;
-
可以针对不同模块进行优化;
-
方便水平扩展,负载均衡,容错率提高.
-
系统间相互独立,会有很多重复开发工作,代码复用性低;
-
应用之间耦合度高,相互依赖严重;
-
各个开发团队各自为战,开发效率低下;
我们可以抽取出核心业务,作为独立服务. 此时用于提高业务复用及整合的分布式调用是关键.

将基础服务进行了抽取,系统间相互调用,提高了代码复用和开发效率.
3.2 缺点系统间耦合度变高,调用关系错综复杂,难以维护.
4. 服务治理(SOA)SOA:面向服务的架构.
当服务越来越多,此时需要增加一个调度中心,来对访问压力进行实时的管理集群容量,提高集群利用率.
所以此时用于提高机器利用率的资源调度和治理中心(SOA)是关键.

-
服务间会有依赖关系,一旦某个环节出错会影响较大;
-
服务关系复杂,运维、测试部署困难,不符合DevOps思想.
所谓的微服务架构,就是将单一程序开发成多个微服务,每个微服务运行处理唯一的业务,并使用轻量级通信机制,通常是HTTP RPC.这些服务一般是根据业务来进行划分和构建,并通过完全自动化部署机制来实现独立部署.这些服务可以使用不同的编程语言,以及不同数据存储技术,从而保证最低限度的集中式管理.

-
分解了单体应用提供多个服务的复杂性问题,拆分之后每个服务都有一个用RPC或是MQ或是API定义的边界.由于传统单体应用没有清晰的边界,存在开发,理解,维护,部署的复杂问题;
-
每个服务都可以有单独的团队维护开发,开发者客户选择自己擅长和合适的技术;
-
每个服务都可以独立部署,开发者不需要协调因其他服务调用或部署对本服务的影响,从而加快了部署速度,更好的执行AB测试,持续部署变为可能;
-
每个服务都可以独立扩展.
-
需要考虑和关心更多服务之间调用的问题;
-
需要考虑多个服务的编排和依赖关系,包括开发和部署;
-
服务的配置,部署,扩展,监控更复杂.