
1.1 认识架构
1.1.1 单体架构
一个典型的单体架构就是将所有业务场景的表示层、业务逻辑层和数据访问层放在一个工程中,最终经过编译、打包,部署在一台服务器上。
例如,开发一个进销存的系统,我们可以将项目打包成war包并部署到服务器上。这样的一个war包涵盖了很多模块,如图1-1所示。
应用图1-1所示的单体架构,随着业务越来越复杂,应用程序需要增加的功能越来越多,单体架构的代码量越来越大,代码可读性、可维护性和扩展性会下降。同时,使用单体架构带来的隐患会比较多,由于系统过于庞大以及关联较多,应用中的任何一个Bug(漏洞、错误)都有可能导致整个系统宕机。

图1-1 单体架构
1.1.2 SOA架构
针对传统的单体架构存在的问题,人们又设计出了一种SOA架构。
SOA架构是一个面向服务的架构,它是一个组件模型。SOA架构将应用程序的不同功能单元(称为服务)进行拆分,这些服务通过定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它独立于实现服务的硬件平台、操作系统和编程语言。这使构建在各种各样的系统中的服务可以使用一种统一和通用的方式进行交互。
SOA架构将原来的单体架构按照功能细分为不同的子系统。SOA架构如图1-2所示。

图1-2 SOA架构
由图1-2可知,一个完整的项目会分为多个模块,数据库分为主库与从库两种,并且主库与从库是数据同步的。这样的SOA架构解决了1.1.1节中单体式架构所遗留下的问题。
但SOA架构本身也存在一些缺点。SOA架构一般使用某种集中式管理,比如会有审查委员会、主架构师或架构委员会等部门来严格定义每个系统组件应当做什么、如何执行,相同类型的功能可能会在多个组件中分别定义和记录,每个组件使用的语言或者工具集可以是统一的,也可以不是。在SOA架构中,系统和服务的界定比较模糊,而且服务的接口协议不固定,且种类繁多,不利于系统维护。
1.1.3 微服务架构
学习了单体架构和SOA架构,我们可以知道,系统中的模块与模块之间直接相互访问或某个模块本身的错误都有可能影响整个系统的使用。在大数据以及高并发的环境下,系统架构面对更加严苛的挑战。为解决这些问题,微服务架构就诞生了。
微服务架构的基本思想在于考虑围绕着业务领域组件来创建应用,这些应用可独立地进行开发、管理和部署。在分散的组件中使用微服务云架构和平台,使部署、管理和服务功能交互变得更加简单。
微服务架构是一种将单一应用程序作为一套小型服务开发的方法。每种应用程序都在其自己的进程中运行,并与轻量级机制[通常是HTTP资源的应用程序接口(Application Programming Interface,API)]进行通信。这些服务是围绕业务功能构建的,可以通过全自动部署机制进行独立部署。相比单体架构和SOA架构,如何理解微服务架构的集中化管理?因为微服务架构的每个业务功能都是一个独立的项目,各个项目之间的耦合性很低,所以开发人员可以使用不同的编程语言编写程序、使用不同的存储系统计算存储数据。前面提到的进销存系统,如果使用微服务架构来开发,可以采用图1-3所示的结构。

图1-3 微服务架构
从图1-3中可以看出,微服务架构中每个服务都有自己独立的数据库,数据库之间没有任何联系。这样的好处是,随着业务的不断扩张,不同服务与服务之间不需要提供数据库集成,而是提供API相互调用。独立的数据库使系统的维护变得简单,性能明显提高,迁移也比较方便。在微服务架构中,数据的存储不仅可以使用关系型数据库,还可以使用非关系型数据库。一个典型的微服务架构系统,每个服务对应的数据库可能各不相同,建议大家根据业务需求选择合适的数据库。
微服务架构是直接通过HTTP进行通信的,也可以采用消息队列来通信,如采用RabbitMQ、Kafka等进行通信。微服务采用不同的编程语言,使用不同的存储技术,进行自动化部署,减少了人为控制,降低了出错概率。