分散式开发给我们带来了诸多好处,但同时也给我们带来了很多问题,诸如session共享问题,事务问题等,今天就说一下分散式事务解决方案。
学习之前,我们需要介绍一下前提知识:
丛集:所有的服务器做同一件事【可能是专案的一个功能】。
分散式:多个服务,做不同的事,完成同一专案。
事务:ACID-原子性、一致性、隔离性、永续性。
一、 分散式的业务场景
1 、如何高效完成各个分散式系统的协作
通过讯息伫列来达到异步解耦的效果,减少了程式之间的阻塞等待时间,资源浪费。
2、讯息的弊端?如何解决?
讯息伫列的问题在于不确定性,不能绝对保证讯息的准确到达,所以要引入延迟、周期性的主动轮询,来发现未到达的讯息,从而进行补偿。
二 讯息伫列简介
讯息伫列,也叫讯息中介软件。讯息的传输过程中,讯息储存在讯息容器中。 讯息伫列都解决了什么问题?
1、 异步
如图,以支付功能为例,我们写入资料,传送简讯通知,更新快取,需要600ms,再加上网络等原因,使用者在页面停留时间过长,体验很差,讯息伫列是异步的,大大省去了同步的时间。
2、并行
讯息伫列是并行工作的,可以同时传送通知,和更新快取,大大提高了效率
3、解耦
如图上如果程式都耦合在一起,一个步骤卡住,其后所有步骤都无法进行,而讯息伫列可以解耦,让模组与模组分割,从而带来最少的损失,如图,即使传送通知卡住了,也不会影响前端页面的显示。有朋友可能会问,那更新快取都坏了,前端显示还正常,不会影响程式正常执行吗 ,答案是不会,不知道大家注没注意过生活中的一个场景,在抢火车票的时候,明明还显示有2张票,购买的时候却被告知,以无票,这就是典型的更新快取与写入数据库断链,不过这个影响不太。
4、排队
伫列是前进先出的模式,解决了并发带来的相应问题
5 弊端:不确定性和延迟
解决方案:最终一致性,换会时间,提高效率!
讯息伫列的讯息模式(两种)
点对点
连线两端,点对点,一端叫生产者,一段叫消费者,生产者只管产出讯息,消费者只管接受讯息,中间交给伫列处理
订阅
即一生产者对应多消费者,可以理解为群发。
今天的讯息伫列就先聊到这,希望对正在学习的你有些帮助