小机灵鬼|42 张图带你揭秘后端技术都要学啥?( 三 )
此时假设两个系统分别为A,B , 其中A系统依赖B系统 , 两者通信采用远程调用的方式 , 此时如果B系统出故障 , 很可能引起A系统出故障 。
从而不得不单独进行升级 , 怎么办?
使用消息队列的异步架构 , 也成为事件驱动模型 。
异步相对于同步而言 , 同步通常是当应用程序调用服务的时候 , 不得不阻塞等待服务期完成 , 此时CPU空闲比较浪费 , 直到返回服务结果后才会继续执行 。
同步
举个例子 , 小蓝今天想在系统中加一个发邮件的功能 , 通过SMTP和远程服务器通信 , 但是远程服务器有很多邮件需要等待发送呢 , 当前邮件就可能等待比较长时间才能发送成功 , 发送成功后反馈与应用程序 。
这个过程中 , 远程服务器发送邮件的时候 , 应用程序就阻塞 , 准确的说是执行应用程序的线程阻塞 。
这样阻塞带来什么问题“?
- 不能释放占用的系统资源 , 导致系统资源不足 , 影响系统性能
- 无法快速给用户响应结果
消息队列的异步模型
此时就比较清晰了 , 调用者将消息发送给消息队列直接返回 , 应用程序收到返回以后继续执行 , 快读响应用户释放资源 。
有专门的消费队列程序从中消息队列取出数据并进行消费 。 如果远程服务出现故障 , 只会传递给消费者程序而不会影响到应用程序 。
消息队列
消息队列模型中通常有三个角色 , 分别为生产者 , 消息队列和消费者 。 生产者产生数据封装为消息发送给消息队列 , 专门的消费程序从消息队列中取出数据 , 消费数据 。
在我看来 , 消息队列主要是缓冲消息 , 等待消费者消费 。 其中消费的方式分为两种:
- 点对点
多生产消费
上述的发邮件例子就是典型的点对点模式 。 互不干扰 , 其中某个服务出现问题不会印象到全局 。
- 订阅模式
订阅模式
这个比较好理解 , 比如在用户注册的时候 , 我们将注册信息放入主题用户中 , 消费者订阅了这个主题 , 可能有构造短信消息的消费者 , 也有推广产品的消费者 , 都可以根据自己业务逻辑进行数据处理 。
用户注册案例
推荐阅读
- 小机灵鬼|干货速来!透彻剖析微服务架构设计模式,深入开发Java有奇效
- 萌小糸说历史|他腹背受敌的时候,刘备为何见死不救(二),揭秘关羽死得很蹊跷
- 王者荣耀|王者重开机制揭秘:钻石段位以上必看,五战士,四辅助可重开,巅峰赛不能
- 雷军揭秘小米实验室1800台手机 2020智能手机和直播行业现状及发展前景趋势分析研究报告
- 国潮|国韵经典潮茶——韵茶获得满堂好评!揭秘TA一路高歌猛进的背后
- 时尚广州|T恤的标语你了解过吗?揭秘衣服上那些奇怪的字句
- 湖人|死守联防包夹哈登!名嘴揭秘湖人如何赢球:坚信红队三分球会力竭
- 《他其实没有那么爱你》不想给观众放大贫富差距丨揭秘
- |死守联防包夹哈登!名嘴揭秘湖人如何赢球:坚信红队三分球会力竭
- 落叶知秋|揭秘,IT培训行业营销拓客秘籍