回顾微服务的边界选择

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本文讲的是回顾微服务的边界选择【编者的话】本文讨论了如何定义微服务的边界,并采用机场旅客值机系统做了拆分微服务的例子,本文从模块上下文的角度对微服务进行边界定义,讨论了这种拆分方法的优劣,并引出了其他拆分依据的思考。
本文讲的是回顾微服务的边界选择【编者的话】本文讨论了如何定义微服务的边界,并采用机场旅客值机系统做了拆分微服务的例子,本文从模块上下文的角度对微服务进行边界定义,讨论了这种拆分方法的优劣,并引出了其他拆分依据的思考。

目前,微服务是一个热门的话题。尽管它很复杂,包括分布式事务、最终一致性、操作开销等,它依然是发展趋势,特别是它带来的优点,如跨语言架构、选择的伸缩性、强大的模块化、容错能力、实验性、敏捷性等。

微服务可能不是新鲜事物。我仍然记得,2011年我工作在一个SaaS产品,我们试图建立包含不同的上下文的架构,其中包含敏捷项目管理、问题跟踪器,和协作工具。当时我们不熟悉这个微服务概念,但我们试图实现的功能与微服务架构类似。最初,‘分发应用程序到不同模块’ 这个架构效果很好,但是我们在集成它的过程中搞砸了。我们采用直接同步调用的方式,而不是拥抱事件驱动架构的不同模块之间信息共享的机制。这使得我们距离最初的目标(独立部署、开发和运行)越来越远。

本文讨论的另一个教训来源于我最近的一个项目,它可以帮助你从不同的角度识别微服务的边界。开始讨论我们能做什么不同之前,对将要讨论的系统进行宏观了解是首要的。

背景

下一代值机系统(NGB)是一个护照管理系统的升级版本。NGB的主要目标是加快的乘客在机场的移民柜台的处理速度。该系统通过将处理时间平均从56秒减少到10秒,提高了乘客的体验。下面是该系统的 处理流程图
a1.png

在NGB系统中,有边界的组件用红线标示。其中一些边界组件已经被刻意去除,避免发散讨论。

NGB系统的核心是预清除过程。预清除过程通常在乘客登机前72小时开始。航空公司将预订信息发送给相关机构的乘客信息系统,将信息转发给NGB系统用于预清除。预清除期间,在移民系统的配合下,NGB检查乘客的概要文件,并将结果发送给后台校验,避免乘客因程序问题(例如黑名单)被误判有罪。乘客发现无罪是绿色标志,它需要在移民柜台花费几秒钟来处理这些乘客。

希望你现在已经对NGB系统有了一定了解,那么开始我们的回顾。

哪些变好了呢?

从按照大部分的书本上对微服务边界的定义来说,NGB被分成自动化清除、旅客出境管理和通知模块。自动化预清除部分在后台处理预订数据流并将数据传递给旅客处境控制模块,用于持久化和人工干预。这个场景包含两大类用户:当面处理手续的一线用户与需要后台操作处理手续的用户。通知模块,顾名思义,用于发送通知给系统管理员。

哪些变坏了呢?

尽管普遍用于乘客边境控制模块的语言是特定的和独特的,它仍然是不够的。随着时间的流逝,乘客边境控制模块不仅开始变得独立,也开始随着生产环境的变化而产生问题。我们在后台操作中做任何更改操作必须小心,避免任何影响前线操作。此外,任何只影响后台操作的变更,需要隔离在不影响前线部署操作的前提下进行,反之亦然。

我们可以做出哪些改变?

在进行讨论可以做出哪些改变之前,我们先快速回顾下NGB系统的商业处理流程,如下:
a2.png

虚线箭头描述在不同时间线上发生的商业流程。例如,预订信息在航班出发之前72小时被提供,工作人员在航班出发前几个小时检查旅客信息,当旅客到达柜台时进行旅客护照检查。

如果你关注了上文提到的模块构成图,自动化预清除流程被拿到一个单独的模块,其中工作处理流程和前台处理被封装到单独地旅客出境控制模块。把它们放到同一个模块中的原因是符合边界定义。为了克服上一段中高亮部分提到的问题,我们可以分布边界模块如下:

再次,为了维持讨论话题的重点,上文流程图中某些有界的模块不在讨论范围内。乘客出境控制模块被进一步分割为三个不同的模块,用红色加粗的圆圈标示。

后台系统操作和前端出境控制模块将保持旅客处理模型的最小结构,共享模块的核心部分,其中完整的旅客领域模型将会在旅客出行模块中由事件构成。这三个模块都会在不同时间线发送事件到旅客出行模块,例如在自动预清除阶段、后台审核阶段、前端审核旅客出行阶段等。这种情况下,旅客旅游模块将会扮演一个无上线的微服务。并且,它将会隔离NGB系统内的读写操作。

