今天言归正传,说点技术强相关的内容。
过去几年里我主导了很大一轮服务重构,其中有一些服务的设计比较不错,在这里分享一下。隐去一些业务相关的内容,但不会影响整个内部架构的实现。
本文要描述的服务,姑且称其为 数据转换服务,其承担的职责主要包括几个部分:
- 老版本客户端协议数据接收
- 新版本客户端协议数据接收
- 数据分为多种类型,每种类型有不同的业务处理逻辑(这里的类型可能有些歧义, 你可以理解为不同的pb结构)
- 不同数据类型有不同的数据计算逻辑
- 不同数据类型有不同的数据过滤校验
- 向后往多个下游服务进行数据发送
从功能上看,其对集群外部开放了多个协议的接口,对集群内部多个下游服务进行数据发送。这样的场景正合适六边形的服务架构。何为六边形服务架构?在《Microservices Patterns》书中有描述,简单概括就是其外部由多个协议适配器组成,核心为其关键的业务域逻辑。我们直接把书中的示例拿过来说明一下:
这样的架构设计逻辑迥异于常规的MVC设计。在MVC设计中,常常分为控制层/接口层,逻辑层/领域层,存储层/底层服务,这样的分层结构有一种显示的层层向下的递进关系,原则上不允许跨层调用,在有多个上下游关系的服务中,力所不逮。而六边形架构中不再有明显的分层结构,我们可以将MVC中的逻辑层/领域层视为其逻辑核心,其外分别包括多种协议适配器:
大概是这个样子,该服务设计上并没有持久状态,也没有和数据库的交互,这极大的简化了我们的设计。</