前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >事件驱动微服务体系架构

事件驱动微服务体系架构

作者头像
程序你好
发布于 2019-11-06 05:58:17
发布于 2019-11-06 05:58:17
1.6K0
举报
文章被收录于专栏:程序你好程序你好

如果您是一名企业架构师,您可能听说过微服务架构,并使用过它。虽然您过去可能使用REST作为服务通信层,但是越来越多的项目正在转向事件驱动的体系结构。让我们深入了解这种流行架构的优缺点、它所包含的一些关键设计选择以及常见的反模式。

什么是事件驱动的微服务体系结构?

在事件驱动的体系结构中,当服务执行其他服务可能感兴趣的某些工作时,该服务将生成一个事件—执行操作的记录。其他服务使用这些事件,以便它们能够执行由于该事件而需要的任何自己的任务。与REST不同,创建请求的服务不需要知道使用请求的服务的详细信息。

这里有一个简单的例子:当一个订单被放置在一个电子商务网站,一个单一的“订单放置”事件产生,然后被几个微服务消费:

1.order服务,它可以向数据库写入一个order记录。

2.客户服务,它可以创建客户记录。

3.支付服务,它可以处理支付。

事件可以以多种方式发布。例如,可以将它们发布到保证将事件交付给适当使用者的队列中,也可以将它们发布到发布事件并允许访问所有相关方的“发布/订阅”模型流中。在这两种情况下,生产者发布事件,消费者接收该事件,并做出相应的反应。注意,在某些情况下,这两个角色还可以称为发布者(生产者)和订阅者(消费者)。

为什么使用事件驱动的体系结构

与REST相比,事件驱动架构提供了以下几个优点:

异步——基于事件的架构是异步的,没有阻塞。这使得资源可以在他们的工作单元完成后自由地转移到下一个任务,而不用担心之前发生了什么或者接下来会发生什么。它们还允许对事件进行排队或缓冲,从而防止使用者向生产者施加压力或阻塞它们。

•松耦合——服务不需要(也不应该)知道或依赖于其他服务。在使用事件时,服务独立运行,不了解其他服务,包括其实现细节和传输协议。事件模型下的服务可以独立地、更容易地更新、测试和部署。

•易于扩展——由于服务在事件驱动的体系结构下解耦,而且服务通常只执行一项任务,因此跟踪特定服务的瓶颈,并对该服务(且仅对该服务)进行扩展变得很容易。

•恢复支持——带有队列的事件驱动架构可以通过“重播”过去的事件来恢复丢失的工作。当用户需要恢复时,这对于防止数据丢失非常有用。

当然,事件驱动的架构也有缺点。通过分离紧密耦合时可能更简单的关注点,它们很容易过度设计;它们可能需要大量的前期投资;而且常常导致基础设施、服务契约或模式、多语言构建系统和依赖关系图的额外复杂性。

也许最大的缺点和挑战是数据和事务管理。由于事件驱动模型的异步性,它们必须小心处理服务之间不一致的数据、不兼容的版本、监视重复的事件,并且通常不支持ACID事务,而不支持最终的一致性,因为后者更难以跟踪或调试。

即使有这些缺点,事件驱动的体系结构通常也是企业级微服务系统的更好选择。主要的优点是可伸缩的、松散耦合的、开发人员操作友好的。

何时使用REST

然而,有时REST/web接口可能仍然更可取:

•您需要一个异步请求/应答接口。

•您需要对强事务的支持。

•您的API对公众可用。

•您的项目很小(REST的设置和部署要简单得多)。

您最重要的设计选择—消息传递框架

一旦决定了事件驱动的体系结构,就该选择事件框架了。事件生成和使用的方式是系统中的一个关键因素。目前已有数十种经过验证的框架和选择,选择正确的框架需要时间和研究。

分俩个大类: 消息处理或流处理。

消息处理

在传统的消息处理中,组件创建消息,然后将其发送到特定的(通常是单个的)目的地。一直处于空闲状态并等待的接收组件接收消息并相应地执行操作。通常,当消息到达时,接收组件执行单个流程。然后,删除消息。

消息处理体系结构的一个典型例子是消息队列。尽管大多数较新的项目使用流处理(如下所述),但是使用消息(或事件)队列的体系结构仍然很流行。消息队列通常使用代理的“存储和转发”系统,事件在此系统中从一个代理传递到另一个代理,直到它们到达适当的使用者。ActiveMQ和RabbitMQ是消息队列框架的两个流行示例。这些项目都有多年的实践经验和成熟的技术社区。

流处理

另一方面,在流内处理中,组件在达到某个状态时发出事件。其他感兴趣的组件在事件流中侦听这些事件并作出相应的反应。事件不针对特定的收件人,而是对所有感兴趣的组件可用。

