什么是事件?
事件用于记录系统硬件或软件的任何重要事件或状态变更。事件与事件通知不同,事件通知是由系统发送的消息或通知,用于通知系统的另一方发生了事件。
事件源可能来自于内部输入,也可能是外部输入。事件可以由用户生成,例如单击鼠标或按键;也可以是外部来源,例如传感器输出;或来自于系统,例如加载程序。
解耦与松散耦合
解耦与松散耦合指的是软件架构和事件驱动系统中两个相关但不同的概念。
解耦是消除或最小化系统中独立组件之间的直接依赖关系的做法,以便组件之间不存在“唇亡齿寒”的关系。在 EDA 的语境下,通过确保生成事件的组件只需发送事件数据,而不必考虑特定的使用者组件,从而实现解耦。这种“断联”使组件彼此独立,创造出总体更灵活的系统。
松散耦合是一种特定形式的解耦,旨在降低组件之间的相互依赖的程度,而不是将它们完全分离开。在松散耦合的系统中,组件可能会彼此交互,但不会导致形成任何形式的依赖关系。
这两种系统都有利于提高灵活性和独立性,进而创造出敏捷且可扩展的系统。
事件驱动架构的工作原理
事件驱动架构由事件发起者(发布者)和事件使用者(订阅者)组成。事件发起者检测或感知事件,并以消息的形式呈现事件。由于是解耦系统,它不知道事件的使用者,也不知道事件的结果。
检测到事件后,将从事件发起者通过事件通道将事件传输给事件使用者,在事件通道中,事件处理平台会异步处理事件。发生事件时,需要通知事件使用者。他们可能会处理事件,也可能只是会受到事件影响。
事件处理平台将执行正确的事件响应,并将活动发送给下游正确的使用者。该下游活动即看到事件结果的位置。
Apache Kafka 是一个分布式数据流平台,是备受欢迎的事件处理解决方案。它能够实时处理事件流的发布、订阅、存储和处理。Apache Kafka 支持各种重视高吞吐量和可扩展性的用例,通过最大程度减少某些应用中对数据共享的点对点集成需求,因而可以将延迟降至毫秒级。
除此之外,还有其他一些中间件事件管理器也可用作事件处理平台。
事件驱动架构模型
事件驱动架构可以基于发布/订阅模型或事件流模型。
发布/订阅模型
这是基于事件流订阅的消息传递基础架构。借助该模型,在事件发生或发布后,事件将发送给需要通知的订阅者。
事件流模型
借助事件流模型,事件会被写入日志。事件使用者无需订阅事件流。相反,他们可以读取事件流的任何部分,并可以随时加入事件流。
事件流有几种不同的类型:
- 事件流处理会使用数据流平台(如 Apache Kafka)获取事件,并处理或转换事件流。
- 简单事件处理是指事件会立即触发事件使用者行动的情形。
复杂事件处理需要事件使用者处理一系列事件才能检测到模式。事件流处理可用于检测事件流中有意义的模式。
事件驱动架构的优势
EDA 可以帮助企业实现灵活的系统,能够通过适应变化并实时做出决策来改进工作流。实时情境感知意味着企业决策(无论是手动还是自动化)都可以使用能够反映系统当前状态的所有可用数据来做出决定。
当物联网(IoT)设备、应用和网络等事件源发生事件时,事件便会被捕获,使事件发起者和事件使用者能够实时共享状态和响应信息。
企业可以向其系统和应用添加事件驱动架构,提高应用的可扩展性和响应速度,改善对数据和背景信息的访问以做出更明智的业务决策。
事件驱动架构提供解耦优势,数据或服务的发起者和使用者不需要直接沟通,因此有利于打造更灵活且扩展性高的系统。进而进一步简化新组件的集成,提高容错性和系统的整体效率。
为什么选择红帽打造事件驱动架构?
红帽提供集成的工具和管理软件,可以帮助您快速地跨混合云环境连接传统技术和微服务,利用敏捷集成支持您的事件驱动架构。
红帽 OpenShift 与红帽应用基础的工具集可以帮助企业提高开发人员生产力,自动执行 CI/CD 管道,提前实施安全防护,并将安全防护贯彻落实到整个开发周期。这样一来,通过自动化 DevSecOps 实践,并在运行时提供应用安全防护,助力打造更安全的软件供应链。
OpenShift Dev Spaces 功能可为开发人员提供更快、一致且更可靠的开发环境,同时帮助 IT 运维实现集中管控。无服务器和服务网格等 OpenShift 功能,以及红帽应用服务功能(如应用运行时和框架、API 管理、数据流、事件驱动服务等)使开发人员能够自助访问语言和工具,提高他们的工作效率。如果开发人员要选择特定的工具,那么红帽还可以提供广泛的合作伙伴解决方案生态系统,确保兼容 OpenShift。