热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

事件驱动架构_了解事件驱动架构

事件驱动架构事件驱动的体系结构是一种软件体系结构范例,可促进事件的产生,检测,使用和响应。如何实现事件驱动的体系结构,以及何

事件驱动架构

事件驱动的体系结构是一种软件体系结构范例,可促进事件的产生,检测,使用和响应。

如何实现事件驱动的体系结构,以及何时使用它?

事件驱动的体系结构与微服务齐头并进。 发生操作时,将创建一个事件,然后将该事件用于在所有等待该事件发生的事件上做出决策。

服务不再绑定在一起,因为在发布订阅类型模型中,调用者不再同步调用被调用者。 相反,被呼叫者以最终一致的方式对事件进行操作。

因此,事件驱动的体系结构可以更可靠,因为它们不必立即对服务调用进行操作(允许服务在成功之前都能够失败),但是很难预测何时执行操作(对于同样的原因)。

事件驱动架构的一个简单示例是Amazon。 如果您曾经在忙碌的时间(例如黑色星期五)在亚马逊购物,则可以订购商品,但之后只能发送电子邮件说明您订购的商品实际上无货。

如果您以事件驱动的体系结构来考虑此过程,则它可能以下列方式工作:

客户订购该项目并发布OrderPlaced事件Stock服务订阅了该事件,但是在处理事件时,它检查了库存,现在为0 The Stock服务随后发布了OutOfStock事件电子邮件服务订阅了该事件并向客户发送电子邮件,说明该商品无库存。

事件驱动的体系结构可以将队列与发布订阅模型结合使用作为支持模型。 这是为了保证在链中某些服务无法处理事件的情况下传递事件消息。

事件驱动架构的优缺点

有几个原因为什么使用事件驱动的体系结构比其他体系结构有优势。

  • 松散耦合 —服务不需要相互依赖。 这应用了不同的因素,例如传输协议,可用性(服务在线)和正在发送的数据。 消费者仍将需要知道如何解释事件或消息,因此在这两个服务之间仍应使用严格的合同,但是合同的实现细节无关紧要。
  • 可扩展性 —由于服务不再耦合,服务1的吞吐量不再需要满足服务2的吞吐量。这可以帮助降低成本,因为服务不再需要24/7全天候在线,并且可以利用无服务器计算的无限扩展。
  • 异步性 -由于服务不再依赖于同步返回的结果,因此可以使用即发即弃模型,这可以大大加快流程。 这可能会有一个缺点,下面将对此进行概述。
  • 时间点恢复 -如果事件由队列支持或维护某种历史记录,则可以重播事件,甚至可以及时返回并恢复状态。

使用事件驱动的体系结构也有缺点。

过度设计流程 -有时从一个服务到另一个服务的简单调用就足够了。 如果流程使用事件驱动的体系结构,则通常需要更多的基础结构来支持它,这将增加成本(因为它将需要一个排队系统)

不一致 -由于流程现在依赖于最终的一致性,因此通常不支持ACID(原子性,一致性,隔离性,持久性)事务,因此重复处理或乱序事件的处理会使服务代码更加复杂,并且难以测试和调试所有情况。

事件发生变化会怎样?

想象一下一种情况,当我想添加或更改事件的合同时,例如在OrderPlaced事件中,将数量从整数更改为浮点数。

如果不期望此更改,这种情况将使订户中断。

您需要对事件的合同进行版本控制,以防止这种破坏。 一个好的经验法则通常是,对合同的任何增加都是可以的,但是要删除或更改某些内容,必须发布该事件的新版本,而订户也希望有新的事件合同。

翻译自: https://hackernoon.com/understanding-event-driven-architecture-ub1k3umo

事件驱动架构



推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 深入解析Spring Cloud微服务架构与分布式系统实战
    本文详细介绍了Spring Cloud在微服务架构和分布式系统中的应用,结合实际案例和最新技术,帮助读者全面掌握微服务的实现与优化。 ... [详细]
  • Spring Cloud学习指南:深入理解微服务架构
    本文介绍了微服务架构的基本概念及其在Spring Cloud中的实现。讨论了微服务架构的主要优势,如简化开发和维护、快速启动、灵活的技术栈选择以及按需扩展的能力。同时,也探讨了微服务架构面临的挑战,包括较高的运维要求、分布式系统的复杂性、接口调整的成本等问题。最后,文章提出了实施微服务时应遵循的设计原则。 ... [详细]
  • 一面问题:MySQLRedisKafka线程算法mysql知道哪些存储引擎,它们的区别mysql索引在什么情况下会失效mysql在项目中的优化场景&# ... [详细]
  • 混合云架构在本地与云服务间寻求平衡的有效性探讨
    随着云计算技术的发展,混合多云架构因其灵活性和高效性而备受关注。本文将深入探讨混合多云(简称混合云)如何通过结合本地基础设施与云端资源,为企业提供一个更为平衡且高效的IT解决方案。 ... [详细]
  • 通过与阿里云的合作,牛客网成功解决了跨国视频面试中的网络卡顿问题,为求职者和面试官提供了更加流畅的沟通体验。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 本文探讨了现代分布式架构的多样性,包括高并发、多活数据中心、容器化、微服务、高可用性和弹性架构等,并介绍了与这些架构相关的重要管理技术,如DevOps、应用监控和自动化运维。文章还深入分析了分布式系统的核心概念、主要用途及类型,同时对比了单体应用与分布式服务化的优缺点。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • 容器与微服务基础:快速入门指南
    探索容器和微服务的基础知识,了解如何通过先进的应用性能管理(APM)工具提升监控效能。加入AppDynamics APM的导览,掌握容器与微服务实施及监控的最佳实践。 ... [详细]
  • Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
    go,通过,map,filter,foreach,等,流,式,ap ... [详细]
  • 近期,公司在构建新的交易系统时遇到了一个常见的问题——金额存储。由于涉及资金的操作需要高度的准确性,使用float类型进行金额计算可能会导致不可预见的误差。本文将深入探讨这一问题,并提供解决方案。 ... [详细]
  • 本文探讨了为何采用RESTful架构及其优势,特别是在现代Web应用开发中的重要性。通过前后端分离和统一接口设计,RESTful API能够提高开发效率,支持多种客户端,并简化维护。 ... [详细]
author-avatar
xieyuhua
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有