在流内处理中,组件可以同时对多个事件作出反应,并对多个流和事件应用复杂的操作。有些流包括持久性,即事件在流上停留的时间可以根据需要延长。

通过流处理,系统可以重现事件的历史,在事件发生后联机并仍然对其作出反应,甚至执行滑动窗口计算。例如,它可以从每秒的事件流计算每分钟的平均CPU使用量。

最流行的流处理框架之一是Apache Kafka。Kafka是许多项目使用的成熟和稳定的解决方案。它可以被认为是一种工业强度的流处理解决方案。Kafka有一个庞大的用户群、一个有用的社区和一个改进的工具集。

其他的选择

还有其他框架提供流和消息处理的组合,或者提供它们自己独特的解决方案。例如,Apache的最新产品Pulsar是一个开源的发布/订阅消息系统,它支持流和事件队列,所有这些都具有极高的性能。Pulsar的特点是丰富的-它提供多租户和地理复制-因此复杂。据说Kafka的目标是高吞吐量,而脉冲星的目标是低延迟。

NATS是另一种具有“合成”队列的发布/订阅消息系统。NATS是为发送小而频繁的信息而设计的。它提供了高性能和低延迟;然而,NATS认为某种程度的数据丢失是可以接受的,优先考虑性能而不是交付保证。

其他的设计考虑

一旦你选择了你的事件框架,这里有几个其他的挑战需要考虑:

•Event Sourcing

很难实现松耦合服务、不同的数据存储和原子事务的组合。一个可能有所帮助的模式是事件源。在事件源中,从来不直接对数据执行更新和删除;相反,实体的状态更改被保存为一系列事件。

•CQRS

上面的事件来源引入了另一个问题:由于需要从一系列事件构建状态,查询可能会很慢,而且很复杂。命令查询责任隔离(CQRS)是一种设计解决方案,它为插入操作和读取操作调用单独的模型。

•事件发现

事件驱动体系结构中最大的挑战之一是对服务和事件进行编目。在哪里可以找到事件描述和详细信息?事件发生的原因是什么?是哪个团队创造了这个活动?他们在积极地工作吗?

•应对变化

事件模式会改变吗?如何在不破坏其他服务的情况下更改事件模式?随着服务和事件数量的增长,如何回答这些问题变得至关重要。

成为一个好的事件消费者意味着要为变化的模式编码。成为一个好的事件生产者意味着要认识到模式更改如何影响其他服务,并创建经过良好设计的事件,这些事件被清楚地记录下来。

•内部部署vs.托管部署

无论您的事件框架是什么,您还需要在自行部署框架(消息代理的操作并不简单,特别是在高可用性的情况下),还是使用托管服务(如Heroku上的Apache Kafka)之间做出选择。

反模式

与大多数体系结构一样,事件驱动的体系结构具有自己的一组反模式。以下是一些需要注意的地方:

设计过多的事件

注意不要对创建事件过于兴奋。创建太多的事件将在服务之间创建不必要的复杂性,增加开发人员的认知负担,增加部署和测试的难度,并导致事件使用者的拥塞。不是每个方法都需要是一个事件。

通用的事件

不要使用通用事件,无论是在名称中还是在目的上。您希望其他团队了解您的事件为何存在、应该用于什么以及应该在什么时候使用。事件应该有特定的目的,并相应地命名。事件与通用名称或通用事件与混乱的旗帜,导致问题。

复杂的依赖关系图

注意那些相互依赖的服务,并创建复杂的依赖关系图或反馈循环。每个网络跳都会给原始请求增加额外的延迟,特别是离开数据中心的南北网络流量。

这取决于保证的订单、交付或副作用

事件是异步的;因此,包含顺序或重复的假设不仅会增加复杂性,而且会抵消基于事件的体系结构的许多关键优点。如果使用者有副作用,例如在数据库中添加值,则可能无法通过重播事件进行恢复。

过早优化

大多数产品一开始很小,然后随着时间的推移而增长。虽然您可能梦想将来需要扩展到大型复杂组织,但是如果您的团队很小,那么事件驱动架构的额外复杂性实际上可能会降低您的速度。相反,考虑使用简单的体系结构来设计系统,但是要包含必要的关注点分离,以便您可以随着需求的增长将其替换掉。

期望事件驱动来修复所有问题

在较低的技术级别上,不要期望事件驱动的体系结构能够修复所有的问题。虽然这种体系结构肯定可以改进许多技术功能障碍的领域,但它不能解决核心问题,比如缺乏自动化测试、缺乏团队沟通或过时的开发-ops实践。

