您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

为什么选择事件驱动的微服务架构?

时间:2023-09-15 14:28:03  来源:51CTO  作者:

作者 | Hugh

策划 | 言征

在当今动态的业务环境中,开发人员面临越来越大的压力,需要提供快速、可靠、可扩展的解决方案,以满足不断变化的业务需求,而事实证明,传统应用程序是实现这些目标的障碍。微服务提供了一种易于理解且有前途的替代方案,但这种方法有一个强大的增强功能,可以为开发人员带来更大的敏捷性和实现价值的时间:更具体地说,我所说的事件驱动编程模型,利用事件驱动的微服务。

事件驱动的微服务是一种强大的架构模式,它将微服务的模块化和灵活性与事件驱动架构的实时响应能力和效率相结合。事件驱动的微服务的核心依赖于三个基本原则:松耦合、消息驱动的通信和异步处理。这些原则结合起来创建可扩展、有弹性和高性能的分布式系统:

松耦合:松散耦合是事件驱动的微服务的一个关键方面,因为它促进了模块化和关注点分离。松耦合允许每个微服务独立发展,最大限度地减少各个服务之间的依赖关系,而不影响整个系统。松散耦合可以加快开发和部署周期,并确保一项服务中的问题不会级联并影响系统的其他部分。

消息驱动的通信:在事件驱动的微服务架构中,服务通过消息进行通信,表示系统内发生的事件或数据更改。通过事件处理程序在服务之间传递的事件充当将事件生产者与事件消费者分离的中介。通过采用消息驱动的通信,事件驱动的微服务可以有效地处理变化的负载,确保系统即使在大流量或高峰使用期间也能保持响应能力和弹性。

异步处理:异步处理是事件驱动微服务的另一个基本原则。此架构中的服务可以在等待先前请求完成的同时继续处理其他任务,而不是等待立即响应或任务完成。这种方法显着减少了系统延迟并允许更大的并行性,因为多个服务可以同时处理事件而不会被同步调用阻塞。

这些基础知识为事件驱动的微服务以及事件驱动的编程奠定了基础,使开发人员能够创建高度可扩展、有弹性和响应迅速的分布式系统。通过采用松散耦合、消息驱动的通信和异步处理,事件驱动的微服务可以有效地处理复杂、动态的工作负载,并适应现代应用程序不断变化的需求。

1、拥抱松耦合:可扩展且有弹性的事件驱动微服务的关键

松耦合是事件驱动微服务的一个基本特征,它有助于分布式系统中关注点的分离和模块化。这种设计原则有助于最大限度地减少各个服务之间的依赖性,使它们能够独立发展和扩展,而不影响整个系统。

在松耦合的体系结构中,服务被设计为仅对传入命令做出反应、处理它们并发出事件。这种方法有几个好处:

(1)服务自治:通过限制服务处理命令和发出事件的责任,每个服务独立于其他服务运行。这种自主权允许开发的灵活性,因为团队可以修改或扩展单个服务而不影响系统中的其他组件。

(2)解耦通信:松耦合架构中的服务不是通过 API 直接调用其他服务或共享数据,而是通过事件进行通信。这种间接通信使服务彼此解耦,从而降低了创建脆弱依赖项或紧密耦合的风险,而这些依赖项或紧密耦合可能会阻碍可扩展性和可维护性。

(3)增强的可扩展性:每个服务负责处理其命令和发出事件,这些事件可以独立扩展以处理增加的需求或提高性能。此功能使系统能够适应不断变化的工作负载或用户流量的增长,而不会影响其他服务或整个系统。

(4)改进的容错能力:松散耦合有助于遏制单个服务内的故障。如果服务遇到问题,可以将其隔离并修复,而不会导致整个系统出现级联故障。这种遏制提高了整个系统的可靠性和弹性。

(5)更轻松的维护和更新:由于每个服务独立运行,开发人员可以部署更新、错误修复或向单个服务添加新功能,而不会影响其他服务。这种模块化简化了维护并实现更快的迭代周期。

