自從《序》發表之后20多天了,新項目總算忙過去了,回家過年順便休個假,茶余飯后繼續我們的九周九分布式服務系列文章。根據預告中的順序,今天寫第一篇《架構演進》,書歸正傳。
00 概述
隨著業務的發展,項目的規模不斷擴大,為了方便快速的構建迭代應用,應用的架構也在不斷的演進,發展的核心問題是,服務化改造和服務治理。這種架構設計是,對復雜的應用進行水平拆分和服務化改造,將服務的消費者和服務的提供者解耦,增加復用性,減少公共模塊的重復開發。系統可靠性和團隊的協作能力也會有所提高。
應用架構的歷史演進過程是這樣的,下圖展示了整個過程。
- 垂直煙囪式架構:這類架構一般是一個war包搞定一切 [All in One]。
- RPC架構:這類架構實現了前后端分離,這里不是指頁面(html等)和后臺代碼(java等)的分離,是指邏輯上的前后端分離,前端邏輯和后端邏輯的分離,前端邏輯由Spring MVC框架完成,后端通過RPC框架完成業務邏輯接口的封裝和暴露。
- SOA架構:隨著暴露接口的增多,在RPC架構中接口的管理和配置工作隨之增加,這時對應用的架構提出了更高的要求,服務自動發現,自帶負載均衡,服務自治,服務可編排等高級特性。這就是面向服務的架構設計(SOA)出現的歷史原因。
- 微服務架構:與SOA架構沒有本質上的區別,是SOA架構進化出來的一種服務設計風格,特點是服務拆分粒度小、服務量大、真正實現敏捷交付、踐行DevOps思想。
01 垂直架構
這種架構設計一般出現在業務發展初期,業務功能單一,業務量小。 在垂直的架構中一般采用經典的MVC三層架構模型:
垂直的mvc三層架構,最前端的是視圖展示層,是用戶與之交互的界面;中間的控制層主要負責web請求的分發;第三層為應用模型層,這是業務邏輯的主要實現部分。
它的部署方式一般是如下形式:
特點:
維護成本高,部署效率低,團隊協作效率差,導致系統可靠性變差(在一個進程里面,一旦有一個接口出現故障,內存泄漏,會影響整個節點的宕機),新功能上線周期變長(耦合太多)。
02 RPC架構
RPC全稱是Remote Procedure Call,是一種進程間通信方式,允許像調用本地服務一樣的調用遠程服務,一定程度上做到了公共服務的重用。支撐這種架構的框架就是RPC框架,業界流行的開源的RPC框架主要有:
- FaceBook主導開發 Apache Thrift
- Hadoop子項目 Avro-RPC
- Caucho提供的Hessian
- Google開源的gRPC(HTTP/2、protobuf)
在java的語言環境中,實現原理中用的主要技術包括序列化、socket通信、動態代理、反射機制。其實徒手實現一個簡單RPC框架也是不復雜的,主要是由三個部分組成:
- 服務提供者:運行在服務端,負責服務接口的定義和實現。
- 服務發布者:運行在RPC服務端,負責將本地服務發布成可遠程調用的服務。
- 本地服務代理:運行RPC客戶端,負責通過代理調用遠程服務,將返回結果封裝好供本地消費者使用。
RPC架構一般的部署方式:
RPC框架的特點:簡單、高效、通用,是SOA架構發展的底層技術支撐。
RPC架構的特點:一定程度上提高了服務的重用性,但是消費者調用服務提供者配置管理困難,并且消費者無負載均衡控制,調用關系梳理困難。
03 SOA架構
SOA是面向服務架構,是一種粗粒度的、以服務為中心的架構。業界流行的框架:
- Dubbo/Dubbox(阿里/當當開源)
- HSF(阿里商業版)
- DSF(華為商業版)
- Coral Service(亞馬遜內部)
- Spring Cloud(pivotal開源/商業版)
在上述框架中大家最熟悉的應該是Dubbo框架,Dubbo框架的官方文檔寫的非常好,學習分布式服務框架必讀文檔。
SOA架構的應用部署方式:
與上面RPC架構的圖相比,其中多了兩個翅膀,不要小看這兩個翅膀,它們為我們的服務開發和運維工作提供了很多便利,起到了為應用保駕護航的作用。
特點:
在服務注冊中心的協助下實現了,服務自動發現、統一配置、可配置的服務路由、可配置的集群容錯機制、服務治理等;服務治理也是依賴服務注冊中心實現的,和具體的服務消費者和提供者是松耦合的,服務治理包括:服務運行態管控、服務生命周期管理、服務監控、服務安全、服務故障快速定位等功能;為運維工作提供了極大的便利。
04 微服務架構
微服務架構是一種服務化的架構風格,對服務的拆分粒度更細。微服務架構誕生肩負了更多的責任,最大限度的利用IT資源,容器化部署,敏捷交付以及自動化運維等。
上面一張ppt基本概括了微服務的一切,應該是蓋住了。。。
結束語:第一篇寫于家中文章,回頭看看還可以,本文主要寫的是一個發展過程,還是宏觀的東西多一點,循序漸進,后面會慢慢深入進去。