作家
登录

在微服务中使用领域事件

作者: 来源: 2017-07-10 14:01:56 阅读 我要评论

熟悉范畴事宜 

范畴事宜(Domain Events)是范畴驱动设计(Domain Driven Design,DDD)中的一个概念,用于捕获我们所建模的范畴中所产生过的工作。范畴事宜本身也作为通用说话(Ubiquitous Language)的一部分成为包含范畴专家在内的所有项目成员的交换用语。比如,在用户注册过程中,我们可能会说“当用户注册成功之后,发送一封迎接邮件给客户。”,此时的“用户已经注册”就是一个范畴事宜。 当然,并不是所有产生过的工作都可以成为范畴事宜。一个范畴事宜必须对营业有价值,有助于形成完全的营业闭环,也即一个范畴事宜将导致进一步的营业操作。举个咖啡厅建模的例子,当客户来到前台时将产生“客户已达到”的事宜,如不雅你存眷的是客户接待,比如须要为客户预留地位等,那么此时的“客户已达到”就是一个典范的范畴事宜,因为它将用于触发下一步——“预留地位”操作;然则如不雅你建模的是咖啡结账体系,那么此时的“客户已达到”便没有多大年夜存在的须要——你弗成能在用户达到时就急速向客户要钱对吧,而”客户已下单“才是对结账体系有效的事宜。 在微办事(Microservices)架构实践中,人们大年夜量地借用了DDD中的概念和技巧,比如一个微办事应当对应DDD中的一个限界高低文(Bounded Context);在微办事设计中应当起首辨认出DDD中的聚合根(Aggregate Root);还有在微办事之间集成时采取DDD中的防腐层(Anti-Corruption Layer, ACL);我们甚至可以说DDD和微办事有着生成的默契。更多有关DDD的内容,请参考笔者的另一篇文┞仿或参考《范畴驱动设计》及《实现范畴驱动设计》。 在DDD中有一条原则:一个营业用例对应一个事务,一个事务对应一个聚合根,也即在一次事务中,只能对一个聚合根进行操作。然则在实际应用中,我们经常发明一个用例须要修改多个聚合根的情况,并且不合的聚合根还处于不合的限界高低文中。比如,当你在电商网站上买了器械之后,你的积分会响应增长。这里的购买行动可能被建模为一个订单(Order)对象,而积分可以建模成账户(Account)对象的某个属性,订单和账户均为聚合根,并且分别属于订单体系和账户体系。显然,我们须要在订单和积分之间保护数据一致性,然而在同一个事务中同时更新两者又违背了DDD设计原则,并且此时须要在两个不合的体系之间采取重量级的分布式事务(Distributed Transactioin,也叫XA事务或者全局事务)。别的,这种方法还在订单体系和账户体系之间产生了强耦合。经由过程惹人范畴事宜,我们可以很好地解决上述问题。 总的来说,范畴事宜给我们带来以下好处: 
  1. 解耦微办事(限界高低文)
  1. 赞助我们深刻懂得范畴模型
  1. 供给审计和申报的数据来源
  1. 迈向事宜(Event Sourcing)和CQRS等
照样以膳绫擎的电商网站为例,当用户下单之后,订单体系将发出一个“用户已下单”的范畴事宜,并宣布到消息体系中,此时下单便完成了。账户体系订阅了消息体系中的“用户已下单”事宜,当事宜达到时进行处理,提取事宜中的订单信息,再调用自身的积导引擎(也有可能是另一个微办事)计算积分,最后更新用户积分。可以看到,此时的订单体系在发送了事宜之后,全部用例操作便停止了,根本不消关怀是谁收到了事宜或者对事宜做了什么处理。事宜的花费方可所以账户体系,也可所以任何一个对事宜感兴趣的第三方,比如物流体系。由此,各个微办事之间的耦合关系便解开了。值得留意的一点是,此时各个微办事之间不再是强一致性,而是基于事宜的最终一致性。 

订单体系

事宜风暴(Event Storming) 事宜风暴是一项团队晃荡,旨在经由过程范畴事宜辨认出聚合根,进而划分微办事的限界高低文。在晃荡中,团队先经由过程火脑风暴的情势列举出范畴中所有的范畴事宜,整合之后形成最终的范畴事宜集合,然后对于每一个事宜,标注出导致该事宜的敕令(Command),再然后为每个事宜标注出敕令提议方的角色,敕令可所以用户提议,也可所以第三方体系调用或者是准时器触发等。最后对事宜进行分类整顿出聚合根以及限界高低文。事宜风暴还有一个额外的好处是可以加深介入人员对范畴的熟悉。须要留意的是,在事宜风暴晃荡中,范畴专家是必须在场的。

稍微回想一下计算机硬件的工作道理我们便不难发明,全部计算机的工作过程其实就是一个对事宜的处理过程。当你点击鼠标、敲击键盘或者插上U盘时,计算机便以中断的情势处理各类外部事宜。在软件开辟范畴,事宜驱动架构(Event Driven Architecture,EDA)早已被开辟者用于各类实践,典范的应用处景比如浏览器对用户输入的处理、消息机制以及SOA。比来几年从新进入开辟者视野的响应式编程(Reactive Programming)更是将事宜作为该编程模型中的一等公平易近。可见,“事宜”这个概念一向在计算机科学范畴中扮演侧重要的角色。events

图1

 1/4    1 2 3 4 下一页 尾页

  推荐阅读

  Mysql群集架构mmm高可用群集及服务器上线

【引自攀岩人生的博客】MMM即Multi-Master Replication Manager for MySQL:mysql多主复制治理器,基于perl实现,关于mysql主主复制设备的监控、故障转移和治理的一套可伸缩的脚本套件(在任>>>详细阅读


本文标题:在微服务中使用领域事件

地址:http://www.17bianji.com/lsqh/36107.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)