分布式系統背景
說分布式系統必須要說集中式系統,集中式系統中整個項目就是一個獨立的應用,整個應用也就是整個項目,所有的東西都在一個應用裡面。
如下圖所示
如一個網站就是一個應用,最後是多個增加多台伺服器或者多個容器來達到負載均衡的避免單點故障的目的,當然,資料庫是可以分開部署的。
集中式很明顯的優點就是開發測試運維會比較友善,不用為考慮複雜的分布式環境。
集中式很明顯的弊端就是不易擴充,每次更新都必須更新所有的應用。而且,一個有問題意味着所有的應用都有問題。當系統越來越大,集中式将是系統最大的瓶頸。
什麼是分布式系統?
分布式系統是若幹獨立計算機的集合,這計算機對使用者來說就像單個相關系統。
以上定義摘自<<分布式系統原理與範型>>一書。
也就是說分布式系統背後是由一系列的計算機組成的,但使用者感覺不到背後的邏輯,就像通路單個計算機一樣。
說的有點繞,我們可以來簡單看下分布式系統圖。
分布式系統利弊
在分布式系統中:
1、應用可以按業務類型拆分成多個應用,再按結構分成接口層、服務層;我們也可以按通路入口分,如移動端、PC端等定義不同的接口應用;
2、資料庫可以按業務類型拆分成多個執行個體,還可以對單表進行分庫分表;
3、增加分布式緩存、搜尋、檔案、消息隊列、非關系型資料庫等中間件;
很明顯,分布式系統可以解決集中式不便擴充的弊端,我們可以很友善的在任何一個環節擴充應用,就算一個應用出現問題也不會影響到别的應用。
随着微服務Spring Cloud & Docker的大熱,及國内開源分布式Dubbo架構的重生,分布式技術發展非常迅速。
分布式系統雖好,也帶來了系統的複雜性,如分布式事務、分布式鎖、分布式session、資料一緻性等都是現在分布式系統中需要解決的難題,雖然已經有很多成熟的方案,但都不完美。分布式系統也增加了開發測試運維成本,工作量增加,分布式系統管理不好反而會變成一種負擔。
如果你對分布式技術有更好的見解,或者對本文有異議,歡迎在下方留言。