引言
- 随着互联网的发展,网站应用的规模不断扩大。需求的激增,带来的是技术上的压力。系统架构也因此也不断的演进、升级、迭代。从单一应用,到垂直拆分,到分布式服务,到SOA,以及现在火热的微服务架构,还有在Google倡导的的Service Mesh等新一代微服务技术。
- 因此,了解系统架构演变的历史,理解微服务出现的必要性也是我们学习微服务之前的一个必要的阶段
集中式架构
- 当项目体量较小时,只需要一个应用,集合所有的功能于一个项目内的架构模式成为集中式架构。入门时学习过的J2EE的电商项目就是典型的集中式架构的项目
- 图片示例
- 弊端
- 功能键代码耦合度高,开发维护困难
- 无法针对不同模块进行针对优化(不同模块优化的方向不尽相同)
- 无法水平拓展
- 单点容错率低,并发能力差
垂直拆分
- 对于集中式架构,当项目体量变大,用户访问量增加,单一应用已无法满足需求。例如任意的中型网站如当当网等,项目的各种功能不可能全部集中于一起。此时为了应对更高的并发和业务需求,可以根据业务功能对系统进行拆分
- 图片示例
- 优点
- 系统拆分实现了流量分担,解决了并发问题
- 可以针对不同模块进行优化
- 方便水平扩展,负载均衡,容错率提高
- 缺点
- 系统间相互独立,可能会存在一些模块重复出现在不同的功能中,影响效率开发
分布式服务
- 在垂直拆分的基础上,当服务越来越多,应用间的交互就不可避免。此时,可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能够更快速的响应用户需求。此时,影响系统性能的因素更多的是如何提高业务复用率以及如何整合分布式调用
- 图片示例
- 优点
将基础服务进行了抽取,系统间相互调用,提高了代码复用和开发效率 - 缺点
系统间耦合度变高,调用关系错综复杂,难以维护
服务治理(SOA)
- 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键
- 图片示例
- 分布式处理的问题:
错综复杂的服务之间彼此调用,某个服务出现意外容易引发一系列连锁反应,难以动态管理各种服务的即时信息 - 服务治理目标:
注册中心统一管理所有的服务,服务向注册中心发送自己即时的状态信息,同时,以注册中心为中转站,调用其他服务 - 缺点
- 服务间会有依赖关系,一旦某个环节出错会影响较大
- 服务关系复杂,运维、测试部署困难,不符合DevOps思想
微服务
- 前面说的SOA,英文翻译过来是面向服务。微服务,似乎也是服务,都是对系统进行拆分。因此两者非常容易混淆,但其实缺有一些差别
- 微服务的特点
- 单一职责:微服务中每一个服务都对应唯一的业务能力,做到单一职责
- 微:微服务的服务拆分粒度很小,例如一个用户管理就可以作为一个服务。每个服务虽小,但“五脏俱全”
- 面向服务:面向服务是说每个服务都要对外暴露服务接口API。并不关心服务的技术实现,做到与平台和语言无关,也不限定用什么技术实现,只要提供Rest的接口即可
- 自治:自治是说服务间互相独立,互不干扰
- 微服务结构图
总结
- 与之前各种新技术的出现一样,系统架构的演变也是由于项目体量不断变大,访问量不断增多,原有的架构模式开发维护起来冗余,复杂。
- 架构演变也是由最初的整体开发到后来的以服务为单位进行管理,最终目的仍然是为了使项目开发维护时候更方便,逻辑上更加明了,也便于后期的更新等
- 无论 SOA 还是 微服务都是面向服务的思想,即将项目内的各种功能模块作为面向的对象
- 微服务即生成一个对象用来管理项目内的各种服务对象,各种服务对象将自己的实时信息交付给这个中转站,同时也通过这个中转站调用其他的服务。