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

news2024/11/17 5:51:08

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

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

  • 松耦合:松散耦合是事件驱动的微服务的一个关键方面,因为它促进了模块化和关注点分离。松耦合允许每个微服务独立发展,最大限度地减少各个服务之间的依赖关系,而不影响整个系统。松散耦合可以加快开发和部署周期,并确保一项服务中的问题不会级联并影响系统的其他部分。
  • 消息驱动的通信:在事件驱动的微服务架构中,服务通过消息进行通信,表示系统内发生的事件或数据更改。通过事件处理程序在服务之间传递的事件充当将事件生产者与事件消费者分离的中介。通过采用消息驱动的通信,事件驱动的微服务可以有效地处理变化的负载,确保系统即使在大流量或高峰使用期间也能保持响应能力和弹性。
  • 异步处理:异步处理是事件驱动微服务的另一个基本原则。此架构中的服务可以在等待先前请求完成的同时继续处理其他任务,而不是等待立即响应或任务完成。这种方法显着减少了系统延迟并允许更大的并行性,因为多个服务可以同时处理事件而不会被同步调用阻塞。

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

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、总结

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

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

5、推荐一款开发工具

JNPF快速开发平台,很多人都用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

原理是将开发过程中某些重复出现的场景、流程,具象化成一个个组件、api、数据库接口,避免了重复造轮子。因而极大的提高了程序员的生产效率。

官网:www.jnpfsoft.com/?csdn,如果你有闲暇时间,可以做个知识拓展。

这是一个基于Java Boot/.Net Core构建的简单、跨平台快速开发框架。前后端封装了上千个常用类,方便扩展;集成了代码生成器,支持前后端业务代码生成,满足快速开发,提升工作效率;框架集成了表单、报表、图表、大屏等各种常用的Demo方便直接使用;后端框架支持Vue2、Vue3。

为了支撑更高技术要求的应用开发,从数据库建模、Web API构建到页面设计,与传统软件开发几乎没有差异,只是通过低代码可视化模式,减少了构建“增删改查”功能的重复劳动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1012214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023自动化测试需知的4项测试工具!

一般来说学自动化会建议大家先学selenium,因为最早的时候,自动化就代表selenium,进入测试行业就开始做接口测试,而且现在基本每个公司都需要接口测试。今天就和大家聊一下接口测试的工具。 一、Robot Framework 机器人框架。之所…

AI Studio星河社区生产力实践:基于文心一言快速搭建知识库问答

还在寻找基于文心一言搭建本地知识库问答的方案吗?AI Studio星河社区带你实战演练(支持私有化部署)! 相信对于大语言模型(LLM)有所涉猎的朋友,对于“老网红”知识库问答不会陌生。自从大模型爆火…

亚马逊封买家账号的原因有哪些

亚马逊可能封锁买家账号的原因有多种,主要是出于保护市场和维护平台秩序的考虑。以下是一些可能导致亚马逊封锁买家账号的常见原因: 1、涉及违规行为:如果买家违反了亚马逊的使用政策,如发表虚假评价、滥用退货政策、欺诈或盗窃等…

GitHub 执行定时任务之巴奴会员签到

经常忘记去点那么一下,人到中年记忆力衰退的厉害。所以… 前言 巴奴算是签到算是比较简单的那种,没有太多的限制,可能获取积分的大多是人都还是要去门店的吧,也没必要做太多的限制。 打开签到每日提醒后,自动推送的地…

软件测试工作的基本流程详解

软件测试报告 首先,作为测试人员需要学习并了解业务,分析需求点 为什么测试人员要参加需求分析?也就是进行测试需求分析的目的是什么? 第一、把用户需求转化为功能需求: 1、对测试范围进度量 2、对处理分支进行度量…

nature子刊|病毒与宿主微生物的“花式”互作!

期刊:nature microbiology 影响因子:28.3 发表时间:2023年5月 病毒是地球上最丰富多样的生命形式,存在于每一个环境中。深海中病毒与宿主的互作以及它们对生态系统的影响和功能尚不清楚。今天给大家来带…

使用Python CV2自动识别人脸并融合至新图片

需求说明 最近孩子很迷奥特曼,想尝试拿他的照片跟奥特曼合并下做个帅酷变身。我想一般的PS跟现在流行的AI工具应该都可以实现,但是咱是程序员可以尝试用Python来做一下嘛。 实现思路 Python图片处理离不开CV2库,这个实现思路很清晰。先根据…

【自学开发之旅】Flask-restful-Jinjia页面编写template-回顾(五)