开发人员可以通过采用松散耦合和设计仅对传入命令、进程和发出事件做出反应的服务来创建更健壮、可维护和可扩展的事件驱动微服务。这种隔离可以在不断变化的需求和不断增长的工作负载方面提供更大的灵活性和适应性,从而确保系统保持响应能力和弹性。

2、利用事件驱动系统中的消息驱动通信:事件、命令和下游服务

消息驱动的通信是事件驱动系统的基础,它使服务能够异步通信并保持松散耦合。这个过程涉及上游服务、事件、命令和下游服务之间的协调交互。让我们分解一下这个沟通过程的每一步:

(1)发布事件:上游服务或事件生成器生成事件以响应系统内的特定操作或更改。这些事件代表必须传达给其他服务的状态更改或重要事件。事件制作者将这些事件发布到事件经纪人或日志,并将其传播给感兴趣的各方。

(2)将事件转换为命令:消息处理程序或中间服务接收到事件后,它们通常会转换为命令。命令代表需要由下游服务执行的操作。此转换过程通常涉及从事件有效负载中提取相关数据、验证数据并将其映射到适当的命令结构。

(3)向下游服务发布命令:消息处理程序或中间服务将事件转换为命令后,将命令发布到下游服务或命令使用者。这些服务负责执行命令中指定的操作、处理数据,并在必要时生成新事件以通知其他服务结果。

事件驱动系统中的消息驱动通信具有以下几个优点:

(1)异步交互:通过事件和命令进行通信,服务可以异步交互,而无需等待立即响应。这种方法可以减少系统延迟,实现更好的并行性并增强响应能力。

(2)解耦服务:使用事件和命令作为服务之间通信的主要方式可以促进松散耦合,因为服务不需要了解彼此的内部实现或 API。这种解耦简化了开发并允许服务独立发展。

(3)可扩展性和弹性:消息驱动的通信可以实现更好的负载平衡和资源利用率,因为服务可以独立扩展并适应不断变化的工作负载。此外,这种通信模式还提高了容错能力,因为一项服务的故障不会立即影响整个系统。

总之,事件驱动系统中的消息驱动通信对于促进松散耦合、异步处理和可扩展性至关重要。通过从上游服务发布事件,将其转换为命令,并将这些命令发布到下游服务,事件驱动系统可以有效地处理复杂的工作负载并适应现代应用程序不断变化的需求。

3、过渡到异步事件驱动架构:从经验中学习

开发人员和团队通常习惯于同步通信模式,因为他们从面向对象或函数式编程的经验中熟悉且直观。在这些范例中,对象调用其他对象或同步调用其他函数的函数上的方法。这种熟悉通常导致在分布式系统中的微服务之间采用同步通信模式。

然而,由于以下几个原因,同步处理流程可能不太适合分布式处理环境:

(1)耦合:同步通信导致服务之间的紧密耦合,因为它们需要了解彼此的 API 和实现细节。这种耦合使得独立发展、扩展或维护服务变得困难。

(2)延迟:当服务同步通信时,它们必须等待响应才能继续,这会增加系统延迟并降低响应能力,特别是在处理复杂的工作流程或高工作负载时。

(3)容错能力降低:同步通信可能导致级联故障,其中一项服务中的问题可以快速传播到其他服务,从而导致系统范围内的不稳定。

(4)可扩展性有限:同步通信模式限制了系统水平扩展的能力。服务必须始终可用且能够响应来处理传入请求,这在高流量场景或繁重工作负载下可能具有挑战性。

当开发人员遇到生产稳定性问题并认识到脆弱的同步处理模式的局限性时,他们开始认识到异步事件驱动架构的优点。这些架构具有以下几个优点:

(1)松散耦合:异步事件驱动架构使用消息驱动通信,这可以解耦服务并允许它们独立发展,从而促进更高的模块化和可维护性。

(2)提高响应能力:异步处理使服务能够继续处理其他任务,而无需等待响应,从而减少系统延迟并增强响应能力。

