MACH架构:微服务质量工程指南

22-08-18 banq

MACH 是一个首字母缩略词,它提取了为数字组织构建的服务的本质,尤其是那些需要在生态系统中进行最多集成的组织。它同样适用于业务和内部服务,例如提供自助服务体验的 CI/CD 平台。
MACH的 4 个关键要素是:
  1. Microservices:微服务是关于模块化的
  2. APIs :API强调接口的使用
  3. Cloud-native SaaS:云原生 SaaS推动托管服务
  4. Headless :无头意味着没有与前端的耦合。


MACH中的微服务是关于构建模块化的服务,这些服务能很好地与它们所解决的业务领域保持一致。DDD 是一种实践,可以利用它来构建具有 "高内聚力和低耦合 "的平衡服务。

API是指通过明确的接口提供抽象,帮助生产者和消费者在功能上脱钩。在线版本、文档和标准协议(如REST)有助于提高服务的连接性。

云原生SaaS把重点放在云端的管理服务上,而不是建立一个内部的解决方案,在第一阶段可以提供帮助,但在企业还需要关注其业务的时候,就无法扩展必要的功能、规模和维护。

Headless遵循MACH其他属性中的关注点分离。它是关于提供技术API,以便任何消费者可以在自己的环境中使用服务,即无头工作流、网络或移动用户接口。它最大限度地提高了连接性和开放性。

MACH 成功因素
MACH 为 Quality at Speed 微服务做“正确的事情”的关键属性提供了一个参考框架。但它们的有效实施需要确保“把事情做对”。
以下是 MACH 服务的 8 个成功因素:

  1. 业务驱动
  2. 从宏服务开始
  3. 互操作标准
  4. 真正的云原生
  5. 有目的的无头
  6. 异步优于同步
  7. 复古兼容
  8. 可在自助服务中使用。


1. 业务驱动
团队在关注技术缩写和 "MACH "架构的同时,可能会忽略业务重点"。然后,这种距离会影响到服务的颗粒度和潜在的价值,最终集中在技术而不是业务上。

因此,作为一个团队,保持一个系统的业务第一的思维方式是很重要的。应用领域驱动设计(DDD)的方法是一个很好的例子,以保持业务领域和将要建立的MACH服务之间的一致性。

当团队几乎无法论证他们为什么要建立一个服务,或者无法确定用户和目的时,是时候停下来,首先回到业务愿景。

2. 从宏服务开始
"微服务 "是一个充满了歧义的词。有些人会理解为所有的业务功能都应该作为一个 "功能 "来实现,利用容器的云原生生态系统,甚至功能即服务,而忽略了应用的周界。

过于细化的方法所带来的危险是建立了过于复杂的服务集,再加上在没有必要的自动化、可观察性和其他对这种 "沙粒 "复杂程度的要求的情况下,操作这种服务的失败概率很大。

因此,第一个重点是按照 "高内聚、低耦合 "和 "关注点分离 "的原则,在应用程序之间建立具有强大模块化的颗粒状应用程序。从这里开始,要出现的颗粒度已经考虑到了微服务。

3. 可互操作的标准
暴露一个具有功能解耦的接口是在MACH服务中构建服务的正确方式。但如果使用的技术不是生态系统内的标准,那么在寻求快速迭代的生态系统中,其采用的潜力就会急剧下降。

确保在服务中使用可互操作的标准是对高速服务质量的要求。一个建议是在大多数服务中使用REST/JSON,在同步的情况下增加事件,在某些情况下依靠GraphQL联盟。

而在一些行业的互操作标准也在功能层发挥作用,例如行业数据字典和接口格式。如果你的行业是这样的情况,请仔细考虑使用这些标准。

4. 真正的云原生
在 "云原生SaaS "中,"原生 "一词有其重要性。许多云的采用是以 "提升和转移 "的方式进行的,以减少迁移风险和增加采用。但这种迁移技术很少能创造出 "云原生 "的能力,也不能从中受益。

云原生的服务遵循最佳实践,例如12因素应用,它将所有配置外部化,提供跨环境的可移植部署,并以多个实例进行扩展。

缺乏云原生元素的MACH服务将遭受整合问题、迭代速度减慢,并迟早会在可扩展性方面达到限制。知道了什么是利害关系,最好确保云原生是一个设计要求。

5. 有目的的无头服务
为多个消费者建立的无头服务,随着时间的推移,为适应许多消费者而进行的小改动的积累,会变得过于庞大。挑战在于如何在中期内保持模块化,有时要接受创建另一个组件。

历史上IT行业的 "重用 "和 "优化 "文化可能导致团队试图通过将所有的变化加入到现有的服务中来节省创建新服务的成本。这种行为表明缺乏云原生文化,在中期是危险的。

决策标准不应该是创建服务的成本,因为这个成本必须是在正确的自动化条件下的剩余成本。主要的决策标准是关于模块化和解耦原则,即使是无头的,也要始终了解用户。

6. 异步而非同步
API给人的感觉是,所有的交流都是通过同步API调用完成的,这与SOA架构中的REST或之前的SOAP API的使用标准相悖。问题是,同步调用很少需要,而且它们迅速达到了可扩展性的限制。

MACH服务的成功因素是通过web-hook和事件驱动的模式,默认为异步交流的特权,这些模式仍然提供可以嵌入API门户的服务。同步模式只在例外情况下和真正需要时才会出现。

7. 旧系统兼容
即使一切都在MACH架构原则下建立和交付,以质量和速度运送变化仍然是头号业务目标。而随着用户数量的增加,这意味着掌握软件变更。

执行对MACH服务的更改需要通过非破坏性的更改模式来确保旧系统的兼容性。当一个服务被发布并与其他应用程序连接的那一天,不管是内部还是外部,改变将更加困难。

主要的问题是将消费者从一个版本迁移到另一个版本,因为这涉及到在没有相同优先级的分布式行为者之间进行昂贵的协调。因此,通过设计使变化最小化,并具有追溯兼容性是一个要求。

8. 可用于自助服务
数字化竞争要求在用户和合作伙伴的目标范围内快速部署成功的产品。这种速度要求在生命周期的每个阶段都有最大限度的自动化,特别是在整合和维护服务方面。

在自助服务中提供业务服务需要在一个用户友好的门户中提供API,并提供适当的文档、用例和必要的信息来利用这些服务,然后开始付费--所有这些都尽量减少人类的互动。

交付自助服务的要求需要从设计阶段开始考虑,最好是在代码库内。对于一些服务,还需要投资于该领域的专业人士的技术写作。毕竟,这关系到数字业务的发展。
 

1