范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

事件驱动架构需要避开的5大陷阱

  作者 / 以码为梯
  排版 / 以码为梯
  文章字数 / 2972
  本文是一篇个人觉得比较好的英文博客的译文,希望大家有所收获
  事件驱动架构 通过引入消息中间件,使其具备了低耦合 (decouple),易扩展 (scalability)、高弹性 (resiliency)的架构特性,这些特性非常适合分布式微服务。
  request reply (client-server) vs. event streaming (pub-sub)
  但是在实际情况中,相对于请求-响应这种客户端-服务端架构,想将事件驱动架构用好还是有一定难度的。
  在过去的几年里,我们(Wix)已经渐渐地把我们的微服务从请求-响应模式迁移到事件驱动模式。
  在迁移的过程中我们遇到了各种各样的问题,其中包括生产事故,代码重写、陡峭的学习曲线等等。针对这些种种问题,我们总结出事件架构中的五大陷阱,本文以一个简单的场景(电商中付款和扣库存流程)为例,介绍这五个陷阱以及每种陷阱的应对方案。陷阱一、数据库写入和事件发送非原子性
  在电商业务中,一旦消费者完成了付款,那么商品库存就需要进行更新,以表示商品已经被某个消费者购买。
  Write to DB and produce event is a non atomic action
  但在实际情况中,将支付完成的状态写入数据库和向kafka(其他消息队列)发出"支付完成"事件这两个操作不是原子的,可能出现只有一个操作完成的场景。数据库的不可用或者kafka的不可用可能会导致分布式系统中的不一致,在此例子中,可能造成库存和实际订单的不一致。针对原子性的问题有如下两种解决方案:
  弹性生产者(resilient producer)
  利用弹性生产者,确保消息最终会被写入kafka。这种方案的缺点是不能保证消息的顺序性,也就是说下游应用接收到的消息不是有序的,中间会有重试的消息。作者采用的是自研的弹性生产者平台(Greyhound )。
  Greyhound producer fallbacks to S3. A dedicated service recovers the messages to Kafka
  Kafka连接器Debezium
  采用Debezium 连接器确保数据库更新和kafka的生产操作都发生并且保证两者数据一致。Debezium 可以捕获到数据库的所有变化(比如通过mysql的binlog)并发出事件消息。
  kafka连接器和Debezium 数据库连接器保证事件最终被发送到kafka,并保证了消息的顺序性。
  Debezium connector makes sure change events are eventually consistent with DB陷阱二、到处使用事件溯源(event sourcing)
  事件溯源(Event sourcing) 模式在业务操作时将业务操作当成一个事件进行存储,之后通过回放事件可以重构实体的当前状态,事件也可以通过消息队列发送给其他业务系统,生成物化视图用来获取比事件回放更高的查询效率。
  Event Sourcing — persist change events to Event Store. Play events to reach current state
  事件溯源模式有它本身的好处,包括可靠的审计日志,在任何时间点获取实体状态的能力,一份数据可以构造出多种视图、它的缺点就是相对于更新数据库中一个实体的状态来说事件溯源更为复杂。
  事件溯源的缺点复杂性。为了确保读取性能不被不断增长的回放的事件所影响,需要创建实时的快照以减少性能损失。这增加了系统的复杂性,这个创建快照的后台进程也可能会出问题,导致数据陈旧。而且系统中一旦出现两份数据,也就不可避免地需要考虑数据不一致的情况。雪花性质(Snowflake nature)。跟CURD不同的是很难创建公共的包和框架来简化开发。仅支持最终一致性。
  事件溯源的替代方案-CURD+CDC(Change data capture)
  将CURD和发送数据变化事件相结合可以降低复杂度,提升灵活性并且在特定场景下依然可以使用CQRS(Command-Query Responsibility Segregation)。
  对于大多数场景,服务可以暴露一个简单的接口用于从数据库中获取实体当前的状态。随着规模的增加,并且需要更复杂的查询时,额外发布的数据变更事件可用于创建专门为复杂查询量身定制的自定义物化视图。
  CRUD — simple read from DB + CDC for external materialized views
  为了避免将数据库变化暴露给其他服务,需要在他们之间创建一个耦合层服务,该服务消费CDC(Change data capture ) 事件消息并暴露一个变化事件的API。陷阱三、没有上下文传递
  切换到事件驱动架构后,定位线上问题和跟踪最终用户的请求会变得困难。跟请求-响应模型不一样的是,事件驱动模式没有类似于HTTP和RPC这样特定的链去遵循。另外,调试代码也变得更加困难,因为事件处理代码分布在服务代码中,而不是通过在同一对象/模块中找到的函数定义来顺序跟踪。
  在上面的例子中,Orders 服务必须使用来自 3 个不同主题的多个事件,所有这些事件都与同一用户操作相关。
  Fully event driven micro-services with hard to follow request flow
  其他的服务也需要从一个或多个主题中消费多个事件。假设我们发现库存不正确,能够调查所有相关的订单处理事件至关重要。否则,将花费很长时间去查看各个服务日志并尝试手动将不同的服务日志拼凑成一个连贯的业务流程。
  自动的上下文传递
  如果自动为所有的事件加上请求上下文标识,这样就会让过滤出所有用户相关的事件变得容易。在我们的例子中,可以添加requestId和userId两个事件头,这两个属性对调查很有帮助。
  Automatically attach user request context for each event for easier tracing & debugging陷阱四、发布大负载的事件
  当尝试向kafka发送大负载的数据(图片识别场景或者视频分析场景)时,会带来高延时、降低吞吐量和提升内存压力的风险。针对这种场景可以通过压缩(compression)、将负载拆分为块以及将负载存储在对象存储中并只发送引用这三种方案来解决。
  压缩(Compression)
  Kafka和Pulsar都支持压缩,你可以根据你的消息类型来选择最适合你的压缩类型。在负载比较大的情况(大于5M),压缩50%对保证集群的性能会有帮助。
  在kafka层级压缩会比在应用层级压缩更好,因为在kafka层级,消息可以被批量压缩以提升压缩率。
  分块(Chunking)
  另一个减低节点的压力并应对消息大小限制的方法是将消息拆分为块。Pulsar已经内嵌了分块的功能,kafka只能在应用层进行分块。
  在使用分块时,为了让消息消费者可以还原消息,消息发送者需要给消息添加额外的元数据。
  producer splits to chunks, consumer figures out how to assemble
  对象存储的引用
  这种方法将消息村存储到对象存储中(比如S3)并将一个对象引用(通常是一个URL)发给kafka。
  在使用对象存储时,需要确保在链接生成之前消息已经完全上传到对象存储中,否则消费者就需要不停地尝试下载。陷阱五、重复事件的处理
  大多数消息中间件保证了至少发送一次,这就意味着一些消息可能会被发送多次或者被处理多次,这种情况下只有幂等性解决方案才能应对这样的问题。
  在上面的例子中,假设因为处理流程错误出现了库存减少的重复消息,那么库存的下降速度就要比真实情况的快。
  double consumer processing causes inventory level to become incorrect
  重复消息的另一个副作用就是可能会造成对第三方系统的重复调用。
  幂等性 补救策略-修订号(版本)
  在对消息进行幂等性处理时可以借用乐观锁的思想。借用乐观锁思想,在做更新之前都要先获取实体的当前修订号(版本号),如果多方试图同时更新实体,那么只有第一个更改的可以成功并且更新修订号,后续的更新操作会因为修订号不匹配导致更新失败。
  以上面的这种方式实现幂等性,修订号必须唯一并且跟事件本身有关系,这样才能保证两个不同事件的修订号不会相同,并且保证即使不是并发的情况对同一个修订号的第二次更新也会失败。
  Attaching transactionId for each event to avoid duplicate processing
  虽然kafka提供了仅仅一次(exactly once)消息 的配置,但是数据库操作却可能因为某些原因变成重复更新,所以采用幂等性相关解决方案还是必须的。总结
  为了降低风险,迁移到事件驱动架构需要循序渐进地进行。微服务架构支持灵活的选择不同的模式,针对不同的服务,可以采用不同的处理方式,在事件处理流程中也可以包含HTTP/RPC的交互方式,反之亦然。
  对于循序渐进的迁移,我强烈推荐CDC模式(Database changes streamed as events),因为这种方式既保证了数据的一致性(陷阱一)也避免了完全切换到事件溯源模式(陷阱二)后带来的复杂性和风险性。CDC 模式仍然允许将请求-回复模式与事件处理模式一起使用。
  对于陷阱三的处理(通过事件传递上下文)大大提升了快速寻找问题根本原因的能力。
  陷阱四和五的补救措施是针对非常大的有效负载和非幂等这样的更具体的用例,如果不需要,则无需执行建议的更改。
  大家有什么看法欢迎评论留言一起探讨[666]