(3)增强的容错能力:异步通信有助于遏制单个服务内的故障,防止级联故障并提高整体系统的弹性。

(4)可扩展性:异步事件驱动的系统可以更有效地水平扩展,因为服务可以并发且独立地处理事件,而不会被同步调用阻塞。

通过采用异步事件驱动架构,开发人员可以解决同步通信模式的局限性,并构建更具可扩展性、弹性和高效的分布式系统。从经验中学习,他们可以创建更强大、更可维护的微服务应用程序,更好地适应现代软件开发不断变化的需求。

4、总结

采用事件驱动的微服务是一项战略举措,它改变了企业和开发人员进行软件设计和管理的方式。正如这里所指出的,开发人员在时间、资源和高质量代码方面的好处是巨大的。除了简单的商业利益之外,还可以为各个行业带来显着的好处。考虑在医疗保健领域,事件驱动的架构如何使医院网络能够实时监控患者的健康数据,并在检测到异常情况时向医疗保健专业人员发出警报。这可以通过确保在危急情况下立即采取行动来拯救生命。

这些示例展示了事件驱动的微服务的原理如何通过提供强大、适应性强且响应迅速的应用程序来彻底改变各个行业。

原文链接:https://thenewstack.io/event-driven-microservices-offer-flexibility-and-real-time-responsiveness/



Tags:微服务架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除。
▌相关推荐
作者 | Hugh策划 | 言征在当今动态的业务环境中,开发人员面临越来越大的压力,需要提供快速、可靠、可扩展的解决方案,以满足不断变化的业务需求,而事实证明,传统应用程序是实现这...【详细内容】
2023-09-15  Tags: 微服务架构  点击:(0)  评论:(0)  加入收藏
1、含义不同微服务架构是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中。分布式系统是若干独立计算机的集合,这些计算机对用户来说就像单个相...【详细内容】
2023-09-13  Tags: 微服务架构  点击:(4)  评论:(0)  加入收藏
微服务架构是一种软件开发技术,它将大型应用程序分解为更小的、可管理的、独立的服务。每个服务负责特定的功能,并通过明确定义的 API 与其他服务进行通信。微服务架构有助于...【详细内容】
2023-09-11  Tags: 微服务架构  点击:(6)  评论:(0)  加入收藏
大家好,我是不才陈某~今天这篇文章分享一下微服务架构路线,希望对大家有所帮助~我为什么选择微服务架构?图片Java技术指南:https://java-family.cn众所周知,单体应用程序,由于其种...【详细内容】
2023-09-05  Tags: 微服务架构  点击:(27)  评论:(0)  加入收藏
网关作为应用系统的流量防卫兵,可以说在保障整个系统的稳定运转过程中发挥着不可或缺的作用。不管未来的技术形态如何演进,不管是否能出现云原生架构全面取代传统的部署模式,可...【详细内容】
2023-09-03  Tags: 微服务架构  点击:(19)  评论:(0)  加入收藏
在快速发展的数字化时代,应对日益复杂的业务需求和技术挑战,传统的单体应用架构可能会变得不够灵活和可扩展。微服务架构应运而生,成为了许多企业和开发团队所青睐的解决方案。...【详细内容】
2023-08-28  Tags: 微服务架构  点击:(24)  评论:(0)  加入收藏
引言:微服务架构是一种将复杂的软件应用拆分成一系列小型、独立部署的服务的设计模式。而容器技术为微服务架构的实现提供了强大的支持。本文将探讨基于容器的微服务架构选型...【详细内容】
2023-08-27  Tags: 微服务架构  点击:(32)  评论:(0)  加入收藏
前言当前,微服务架构在很多公司都已经落地实施了,下面用一张图简要概述下微服务架构设计中常用组件。不能说已经使用微服务好几年了,结果对微服务架构没有一个整体的认知,一个只...【详细内容】
2023-08-15  Tags: 微服务架构  点击:(21)  评论:(0)  加入收藏
微服务架构是由很多小而自治的微服务组合而成,每个服务都提供一套独立自洽的业务能力。从应用的层面,我们首先对业务进行建模,业务域定义的边界也自然而然作为每个微服务的职能...【详细内容】
2023-07-28  Tags: 微服务架构  点击:(41)  评论:(0)  加入收藏
如今,很多企业都在进行微服务架构重构,问题是微服务到底是不是最佳选择?如果选择没有问题,微服务在什么时候用?重构之后的技术路线和之前是怎样一种关系?我们应该以什么样的方式,...【详细内容】
2023-07-26  Tags: 微服务架构  点击:(35)  评论:(0)  加入收藏
▌简易百科推荐
作者 | Hugh策划 | 言征在当今动态的业务环境中,开发人员面临越来越大的压力,需要提供快速、可靠、可扩展的解决方案,以满足不断变化的业务需求,而事实证明,传统应用程序是实现这...【详细内容】
2023-09-15    51CTO  Tags:微服务架构   点击:(0)  评论:(0)  加入收藏
关于KurukshetraKurukshetra是一款功能强大的开源框架,该框架的主要目标就是通过交互式的问题解决方式来告诉广大研究人员或开发人员如何能够更好地实现安全编码。Kurukshetr...【详细内容】
2023-09-15  Alpha_h4ck    Tags:Kurukshetra   点击:(3)  评论:(0)  加入收藏
在 JDK1.8 中,HashMap 还引入了一个新的概念,叫做负载因子(load factor),它是指哈希表中键值对的数量与数组长度的比值。当键值对的数量超过了负载因子与数组长度的乘积时,就会...【详细内容】
2023-09-15  微风01  今日头条  Tags:HashMap   点击:(3)  评论:(0)  加入收藏
环境:SpringBoot2.5.13Spring Cloud Gateway提供了一个名为ProxyExchange的实用程序对象。你可以在常规Spring web处理程序中使用它作为方法参数。它通过镜像HTTP动词的方法...【详细内容】
2023-09-15   Spring全家桶实战案例源码    Tags:Spring Cloud   点击:(2)  评论:(0)  加入收藏
在 Spring Boot 中,拦截器和动态代理都是用来实现功能增强的,所以在很多时候,有人会认为拦截器的底层是通过动态代理实现的,所以本文就来盘点一下他们两的区别,以及拦截器的底层...【详细内容】
2023-09-15  Java中文社群  微信公众号  Tags:SpringBoot   点击:(3)  评论:(0)  加入收藏
1 判断类型注入的属性判断其类型: Optional ObjectFactory ObjectProvider javax.inject.Providerpublic class DefaultListableBeanFactory extends AbstractAutowireCapabl...【详细内容】
2023-09-14  Spring全家桶实战案例源码    Tags:Spring   点击:(1)  评论:(0)  加入收藏
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。我之前的HTTP开发是用apache的Htt...【详细内容】
2023-09-14  PlayInJava  今日头条  Tags:Springboot   点击:(4)  评论:(0)  加入收藏
本文目录- 说在前面- 喜马拉雅自研亿级API网关技术实践- 1、第1版:Tomcat NIO+Async Servlet- 2、第2版:Netty+全异步 - 2.1 接入层 - 2.2 业务逻辑层 - 2.3 服务调用层...【详细内容】
2023-09-14  技术老男孩  微信公众号  Tags:架构设计   点击:(0)  评论:(0)  加入收藏
1、含义不同微服务架构是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中。分布式系统是若干独立计算机的集合,这些计算机对用户来说就像单个相...【详细内容】
2023-09-13  AI改变你我  微信公众号  Tags:架构   点击:(4)  评论:(0)  加入收藏
分布式锁是一种用于保证分布式系统中多个进程或线程同步访问共享资源的技术。同时它又是面试中的常见问题,所以我们本文就重点来看分布式锁的具体实现(含实现代码)。在分布式系...【详细内容】
2023-09-13  Java中文社群    Tags:分布式锁   点击:(0)  评论:(0)  加入收藏
站内最新
站内热门
站内头条