自從《序》發(fā)表之后20多天了,新項(xiàng)目總算忙過去了,回家過年順便休個(gè)假,茶余飯后繼續(xù)我們的九周九分布式服務(wù)系列文章。根據(jù)預(yù)告中的順序,今天寫第一篇《架構(gòu)演進(jìn)》,書歸正傳。
00 概述
隨著業(yè)務(wù)的發(fā)展,項(xiàng)目的規(guī)模不斷擴(kuò)大,為了方便快速的構(gòu)建迭代應(yīng)用,應(yīng)用的架構(gòu)也在不斷的演進(jìn),發(fā)展的核心問題是,服務(wù)化改造和服務(wù)治理。這種架構(gòu)設(shè)計(jì)是,對復(fù)雜的應(yīng)用進(jìn)行水平拆分和服務(wù)化改造,將服務(wù)的消費(fèi)者和服務(wù)的提供者解耦,增加復(fù)用性,減少公共模塊的重復(fù)開發(fā)。系統(tǒng)可靠性和團(tuán)隊(duì)的協(xié)作能力也會有所提高。
應(yīng)用架構(gòu)的歷史演進(jìn)過程是這樣的,下圖展示了整個(gè)過程。

- 垂直煙囪式架構(gòu):這類架構(gòu)一般是一個(gè)war包搞定一切 [All in One]。
- RPC架構(gòu):這類架構(gòu)實(shí)現(xiàn)了前后端分離,這里不是指頁面(html等)和后臺代碼(java等)的分離,是指邏輯上的前后端分離,前端邏輯和后端邏輯的分離,前端邏輯由Spring MVC框架完成,后端通過RPC框架完成業(yè)務(wù)邏輯接口的封裝和暴露。
- SOA架構(gòu):隨著暴露接口的增多,在RPC架構(gòu)中接口的管理和配置工作隨之增加,這時(shí)對應(yīng)用的架構(gòu)提出了更高的要求,服務(wù)自動發(fā)現(xiàn),自帶負(fù)載均衡,服務(wù)自治,服務(wù)可編排等高級特性。這就是面向服務(wù)的架構(gòu)設(shè)計(jì)(SOA)出現(xiàn)的歷史原因。
- 微服務(wù)架構(gòu):與SOA架構(gòu)沒有本質(zhì)上的區(qū)別,是SOA架構(gòu)進(jìn)化出來的一種服務(wù)設(shè)計(jì)風(fēng)格,特點(diǎn)是服務(wù)拆分粒度小、服務(wù)量大、真正實(shí)現(xiàn)敏捷交付、踐行DevOps思想。
01 垂直架構(gòu)
這種架構(gòu)設(shè)計(jì)一般出現(xiàn)在業(yè)務(wù)發(fā)展初期,業(yè)務(wù)功能單一,業(yè)務(wù)量小。 在垂直的架構(gòu)中一般采用經(jīng)典的MVC三層架構(gòu)模型:

垂直的mvc三層架構(gòu),最前端的是視圖展示層,是用戶與之交互的界面;中間的控制層主要負(fù)責(zé)web請求的分發(fā);第三層為應(yīng)用模型層,這是業(yè)務(wù)邏輯的主要實(shí)現(xiàn)部分。
它的部署方式一般是如下形式:

