什么是微服务架构?


什么是微服务架构?

文章插图
 
摘自《微服务架构设计模式》
作者::[美] (Chris Richardson)
译者:喻勇
 
导语:微服务架构如何与更广泛的软件架构概念相结合?什么是服务?服务的规模有多重要?为了回答这些问题,我们需要退后一步,看看软件架构的含义 。
 
软件的架构是一种抽象的结构,它由软件的各个组成部分和这些部分之间的依赖关系构成 。正如你将在本文中看到的,软件的架构是多维的,因此有多种方法可以对其进行描述 。架构很重要的原因是它决定了应用程序的质量属性或能力 。传统上,架构的目标是可扩展性、可靠性和安全性 。但是今天,该架构能够快速安全地交付软件,这一点非常重要 。你将了解微服务架构是一种架构风格,可为应用程序提供更高的可维护性、可测试性和可部署性 。
 
我将通过描述软件架构的概念及其重要性来开始本文 。接下来,我将讨论架构风格的概念 。然后我将微服务架构定义为特定的架构风格 。让我们从理解软件架构的概念开始 。
 
1 软件架构是什么,为什么它如此重要
 
架构显然很重要 。至少有两个专门讨论该主题的会议:O’Reilly的软件架构会议和SATURN会议 。许多开发人员的目标是成为一名架构师 。但什么是架构,为什么它如此重要?
 
为了回答这个问题,我首先定义术语软件架构的含义 。之后,我将讨论应用程序的架构是多维的,并使用一组视图或蓝图进行描述 。然后我将强调软件架构的重要性,因为它对应用程序的质量属性有显著的影响 。
 
软件架构的定义
 
软件架构有很多定义 。例如,维基百科上列举了大量的定义 。我最喜欢的定义来自卡耐基梅隆大学软件工程研究所的Len Bass及其同事,他们在使软件架构成为一门学科方面发挥了关键作用 。他们定义的软件架构如下:
 
计算机系统的软件架构是构建这个系统所需要的一组结构,包括软件元素、它们之间的关系以及两者的属性 。
 
这显然是一个非常抽象的定义 。但其实质是应用程序的架构是将软件分解为元素(element)和这些元素之间的关系(relation) 。由于以下两个原因,分解很重要:
 
它促进了劳动和知识的分工 。它使具有特定专业知识的人们(或多个团队)能够就应用程序高效地协同工作 。
 
它定义了软件元素的交互方式 。
 
将软件分解成元素以及定义这些元素之间的关系,决定了软件的能力 。
 
软件架构的4+1视图模型
 
从更具体的角度而言,应用程序的架构可以从多个视角来看,就像建筑架构,一般有结构、管线、电气等多个架构视角 。Phillip Krutchen在他经典的论文《Architectural Blueprints —The 4+1 View Model of Software Architecture》中提出了软件架构的4+1视图 。图1展示的这套视图定义了四个不同的软件架构视图,每一个视图都只描述架构的一个特定方面 。每个视图包括一些特定的软件元素和它们相互之间的关系 。
 
什么是微服务架构?

文章插图
 
 
图1 4+1视图模型使用四个视图描述应用程序的架构,并显示每个视图中的元素如何协作处理请求的场景
 
每个视图的目的如下:
 
  • 逻辑视图:开发人员创建的软件元素 。在面向对象的语言中,这些元素是类和包 。它们之间的关系是类和包之间的关系,包括继承、关联和依赖 。
  • 实现视图:构建编译系统的输出 。此视图由表示打包代码的模块和组件组成,组件是由一个或多个模块组成的可执行或可部署单元 。在JAVA中,模块是JAR文件,组件通常是WAR文件或可执行JAR文件 。它们之间的关系包括模块之间的依赖关系以及组件和模块之间的组合关系 。
  • 进程视图:运行时的组件 。每个元素都是一个进程,进程之间的关系代表进程间通信 。
  • 部署视图:进程如何映射到机器 。此视图中的元素由(物理或虚拟)计算机和进程组成 。机器之间的关系代表网络 。该视图还描述了进程和机器之间的关系 。
除了这四个视图以外,4+1中的+1是指场景,它负责把视图串联在一起 。每个场景负责描述在一个视图中的多个架构元素如何协作,以完成一个请求 。例如,在逻辑视图中的场景,展现了类是如何协作的 。同样,在进程视图中的场景,展现了进程是如何协作的 。


推荐阅读