restful是web编程里重要的概念 – 一种接口规范也是一种接口设计风格 设计接口: 要考虑:数据返回、接收数据的方式、url、方法 统一风格 rest–表现层状态转移 web–每一类数据–资源 资源通过http的动作来实现状态转移 GET、PUT、POST、DELETE path…

Tomcat修改配置文件

1.Tomcat启动乱码问题 1.1conf目录 说明:找到conf目录下logging.properties文件 1.2打开logging.properties文件 说明:将UTF-8修改成GBK 1.3.效果 2.端口冲突问题 2.1 conf目录 2.2打开 server.xml文件 2.3.修改端口 说明:port指的就是端…

自动化测试框架实战详解

前言 之前文章跟大家分享了一下自己在接口自动化测试中进行测试准备的一些相关知识点,接下来本篇文章详细分享一下接口自动化框架设计的思路总结,希望能对初次探索接口自动化测试的小伙伴们有一些思路上的帮助。 小编是以pythonrequestsunittestHTMLTes…

淘礼金红包检测,规避订单返款/转账资损问题的技术实现方案

先说业务场景:很多电商人在订单转账或返款时,可能会因订单使用了如首单礼金/新品礼金/优惠劵或其他红包类型,导致资金损失问题。如下图所示: 再说解决方案:具体规避这类订单红包的资损(返款/转账多返&#…

mount报错NTFS signature is missing

给nvidia AGX orin的开发板加了一个内存条 sudo fdisk -l sudo mount /dev/nvme0n1 /mnt/pan1 #将/dev/nvme0n1挂载到/mnt/pan1 下结果挂载时报错如下: NTFS signature is missing解决方法,给创建一个ntfs即可: sudo mkfs.ntfs /dev/nvme0n…

三勾商城(java+vue3)微信小程序商城+SAAS+前后端源码

项目介绍 本系统功能包括: 前台展示后台管理SAAS管理端,包括最基本的用户登录注册,下单, 购物车,购买,结算,订单查询,收货地址,后台商品管 理,订单管理&…

芯片设计流程

VLSI 代表超大规模集成(Very Large Scale Integration),这是一种通过将数百万个晶体管集成到单个芯片中来创建集成电路 (IC) 的技术。超大规模集成电路技术可以生产出紧凑、功能强大且低成本的微处理器、存储芯片、数字信号处理器和其他先进电…

DC系列靶机4通关教程

DC-4 信息收集 扫描主机 arp-scan -l端口扫描 nmap -p- -A 192.168.16.165发现ssh端口和80端口都打开着呢 目录扫描 dirsearch -u http://192.168.16.165dirb hhtp://192.168.16.165登录web网页 发现没有可用信息,发现页面提示admin 爆破 用户密码爆破 使用…

什么是AI数字员工?它能帮我们做什么?

在今年360智脑大模型应用发布会上,360集团创始人周鸿祎再度提到了AI数字员工,他认为AI数字员工将为企业带来一场工作效率革命。在当今数字化和自动化的时代,人工智能(AI)正在逐渐地融入到各行业,而AI数字员…

《优化接口设计的思路》系列:第二篇—接口用户上下文的设计与实现

系列文章导航 《优化接口设计的思路》系列:第一篇—接口参数的一些弯弯绕绕 《优化接口设计的思路》系列:第二篇—接口用户上下文的设计与实现 前言 大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术…

财富潮涌:银行发展绿色经济创新路径

在《玩转金融新“绿”潮,银行纷纷亮大招》内容中,我们带大家了解了商业银行有关绿色信贷产品、绿色债券产品及绿色投资的内容。今天,我们将继续带大家了解商业银行绿色金融实践路径中关于绿色财富、绿色服务和绿色运营的分析。 在绿色金融实…

数字中国背景下,企业数字化转型需要“强IT”

随着科技的快速发展和全球商业环境的不断变化,中国企业对灵活性、创新性、全球化和效率的需求是迫切的,进行数字化转型来支撑企业的业务变革、组织优化已是业界共识。如何根据企业的实际情况进行数字化转型对企业管理层,特别是CIO提出了新的挑…

解决 Axios 跨域问题,轻松实现接口调用

跨域是指访问另外一个域的资源,由于浏览器的同源策略,默认情况下使用 XMLHttpRequest 和 Fetch 请求时是不允许跨域的。跨域的根本原因是浏览器的同源策略,这是由浏览器对 JavaScript 施加的安全限制。 Axios 跨域常见报错 跨域请求被阻止 (…