理解事件驱动架构的优缺点,以及它们最常见的一些设计决策和挑战,是创建尽可能好的设计的重要部分。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序你好 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
腾讯云哪个地域节点好?腾讯云服务器地域的选择方法
腾讯云CVM云服务器地域哪个好?如何选择腾讯云服务器地域节点?哪个快网分享腾讯云服务器地域的选择方法:
上云小秘书
2019/10/02
19.1K0
腾讯云哪个地域节点好?腾讯云服务器地域的选择方法
腾讯云服务器地域节点和可用区城市对照表及选择方法
腾讯云CVM云服务器地域节点遍布全球,腾讯云百科分享地域节点和可用区的选择方法及地域节点和可用区地区城市对照表:
上云小秘书
2019/09/19
10.8K0
腾讯云服务器地域节点和可用区城市对照表及选择方法
腾讯云服务器地域有什么不同?如何选择地域?
腾讯云轻量应用服务器地域是指轻量服务器数据中心所在的地理位置,如上海、广州和北京等地域,如何选择地域?地域的选择建议就近原则,用户距离轻量服务器地域越近,网络延迟越低,速度就越快,根据用户所在地区选择地域,例如南方用户居多可以优先选择广州地域、北方用户选择北京地域、面向全国优先选择上海地域。
用户9264446
2023/07/21
1.9K0
腾讯云服务器地域有什么不同?如何选择地域?
腾讯云服务器地域选择的方法
腾讯云CVM云服务器地域节点的选择是很重要的,腾讯云不同地域的云产品内网不通,并且购买后不能更换,所以腾讯云百科网建议用户在购买前请谨慎选择地域,关于地域节点的选择方法可以参考下方几点因素:
上云小秘书
2019/08/23
20.2K2
腾讯云服务器地域选择的方法
腾讯云4核8G轻量应用服务器12M大带宽很不错!
腾讯云轻量4核8G12M应用服务器带宽优惠价446元一年,518元15个月,12M公网带宽下载速度峰值可达1536KB/秒,折合1.5M/s,每月2000GB月流量,折合每天66GB,系统盘为180GB SSD盘,地域节点可选上海、广州或北京,4核8G服务器网来详细说下腾讯云轻量应用服务器4核8G12M配置、优惠价格、CPU型号处理器主频、限制条件、公网带宽、月流量详细性能评测:
上云小秘书
2023/04/14
10.9K0
腾讯云4核8G轻量应用服务器12M大带宽很不错!
腾讯云轻量应用服务器和云服务器CVM区别对比
腾讯云轻量服务器和云服务器有什么区别?轻量应用服务器和云服务器CVM哪个更好?抛开价格及使用门槛,云服务器CVM更好,从性价比及易用性角度考虑,轻量服务器性价比高。腾讯云百科来详细说下腾讯云轻量应用服务器和云服务器CVM的性能区别、CPU处理器型号区别、镜像系统区别、公网带宽对比、价格对比、服务器升降配区别及适用人群应用场景差异:
用户9264446
2022/11/14
1.6K0
腾讯云轻量应用服务器和云服务器CVM区别对比
腾讯云服务器性能评测:2核 2G 4M 带宽
腾讯云轻量应用服务器2核2G4M带宽配置2023年4月优惠价出炉,一年优惠价格112元、三年408元,如果选择免费赠送3个月价格是132元15个月,来详细说下腾讯云轻量2核2G4M服务器配置、购买选择、限制条件以及CPU性能测试。
主机教程网2bcd.com
2023/04/05
13.7K0
腾讯云服务器性能评测:2核 2G 4M 带宽
腾讯云服务器搭建ApachePHPMySQL环境
对于服务器来说稳定、极速就选择 2核 4G内存配置的云服务器比较稳妥。这个配置跑网站是比较轻松无压力的。配上 avada主题,可以做出的很大气、高大上的企业网站。下面介绍腾讯云的长期优惠折扣活动,感兴趣的可以注册账号领代金券使用。
用户6580788
2019/10/29
10.3K0
腾讯云服务器搭建ApachePHPMySQL环境
腾讯云双十一福利篇之CVM云服务器
云服务器 CVM 支持用户自定义一切资源:CPU、内存、硬盘、网络、安全等,并可以在需求发生变化时轻松地调整它们。
小馒头学Python
2024/11/13
3530
腾讯云双十一福利篇之CVM云服务器
腾讯云国际版:云服务器功能与优势
多地域多可用区:掩盖我国、亚太、欧洲及美洲下的多个地域。在接近您用户的地域布置运用可获得较低的时延。
老鹰飞机@laoying06
2023/07/01
7820
腾讯云国际版:云服务器功能与优势
腾讯云服务器搭建网站
对于服务器来说稳定、极速就选择 2核 4G内存配置的云服务器比较稳妥。这个配置跑网站是比较轻松无压力的。配上 avada主题,可以做出的很大气、高大上的企业网站。下面介绍腾讯云的长期优惠折扣活动,感兴趣的可以注册账号领代金券使用。
用户6577384
2019/10/29
21.9K0
腾讯云服务器搭建网站
腾讯云轻量应用服务器评测:配置 16核 32G 28M 带宽
腾讯云轻量应用服务器评测:配置 16核 32G 28M 带宽。腾讯云轻量16核32G28M服务器28M公网带宽下载速度峰值可达3584KB/s,折合3.5M/秒,系统盘为380GB SSD盘,6000GB月流量,折合每天200GB流量。来详细说下腾讯云轻量应用服务器16核32G28M配置性能、CPU主频型号、公网带宽月流量、系统盘及限制条件详细说明。
主机教程网2bcd.com
2023/03/23
5.2K0
腾讯云轻量应用服务器评测:配置 16核 32G 28M 带宽
一文搞懂地域和可用区如何选择
随着云计算的普及,越来越来的业务会选择上云,上云的第一步往往就是云资源的选购,选购云资源时(尤其是IaaS),通常都必须先选择地域Region和可用区AZ,那么我们应该如何选择呢?这两个概念与日常所说的数据中心又有什么区别呢?
cutd
2021/12/03
4.7K0
腾讯云网站备案咨询解答:其他问题解答汇总
腾讯云网站备案类的提问还是很多的,因为不断有人遇到各种情况,所以各种问题层出不穷。但是无论怎么提问也还是都是围绕着网站备案、准备资料、备案过程这几个核心的,所以老魏继续总结了一些其他问题解答汇总,分享给大家。
魏艾斯博客www.vpsss.net
2019/10/19
7.4K0
腾讯云网站备案咨询解答:其他问题解答汇总
手把手教你购买腾讯云服务器
腾讯云是腾讯公司旗下的云计算服务提供商,提供一系列基础设施和云服务,涵盖了计算、存储、数据库、人工智能、大数据分析、物联网等领域。腾讯云在全球范围内建立了多个数据中心,提供多地域、多可用区的服务支持,为用户提供高可靠性和稳定性的服务。它还提供灵活的付费模式和全面的技术支持,适应了各种规模和类型的用户需求。这里我们将手把手教你如何快速购买腾讯云服务器。
无代码Dev
2024/01/26
1.6K0
手把手教你购买腾讯云服务器
腾讯云服务器ping不通解决方法(公网IP/安全组/系统多维度)
腾讯云服务器ping不通什么原因?ping不通公网IP地址还是域名?新手站长从云服务器公网IP、安全组、Linux系统和Windows操作系统多方面来详细说明腾讯云服务器ping不通的解决方法:
用户9264446
2022/12/01
2.3K0
腾讯云服务器ping不通解决方法(公网IP/安全组/系统多维度)
腾讯云轻量应用服务器和CVM云服务器有什么区别?
腾讯云轻量服务器和云服务器有什么区别?为什么轻量应用服务器价格便宜?是因为轻量服务器CPU内存性能比云服务器CVM性能差吗?轻量应用服务器适合中小企业或个人开发者搭建企业官网、博客论坛、微信小程序或开发测试环境,云服务器CVM适合更复杂如高并发网站、大数据计算、机器学习等复杂应用场景。轻量服务器网从性能测试、网络带宽、计费价格、应用搭建及适合用户等方面来详细说明腾讯云轻量应用服务器和云服务器CVM区别:
上云小秘书
2023/04/10
9.5K0
腾讯云轻量应用服务器和CVM云服务器有什么区别?
腾讯云服务器如何购买?(图文教程)
国内的云服务器上知名的就那么几家,腾讯云是排名前列的云服务器提供商。而且腾讯云是国内互联网龙头企业,信得过,它们的产品是值得信任的。好了,废话不多说,我现在教下新手怎样选择和购买腾讯云服务器。这篇教程我写的很详细,因为有些个人建议和忠告,帮助你不要选错。
聚优云惠
2019/07/29
6.8K0
云服务器能访问外网吗的问题解答
今天在UCloud的用户社区闲逛的时候,发现了这个帖子,到手的积分不就随便拿吗~于是我整理了一下资料,便回答一下他的疑惑
小屁的博客
2022/05/13
18.5K0
腾讯云服务器选择包括CPU/内存/地域/系统/磁盘及公网宽带等
腾讯云CVM云服务器配置如何选择?小编第一次使用自定义配置的方式购买云服务器时也是一头雾水,今天有时间云服务器吧来详细说下云服务器的选择包括CVM实例的配置、实例规格、地域节点和可用区、镜像操作系统、磁盘及公网宽带等信息选择方法:
上云小秘书
2022/08/23
9.5K0
推荐阅读
相关推荐
腾讯云哪个地域节点好?腾讯云服务器地域的选择方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档