特點(diǎn):
維護(hù)成本高,部署效率低,團(tuán)隊(duì)協(xié)作效率差,導(dǎo)致系統(tǒng)可靠性變差(在一個(gè)進(jìn)程里面,一旦有一個(gè)接口出現(xiàn)故障,內(nèi)存泄漏,會影響整個(gè)節(jié)點(diǎn)的宕機(jī)),新功能上線周期變長(耦合太多)。
02 RPC架構(gòu)
RPC全稱是Remote Procedure Call,是一種進(jìn)程間通信方式,允許像調(diào)用本地服務(wù)一樣的調(diào)用遠(yuǎn)程服務(wù),一定程度上做到了公共服務(wù)的重用。支撐這種架構(gòu)的框架就是RPC框架,業(yè)界流行的開源的RPC框架主要有:
- FaceBook主導(dǎo)開發(fā) Apache Thrift
- Hadoop子項(xiàng)目 Avro-RPC
- Caucho提供的Hessian
- Google開源的gRPC(HTTP/2、protobuf)
在java的語言環(huán)境中,實(shí)現(xiàn)原理中用的主要技術(shù)包括序列化、socket通信、動態(tài)代理、反射機(jī)制。其實(shí)徒手實(shí)現(xiàn)一個(gè)簡單RPC框架也是不復(fù)雜的,主要是由三個(gè)部分組成:
- 服務(wù)提供者:運(yùn)行在服務(wù)端,負(fù)責(zé)服務(wù)接口的定義和實(shí)現(xiàn)。
- 服務(wù)發(fā)布者:運(yùn)行在RPC服務(wù)端,負(fù)責(zé)將本地服務(wù)發(fā)布成可遠(yuǎn)程調(diào)用的服務(wù)。
- 本地服務(wù)代理:運(yùn)行RPC客戶端,負(fù)責(zé)通過代理調(diào)用遠(yuǎn)程服務(wù),將返回結(jié)果封裝好供本地消費(fèi)者使用。
RPC架構(gòu)一般的部署方式:

RPC框架的特點(diǎn):簡單、高效、通用,是SOA架構(gòu)發(fā)展的底層技術(shù)支撐。
RPC架構(gòu)的特點(diǎn):一定程度上提高了服務(wù)的重用性,但是消費(fèi)者調(diào)用服務(wù)提供者配置管理困難,并且消費(fèi)者無負(fù)載均衡控制,調(diào)用關(guān)系梳理困難。
03 SOA架構(gòu)
SOA是面向服務(wù)架構(gòu),是一種粗粒度的、以服務(wù)為中心的架構(gòu)。業(yè)界流行的框架:
- Dubbo/Dubbox(阿里/當(dāng)當(dāng)開源)
- HSF(阿里商業(yè)版)
- DSF(華為商業(yè)版)
- Coral Service(亞馬遜內(nèi)部)
- Spring Cloud(pivotal開源/商業(yè)版)
在上述框架中大家最熟悉的應(yīng)該是Dubbo框架,Dubbo框架的官方文檔寫的非常好,學(xué)習(xí)分布式服務(wù)框架必讀文檔。
SOA架構(gòu)的應(yīng)用部署方式:

與上面RPC架構(gòu)的圖相比,其中多了兩個(gè)翅膀,不要小看這兩個(gè)翅膀,它們?yōu)槲覀兊姆?wù)開發(fā)和運(yùn)維工作提供了很多便利,起到了為應(yīng)用保駕護(hù)航的作用。
特點(diǎn):
在服務(wù)注冊中心的協(xié)助下實(shí)現(xiàn)了,服務(wù)自動發(fā)現(xiàn)、統(tǒng)一配置、可配置的服務(wù)路由、可配置的集群容錯(cuò)機(jī)制、服務(wù)治理等;服務(wù)治理也是依賴服務(wù)注冊中心實(shí)現(xiàn)的,和具體的服務(wù)消費(fèi)者和提供者是松耦合的,服務(wù)治理包括:服務(wù)運(yùn)行態(tài)管控、服務(wù)生命周期管理、服務(wù)監(jiān)控、服務(wù)安全、服務(wù)故障快速定位等功能;為運(yùn)維工作提供了極大的便利。
04 微服務(wù)架構(gòu)
微服務(wù)架構(gòu)是一種服務(wù)化的架構(gòu)風(fēng)格,對服務(wù)的拆分粒度更細(xì)。微服務(wù)架構(gòu)誕生肩負(fù)了更多的責(zé)任,最大限度的利用IT資源,容器化部署,敏捷交付以及自動化運(yùn)維等。

上面一張ppt基本概括了微服務(wù)的一切,應(yīng)該是蓋住了。。。
結(jié)束語:第一篇寫于家中文章,回頭看看還可以,本文主要寫的是一個(gè)發(fā)展過程,還是宏觀的東西多一點(diǎn),循序漸進(jìn),后面會慢慢深入進(jìn)去。