1.1 系统架构的发展历史

随着互联网的发展、网站应用规模的不断扩大、上网需求的激增,互联网技术上的压力不断增加,系统架构也因此不断地演进、升级、迭代,从单体架构,到垂直架构,到分布式架构,再到SOA,以及现在火热的微服务架构。

很多软件都是基于最新架构开发的,很少有人会去了解以前的系统架构,但对于想往架构师方向发展的开发者来说,了解系统架构的发展历史和每个阶段的系统架构,是很有必要的,这同样能够帮助开发者更好地设计以及演进系统架构。

· 1.1.1 单体架构

早期,一般的公司在开发Java Web程序时,大都使用Struts 2、Spring和Hibernate等技术框架,每一个项目都会发布一个单体应用。例如开发一个进销存系统,会开发一个WAR包部署到Tomcat中,每次需要开发新的模块或添加新的功能时,都会在原来的基础上不断地添加。若干次后,这个WAR包会不断地膨胀,程序员在进行调试时,服务器可能需要很长时间才能启动,维护这个系统的效率极为低下。图1-1所示为电商系统的单体架构,涵盖了商品管理、订单管理、用户管理等模块。

图1-1 单体架构

单体架构的优点和缺点如下。

优点:开发速度快,维护成本低,适用于并发要求较低的系统。

缺点:代码耦合度高,后期维护困难,无法根据不同模块进行针对性优化,无法水平扩展,单点容错

率低,并发能力差。

· 1.1.2 垂直架构

当访问量逐渐增大,单体架构应用无法满足需求时,为了满足更高的并发和业务需求可以根据业务功能对系统进行拆分,以提高访问效率。电商系统的垂直架构如图1-2所示。

图1-2 垂直架构

垂直架构的优点和缺点如下。

优点:对系统进行拆分,实现了流量分担,解决了并发问题,可以针对不同模块进行优化,方便水平

扩展、负载均衡,容错率提高。

缺点:系统间相互独立,会有很多重复的开发工作,影响开发效率。

· 1.1.3 分布式架构

当垂直应用越来越多时,应用之间的交互不可避免,可将核心业务抽取出来作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速地响应多变的市场需求。电商系统的分布式架构如图1-3所示。

图1-3 分布式架构

分布式架构的优点和缺点如下。

优点:将基础服务进行了抽取,系统间相互调用,提高了代码复用率和开发效率。

缺点:系统间耦合度变高,调用关系错综复杂,难以维护。

· 1.1.4 面向服务的架构

面向服务的架构(SOA)是一种设计方法,其中包含多个服务,服务之间通过相互依赖最终提供一系列的功能。一个服务通常以独立的形式存在于操作系统进程中,各个服务之间通过网络调用。SOA示例如图1-4所示。

图1-4 SOA示例

企业服务总线(Enterprise Service Bus,ESB)简单来说就是管道,用来连接各个服务节点。为了集成不同系统、不同协议的服务,ESB 做了消息的转化解释和路由工作,让不同的服务互联互通。

SOA的优点和缺点如下。

优点:抽取公共的功能为服务,提高了开发效率;对不同的服务进行集群化部署,缓解了系统压力;减少了系统耦合。

缺点:每个供应商提供的ESB产品有差异,自身实现较为复杂,应用服务粒度较大;ESB整合了所有

服务、协议和数据转换,使得运维、测试、部署困难;所有服务都通过一条通路通信,直接降低了通信速率。

· 1.1.5 微服务架构

微服务架构使用一套小服务来开发单个应用,每个服务基于单一业务功能构建, 运行在自己的进程中,使用轻量级通信机制,通常采用HTTP RESTful API(RESTful API是利用HTTP请求访问或使用数据的应用程序接口),能够通过自动化部署机制来独立部署。这些服务可以使用不同的编程语言实现,以适应不同的数据存储技术,并保持最低限度的集中式管理。微服务架构示例如图1-5所示。

图1-5 微服务架构示例

网关(Gateway)通常是一个服务器,是系统的唯一入口,为每个客户端提供一个定制的API。 API网关的核心是所有的客户端和服务器都通过统一的网关接入微服务,在网关实现所有的非业务功能。它还可以具有其他职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理等。通常,网关提供RESTful HTTP的方式访问服务,而服务器通过注册中心进行服务注册和管理。

微服务的特点如下。

(1)单一职责:微服务中每一个服务都对应唯一的业务功能,做到单一职责。

(2)微:微服务的服务拆分粒度很小,例如用户管理就可以作为一个服务。每个服务虽小,但“五脏俱全”。

(3)面向服务:面向服务是指每个服务都要对外暴露RESTful接口API,不关心服务的技术实现,做到与平台和语言无关,也不限定用什么技术实现,只要提供REST的接口即可。

(4)自治:自治是指服务间互相独立、互不干扰、耦合度低。团队独立是指每个服务都有一个独立的开发团队,人数不能过多;技术独立是指因为是面向服务,提供REST接口,使用什么技术没有别人干涉;前后端分离是指采用前后端分离开发,提供统一REST接口,后端不用再为PC、移动端开发不同的接口;数据库分离是指每个服务都使用自己的数据源,部署独立,服务间虽然有调用,但能做到一个服务重启不影响其他服务,有利于持续集成和持续交付。每个服务都是独立的组件,可复用、可替换和易维护。

微服务架构与SOA都是对系统进行拆分;微服务架构基于SOA思想,把微服务当作去除了ESB的SOA。ESB是SOA中的中心总线,设计图形应该是星形的,而微服务架构是去中心化的分布式软件架构。两者比较类似,但其实也有一些差别,如表1-1所示。

表1-1 SOA与微服务架构对比

微服务架构的优点和缺点如下。

优点:通过服务的原子化拆分,以及微服务的独立打包、部署和升级,小团队的交付周期将缩短,运维成本也将大幅度下降;微服务遵循单一原则,微服务之间采用RESTful等轻量协议传输。

缺点:微服务过多,服务治理成本高,不利于系统维护;分布式系统开发的技术成本高(容错、分布式事务等)。