为什么说,MQ,是互联网架构的解耦神器?

什么是耦合?
耦合,是架构中,本来不相干的代码、模块、服务、系统因为某些原因联系在一起,各自独立性差影响则相互影响变动则相互变动的一种架构状态。
感官上,怎么发现系统中的耦合?
作为技术人,每每在心中骂上下游,骂兄弟部门,“这个东西跟我有什么关系?为什么需要我来配合做这个事情?”。明明不应该联动,却要被动配合,就可能有潜在的耦合。
 
今天一起来看一个,用错RPC的耦合场景
 
一个架构常识当调用方需要关心执行结果,通常使用RPC调用
为什么说,MQ,是互联网架构的解耦神器?

ret = PassportService::userAuth(name, pass);

switch(ret){

 case(YES) : return YesHTML();

 case(NO) : return NoHTML();

 case(JUMP) : return 304HTML():

 default : return 500HTML();

}

 
上一篇《明明服务化了,为啥耦合更加严重了?》提到,执行结果的处理和业务强相关,则switch case应该放在上游业务方,而不应该放到底层通用服务
 
登录页面调用passport服务,会根据passport服务的返回结果,区别执行登录成功,登录失败,执行错误。调用方关注执行结果时,不宜使用MQ通讯
为什么说,MQ,是互联网架构的解耦神器?
如果强行使用MQ通讯,调用方不能直接告之用户登录成功又或失败,阻塞住等待MQ通知回调不但使得编码复杂,还会引入消息丢失的风险,中间多加入一层,多此一举,基本没有人这么玩。
 
但如果调用方不关心执行结果,却仍然使用RPC调用,会引发上下游极大的耦合与瓶颈
 
场景还原
有一个通用的上游服务,例如“帖子发布”服务,负责公司通用的帖子发布业务。有一些个性化的业务关心“用户发布帖子”这个事件,例如:
(1)用户发布帖子后,大数据部门要更新用户的画像;
(2)用户发布帖子后,信息质量部门要异步检查帖子是否合规;
(3)招聘业务最近在做用户促活,如果用户发布的是招聘帖子,要增加积分;
(4)…
 
个性化下游关注这个事件,但下游对事件的执行结果,“帖子发布”服务却并不关心,如果“帖子发布”服务通过RPC的方式去通知下游,就会有很大的问题
为什么说,MQ,是互联网架构的解耦神器?
 
耦合为何存在?
帖子发布服务,这本来应该是一个非常基础的服务,上游upper通过RPC调用将事件同步给事件关注业务方biz1/biz2/biz3:
(1)一旦有新的业务需求要关注这个事件修改代码的是通用上游upper,此时通用服务的owner就在心里骂娘了“为何有需求的是你,修改代码的却是我”;
(2)一旦业务侧出问题会影响上游通用基础服务,此时通用服务的owner又在心里骂娘了“我ca,稳定性的KPI,全被兄弟部门毁了”;
(3)一旦业务侧接口升级,上游基础服务需要配合升级,此时通用服务的owner可能又会抱怨“为何被动升级的人总是我”;
 
架构不合理,简直痛不欲生。
如何解耦呢?
如果事件发出方不关心订阅方的执行结果,不能用RPC,应该用MQ
为什么说,MQ,是互联网架构的解耦神器?
MQ能够做到上下游物理上逻辑上都解耦
(1)物理上解耦,增加MQ之后,上游互不知道彼此的存在,不会建立物理连接了,大家都只与MQ建立物理连接;
(2)逻辑上解耦,事件发布方甚至不用知道哪些下游订阅了这个消息,新增消息的订阅方只需要连接MQ就行了,不需要上游关注;
 
MQ是一个非常常见的物理上解耦、逻辑上也解耦的利器。
 
关注下游行执行结果,用RPC。
不关注下游执行结果,用MQ,不用RPC。
这只是一个很小的优化点,但对于通知解耦却是非常有效。
 
希望每天收获一点点,架构就能美好一点点。
调研
你被迫实现过本不应该你来实现的需求么
 
相关文章
我C,一个库里几百个表,这谁受得了?
我去,拷贝代码,居然还有这等好处?
没钱就是没钱,那不是吃苦

发布者:糖太宗,转载请注明出处:https://www.qztxs.com/archives/science/technology/4276

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年5月7日 下午10:46
下一篇 2022年5月8日 下午6:04

相关推荐

  • java面试字节跳动——字节码

    1.前言 先来个定义:Java字节码是一组可以由Java虚拟机(JVM)执行的高度优化的指令,它被记录在Class文件中,在虚拟机加载Class文件时执行。 说大白话就是,字节码是Java虚拟机能够看明白的可执行指令。 前面的文章中已经强调了很多次了,Class文件不等于字节码,为什么我要一直强调这个事情呢? 因为在绝大部分的中文资料和博客中,这两个东西都被...

    2022年5月18日
    4700
  • 别废话,各种SQL到底加了什么锁?

    有朋友留言,问能不能花2分钟讲讲,MySQL的各类SQL语句,究竟加了什么锁?   额,MySQL加的锁,和事务隔离级别相关,又和索引相关,尝试花2分钟讲讲看。 画外音:这2分钟需要的辅助知识,都已经附带了链接,贴心吧! 第一类,普通select加什么锁? (1)在读未提交(Read Uncommitted),读提交(Read Committed, RC),...

    技术 2022年5月10日
    2400
  • 密码学之安全模型总结

    本文将系统性地总结密码学中常见的安全模型定义。在阅读本文前,可以了解如下预备知识: 现代密码学是一门怎样的学科? 数据的机密性、完整性与实体的抗否性是什么意思? 完美安全和语义安全的含义是什么? 数据的机密性、完整性和实体的抗否性是一个信息安全系统所要保障的主要目标,也是一个密码算法所应满足的基本指标。而在现代密码学与可证明安全的语义下,机密性等含义有着更加...

    2023年1月26日
    1000
  • Linux后门入侵检测工具使用

    0x00 描述 当我们的应用系统被入侵后,系统是否已被黑客上传webshell甚至植入木马后门程序。如果依靠人工排查,一是工作量大,二是需要一定程度的技术知识和业务知识才能判断什么是正常什么是异常。工作量大决定排查工作不可能由个别具有技术知识和业务知识的人来完成工作而需要其他人员参与,而如果这些没有“一定程度的技术知识和业务知识”的人员参与基本必然后导致大量...

    2022年6月2日
    9400
  • 通过宜搭完成JumpServer自动化授权

    宜搭表单构建 根据jms 资产授权规则的表单设计宜搭表单,因为是自动化,只需要资产对单个用户授权,需要字段 – 规则名称,用户,资产,系统用户,权限,失效日期,备注几个字段   规则名称 – > 单行文本,标题 用户 –> 提交人,这个自动获取就可以了 资产 –> 下拉复选,通过jms接口获取,赋值给下拉多选组件,参考宜搭文档 获...

    技术 2022年5月28日
    5600

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信