《微服务架构设计模式》笔记2—服务拆分策略
二、服务拆分策略
1、软件架构
- 软件架构:软件的架构是一种抽象的结构,它由软件的各个组成部分和这些部分之间的依赖关系构成。
- 架构目标:可扩展性、可靠性和安全性。
软件架构的4+1视图模型:
-
每个视图的目的如下:
- 逻辑视图:开发人员创建的软件元素。面向对象的语言中,这些元素是类和包。他们之间的关系是类和包之间的关系,包括继承、关系和依赖。
- 实现视图:构建编译系统的输出。此视图由表示打包代码的模块和组件组成。组件是由一个或多个模块组成的可执行或可部署单元。在java中,模块是jar文件,组件通常是war文件或可执行jar文件。它们之间的关系包括模块之间的依赖关系以及组件和模块之间的组合关系。
- 进程视图:运行时的组件。每个元素都是一个进程,进程之间的关系代表进程间通信。
- 部署视图:进程如何映射到机器。此视图中元素由(物理或虚拟)计算机和进程组成。机器之间的关系代表网络。该视图还描述了进程和机器之间的关系。
-
场景:它负责将视图串联再一起。
2、架构的风格
- 架构风格:
- 架构风格确定可以再该风格的实例中使用的组件和连接器的词汇表,以及关于如何组合他们的一组约束。
- 特定的架构风格提供了有限的元素(组件)和关系(连接器),你可以从中定义应用程序架构的视图。应用程序通常使用多种架构风格的组合。
1、分层式架构风格
-
架构的典型例子就是分层架构。分层架构将软件按“层”的方式组织。每个层都有明确定义的职责。
-
分层架构还限制了层之间的依赖关系。每一层只能依赖于紧邻其下方的层或者其下面的任何层。
-
流行的三层架构是应用于逻辑层的分层架构,他将应用程序的类组织到以下层中:
- 表现层:包含实现用户界面或外部API代码
- 业务逻辑层:包含业务逻辑
- 数据持久化层:实现与数据交互的逻辑
-
分层架构的弊端:
- 单个表现层:它无法展现应用程序可能不仅仅由单个系统调用的事实。
- 单一数据持久化层:他无法展现应用程序可能与多个数据库进行交互的事实。
- 将业务逻辑层定义为依赖于数据持久化层:理论上,这样的依赖性会妨碍你在没有数据库的情况下测试业务逻辑。
2、六边形架构:
-
六边形架构是分层架构风格的替代品。它是选择以业务逻辑为中心的方式组织逻辑视图。
-
应用程序具有一个或多个入站适配器,而不是表示层,它通过调用业务逻辑来处理外部的请求。
-
同样,应用程序具有一个或多个出站适配器,而不是数据持久化层,这些出站适配器由业务逻辑调用并调用外部应用程序。
-
此架构的一个关键特性和优点是业务逻辑不依赖于适配器。相反,各种适配器都依赖业务逻辑。
-
业务逻辑具有一个或多个端口,端口定义了一组操作,关于业务逻辑如何与外部交互。
-
例如,在java中,端口通常是java接口。
-
有两种端口:入站和出站端口
- 入站端口是业务逻辑公开的API,使外部应用程序可以调用它。
- 出站端口是业务逻辑调用外部系统的方式。出站端口的一个实例是存储接口,它定义数据访问操作的集合。
-
业务逻辑周围是适配器,与端口一样,有两种类型适配器:
- 入站适配器通过调用入站端口来处理来自外部世界的请求。
- 入站适配器的一个实例是SpringMVC Controller,它实现一组REST接口(endPoint)或一组Web页面。
- 另一个实例是订阅消息的消息代理客户端。多个入站适配器可以调用相同的入站端口。
- 出站适配器实现出站端口,并通过调用外部应用程序或服务来处理来自业务逻辑的请求。
- 出站适配器的一个实例是实现访问数据库操作的数据访问对象(DAO&#x
- 入站适配器通过调用入站端口来处理来自外部世界的请求。