1. 程式人生 > >分散式架構研究

分散式架構研究

分散式架構

對於一個大型的網際網路系統,一般會包含多個應用,而且應用之間往往還存在共同的業務,並且應用之間還存在呼叫關係。除此之外 ,對於大型的網際網路系統還有一些其它的挑戰,比如如何應對急劇增長的使用者,如何管理好研發團隊快速迭代產品研發,如何保持產品升級更加穩定等等 。因此,為了使業務得到很好的複用,模組更加容易拓展和維護,我們希望業務與應用分離,某個業務不再屬於一個應用,而是作為一個獨立的服務單獨進行維護。應用本身不再是一個臃腫的模組堆積,而是由一個個模組化的服務元件組合而成。

服務化

服務化的特點

上面介紹的分散式架構即服務化。我們再總結一下,服務化主要有如下特點:

  1. 應用按業務拆分成服務
  2. 各個服務均可獨立部署
  3. 服務可被多個應用共享
  4. 服務之間可以通訊

服務化的好處

那麼企業採用服務化有哪些好處呢?

  1. 架構上系統更加清晰
  2. 核心模組穩定,以服務元件為單位進行升級,避免了頻繁釋出帶來的風險
  3. 開發管理方便
  4. 單獨團隊維護、工作分明,職責清晰
  5. 業務複用、程式碼複用
  6. 非常容易拓展
  7. 服務化實現方式

如果要實現服務化的話,最常用的方式就是利用RPC框架。因為服務元件一般分佈在不同的伺服器上,所以要實現服務化需要解決的第一個問題就是RPC**遠端服務呼叫**。類似於RPC方案有很多,比如:

  1. Java RMI
  2. WebService
  3. Hessian
  4. Http
  5. Thrift

服務化面臨的挑戰,上面提到要實現服務化首先需要解決遠端服務呼叫問題,除此之外,還有很多其他問題需要解決。

  1. 服務越來越多,配置管理複雜
  2. 服務間依賴關係複雜
  3. 服務之間的負載均衡
  4. 服務的拓展
  5. 服務監控
  6. 服務降級
  7. 服務鑑權
  8. 服務上線與下線
  9. 服務文件
  10. … …
  11. 服務治理

上面提到了服務化,其實要想服務化,服務治理是關鍵。那麼有沒有好的服務治理方案呢?答案是有的,而且很多人都在用這個框架,他就是-dubbo。dubbo就是一個帶有服務治理功能的RPC框架。

dubbo提供了一套較為完整的服務治理方案,所以企業如果要實現服務化的話,dubbo 是很好的一個選擇。這裡簡單介紹一下dubbo服務治理相關方案。

服務發現註冊

服務治理領域最重要的問題就是服務發現與註冊。dubbo中引入了一個註冊中心的概念,服務的註冊與發現主要就依賴這個服務中心。

dubbo註冊中心服務註冊發現的具體過程:

  1. 服務提供者啟動,向註冊中心註冊自己提供的服務
  2. 消費者啟動,向註冊中心訂閱自己需要的服務
  3. 註冊中心返回服務提供者的列表給消費者
  4. 消費者從服務提供者列表中,按照軟負載均衡演算法,選擇一臺發起請求
  5. 服務監控

dubbo服務治理優勢

  1. 註冊中心只負責註冊查詢,不負責請求轉發,壓力小
  2. 註冊中心宕機影響消費者,消費者本地快取服務地址列表
  3. 註冊中心對等叢集,宕掉一臺自動切換到另外 一臺
  4. 服務提供者無狀態,可動態部署,註冊中心負責推送
  5. 統計無壓力,本地記憶體中累計次數,每分鐘傳送註冊中心
  6. 消費者呼叫服務者,自動軟負載均衡
  7. 通過服務中心可追蹤依賴關係
  8. 監控中心為擴容和降級提供依據
  9. 可啟用acl機制進行鑑權
  10. 與Spring整合,接入簡單鬆耦合
  11. 多種序列化協議支援

dubbo的不足

  1. 消費者仍需要依賴配置中心
  2. 消費者仍需要依賴jar包配置provider
  3. 提供者文件管理功能缺失
  4. 無統一入口
  5. 不支援OAuth2.0
  6. 內部鑑權不方便管理
  7. 無外部應用鑑權
  8. 介面基本裸奔,無法直接對外暴露服務
  9. IT治理不方便

微服務

現在很多人都在談微服務,那麼到底什麼是微服務呢?這裡談談我對微服務的理解。

微服務有兩個核心:

微:服務的粒度要細,即服務要細化到API

服務:提供好服務,要讓使用者感到好用(要做到這一點很不容易)

上面兩個核心總結起來,可以用下面這幅圖表示:

 

從上面這幅圖看出,微服務特別簡單(好的架構就應該簡單),我們把服務再拆分成一個個API,API是一個完整的功能。然後我們把API扔到一個“雲上”,然後使用者就可以到“雲上”獲取所有API的服務,這個“雲”保證能提供好的服務。

我們可以看到,有了微服務之後,服務對使用者來說變得特別簡單,而且上面dubbo的不足之處在微服務這裡都解決了。使用者不再需要依賴任何jar包,不再需要去註冊中心查詢服務,不再去做鑑權處理,不用擔心服務掛掉,不用擔心不會使用服務,所有的問題這個“雲”都解決了。這也是微服務的核心之一,提供好服務。

微服務的實現

微服務的關鍵是服務閘道器,所以,上面提到的“雲”就是服務閘道器。要做微服務,我們先定義一下微服務需要具備的特點。

微服務的特點

服務需要再細化成API(服務介面——>服務API)

每個服務由一組API組成

以API形式對外提供統一格式的服務

使用者無需任何配置,直接呼叫(http)

完整的API文件

API服務安全可靠穩定

微服務要解決的問題

上面提到了,dubbo還存在一些問題 ,其實dubbo存在的問題 就是 微服務要解決的問題,這裡 再總結一下。當然,dubbo和微服務的側重點不一樣,dubbo側重於內部介面之間的RPC,而微服務則側重於對外提供服務。

統一入口

安全控制:防刷限流

統一鑑權:應用鑑權、使用者鑑權、OAuth鑑權、ACL

協議轉換:http、dubbo、Protobuf

API配置管理

API上線、下線

API與服務介面對映

監控與報警

整體架構的可拓展、高併發、分散式

服務容器自動收縮、擴容

實現方案

負載均衡層:nginx/lvs/F5

微服務層

高效能服務閘道器

統一入口、API配置管理、分流鑑權、服務監控、協議轉換

API對映、OAuth2.0、API文件管理

分散式、可拓展

服務治理層

成熟的服務治理框架dubbo

MQ服務之間解耦

彈性雲

服務docker化

基於訪問壓力的實時叢集排程與管理