原文链接 Top 10 Microservices Patterns That Every Developer Should Know - GeeksforGeeks
目录
1. API 网关模式(API Gateway Pattern)
2. 服务注册与发现模式(Service Registry and Discovery Pattern)
3. 断路器模式(Circuit Breaker Pattern)
4. Saga模式【 一连串的(事务) 模式】(Saga Pattern)
7. 独立的数据库(Database per Service)
8. 无服务器微服务(功能即服务)(Serverless Microservice (FaaS))
9. 命令查询职责分离 - CQRS (Command Query Responsibility Segregation Pattern)
10. 边车模式 / 跨斗模式(Sidecar Pattern)
1. API 网关模式(API Gateway Pattern)
API Gateway 就像计算机服务领域的交通警察,负责处理站点上的流量。
决定信息(information)应该去哪里,
检查你是否有权发送 或 获取 信息,
保持跟踪所发生的事情,
并且能够修改信息的格式。
可以认为API Gateway是一个微服务架构中心的路由器。
API Gateway 不会直接访问任何微服务,而是将 requests 路由到适当的微服务并验证其凭据(authentication),此外,还会检查传入和传出的流量日志(traffic logs)。
特征(Features):
引导网络流量到正确的地方。
确保了用户身份验证(authentication)和权限检查(permission checks)。
跟踪所有网站访问
2. 服务注册与发现模式(Service Registry and Discovery Pattern)
一个对其它 微服务提供了“注册自己” 和 “发现别人” 两种功能的 中心枢纽(central service)。
“注册自己” - 微服务们可以在启动的时候,注册自己(提供 IP 地址, 端口号等信息)到这个 central service,同时central service通过固定间隔的 health check 来探测 这些微服务们的状态,保持这些微服务状态实时更新。health check不通过,就要 de-registering 。
“发现别人” - 当微服务A想和微服务B 通信时,A只知道B的名字,直接向这个中心枢纽(central service)要微服务B的真实地址(IP和端口)。【这里B可能不止一个,而且会变动。如:一个B停止服务了,另一个B接替工作(新的IP和端口), 这里它们名字都是B。】
特征(Features):
不断检测 微服务们(services)何时开始或结束。
监控和维护服务性能。
存储(微服务们的)IP地址和端口号等关键细节。
3. 断路器模式(Circuit Breaker Pattern)
在反复调用失败的情况下,通过以下方式 来保护系统的可用性(reliablity)。
“开启断路器(Circuit Breaker),同时重定向请求到 回退方法(fallback methods) 或返回默认的响应(default responses)”
它通过维护整个系统的稳定性和用户满意度来减少服务减速或不可用的影响,并且它作为分布式系统中的安全机制,通过隔离有问题的服务来防止级联故障,并自动重置和重新测试服务,从而允许它缓慢地恢复要解决的问题。
特征(Features):
重定向任务以防止失败。
会自动重置和监控服务。
起到了安全功能的作用。
4. Saga模式【 一连串的(事务) 模式】(Saga Pattern)
目的: 解决跨服务数据一致性问题。
方法 : 通过将事务拆分为由各个服务处理的本地事务来解决。
Saga模式为处理分布式事务提供了可伸缩和容错的方法。它允许各个服务单独管理其事务部分,这提高了体系结构中的独立性和灵活性,并确保保持数据一致性,即使在部分故障中,它也有助于提高系统的可靠性和灵活性。
例如:一个online travel booking系统,Flight booking服务启动事务,并通过events 与其他服务通信,其中每个服务遵循特定的工作流 (如果成功,它将发送到下一个服务;如果失败,它将触发一个补偿事务来维护数据一致性)。
特征(Features):
保持了系统的可靠性。
保持了服务之间的一致性。
使用后补操作(backup actions)在出现问题时保持稳定。
5. 松耦合(Loose Coupling)
松耦合是软件设计的基本原则,可以最大限度地减少模块之间的相互依赖,这对于微服务架构的可扩展性、可靠性和可维护性尤其重要。这意味着松耦合通过提供可扩展性和灵活性来适应变化并降低风险,从而以最小的相互依赖性运行,并减少复杂性、僵化性、不稳定性以及单点故障等问题
特征(Features):
减少了模块之间的相互依赖,从而提高了灵活性。
增强了应用程序的可伸缩性和适应性。
降低了模块的复杂性。
6. 高内聚(High Cohesion)
用来表示模块(module)内(为了达到共同目标的微服务们)相互调用的程度。
有助于开发 模块化 和 可维护的软件。
对软件做修改的情况下,降低引起异常结果的风险。
高内聚在软件开发概念中起着重要作用,在微服务中尤其重要,可以表示模块内与共享目的的互连程度。它有助于开发模块化和可维护的软件应用程序,其中更新可最大限度地降低在进行更改时引入不良后果的风险,其中每个组件通过促进开发人员理解和专注于特定功能来协作以实现共同目标,并专注于组件之间的紧密性及其具有高内聚性的共同目标,它不仅可以提高代码的清晰度,还可以提高可扩展性和适应性,这是微服务的主要因素。
特征(Features):
理解和更改软件变得容易。
增强了代码的清晰度、可扩展性和适应性。
加强了模块内的互连,以实现共同目的。
7. 独立的数据库(Database per Service)
保证了数据的完整性、隔离性,并防止了服务之间的直接数据访问。它允许每个服务独立运行,并确保服务不会重叠或与彼此的数据接口,因此所有服务都有其专用数据库,有助于改进数据保护,提高安全性,并允许轻松扩展。您可以根据需要选择数据库,例如MySQL, PostgreSQL或NoSQL数据库,包括MongoDB, Cassandra,以及基于云的数据库,包括AWS RDS,谷歌Cloud SQL。
特征(Features):
确保为每项服务提供单独和安全的数据存储。
使用专用数据库来避免重叠。
增强了应用程序的数据保护和安全性。
8. 无服务器微服务(功能即服务)(Serverless Microservice (FaaS))
FaaS融合了两种最新的软件开发概念,如微服务(microservices)和无服务器计算(serverless computing),它们为应用程序提供了一种可扩展且经济有效的(cost-effective)方法。在无服务器计算(serverless computing)中,开发人员编写代码时不用为自己担心,让云提供商来处理基础设施和自动伸缩。然而,它涉及到构建具有小型无状态函数的应用程序,这些函数响应由云平台执行、伸缩和管理的事件,也利用无状态函数,这使得它非常适合事件驱动的应用程序,其中函数对特定事件或触发器做出反应。
特征(Features):
将微服务(microservices)与无服务器计算(serverless computing)相结合。
提供对应用程序的响应。
云平台上管理扩展。
9. 命令查询职责分离 - CQRS (Command Query Responsibility Segregation Pattern)
命令查询职责分离(CQRS)是一种区分系统中的读写操作的模式,它使每个模式能够独立扩展、优化和确保安全。通过分离命令和查询双方的职责并提供对系统组件的控制,可以更轻松地分别保护每一方并提高整体系统效率,这使得可以分别扩展和优化写入和读取操作以有效满足不同的需求,从而提高系统可靠性并防止数据损坏等问题。它通过分离命令和查询职责简化了系统操作,从而确保有效处理数据完整性、可扩展性和性能。
特征(Features):
允许轻松调整以获得更好的性能。
有助于系统平稳运行。
将数据读取和写入分开,以实现增长并保持安全。
10. 边车模式 / 跨斗模式(Sidecar Pattern)
它是一种微服务架构技术,涉及向主应用程序的每个实例添加一个单独的服务(称为“sidecar”),这简化了跨切关注点的管理,并且更容易在不更改核心应用程序代码的情况下实现新功能或服务。它确保 sidecar 服务与主应用程序共享相同的生命周期,从而简化部署和扩展操作,并专注于处理订单、跨切关注点等核心功能,并提高微服务架构中的效率和可维护性,它划分了职责并增强了微服务的灵活性,使其更容易适应不断变化的需求。
特征(Features):
与“sidecar”服务配对,在不更改主代码的情况下管理任务。
使“sidecar”服务与主应用程序紧密结合,以实现无忧升级。
根据效率划分了提升微服务的责任。