注冊用戶即可下載全站資源 關注Java幫幫微信公眾號
 

柔性事務:最大努力通知

2
發表時間:2018-12-11 15:22

   最大努力通知型( Best-effort delivery)是最簡單的一種柔性事務,適用于一些最終一致性時間敏感度低的業務,且被動方處理結果 不影響主動方的處理結果。典型的使用場景:如銀行通知、商戶通知等。最大努力通知型的實現方案,一般符合以下特點:

日本韩国三级aⅴ在线观看    1、不可靠消息:業務活動主動方,在完成業務處理之后,向業務活動的被動方發送消息,直到通知N次后不再通知,允許消息丟失(不可靠消息)。

   2、定期校對:業務活動的被動方,根據定時策略,向業務活動主動方查詢(主動方提供查詢接口),恢復丟失的業務消息。


   舉例來說:筆者曾經做過一個短信發送平臺,背景是公司內部有多個業務都有發送短信的需求,如果每個業務獨立實現短信發送功能,存在功能實現上的重復。因此專門做了一個短信平臺項目,所有的業務方都接入這個短信平臺,來實現發送短信的功能。簡化后的架構如下所示:

E14FE394-01AF-45BE-A371-8B46611884BD.png

短信發送流程如下:

日本韩国三级aⅴ在线观看1、業務方將短信發送請求提交給短信平臺

日本韩国三级aⅴ在线观看2、短信平臺接收到要發送的短信,記錄到數據庫中,并標記其狀態為”已接收"

日本韩国三级aⅴ在线观看3、短信平臺調用外部短信發送供應商的接口,發送短信。外部供應商的接口也是異步將短信發送到用戶手機上,因此這個接口調用后,立即返回,進入第4步。

4、更新短信發送狀態為"已發送"

5、短信發送供應商異步通知短信平臺短信發送結果。而通知可能失敗,因此最多只會通知N次。

6、短信平臺接收到短信發送結果后,更新短信發送狀態,可能是成功,也可能失敗(如手機欠費)。到底是成功還是失敗并不重要,重要的是我們知道了這調短信發送的最終結果

7、如果最多只通知N次,如果都失敗了的話,那么短信平臺將不知道短信到底有沒有成功發送。因此短信發送供應商需要提供一個查詢接口,以方便短信平臺驅動的去查詢,進行定期校對。


日本韩国三级aⅴ在线观看    在這個案例中,短信發送供應商通知短信平臺短信發送結果的過程中,就是最典型的最大努力通知型方案,通知了N次就不再通知。通過提供一個短信結果查詢接口,讓短信平臺可以進行定期的校對。而由于短信發送業務的時間敏感度并不高,比較適合采用這個方案。


日本韩国三级aⅴ在线观看    需要注意的是,短信結果查詢接口很重要,必須要進行定期校對。因為后期要進行對賬,筆者在做這個項目的時候,一個月的短信發送總量在高峰期可以達到1億條左右,即使一條短信只要5分錢,一個月就有500W。

   (這個5分錢是筆者估計的,在這么大的量的情況,一條短信到底需要多少錢我也不知道。因為商務對接過程,是沒有我靚麗的身影的。總之短信發送要花很多錢,如果短信發送供應商說短信都發送成功了,而短信平臺卻一條成功的記錄都沒有,出現這種扯皮的情況就不好了)


   最后提一點:當當網開源數據庫中間件sharding-jdbc使用了最大努力通知型來實現分庫分表情況下數據的一致性,說實話,個人覺得最大努力通知型不太適合于這種場景。


支付寶贊助-Java幫幫社區
微信贊助-Java幫幫社區
Java幫幫公眾號生態

Java幫幫公眾號生態

總有一款適合你

Java幫幫-微信公眾號

Java幫幫-微信公眾號

將分享做到極致

Python幫幫-公眾號

Python幫幫-公眾號

人工智能,爬蟲,學習教程

大數據驛站-微信公眾號

大數據驛站-微信公眾號

一起在數據中成長

九點編程-公眾號

九點編程-公眾號

深夜九點學編程

程序員生活志-公眾號

程序員生活志-公眾號

互聯網,職場,程序員那些事兒

Java幫幫學習群生態

Java幫幫學習群生態

總有一款能幫到你

Java學習群

Java學習群

與大牛一起交流

大數據學習群

大數據學習群

在數據中成長

九點編程學習群

九點編程學習群

深夜九點學編程

python學習群

python學習群

人工智能,爬蟲

測試學習群

測試學習群

感受測試的魅力

Java幫幫生態承諾

Java幫幫生態承諾

一直堅守,不負重望

初心
勤儉
誠信
正義
分享
合作品牌 非盈利生態-優質內容分享傳播者
關于我們
友鏈申請
友鏈交換:加幫主QQ2524138991 留言即可 24小時內答復  
全站內容非商業用途,內容來源于網友,并遵循 許可,如有異議請聯系客服。
會員登錄
獲取驗證碼
登錄
登錄
我的資料
留言
回到頂部