分布式的幾件小事(八)分布式服務接口請求的順序性如何保證


1.調用順序

其實分布式系統接口的調用順序,也是個問題,一般來說是不用保證順序的。但是有的時候可能確實是需要嚴格的順序保證。給大家舉個例子,你服務A調用服務B,先插入再刪除。好,結果倆請求過去了,落在不同機器上,可能插入請求因為某些原因執行慢了一些,導致刪除請求先執行了,此時因為沒數據所以啥效果也沒有;結果這個時候插入請求過來了,好,數據插入進去了,那就尷尬了。

本來應該是先插入 -> 再刪除,這條數據應該沒了,結果現在先刪除 -> 再插入,數據還存在,最后你死都想不明白是怎么回事。

2.怎么保證

①首先,一般來說,從業務邏輯上最好設計系統不需要這種順序的保證,因為一旦引入順序性保障,會導致系統復雜度的上升,效率會降低,對於熱點數據會壓力過大等問題。

②操作串行化。
首先使用一致性hash負載均衡策略,將同一個id的請求都分發到同一個機器上面去處理,比如訂單可以根據訂單id。如果處理的機器上面是多線程處理的,可以引入內存隊列去處理,將相同id的請求通過hash到同一個隊列當中,一個隊列只對應一個處理線程。

③最好能將多個操作合並成一個操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM