分散式架構研究
分散式架構
對於一個大型的網際網路系統,一般會包含多個應用,而且應用之間往往還存在共同的業務,並且應用之間還存在呼叫關係。除此之外 ,對於大型的網際網路系統還有一些其它的挑戰,比如如何應對急劇增長的使用者,如何管理好研發團隊快速迭代產品研發,如何保持產品升級更加穩定等等 。因此,為了使業務得到很好的複用,模組更加容易拓展和維護,我們希望業務與應用分離,某個業務不再屬於一個應用,而是作為一個獨立的服務單獨進行維護。應用本身不再是一個臃腫的模組堆積,而是由一個個模組化的服務元件組合而成。
服務化
服務化的特點
上面介紹的分散式架構即服務化。我們再總結一下,服務化主要有如下特點:
- 應用按業務拆分成服務
- 各個服務均可獨立部署
- 服務可被多個應用共享
- 服務之間可以通訊
服務化的好處
那麼企業採用服務化有哪些好處呢?
- 架構上系統更加清晰
- 核心模組穩定,以服務元件為單位進行升級,避免了頻繁釋出帶來的風險
- 開發管理方便
- 單獨團隊維護、工作分明,職責清晰
- 業務複用、程式碼複用
- 非常容易拓展
- 服務化實現方式
如果要實現服務化的話,最常用的方式就是利用RPC框架。因為服務元件一般分佈在不同的伺服器上,所以要實現服務化需要解決的第一個問題就是RPC**遠端服務呼叫**。類似於RPC方案有很多,比如:
- Java RMI
- WebService
- Hessian
- Http
- Thrift
服務化面臨的挑戰,上面提到要實現服務化首先需要解決遠端服務呼叫問題,除此之外,還有很多其他問題需要解決。
- 服務越來越多,配置管理複雜
- 服務間依賴關係複雜
- 服務之間的負載均衡
- 服務的拓展
- 服務監控
- 服務降級
- 服務鑑權
- 服務上線與下線
- 服務文件
- … …
- 服務治理
上面提到了服務化,其實要想服務化,服務治理是關鍵。那麼有沒有好的服務治理方案呢?答案是有的,而且很多人都在用這個框架,他就是-dubbo。dubbo就是一個帶有服務治理功能的RPC框架。
dubbo提供了一套較為完整的服務治理方案,所以企業如果要實現服務化的話,dubbo 是很好的一個選擇。這裡簡單介紹一下dubbo服務治理相關方案。
服務發現註冊
服務治理領域最重要的問題就是服務發現與註冊。dubbo中引入了一個註冊中心的概念,服務的註冊與發現主要就依賴這個服務中心。
dubbo註冊中心服務註冊發現的具體過程:
- 服務提供者啟動,向註冊中心註冊自己提供的服務
- 消費者啟動,向註冊中心訂閱自己需要的服務
- 註冊中心返回服務提供者的列表給消費者
- 消費者從服務提供者列表中,按照軟負載均衡演算法,選擇一臺發起請求
- 服務監控
dubbo服務治理優勢
- 註冊中心只負責註冊查詢,不負責請求轉發,壓力小
- 註冊中心宕機影響消費者,消費者本地快取服務地址列表
- 註冊中心對等叢集,宕掉一臺自動切換到另外 一臺
- 服務提供者無狀態,可動態部署,註冊中心負責推送
- 統計無壓力,本地記憶體中累計次數,每分鐘傳送註冊中心
- 消費者呼叫服務者,自動軟負載均衡
- 通過服務中心可追蹤依賴關係
- 監控中心為擴容和降級提供依據
- 可啟用acl機制進行鑑權
- 與Spring整合,接入簡單鬆耦合
- 多種序列化協議支援
dubbo的不足
- 消費者仍需要依賴配置中心
- 消費者仍需要依賴jar包配置provider
- 提供者文件管理功能缺失
- 無統一入口
- 不支援OAuth2.0
- 內部鑑權不方便管理
- 無外部應用鑑權
- 介面基本裸奔,無法直接對外暴露服務
- 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化
基於訪問壓力的實時叢集排程與管理