分布式系統介面的呼叫順序一般無需保證的,但有時候確實需要嚴格的順序保證。
服務 a 呼叫服務 b,先插入再刪除。
倆請求過去了,落在不同機器,可能插入請求因某些原因執行慢了一些,導致刪除請求先執行了,此時因為沒資料所以啥效果也沒。
結果這時候插入請求過來了,資料插進去了!
本該 「先插入 => 再刪除」,這條資料應該不存在,但現在 「先刪除 => 再插入」,資料還存在!
所以這都是分布式系統一些很常見的問題。
推薦從業務邏輯上設計的系統最好是不需要這種順序性保證,因為一旦引入順序性保障,那就要使用分布式鎖,導致系統複雜度上公升,效率低下,熱點資料壓力過大。
簡單來說,首先你得用 dubbo 的一致性 hash 負載均衡策略,將比如某乙個訂單 id 對應的請求都給分發到某機器,接著就是在那個機器上因為可能還是多執行緒併發執行,你可能得立即將某個訂單 id 對應的請求扔乙個佇列,強制排隊確保他們的順序性。
但這樣引發的後續問題就很多!
比如說要是某個訂單對應的請求特別多,造成某台機器成熱點怎麼辦?解決這些問題又要開啟後續一連串的複雜技術方案…曾經這類問題弄的我們頭疼不已,所以,還是建議什麼呢?
最好是比如說剛才那種,乙個訂單的插入和刪除操作,是否能合併成乙個操作,比如就是乙個刪除,避免這種問題產生。
分布式服務介面請求的順序性如何保證?
分布式服務介面請求的順序性如何保證?其實分布式系統介面的呼叫順序,也是個問題,一般來說是不用保證順序的。但是有時候 可能確實是需要嚴格的順序 保證。給大家舉個例子,你服務 a 呼叫服務 b,先插入再刪除。好,結果倆請求過去了,落在不同機器上,可能插入請求因為某些原因執行慢了一些,導致刪除請求先執行了...
如何保證分布式系統介面冪等?
這是實戰經常遇到的乙個問題,舉個例子 我們系統的開票介面受理對方系統的報文 結算單號settleno 開票單號ticketno 由於網路抖動或者前端提交多次導致同一筆重複請求,如果不設定冪等,我們系統就會受理多筆相同的請求,最終可能導致多次重複開票的問題。所以我們要保證介面冪等,使得重複請求只會成功...
如何保證分布式系統中介面呼叫的順序性?
如何保證分布式系統中介面呼叫的順序性?分布式是當下比較流行的乙個話題,很多大型的網際網路公司都是分布式系統,將乙個大而全的系統拆分成多個小而精的乙個個的功能單 一 職責集中的子系統,系統之間通過約定好的協議 規則進行呼叫,降低系統之間的耦合度,避免牽一髮而動全身。雖然分布式系統的架構有很多的好處,但...