講到異步通信泽腮,不得不先提同步通信衣赶,如果把打電話比做同步诊赊,那短信就是異步。同步操作有個(gè)優(yōu)點(diǎn)府瞄,實(shí)時(shí)性好碧磅,但存在以下問題。
1 影響吞吐量遵馆,系統(tǒng)間同步通信鲸郊,吞吐量由最慢的那個(gè)系統(tǒng)決定。
2 浪費(fèi)系統(tǒng)資源货邓,同步通信是阻塞的秆撮,導(dǎo)致調(diào)用方一直占用著系統(tǒng)資源。
3 只能一對(duì)一
4 系統(tǒng)之間強(qiáng)依賴换况,容易出現(xiàn)連鎖反應(yīng)
異步通信可以很好的解決以上問題职辨。常見的異步通信模型有三種,請(qǐng)求響應(yīng)戈二,發(fā)布訂閱觉吭,通過消息隊(duì)列
1 請(qǐng)求響應(yīng),這個(gè)模型常見的有兩種方式,前面的處理一樣,接受方接到數(shù)據(jù)后立即回復(fù)已收到脐往,正在處理梅尤,區(qū)別在于赡盘,一種是調(diào)用方輪詢結(jié)果,另一種接收方回調(diào)。很多支付頁面就是通過回調(diào)的方式,支付成功后回調(diào)接口喷斋,通知調(diào)用方顽腾。請(qǐng)求響應(yīng)模型實(shí)際上兩者還是耦合在一起窖杀。調(diào)用方依賴于接收方管毙。
2 發(fā)布訂閱模型铆隘,訂閱者將自己注冊(cè)到裹虫,發(fā)布者的訂閱列表中砚嘴,當(dāng)發(fā)布者有消息發(fā)布是,向列表中的所有成員發(fā)送消息虾宇。因?yàn)橛嗛喺咝枰虬l(fā)布者注冊(cè)搪泳,所以他們之間還是有耦合關(guān)系艰赞,訂閱者依賴于發(fā)布者罚攀。
3 通過消息隊(duì)列是己,生產(chǎn)者發(fā)送消息到隊(duì)列上,消費(fèi)者監(jiān)聽隊(duì)列,獲取數(shù)據(jù)抹蚀。這個(gè)模型雙方是完全解耦晒来。生產(chǎn)者只管生產(chǎn)數(shù)據(jù)攒读,不用關(guān)心誰處理。而消費(fèi)者也不關(guān)心誰生產(chǎn)的數(shù)據(jù),只管消費(fèi)數(shù)據(jù)墨礁。
以上是異步通信常見的三個(gè)模型。其中二三兩用稱之為事件驅(qū)動(dòng)模型风科。他又以下好處
1 服務(wù)之間完全解耦,使得服務(wù)之間平等豫领,無狀態(tài),容易橫向擴(kuò)展實(shí)現(xiàn)高可用战惊。
2 服務(wù)的開發(fā),測(cè)試烤黍,運(yùn)維都是高度隔離的蚊荣,可以對(duì)某個(gè)服務(wù)進(jìn)行升級(jí)而不影響到其他服務(wù)。
3 不會(huì)出現(xiàn)連鎖反應(yīng)
4 容易增加一些適配器关顷,如日志平痰,限流,熔斷等
5 使得每個(gè)服務(wù)可以按照自己的處理速度進(jìn)行處理砾嫉。
事件驅(qū)動(dòng)模型也有缺點(diǎn)
1 業(yè)務(wù)流程變復(fù)雜
2 事件事件順序無法保證
3 分布式事務(wù)問題溉旋,要引入兩段式事務(wù)畸冲,或者最終一致性。
異步設(shè)計(jì)的要點(diǎn)
為什么要使用異步通信
1 服務(wù)間解耦,做到更好的隔離性邑闲,以便故障出現(xiàn)時(shí)算行,不會(huì)干擾到其他服務(wù)。
2 增加吞吐量
3 服務(wù)之間可以按照自己的處理速度工作苫耸,通過消息隊(duì)列州邢,可以做到所謂的削峰的目的,保護(hù)系統(tǒng)褪子。
4 獨(dú)立部署量淌,不影響其他服務(wù),提高開發(fā)和運(yùn)維的效率嫌褪。
設(shè)計(jì)要點(diǎn)
1 消息隊(duì)列的高可用
2 業(yè)務(wù)流程的可追蹤
3 業(yè)務(wù)狀態(tài)由總控方控制呀枢。
4 發(fā)送確認(rèn)機(jī)制,失敗重試機(jī)制笼痛,注意消息處理的冪等性裙秋。