在这种形式的分布式中,不仅降低了旅客出境控制系统中后端或者前端变更服务的影响,同时有助于独立变更。这个方法唯一的权衡之处在于我们必须维持多个旅客领域模型的镜像在不同的模块中。为了实现降低耦合,这将无法避免。

结论

从上下文边界的角度对微服务进行划分会是一个好的开始,但是仅靠上下文这一个角度来处理是不够的。其他角度确定微服务边界也至关重要,例如根据选择性扩展、可变性、可部署性、测试性、商业流程、组织结构等,也会影响微服务的边界选择。

原文链接:A Retrospective on Microservice Boundaries

===================================================
译者介绍

陈杰,BOSS直聘app的数据工程师,工作重心为基于用户行为的数据推荐,平时也乐于去实现一些突发的想法。在疲于配置系统环境时发现了Docker,跟大家一起学习、使用和研究Docker。

原文发布时间为:2017-02-08

本文作者:陈杰

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:回顾微服务的边界选择

相关文章
|
存储 监控 网络协议
5张图,带你了解微服务架构治理
5张图,带你了解微服务架构治理
1073 0
5张图,带你了解微服务架构治理
|
3天前
|
负载均衡 安全 开发者
探索微服务架构中的服务网格
【5月更文挑战第25天】 在现代软件工程实践中,微服务架构已成为构建和部署分布式系统的主流方式。随着其流行度的提升,管理这些微服务之间的交互变得日益复杂。服务网格(Service Mesh)作为一种基础设施层,旨在处理服务间的通信,并提供服务发现、负载均衡、故障管理等功能。本文将探讨服务网格在微服务体系结构中的作用,以及如何利用它来优化分布式系统的可靠性和性能。
|
8天前
|
运维 监控 负载均衡
探索微服务架构下的服务网格
【5月更文挑战第20天】 在当今日益复杂的分布式系统中,微服务架构已成为企业技术栈的重要组成部分。随着微服务数量的膨胀和网络通信的复杂化,传统的服务发现与负载均衡机制显得力不从心。本文将深入探讨服务网格这一新兴模式,它如何在微服务环境中提供更灵活、动态且高效的服务间通信解决方案。我们将剖析服务网格的核心组件、工作原理以及它如何简化分布式系统的运维难题。
|
7月前
|
负载均衡 Cloud Native 安全
服务网格和微服务架构的关系:理解服务网格在微服务架构中的角色和作用
服务网格和微服务架构的关系:理解服务网格在微服务架构中的角色和作用
80 0
|
8月前
|
Kubernetes Java 微服务
什么是服务网格?在微服务体系中又是如何使用的?
有一位粉丝问私信问我的面试题,他说“什么是服务网格”? 服务网格这个概念出来很久了,从 2017 年被提出来,到 2018 年正式爆发,很多云厂商和互联网企业都在纷纷向服务网格靠拢。像蚂蚁集团、美团、百度、网易等一线互联网公司,都有服务网格的落地应用。
741 0
|
10月前
|
Kubernetes Cloud Native Dubbo
框架Left,网格Right,微服务之出路
云原生时代的微服务,在过去的时间:有坚守,亦有破局。服务框架依然在持续进化和奔向云原生,Service Mesh 在持续进步的同时依旧疑点重重。总体而言,微服务架构的演进并非一蹴而就,过于保守或激进都不是解决之道。 在过去的岁月中,以 Spring Cloud、Dubbo 为2大体系代表的服务框架依然在持续进化,持续发热,并加速融向云原生领域;然而,作为微服务体系及云原生中的“网红”:Service Mesh ,依然在未知中砥砺前行。由此,在面对云原生和微服务技术的蓬勃发展:一边是成熟演进的服务框架,一边是代表未来方向的 Service Mesh,企业的架构演进方向该何去何从?
66 0
|
10月前
|
敏捷开发 运维 数据库
从根儿上学习微服务02:如何划分微服务?
从根儿上学习微服务02:如何划分微服务?
173 0
|
人工智能 Rust 前端开发
「第二部:容器和微服务架构」(8) 识别每个微服务的领域模型边界
「第二部:容器和微服务架构」(8) 识别每个微服务的领域模型边界
|
存储 安全 Devops
【微服务架构】在微服务架构中最小化设计时间耦合
【微服务架构】在微服务架构中最小化设计时间耦合
|
SQL 人工智能 安全
[第二部:容器和微服务架构](4) 微服务架构采用准则
[第二部:容器和微服务架构](4) 微服务架构采用准则