立德树人参观社区新时代文明实践站,这些硚口少年收获满满来源武汉文明网为扣好人生第一粒扣子,让广大未成年人能度过一个温馨快乐幸福的节日。6月1日上午,园博北社区邀请辖区未成年人到园博北社区新时代文明实践站参观烟标展遨游书海挥洒书法,开展最温柔的牵挂守护未来!法官阿姨喊你爸妈来学法编者按今年是新修订中华人民共和国未成年人保护法实施一周年,新修订法单设政府保护网络保护两大专章,进一步织密保护未成年人健康成长的法网。今年5月30日,最高人民法院最高人民检察院公安贵州首富垮台如今负债高达上千亿,营收连续四年下跌大家都知道中国人是非常踏实肯干的,所以我国所产生的著名人物也是非常多的,以至于很多著名人物在国际上,都有非常高的地位。除了我国的富豪,在国际上的地位非常高而外,在我国的各个省份,也医护医疗军事备战常态化鉴于美国为首的西方组织,发动的生物战争,我觉得我们应该在生化医疗方面加大人才和资金的投入,特别是重点突破,防感染,防重症死亡,疫苗研发,提高核酸异常检查效率和发现异常的灵敏性,成立俄乌大战乌东,乌军损失惨重,呼吁美国提供更多更猛的武器近日俄乌军队正在北顿涅茨克市激战。乌军伤亡比较惨重,而且正面临着在北顿涅茨克被包围的危险。乌军现在最需要的东西就是枪支,更多的枪支。有一位名叫博赫丹的乌克兰军人戏谑地说,如果他能够小人书情缘上世纪五六十年代,正是我国连环画的鼎盛时期,连环画的内容古今中外历史的战争的现实题材的以电影画面改编的连环画应有尽有,真可谓包罗万象。我能回忆起来的六十本一套的三国演义(上美版),六一特刊来源景德镇民盟在六一儿童节来临之际,民盟景德镇市直属珠山支部赴市第十九小学开展关爱困难儿童六一慰问活动。民盟珠山支部盟员代表第十九小学师生代表参加活动。活动中,盟员代表们为困难儿童吉尔吉斯斯坦总统俄方不再反对,商讨20多年的中吉乌铁路计划明年开工文观察者网齐倩作为中欧班列南部通道的重要组成部分,已规划至少25年的中吉乌铁路终于要开建了。吉尔吉斯斯坦总统扎帕罗夫5月30日接受采访时称,在他向俄罗斯普京解释吉尔吉斯斯坦需要中吉今日欢呼孙大圣,只缘妖雾又重来大朋友小朋友儿童节快乐六一就是要快乐呀这个儿童节,在节日氛围里,感到更多的是期待,期盼雷霆出击毕竟那些东西存在十年了问题插画2019年一曲少年,以豁达通透的文字和强有力的曲奏,极具画面感的呈现了面对人生小红书百万爆文教你如何在游戏圈捞男人,玩农药的都是穷鬼?捞女真是个让人羡慕的职业,她们既不用辛辛苦苦上班加班加到头秃整天为了KPI欲生欲死也不用在家灰头土脸带孩子做家务,说几句甜言蜜语就可以坐拥奢侈品出入豪宅豪车候鸟一样全世界飞,看起来直击四川雅安地震现场救援正在进行直击四川雅安地震现场救援正在进行中国青年报客户端6月2日上午,四川雅安,四川省森林消防总队特勤大队的消防员正在实施救援。6月1日至6月2日,四川雅安芦山县宝兴县接连发生6。1级4。
中央单位事业编制,正在招人!江西一单位发布公告一招聘需求国家计算机网络应急技术处理协调中心江西分中心(以下简称江西分中心)是国家计算机网络应急技术处理协调中心下属事业单位,承担国家网络信息安全管理技术支撑保障职能。根据工作需要带着感动沐浴在春光里写在观看感动中国人物颁奖典礼之后在全国两会召开之际,一年一度的中国人精神史诗感动中国人物颁奖盛典昨天落下帷幕。与前20届颁奖盛典相比,今年的比以往要迟到了很多。对于这份迟到的精神大餐,经历过三年疫情煎熬的国人对其25岁男演员去世,与杨紫合拍的新剧尚未杀青3月3日,演员刘峰的亲友发布讣告称刘峰于2月27日去世,年轻的生命永远停留在了25岁。刘峰与关晓彤是北京电影学院的同学,他曾参与覆流年二十不惑2等多部影视作品的拍摄,目前正在拍摄由金星,号称娱乐圈最敢说的人,她的走红意味着什么?抛开一些无谓的传统观念后,相信很多人都喜欢金星,其中的绝大多数喜欢金星的原因不是因为她从他变成了她的勇气,而是她的毒舌。其实金星并不是什么毒舌,她从没有故意用恶毒的语言去伤害过任何冰岛脱了!蔡依林的完美身材与壮观景色让你心驰神往!最近,著名歌手蔡依林前往欧洲参加米兰时装周,同时还顺便游览了当地的古典展览和品尝美食。在结束了时装周的行程后,她前往冰岛旅行,在Instagram上分享了一系列美照,包括在冰岛的著迪丽热巴穿水晶缀饰礼服优雅高贵身材曲线曼妙玲珑性感迷人迪丽热巴最新活动生图缀明珠耀星群,点亮熠熠光芒。迪丽热巴穿一袭金色水晶缀饰礼服出席某直播活动现场,盘发温婉尽显优雅气质,淡然垂眸,凝驻璀璨时。好优越的侧颜,眼角下的一颗痣也是非常独畸形崇拜畸形认知畸形审美,这三颗毒瘤正在娱乐圈野蛮生长文胡叁叔编辑胡叁叔前言不知从什么时候起,娱乐圈似乎有些变味儿。畸形审美畸形崇拜畸形观念,正在娱乐圈中疯狂蔓延,已然成为了荼毒青少年思想的毒瘤。这三颗毒瘤正在娱乐圈野蛮生长,01畸形别再穿你的紧身裙了,挑人挑身材!今年流行大裙摆,遮肉显瘦早春搭配除了离不开风衣,也离不开裙子,裙子的类型非常多,但是好穿又遮肉的还是需要好好甄别一下,紧身裙就特别挑人,不适合普通人,尤其胯宽臀大的女生就不适合。如果你的身材不是特别完美,13代酷睿,全金属机身,轻至1。3kg,华硕灵耀14寸新款本值得入手华硕灵耀系列是华硕定位是中高端超轻薄商务办公笔记本,近日开启了灵耀142023酷睿版的预售。具体配置如下i51340P16GB512GB14英寸2。8KOLED屏冰川银夜空蓝i71一个简易的四层板设计案例这是一个简易的四层板设计案例,通过这个案例,你可以掌握阻抗匹配的计算练习高速信号走线。案例介绍自制电脑HUB扩展器,基于CS5268设计,支持HDMI,PD2。0,USB3。0。本iPhone又出BUG小组件数据不更新了稿源中关村在线在iPhone14以及iOS新版本中,苹果为iPhone带来了Widgets小组件功能,用户不用打开App也能一眼看到最核心的信息,比如天气待办备忘录日历等等。但目前