服务架构的演进
书籍参考:什么是“凤凰架构” | 凤凰架构 (icyfenix.cn)
本文所有的架构均是指面向服务的架构。
问题汇总:
- 每个架构缺点各自优缺点
- 演进的原因及动机
- 演进后的解决问题的方法
一.早期分布式架构(DCE)
针对问题:早期单个计算机算力的局限
实现方式:多个计算机进行协同处理
早期的服务架构必定面临不同计算机进行协作(即将一个服务拆分为各个功能在不同的计算机上进行运行),这也就包含远程的计算机,而远程计算机调用便是早期分布式架构的一大难题。但在早期分布式架构,且在服务传输,通信,容错,编码复杂等一系列问题上付出较大的代价
二.早期的单体架构
针对问题:DCE架构出现的系列问题
实现方式:由一台计算机或少数几台来完成服务功能
单体架构的出现原因为主要是由于计算机摩尔定律的突破(硬件的限制不那么高),计算性能得到突破,且单体架构架构并非把所有的功能都集合到一块,且单体架构基本也是采用的分层思想(即把众多功能进行分层处理)。且其具有易开发,易部署等一些便捷性好处。
单体的缺点即为,单体系统在部署后运行过程会申请同一块进程空间,也就会造成数据信息分层处理(阶段式)处理的困难。也就是说不能出现运行部分功能或是运行部分代码,即每一次的修改,都是整体代码的重跑,当系统比较小的情况还好。当遇到庞大的系统时,则会导致效率太低的情况。还有就是单体的话隔离信息的处理也比较欠缺,即相当于大部分的不同类型工人都共用一个工作间,“工人”少倒无所谓,但当“工人”系统庞杂时,则容易产生各模块的隔离及自治等问题。传统的单体架构如下图所示:
三.SOA分布架构
针对问题:解决单体系统模块的隔离及自治的问题,同时兼具单体系统的快捷性与简易性
实现方法:对需服务的业务进行分层处理,并将不同的业务部署在不同系统上,再对其进行接口的封装,最后需调用业务时,直接调用接口即可。
SOA更多的设计采用的是一种“解耦”的思想,即按照业务的逻辑把各功能所对应模块抽象为各自独立模块功能,划分为各自不同的子系统,服务之间通过配合调用进而进而形成以系统的功能。SOA更多的属于一种思想。SOA准确来讲是属于一种思想。
另一方面,过于规范严谨的设计规范导致整个过程的复杂程度上升(远程调用层),SOA虽然设想比较美好,但其过高的复杂性导致其像阳春白雪般。SOA过于重视设计规范,而非功能设计便捷性有点本末倒置感觉,总的来讲SOA像是“黄金做的锄头”,看着美好,但用着费劲。
四.微服务架构
参考:Advantages and Disadvantages of Microservices Architecture (cloudacademy.com)
针对问题:SOA架构复杂化问题
实现方法:缩减SOA中的条条框框,早期的微服务架构作为mini版的SOA架构,属于一种轻量级的架构。
微服务架构则是关注点瞄准目标功能相关,且不限制关注应用何种语言技术(只要实现即可),服务器使用轻量的通信机制和自动化部署机制来实现通信和运维。微服务依然是属于分布式的思想。甚至从某种程度上来讲,算是分布式技术应用的极致。
优点:
- 独立部署和扩展
- 灵活性高
- 互操作性(通过标准化的API实现实现不同语言技术之间的相互通信)
缺点:
- 管理的复杂与网络依赖(负载均衡)对架构设计者的要求较高
- 协同性
- 测试与调试的复杂性
五.后微服务时代(“云原生”)
What’s a service mesh? (redhat.com)
针对问题:主要是针对微服务架构层面的诸多问题。所提出的一种新的架构思想。
实现方法:软硬结合
后微服务出现的缘由河大程度上依赖于传统硬件技术灵活性(硬件的灵活性跟不上软件),其出现的重点原因是虚拟化容器技术的突破极大加大了传统硬件层面灵活度。与业务无关的技术问题得以剥离,直接在硬件层面被得到解决。
另一方面后微服务面临着不同服务调用之间出现问题时交给硬件处理可能会面临**“雪崩危机”**。如A调B中部分任务,若出现熔断,在基础硬件层面上的断电处理,则可能导致A正常调用B服务部分出现雪崩。
“服务网格”,主要用于解决上文出现的问题,引入服务网格技术,即在不同服务之间引入一代理与该服务之间形成解耦(“边车”),不同服务间的交互需要先通过解耦进行初步连接,并能够通过其定位问题出现的位置。
六.无服务
非分布式系统的崛起What is serverless? (redhat.com)。
针对问题:分布式的服务或多或少具有一定的复杂性,而无服务则是对于分布系统的简化
实现方法:主要依赖于云计算及处理能力
得益于云计算的发展,无服务技术顺势崛起,开发者主要关注的点就集中在了与业务本身相关即可,而不用关注服务器部署的版权,算力等系列因素。无服务极大程度提高了服务部署的简便性。
另一方面,无服务还处于发展阶段,且对于需要进行实时数据交互时,就变得乏力了,且其灵活性由云服务商所决定。
**架构:**指的是软件高级顶层设计。
**解耦:**使各个模块之间更松散,更独立,更容易组合等。类似于乐高积木块零件。