作者|肯梦
当下比较成功的企业已然认识到,要想最大极限提升运营效率和客户体会,务必将事务和技能两方面的举措紧密结合起来。运营事情或事务形势的改变是时下很多企业重视的焦点,这些改变能够为企业领导者带来实在有用的信息,而架构规划的宗旨恰恰是从客户联系人、买卖、运营等方面的信息中获取洞见,两者相得益彰。传统技能向来对企业从事情中获取洞见的速度有着许多约束,比方用于记载、搜集和处理此类事情的批处理 ETL(提取、转化、加载)。
事情驱动型架构 (EDA) 方兴未艾,作为一种 Serverless 化的运用概念对云原生架构具有着深远影响。当咱们讨论到一个具体架构时,首当其冲的是它的发展是否具有技能先进性。这儿从咱们了解的 MVC 架构,SOA 架构谈起,聊一聊关于音讯事情范畴的前史与发展趋势。
音讯事情范畴的发展趋势
早在 2018 年,Gartner 评价报告将 Event-Driven Model 列为 10 大战略技能趋势之一,事情驱动架构(EDA)将成为未来微服务的干流,并做出以下断语:
- 到 2022 年,事情告诉的软件模型将成为超越 60% 的新式数字化商业的处理方案;
- 到 2022 年,超越 50% 的商业安排将参与到事情驱动的数字化商业服务的生态体系傍边;
George Santayana 在《 The Life of Reason》曾说到, Those who fail to learn History are doomed to repeat it.(不懂前史的人注定会重蹈覆辙)。咱们以史为鉴,来看看为什么会架构会演进到事情驱动。
架构本身没有好坏之分,它本身便是一组技能决策,决定后续项目的一切功用开发(结构,编码标准,文档,流程….),这儿聊聊为什么会引进某些结构,这个结构处理了软件开发中的什么问题。
- 单体架构:在单节点服务中,单体运用的一切模块都封装在单个进程运转,通信经过相同仓库调用完结。这种形式下十分容易导致结构和联系不清晰,难以对体系进行更改和重构。就像一个不透明的,粘稠的,脆弱的,僵硬的 Big Ball of Mud!
- 分层架构:在经典的分层架构中,层以相当谨慎的方式运用。即一个层只能知道它下方层的数据。在随后的实践运用中,更多的方式是一个层能够拜访它下面的任何层。分层架构处理了单体架构的的逻辑别离问题,每一层都能够被等效替换,层差异也更加标准化,一起一个层能够被几个不同/更高等级的层运用。当然,层也有比较明显的缺陷,层不能封装掉一切,比方添加到UI的某个字段,或许也需求添加到DB,并且额外剩余的层会严峻危害体系功用。
- MVC 架构:MVC 架构产生的原因其实很简略,随着事务体系的杂乱性增加,之前所谓“全栈工程师”现已不适用大部分场景。为了下降前端和后台的集成杂乱性,故而开端推行 MVC 架构。其中,Model 代表事务逻辑,View 代表视图层比方前端UI的某个小组件,Controller 供给 View 和 Model 的协调比方将用户某项操作转为事务逻辑等。这儿还有很多扩展架构,譬如 Model-View-Presenter ,Model-View-Presenter-ViewModel,Resource-Method-Representation,Action-Domain-Responder 。
- EBI 架构:即 Entity,Boundary(接口),Interactor(控制)。EBI架构将体系边界视为完好衔接,而不仅仅是视图,控制器或接口。EBI 的实体代表持有数据并完毕相关行为的实践实体,很类似阿里云的 POP API。EBI 首要还是后端概念,他是与 MVC 相得益彰的。
- 洋葱架构:洋葱架构是一种低耦合,高内聚的架构模型。一切的运用程序环绕独立的对象模型构建,内层界说接口外层完成接口,耦合方向向中心内聚,一切代码都能够独立与根底设施进行编译和运转。
- SOA 架构:SOA 是 Service Orientated Architure 的缩写,即面向服务架构。表示每一个功用都是经过一个独立的服务来供给,服务界说了清晰的可调用接口,服务之间的编排调用完结一个完好的事务。其实这个架构也是目前架构中最老练的,日常运用最多的架构形式。
什么是 EDA 架构
咱们聊完之前全部的架构趋势后,再回过头看看什么是 EDA 架构。
EDA 事情驱动架构( Event-Driven Architecture ) 是一种体系架构模型,它的中心才能在于能够发现体系“事情”或重要的事务时间(例如买卖节点、站点拜访等)并实时或接近实时地对相应的事情采纳必要举动。这种形式替代了传统的“ request/response ”模型,在这种传统架构中,服务必须等待回复才干进入下一个任务。事情驱动架构的流程是由事情供给运转的。
上图其实很好的解释了 EDA 架构的模型,可是其实还不够清晰。所以,这儿咱们和单体架构一同比照看看他们之间差异。
在如上比照图中,咱们其实能够较为清楚看到它与传统架构的差异。在一般传统架构中,创建订单操作产生后,一系列的操作其实都是经过一个体系完结的。而事情驱动的概念则是将全部操作都转化为 “事情” 概念,下流经过捕获某个 “事情” 来决定调用什么体系完结什么样的操作。
总结来看,事情驱动其实是将比较重要的事务时间封装成“事情”,并经过某个 EventBus 将事情路由给下流体系。
咱们了解了 EDA 架构的整个处理过程,可是还没处理这个所谓的“EventBUS”到底是啥样。
上图便是事情驱动的中心逻辑架构。是不是十分像某个传统 MQ?别着急,下面我会讲到这个架构的杂乱部分。讲完 EventBus,咱们回过头来看“事情”,刚刚介绍中比较重要部分其实是将操作转化为某类事情进行分发。那这的事情咱们怎样界说呢?
简略来看,其实事情便是状况的明显改变,当用户采纳特定举动时触发。以 4S 店售卖轿车为例:
- 当客户购买轿车并且其状况从 For Sale 变为 Sold 是一个事情。
- 成功买卖后,从帐户中扣除金额是一个事情。
- 单击预定试驾后,从将预约信息添加到指定用户便是一个事情。
每个事情都或许触发一个或多个选项作为呼应。
关于事情其实云原生 CNCF 基金会在 2018 年托管了开源 CloudEvents 项目,该项目旨在用一致和标准的格局来描绘事情,来加强不同的服务、渠道以及体系之间的互操作性。在该项目界说下,通用的事情标准是这样的:
事情首要由 Json 体构成,经过不同字段描绘产生的事情。
EDA 架构的落地实践思考
在开端介绍落地实践时,咱们先来看一个经典的 EDA 架构模型:
这是一个十分经典 EDA 订单架构,该架构首要运用了 EventBridge 和 FC 函数核算(如果不太了解 FaaS 的同学能够把 FC 节点当作 ECS 或 K8s 的某个 POD 节点),经过事情驱动各个事务进行协作。
所以这块的中心节点(EventBridge)其实有三个比较重要的才能:
- For Event Capturing(事情搜集):具有收集事情的才能
- For Routing(事情路由):经过事情内容将事情路由分发至于下流的才能的
- For Event Processing(事情过滤/替换):对事情进行脱敏或开始过滤&筛选的才能
通常情况下,要完成这三个才能是比较困难的,比方:Event Capturing 或许需求了解 Dell Boomi, Snaplogic, MuleSoft, Dataflow, Apache Apex 等,Routing 部分或许经过 RocketMQ,RabbitMQ, ActiveMQ, Apache Kafka ,Event Processing 需求了解 Apache Storm, Apache Flink 。所以之前讲的逻辑架构其实十分抱负,要想完成完结的 EDA 事情驱动还需求包括这些中心才能。
其实,从刚刚的架构中咱们也能窥视到一些信息,EDA 架构其实看起来没有那么简略,那它有何好坏呢?下面我就简略罗列下 EDA 架构在实践中的优势:
- 松耦合:事情驱动架构是高度松耦合且高度分布式的架构模型,事情的创建者(来源)只知道产生的事情,并不知道事情的处理方式,也关怀有多少相关方订阅该事情。
- 异步履行:EDA 架构是异步场景下最适合的履行工具,咱们能够将需求事情保留在队列中,直到状况正常后履行。
- 可扩展性:事情驱动架构能够经过路由&过滤才能快速区分服务,供给更快捷的扩展与路由分发。
- 敏捷性:事情驱动架构能够经过将事情分发至任何地方,供给更敏捷高效的布置方案。
当然,下风也很明显:
- 架构杂乱:事情驱动架构杂乱,路由节点多,体系结成杂乱,功用要求多。
- 路由分发问:事情路由及分发问,灵活的事情路由需求依赖强大的实时核算才能,对全体分发体系要求较高。
- 无法追寻:事情追寻是整个 EDA 架构确保,EDA 架构中往往很难追寻到事情处理状况,需求大量的定制化开发。
- 可靠性差:事情驱动因为需求多体系集成,可靠性通常较差,且交付无法确保。
阿里云 EventBridge 如何处理 EDA 场景下的困境
针对 EDA 场景下面对的这些问题,阿里云推出了 EventBridge,一款无服务器事情总线服务,其任务是作为云事情的枢纽,以标准化的 CloudEvents 1.0 协议衔接云产品和运用,运用和运用,供给中心化的事情治理和驱动才能,协助用户轻松构建松耦合、分布式的事情驱动架构;别的,在阿里云之外的云市场上有海量垂直范畴的 SaaS 服务,EventBridge 将以超卓的跨产品、跨安排以及跨云的集成与被集成才能,助力客户打造一个完好的、事情驱动的、高效可控的上云体会。并针对 EDA 困境供给了针对性的处理方案。
架构杂乱:供给业内通用的 Source ,Buses,Rules,Targets 模块管理才能,一起支撑 EventBus 和 EventStream 两种形式。大幅度下降事情驱动架构难度。
路由分发:EventBridge 经过事情规则驱动,支撑 8 大事情形式,4 重转化器,满足路由分发的全部诉求。
无法追寻:独家供给事情追寻才能,事情分析/查询才能。为用户完善全体事情链路。
可靠性差:支撑 DLQ/ 重试机制,大幅度确保因为用户下流体系导致的事情毛病与延迟。
一起,在此根底上 EventBridge 支撑 82 种阿里云产品,847 种事情类型。
阿里云 EventBridge 更多场景介绍
- 经典 EDA 事情驱动:事情总线(EventBridge)最重要的才能是经过衔接运用程序,云服务和 Serverless 服务构建 EDA(Event-driven Architectures) 事情驱动架构,驱动运用与运用,运用与云的衔接。
- 流式 ETL 场景:EventBridge 另一个中心才能是为流式的数据管道的责任,供给根底的过滤和转化的才能,在不同的数据仓库之间、数据处理程序之间、数据分析和处理体系之间进行数据同步/跨地域备份等场景,衔接不同的体系与不同服务。
- 一致事情告诉服务:EventBridge 供给丰富的云产品事情源与事情的全生命周期管理工具,您能够经过总线直接监听云产品产生的数据,并上报至监控,告诉等下流服务。
目前事情总线免费公测,点击下方链接,当即体会!
www.aliyun.com/product/ali…
参加钉群(群号:31481771),及时了解产品最新动态!