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

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

时间: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:微服务架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  Search: 微服务架构  点击:(5)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  Search: 微服务架构  点击:(115)  评论:(0)  加入收藏
微服务架构中的数据一致性
在微服务中,一个逻辑上原子操作可以经常跨越多个微服务。即使是单片系统也可能使用多个数据库或消息传递解决方案。使用多个独立的数据存储解决方案,如果其中一个分布式流程参...【详细内容】
2023-12-27  Search: 微服务架构  点击:(141)  评论:(0)  加入收藏
Eureka: 微服务架构中不可或缺的服务治理工具
Eureka是Netflix开源的一款用于服务治理的工具,它是NetflixOSS(OpenSourceSoftware)项目的一部分,主要用于实现微服务架构中的服务注册与发现。在当今庞大而复杂的微服务系统中,E...【详细内容】
2023-12-14  Search: 微服务架构  点击:(191)  评论:(0)  加入收藏
微软官方出品微服务架构:十个.Net开源项目
1、一个高性能类型安全的.NET枚举实用开源库Enums.NET是一个.NET枚举实用程序库,专注于为枚举提供丰富的操作方法。它支持.NET Framework和.Net Core。它主要优点表现在类型...【详细内容】
2023-12-06  Search: 微服务架构  点击:(131)  评论:(0)  加入收藏
深入理解Java微服务架构与容器化部署
随着云计算和大规模分布式系统的兴起,Java微服务架构和容器化部署成为了现代应用开发中的热门话题。它们可以提供灵活性、可伸缩性和高效性,使得开发人员能够更好地构建和维护...【详细内容】
2023-11-29  Search: 微服务架构  点击:(254)  评论:(0)  加入收藏
DDD四层微服务架构
一、微服务搭建思路大家看到的这张架构图并不是空穴来潮,它是通过不断演变出来的,我们要从DDD四层架构、微服务架构两个维度去融合理解。这里的DDD四层架构适用于单个服务的工...【详细内容】
2023-11-24  Search: 微服务架构  点击:(216)  评论:(0)  加入收藏
在微服务架构中的数据一致性
当从传统的单体应用架构转移到微服务架构时,特别是涉及数据一致性时,数据一致性是微服务架构中最困难的部分。传统的单体应用中,一个共享的关系型数据库负责处理数据一致性。在...【详细内容】
2023-11-23  Search: 微服务架构  点击:(175)  评论:(0)  加入收藏
一文搞懂微服务架构演进
本文将介绍微服务架构和相关的组件,介绍他们是什么,以及为什么要使用微服务架构和这些组件。本文侧重于简明地表达微服务架构的全局图景,因此不会涉及具体如何使用组件等细节。...【详细内容】
2023-11-21  Search: 微服务架构  点击:(166)  评论:(0)  加入收藏
单体架构 vs 微服务架构的全面比较
软件架构是指软件系统的高层设计和组织方式。它定义了系统的结构、组件、它们之间的交互以及它们如何满足系统的需求。有各种软件架构模式,每种都有其自身的优点和权衡。两种...【详细内容】
2023-11-01  Search: 微服务架构  点击:(254)  评论:(0)  加入收藏
▌简易百科推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  步步运维步步坑    Tags:架构   点击:(5)  评论:(0)  加入收藏
大模型应用的 10 种架构模式
作者 | 曹洪伟在塑造新领域的过程中,我们往往依赖于一些经过实践验证的策略、方法和模式。这种观念对于软件工程领域的专业人士来说,已经司空见惯,设计模式已成为程序员们的重...【详细内容】
2024-03-27    InfoQ  Tags:架构模式   点击:(13)  评论:(0)  加入收藏
哈啰云原生架构落地实践
一、弹性伸缩技术实践1.全网容器化后一线研发的使用问题全网容器化后一线研发会面临一系列使用问题,包括时机、容量、效率和成本问题,弹性伸缩是云原生容器化后的必然技术选择...【详细内容】
2024-03-27  哈啰技术  微信公众号  Tags:架构   点击:(10)  评论:(0)  加入收藏
DDD 与 CQRS 才是黄金组合
在日常工作中,你是否也遇到过下面几种情况: 使用一个已有接口进行业务开发,上线后出现严重的性能问题,被老板当众质疑:“你为什么不使用缓存接口,这个接口全部走数据库,这怎么能扛...【详细内容】
2024-03-27  dbaplus社群    Tags:DDD   点击:(11)  评论:(0)  加入收藏
高并发架构设计(三大利器:缓存、限流和降级)
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。引言1.高并发背景互联网行业迅速发展,用户量剧...【详细内容】
2024-03-13    阿里云开发者  Tags:高并发   点击:(6)  评论:(0)  加入收藏
如何判断架构设计的优劣?
架构设计的基本准则是非常重要的,它们指导着我们如何构建可靠、可维护、可测试的系统。下面是这些准则的转换表达方式:简单即美(KISS):KISS原则的核心思想是保持简单。在设计系统...【详细内容】
2024-02-20  二进制跳动  微信公众号  Tags:架构设计   点击:(36)  评论:(0)  加入收藏
详解基于SpringBoot的WebSocket应用开发
在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用...【详细内容】
2024-01-30  ijunfu  今日头条  Tags:SpringBoot   点击:(10)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  547蓝色星球    Tags:架构   点击:(115)  评论:(0)  加入收藏
GraalVM与Spring Boot 3.0:加速应用性能的完美融合
在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。GraalVM是一个高性能的多语言虚拟机,它提供了Ahead-of-Time(AOT)编...【详细内容】
2024-01-11    王建立  Tags:Spring Boot   点击:(124)  评论:(0)  加入收藏
Spring Boot虚拟线程的性能还不如Webflux?
早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。测试场景作者采用了一个尽可...【详细内容】
2024-01-10  互联网架构小马哥    Tags:Spring Boot   点击:(115)  评论:(0)  加入收藏
站内最新
站内热门
站内头条