大型網站技術架構(七)–網站的可擴充套件性架構

 

大型網站技術架構(一)–大型網站架構演化

大型網站技術架構(二)–架構模式

大型網站技術架構(三)–架構核心要素

大型網站技術架構(四)–網站的高效能架構

大型網站技術架構(五)–網站高可用架構

大型網站技術架構(六)–網站的伸縮性架構

 

 

        擴充套件性是指對現有系統影響最小的情況下,系統功能可持續擴充套件或提升的能力。

        設計網站可擴充套件架構的核心思想是模組化,並在此基礎上,降低模組間的耦合性,提供模組的複用性。模組通過分散式部署,獨立的模組部署在獨立的伺服器上(叢集)從物理上分離模組之間的耦合關係。

        模組分散式部署以後具體聚合方式主要有分散式訊息佇列和分散式服務

1、利用分散式訊息佇列降低系統耦合性

        如果模組之間不存在直接呼叫,那麼新增模組或者修改模組對其他模組影響最小,這樣系統的可擴充套件性無疑更好一些。

        事件驅動框架:通過在低耦合的模組之間傳輸事件訊息,以保持模組的鬆散耦合,並藉助事件訊息的通訊完成模組間合作,典型的架構就是生產者消費者模式。在大型網站架構中,具體實現手段很多,最常用的就是分散式訊息佇列,如下圖所示:

 

 

 

       訊息佇列利用釋出-訂閱模式工作,訊息傳送者釋出訊息,一個或者多個訊息接收者訂閱訊息。

       由於訊息傳送者不需要等待訊息接受者處理資料就可以返回,系統具有更好的響應延遲;同時,在網站訪問高峰,訊息可以暫時儲存在訊息佇列中等待處理,減輕資料庫等後端儲存的負載壓力。

       目前開源的和商業的分散式訊息佇列產品有很多,比較著名的有Apache ActiveMQ等,如下是分散式訊息佇列的架構原理:

 

 

 

 

 2、利用分散式服務打造可複用的業務平臺

        使用分散式服務是降低系統耦合性的另一個重要手段。如果說分散式訊息佇列通過訊息物件分解系統耦合性,不同子系統處理同一個訊息;那麼分散式服務則通過介面分解系統耦合性,不同子系統通過相同的介面描述進行服務呼叫。

        大型網站分散式服務的需求與特點:

  1. 負載均衡
  2. 失效轉移
  3. 高效的遠端通訊
  4. 整合異構系統
  5. 對應用最小入侵
  6. 版本管理
  7. 實時監控

 目前國內有較多成功實施案例的開源分散式服務框架是阿里巴巴的Dubbo,下圖是Dubbo的架構原理:

 

 

        服務消費程式通過服務介面使用服務,而服務介面通過代理載入具體服務,具體服務可以是本地的程式碼模組,也可以是遠端的服務,因此對應用較小入侵;應用程式需要呼叫服務介面,服務框架根據配置自動呼叫本地或遠端實現。

        服務框架客戶端模組通過服務註冊中心載入服務提供者列表(服務提供者啟動後主動向服務註冊中心註冊自己可提供的服務介面列表),查詢需要的服務介面,並根據配置的負載均衡策略將服務呼叫請求傳送到某臺服務提供者伺服器。如果服務呼叫失敗,客戶端模組會自動從服務提供者列表選擇一個可提供同樣服務的另一臺伺服器重新請求服務,實現服務的自動失效轉移,保證高可用服務。

3、利用開放平臺建設網站生態圈

        大型網站為了更好的服務自己的使用者,開放更多的增值服務,會把網站內部的服務封裝成一些呼叫介面開放出去,共外部的第三方開發者使用,這個提供開放介面的平臺被稱作開放平臺。

        開放平臺是網站內部和外部互動的介面,外部需要面對眾多的第三方開發者,內部需要面對網站內諸多的業務服務。雖然每個網站的業務場景和需求都不相同,但開發平臺的架構設計卻大同小異,如下圖所示:

API介面:是開發平臺暴露給開發者使用的一組API,其形式可以是RESTfull,WebService,RPC等各種形式。

協議轉換:將各種API輸入轉換成內部服務可以識別的形式,並將內部服務的返回封裝成API格式。

安全:除了一般應用需要的身份識別、許可權控制等安全手段,開放平臺還需要分級的訪問頻寬限制,以保證資源被公平合理的使用。

審計:記錄第三方應用的訪問情況並進行監控、計費等。

路由:將開放平臺的各種訪問路由對映到具體的內部的服務。

流程:將一組離散的服務組織成一個上下文相關的新服務,隱藏服務細節,提供統一介面供開發者呼叫。