標籤:

互聯網架構的變遷

互聯網的架構是不斷變化的,大致可分為三個時代:單機時代,集群時代,分散式時代。

一、單機時代

單機架構

  • 優點:簡單快速,易於開發,易於測試,易於部署
  • 缺點:只適合早期項目,變大後不易維護,且存在單點,升級需要停服

單機架構的分層(MVC)

  • 優點:結構簡單,分工明確,分層測試、
  • 缺點:擴展性差,迭代開發效率低,有時候層次過多導致流程複雜。

  • 優點:資源分散,提高不同服務對硬體的利用率,方便維護
  • 缺點:增加了資源消耗和網路開銷,同時還存在單點

服務端緩存又可以分為本地緩存遠程緩存,各有優劣,本地緩存訪問速度快,但數據量有限,而且後續集群化不方便共享;遠程緩存可以共享可以集群,容量不受限制,但要注意緩存更新的問題

  • 優點:簡單有效,減少對 DB 的查詢
  • 缺點:增加邏輯判斷,不適合存儲大對象,此架構同樣有單點、、

  • 優點:降低資料庫單台壓力,從機的數量可以靈活變更
  • 缺點:架構開始變得複雜,維護難度加大

二、集群時代

單機時代最大的問題,就是整個架構都存在單點。解決單點問題

  • 優點:去除應用層單點,可用性得到保證,性能有所提高
  • 缺點:這時要注意應用之間的一致性問題,比如對緩存的訪問,對Session的存儲

動靜分離是讓動態網站里的動態網頁,根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以後,我們還可以根據靜態資源的特點將其做緩存操作,以加快響應速度。

  • 優點:減輕應用伺服器壓力,緩存靜態文件,加快響應速度,前後端分離,開發可以並行。
  • 缺點:靜態文件緩存更新失效問題,前後端溝通成本提高

內容分發網路(Content Delivery Network,簡稱 CDN),可以進一步加快網站響應,其原理是將源內容同步到全國各邊緣節點,配合精準的調度系統,將用戶的請求分配至最適合他的節點,使用戶可以以最快的速度取得他所需的內容

  • 優點:解決網路帶寬小、用戶訪問量大、網點分布不均等問題,提高用戶訪問的響應速度,減輕應用負載壓力。
  • 缺點:顯然成本上去了,CDN服務一般是按流量計費,同時也存在靜態文件緩存更新失效問題。

當中型網站繼續向大型網站演進,最終的目標是要保證「三高」:高並發、高性能、高可用。以上架構基本可以滿足性能需求,接下來更多的是關注高可用,確保無單點。此時,就要對關鍵的服務,做冗餘集群負載。理想情況下,我們將以下服務/應用都集群化:資料庫服務集群,文件服務集群,緩存服務集群,應用服務集群,負載均衡調度器集群,靜態內容服務集群,CDN伺服器集群。

  • 優點:去單點,高可用
  • 缺點:數據有狀態問題、數據一致性問題,資源成本、人力維護成本都上去了。

三、分散式時代

集群只是堆機器,但隨著大數據時代的來臨,人們對架構做出了更高的要求。

1)應用拆分

集群的架構雖有分層,但還是集中式的。但隨著業務越來越負載,拆分勢在必行。

  • 優點:應用解耦,分拆團隊負責,分而治之
  • 缺點:架構變複雜

應用拆分之後,還伴隨著一個相互依賴、公共模塊的問題,特別是依賴於相同的邏輯或功能代碼。這時就可以考慮將這些共用的服務提取出來,獨立部署,統一治理,提高重用度,這就是面向服務的架構(service-oriented architecture,縮寫 SOA)了。

2)消息隊列

應用拆分、服務獨立部署之後,還是會出現一些通信或依賴問題,這時就可以引入消息隊列,提高吞吐量。

  • 優點:非同步、解耦,提高吞吐量
  • 缺點:消息消費延遲等問題

3)數據分庫

應用拆分之後,DB分庫理所當然,否則多個應用連接在單個資料庫上,連接數、QPS、TPS、I/O處理能力都非常有限。

  • 優點:DB分壓,降低耦合
  • 缺點:數據訪問模塊冗餘、複雜

4)微服務架構

微服務架構由多個微小服務構成,每個服務就是一個獨立的可部署單元或組件,它們是分散式的,相互解耦的,通過輕量級遠程通信協議(比如REST)來交互,每個服務可以使用不同的資料庫,而且是語言無關性的。它的特徵是彼此獨立、微小、輕量、松耦合,又能方便的組合和重構。

  • 優點:擴展性好,服務之間耦合性低,服務間相互獨立,容易部署,易於開發,方便測試每一個服務
  • 缺點:容易過度關注服務的大小,可能拆分的很細,導致系統依賴於大量的微服務,而服務之間的相互通信也會變得複雜,系統集成複雜度增加,很難實現原子性操作。

微服務之所以這麼火,另一個原因是因為 Docker 的出現,它讓微服務有一個非常完美的運行環境,Docker 的獨立性和細粒度非常匹配微服務的理念,Docker的優秀性能和豐富的管理工具,讓大家對微服務有了一定的信息,概括來說 Docker 有如下四點適合微服務:

  • 獨立性:一個容器就是一個完整的執行環境,不依賴外部任何的東西。
  • 細粒度:一台物理機器可以同時運行成百上千個容器。其計算粒度足夠的小。
  • 快速創建和銷毀:容器可以在秒級進行創建和銷毀,非常適合服務的快速構建和重組。
  • 完善的管理工具:數量眾多的容器編排管理工具,能夠快速的實現服務的組合和調度

最後要說的是,好的架構不是設計出來的,而是在實踐中探索出來的。

參考資料:

ks.netease.com/blog?

《架構漫談》(王概凱著)

OReilly 免費出版的小冊子《Software Architecture Patterns》


推薦閱讀:

秒殺系統優化思路
Windows Server 2008 智能 DNS Server 部署指南
自助結帳,揭開新零售市場的龐大商機
高可用架構
推薦一篇技術乾貨,關於數據分析平台的架構與設計

TAG:系統架構 |