1. 程式人生 > >分散式系統設計原則

分散式系統設計原則

      一、分散式系統基礎理論CAP為分散式應用提供了理論基礎,C:Consistency(一致性),A:Availability(可用性),P:Partition tolerance(分割槽容錯性),但C代表強一致性,注意:不要將弱一致性,最終一致性放到CAP理論裡混為一談,所以同時滿足CAP是不太可能的。現在網際網路系統強調系統的可用性,所以一致性退而求其次為最終一致,這也就是BASE理論,BASE:Basically Available(基本可用), Soft State(軟狀態), Eventual Consistency(最終一致性)。
      二、分散式系統的系統拆分原則:1)按照系統功能拆分,2)讀寫維度拆分,3)快慢分離,4)AOP維度,5)模組維度,6)按功能模組垂直拆分,7)每個模組可快速水平擴充套件,8)資料庫分庫、分表可快速水平擴充套件
      三、由於分散式系統的拆分是分層的,比如按MVC模式拆分,所以上層對下層應該做保護,保護分資料上的保護(如:做必要的資料驗證)和過載保護,如果下層模組撐不住應該快速熔斷或降級。下層模組對上層應該持不信任的態度,對上層過來的資料做必要的驗證,必要時可以對上層做限流以免造成雪崩。
      四、分散式系統介面設計原則:
            1)防重放,比如結算頁需要考慮重複提交,還有如下單扣減庫存時需要防止重複扣減庫存。解決方案可以考慮防重KEY、防重表,token,或生成簽名。而有些場景如重複支付,如有的電商網站同時支援微信支付、京東支付,渠道不一樣是無法防止重複支付的,但是系統設計時需要將支付的每筆情況記錄下。

            2)冪等性,冪等(idempotent、idempotence)是一個數學與計算機學概念,常見於抽象代數中,在程式設計中,一個冪等操作的特點是其任意多次執行所產生的影響均與一次執行的影響相同。冪等函式,或冪等方法,是指可以使用相同引數重複執行,並能獲得相同結果的函式。這些函式不會影響系統狀態,也不用擔心重複執行會對系統造成改變,所以讀操作是天生冪等的,但寫操作需要我們加強注意,如:支付系統給使用者加、減虛擬貨幣必須滿足冪等原則。那麼怎麼實現冪等性呢?可以有以下幾種做法:1)利用資料庫的唯一鍵索引、2)樂觀鎖、3)狀態機冪等、4)利用redis的setx命令

            3)安全性,如:sql注入、xss注入、csrf、請求劫持、等等

      五、可運維

      六、可監控,監控是容易被忽略的但也是最重要的,有句話叫:“沒有監控的系統都是耍流氓”,系統不可能沒有BUG,怕的是我們沒有發現問題的能力。監控也應該是分層的和系統的分層應該是一個維度,而且必要時要增加客戶端的打點監控,從客戶端的維度來看系統的可用性。