客户喜欢在事件发生时了解事件。在客户订购一双新鞋并收到已发货的通知后,在货物到达之前获取最新的运输状态更新可以改善整体客户体验。
关于您的订单的更新是在事件驱动架构(EDA) 中触发响应的事件。 EDA 是一种软件设计,它对状态(事件)的变化做出反应并使用解耦架构传输这些事件。这种解耦架构可以采用多种设计模式,例如发布-订阅 (pub-sub) 模式,其中生产者发布事件,订阅者监视事件,但两者都不依赖于对方。
事件流和事件溯源代表了组织为其 EDA 提供动力的两种方式。
借助事件流,系统之间有连续的数据流,数据表示使用发布-订阅模式广播的事件的新状态。另一方面,事件溯源将每个新事件存储在附加日志中。这是包含事件和上下文的时间顺序的真实来源。
事件溯源和事件流通常在 EDA 中同时使用,但区分两者很重要,因为它们的工作方式非常不同。虽然事件流促进了系统之间更易于访问的通信,但事件溯源通过将新事件存储在仅附加日志中来提供事件历史记录。
在这里,我们将讨论这两种事件协调方法并为每种方法提供一些用例。
事件流使用 pub-sub 方法来实现系统之间更易于访问的通信。在 pub-sub 架构模式中,消费者订阅一个主题或事件,生产者发布到这些主题以供消费者消费。 pub-sub 设计分离了发布者和订阅者系统,使得单独扩展每个系统变得更容易。
发布者和订阅者系统通过消息代理进行通信,例如
事件流涉及来自应用程序、数据库、传感器和物联网设备等来源的连续数据流。事件流采用流处理,其中数据在生成期间进行处理和分析。这种快速处理转化为更快的结果,这对于采取行动的时间窗口有限的企业来说很有价值,就像任何实时应用程序一样。
事件流为企业提供了几个优势;这里有一些:
事件流和处理为组织提供了丰富客户体验的能力。例如,下晚餐订单的客户可以获得即时状态更新,通知他们送货车辆何时到达他们的位置,或者是否已经到达。这种增强的客户体验转化为更多的信任、更好的评论和更高的收入。
PayPal 等应用程序和其他金融技术应用程序可以使用事件流来提供在线欺诈检测,以使用实时监控来增强安全性。欺诈算法使用预测分析来检测事件(购买或交易)的情况,以检测与规范的偏差(异常值)。如果系统检测到异常值或异常事件,它会停止交易或阻止卡完成交易。
通过分析事件流,工业工具可以记录性能和健康指标以评估设备健康状况。此功能使组织能够在机器完全故障之前对机器进行预测性维护,这会增加维修成本。例如,在制造业中,组织可以使用 Pulsar 流来聚合和处理来自温度或压力等机器参数的数据。工程师可以设置机器的最高温度,并设置在超过该温度时触发的警报。机器操作员可以在代价更高的问题发生之前进行检查和维护。
事件流对于流式传输大量数据并依赖于快速、可操作的见解的企业和应用程序至关重要。这些应用程序包括电子商务、金融交易和物联网设备。
金融交易应用程序使用事件流来发布客户希望立即采取行动的时间敏感事件。例如,用户可以订阅后端服务,发送特定事件的更新,比如股票价格的变化,以便及时做出决策。
事件流在处理支付和其他交易(并阻止欺诈交易)的金融系统中也有风险和欺诈检测应用程序。定义的欺诈算法可以通过在数据生成后立即分析数据来阻止可疑交易。
事件溯源将数据作为事件存储在附加日志中。该过程捕获事件对象中应用程序状态的每个更改,并将这些事件对象按时间顺序存储为日志。通过事件溯源,事件存储将业务实体的状态编译为序列中的事件,并且状态的变化(如新订单或取消订单)将最新状态附加到事件列表中。
为了使事件溯源高效工作并消耗最少的资源,每个事件对象应仅包含必要的详细信息。这最大限度地减少了存储空间,并防止在处理数据时使用宝贵的资源,从而产生不可操作的见解。
事件存储编译业务事件和上下文;将长流附加到事件日志会快速消耗数据库存储空间。仅保留必要的事件上下文作为事件对象的一部分有助于释放存储空间以添加多个事件日志,从而推动可操作的洞察力。
在这种情况下,组织可能会选择使用“快照”来帮助优化性能。快照可以存储实体的当前状态。了解当前状态可能只涉及提取快照并重新创建时间线以了解最新状态。
让我们来说明一下。假设我们有一个数据库,用于盘点电子商务商店中最近的商品:
大多数数据库只存储当前状态。如果我们要解释我们如何达到最终股票价值 91 的过程,那么我们如何到达那里就没有确定性或清晰度。事件溯源将每个状态变化记录在日志中,从而可以跟踪事件历史以进行根本原因分析和审计。
医疗保健组织是监管最严格的行业之一,其法规不断变化以保护客户信息。他们需要一个灵活的存储解决方案,以适应不断增长的数据需求,同时保持旧系统向新技术的轻松迁移。
通过使用事件存储作为其唯一的真实来源,医疗保健系统可以依赖事件日志的不可变状态来了解其数据的实际状态,并通过使用实时流处理进行有价值的预测。零售和电子商务企业可以通过分析大型、耐用的活动商店来更好地了解他们的客户,这有助于他们创造更加个性化的客户体验。
事件流和事件溯源之间有一些相似之处。首先,每种事件协调方法都采用解耦的微服务架构,这有助于提高可扩展性和性能。
尽管事件存储和流在状态持久性方面有所不同,但它们对于提供应用程序的当前事件状态以用于分析和推动业务决策至关重要。此外,两种事件协调方法都具有持久存储能力,尽管事件存储通常提供比事件流更长的扩展存储。
在这里,让我们更深入地研究事件流和事件溯源之间的一些主要区别。
通过将发布者与订阅者分离并使以高性能发布数百万条消息变得容易,事件流是动态数据之间更易于访问的通信的最佳选择。另一方面,事件溯源通过将实体的每个新状态存储在仅附加日志中来帮助建立事件历史。
对于事件溯源,数据是静止的,因为事件是不可变的。然而,事件流涉及始终在传输中的数据,在多个存储系统(如数据库、传感器和应用程序)之间传递。
事件流和事件溯源有助于协调事件驱动架构中的事件。尽管它们的用途和价值不同,但它们可以很好地协同工作以帮助构建持久的高性能应用程序。
事件流采用解耦的发布-订阅模式来持续流式传输来自各种来源的数据,这有助于推动业务决策制定。不幸的是,尽管事件流工具可能拥有持久存储,但它们并不是为长期存储消息而设计的,因为持久存储功能只能持续足够长的时间以使其具有容错性和弹性。
人们可以将事件溯源视为事件流的一个子集或组件。事件溯源以有序方式将新事件附加到当前事件列表。它还可以作为可靠审计的真实来源,并随时获取事件的当前状态。事件溯源对于具有严格监管和审计要求的金融行业以及跟踪和构建事件当前状态的可靠存储至关重要。相比之下,事件流在金融交易应用程序中至关重要,在这些应用程序中,操作有时间限制,需要立即采取行动。
EDA 不一定是目的地。这是一条可以推动特定系统性能和特性的路径。例如,事件溯源解耦了一组微服务,因此它们之间的依赖性降低了。这带来了弹性和更容易的迭代,以及其他好处。与事件溯源相结合,微服务获得了重播事件的能力,以及对给定功能(如用户配置文件)的完整更改日志。这种架构在现有系统中开辟了新的可能性。
也发布在这里。