分布式使用場景及方案


(一)談談業務中使用分布式的場景

首先,需要了解系統為什么使用分布式。

隨着互聯網的發展,傳統單工程項目的很多性能瓶頸越發凸顯,性能瓶頸可以有幾個方面:

  1. 應用服務層:隨着用戶量的增加,並發量增加,單項目難以承受如此大的並發請求導致的性能瓶頸。
  2. 底層數據庫層:隨着業務的發展,數據庫壓力越來越大,導致的性能瓶頸。

場景1:應用系統集群的 Session 共享

應用系統集群最簡單的就是服務器集群,比如:Tomcat 集群。應用系統集群的時候,比較凸顯的問題是 Session 共享,Session 共享我們一是可以通過服務器插件來解決。另外一種也可以通過 Redis 等中間件實現。

場景2:應用系統的服務化拆分

服務化拆分,是目前非常火熱的一種方式。現在都在提微服務。通過對傳統項目進行服務化拆分,達到服務獨立解耦,單服務又可以橫向擴容。服務化拆分遇到的經典問題就是分布式事務問題。目前,比較常用的分布式事務解決方案有幾種:消息最終一致性、TCC 補償型事務等。

場景3:底層數據庫的壓力分攤

如果系統的性能壓力出現在數據庫,那我們就可以讀寫分離、分庫分表等方案進行解決。

(二)Session 分布式方案

基於 nfs(net filesystem) 的 Session 共享

將共享服務器目錄 mount 各服務器的本地 session 目錄,session 讀寫受共享服務器 io 限制,不能滿足高並發。

基於關系數據庫的 Session 共享

這種方案普遍使用。使用關系數據庫存儲 session 數據,對於 mysql 數據庫,建議使用 heap 引擎。這種方案性能取決於數據庫的性能,在高並發下容易造成表鎖(雖然可以采用行鎖的存儲引擎,性能會下降),並且需要自己實現 session 過期淘汰機制。

基於 Cookie 的 Session 共享

這種方案也在大型互聯網中普遍使用,將用戶的 session 加密序列化后以 cookie 的方式保存在網站根域名下(比如 taobao.com),當用戶訪問所有二級域名站點式,瀏覽器會傳遞所有匹配的根域名的 cookie 信息,這樣實現了用戶 cookie 化 session 的多服務共享。此方案能夠節省大量服務器資源,缺點是存儲的信息長度受到 http 協議限制;cookie 的信息還需要做加密解密;請求任何資源時都會將 cookie 附加到 http 頭上傳到服務器,占用了一定帶寬。

基於 Web 容器的 Session 機制

利用容器機制,通過配置即可實現。

基於 Zookeeper 的分布式 Session 存儲

基於 Redis/Memcached 的 Session 共享存儲

這些 key/value 非關系存儲有較高的性能,輕松達到 2000 左右的 qps,內置的過期機制正好滿足 session 的自動實效特性。

轉自:有夢想的咸魚

 


免責聲明!

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



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