伴随企业数字化进程进入“深水区”,企业面临着日益复杂的 IT 系统和业务流程,不同系统间的壁垒导致企业运转效率下降以及协同摩擦增加。而事件驱动架构(Event-Driven Architecture,EDA)已成为解决这些问题的关键技术。
事件驱动是指在分布式系统中,各个组件之间的交互基于事件通信,而非直接的请求-响应模式,具有异步、松散耦合等特征。在 EDA 中,组件之间通过发布(Publish)和订阅(Subscribe)事件来实现协作,事件可以是用户操作、系统状态变化、传感器数据等。
Gartner 将事件驱动架构(EDA)列为十大战略技术趋势之一,并强调事件驱动架构 (EDA) 是技术和软件领域发展的主要驱动力。EDA 是实时敏捷数字业务的核心,通过“监听”物联网 (IoT) 设备、移动应用程序、生态系统以及社交和业务网络等事件源,以数字形式实时捕获真实世界的业务事件。
过去,以 API 为中心的应用程序设计架构显著提升了业务的敏捷性,但随着数字化业务场景越来越复杂,企业对于实时智能、敏捷响应、上下文自适应等需求增加。仅依靠 API 为中心的请求驱动模型就显得力不从心。随着越来越多数字化系统的接入,应用程序变得更难拓展,连接的 API 网络更难管理,不同系统间的数据壁垒越筑越高,系统的耦合度越来越高。而依托事件驱动架构异步、松耦合的特性,将各个业务系统解耦,降低系统间的依赖程度,最大程度提升企业数字敏捷性。
本文将主要探讨什么是事件驱动?事件驱动对业务的帮助和价值是什么?
01 什么是事件驱动?
想象一个常见的场景。
当你的公司需要招聘一名新员工,基础流程包括:发布职位广告-面试-录用-人事准备-入职程序-工作安排。这是一个基础的招聘流程,在这个流程中,每一个步骤都是基于一个特定的事件来进行的。例如,招聘过程是基于公司需要新员工这个事件的触发来进行的;面试是基于收到应聘者申请这个事件的触发来进行的;录用是基于面试考核通过这个事件的触发来进行的。
以上是一个常见的事件驱动用例。该用例是企业标准的招聘流程或系统,企业管理者只需要搭建好整套招聘流程和拟定标准,以及每个节点所需要的人员。在管理者需要招聘新员工时,只需要发布指令,该招聘系统则会自动依照流程运作,直至返回招聘结果。以上述场景为例,事件驱动架构主要包括四个关键组件:
- 事件:在系统中发生的任何事情都可以看作是一个事件。在员工入职流程中,例如发布招聘广告、收到应聘者申请、发出录用通知、完成培训等都可以看作是事件。
- 事件源:事件源是触发事件的对象。在员工入职流程中,例如发布招聘广告的人员、收到应聘者申请的招聘专员、发出录用通知的人事专员等都可以看作是事件源。
- 事件处理程序:事件处理程序是针对特定事件的处理逻辑。在员工入职流程中,例如招聘专员负责面试和录用流程,人事专员负责人事准备和入职程序,部门经理负责为新员工安排工作等都可以看作是事件处理程序。
- 事件队列:事件队列是用于存储事件的数据结构。在员工入职流程中,事件队列可以是公司的招聘管理系统或人事管理系统。
在事件驱动架构中,事件源触发一个事件,该事件被放入事件队列中等待被处理。事件处理程序从事件队列中获取事件并执行相应的逻辑,最终完成事件的处理。在上述员工入职流程中,当公司需要新员工时,招聘专员发布招聘广告并收到应聘者申请,这些事件会被放入事件队列中,招聘专员则会从事件队列中获取这些事件并执行面试和录用流程。
在实际业务场景中,虽然有很多数字化工具帮助处理相关信息,但依旧有很多程序需要手动执行,不仅效率低,还存在很多因人为操作失误带来的风险隐患。
例如在上述场景中,员工各类应用系统账号创建、各系统员工身份数据的同步(包含权限等)、员工入转调离身份信息管理、员工离职后的权限及信息删除等员工全生命周期管理均需要手动操作。这无疑是一项重复机械的劳动,对于体量较大的或人事变动较多的组织来说更是如此。并且还存在因为漏关权限等人为误操作带来的企业信息安全隐患。而基于事件驱动架构设计的身份自动化编排系统,则可以通过无代码的形式将员工全生命周期编排成一个事件流,以实现员工全生命周期自动化管理,同样的场景也可以复用在用户、合作伙伴管理中。
当然,以上仅仅是一个基础用例。基于事件驱动的身份自动化管理系统还拥有无穷的想象和创新空间。
02 事件驱动对企业的价值
Gartner 报告指出,掌握“事件驱动的 IT”和以事件为中心的数字业务战略将成为大多数全球企业 CIO 的首要任务。企业严重依赖技术来构建可扩展、敏捷和高度可用的业务。事件驱动架构正在成为支持现代企业实时运营、快速适应变化并做出明智业务决策的关键基石。
- 降低系统之间的依赖性
在传统的系统中,不同的组件需要在代码层面进行耦合,例如通过函数调用或共享变量等方式。这种紧密的耦合会导致组件之间高度依赖,当一个组件需要修改时,往往需要同时修改其它组件的代码,这样会导致系统的不稳定性和难以维护。
相比之下,事件驱动架构中,组件之间通过事件进行通信,而不是直接调用代码或共享变量。当一个组件完成某个任务时,它将触发一个事件,然后将这个事件发送给系统中的其他组件。其他组件可以根据自己的需要选择是否要监听这个事件,如果监听则可以响应事件并执行相应的操作。这种机制使得系统中的组件可以相对独立地进行开发和维护,减少了代码之间的耦合度。
这种松耦合方式使得系统具有更高的可维护性和可扩展性。当需要修改某个组件时,仅需要对该组件进行修改,而不需要同时修改其他组件的代码。这不仅简化了开发过程,同时也使得系统更加健壮和灵活,因为不同的组件可以独立地进行部署和升级。同时,这种事件驱动架构的松耦合特性也使得系统更加容易进行扩展和集成,因为新的组件可以很容易地添加到系统中而不会影响到其他组件的运行。
- 提高可用性和可靠性
传统的系统通常采用紧耦合的方式,即各个组件之间紧密依赖,一个组件的故障很容易影响到其他组件的正常运行,从而导致系统的故障和不可用。在事件驱动架构中,当某个组件出现故障时,其他组件可以选择是否监听该事件,不受影响的组件可以继续执行自己的任务而不受影响。因此,这种松散的耦合方式可以提高系统的可用性和可靠性。
此外,事件驱动架构还可以通过异步事件处理的方式来提高系统的可用性和可靠性。异步事件处理的特点是事件的处理是非阻塞的,即组件不需要等待事件的处理结果就可以继续执行自己的任务。这种处理方式可以降低系统的延迟,并且能够处理大量的并发请求,从而提高系统的性能和可靠性。
事件驱动架构还可以通过实现事件溯源机制来提高系统的可靠性和容错性。事件溯源机制是指将事件的历史状态记录下来,并且可以回溯到任何一个事件的状态。这种机制可以帮助企业快速恢复系统,以及减少因故障而导致的数据丢失。通过记录和回放事件,企业可以更加容易地发现和解决系统的问题,从而提高系统的可靠性和容错性。
- 敏捷开发
事件驱动架构可以帮助开发人员更快地开发和部署应用程序。由于每个组件都是独立的,因此可以并行地开发和测试每个组件,从而缩短应用程序的开发时间。在部署方面,企业可以选择只部署需要的组件,而不是整个应用程序,这将进一步加快部署速度。
- 支持灵活的架构演进
企业可以通过向系统中添加新的事件、更改现有事件的结构或添加新的组件来扩展其功能。通过这种方式,企业可以实现较小的增量更改,同时仍保持整个系统的稳定性和可靠性。
另外,事件驱动架构还可以通过使用适当的事件类型来促进组件之间的松散耦合。例如,企业可以定义通用事件类型来处理跨多个组件的通信和协作。这种松散耦合使得企业可以更容易地更改系统的某些部分而不影响整个系统。
在灵活的架构演进方面,事件驱动架构还支持多种部署选项。企业可以选择在本地、云端或混合部署中使用事件驱动架构,以适应其业务需求和可用资源。
- 实时的数据处理与分析
在事件驱动架构中,事件是系统的核心,组件通过触发和处理事件来进行通信与协作。因此,事件驱动架构非常适合处理实时数据,并且可以轻松地将数据从一个组件传输到另一个组件。企业可以构建实时数据处理系统,从而更快地对业务数据做出决策和反应。例如,企业可以使用事件驱动架构来监控网站流量、分析用户行为、检测异常等。在这种情况下,组件可以通过触发和处理事件来快速响应这些实时数据,并执行必要的操作。
此外,事件驱动架构也可以用于构建复杂的数据流处理系统,例如处理大数据、实现实时分析等。这些系统需要处理大量的数据,并且需要快速而准确地处理数据。事件驱动架构可以通过使用分布式事件处理系统来实现这些目标,同时保持系统的可扩展性和可靠性。这些优势可以帮助企业更好地了解自己的业务,优化业务流程,并提高企业的竞争力。
推荐阅读: