九周九分布式服務(wù)-架構(gòu)演進(jìn)

博客原文

自從《序》發(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)演進(jìn)
  1. 垂直煙囪式架構(gòu):這類架構(gòu)一般是一個(gè)war包搞定一切 [All in One]。
  2. RPC架構(gòu):這類架構(gòu)實(shí)現(xiàn)了前后端分離,這里不是指頁面(html等)和后臺代碼(java等)的分離,是指邏輯上的前后端分離,前端邏輯和后端邏輯的分離,前端邏輯由Spring MVC框架完成,后端通過RPC框架完成業(yè)務(wù)邏輯接口的封裝和暴露。
  3. 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)的歷史原因。
  4. 微服務(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)模型

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

它的部署方式一般是如下形式:

垂直架構(gòu)的部署方式

特點(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框架主要有:

  1. FaceBook主導(dǎo)開發(fā) Apache Thrift
  2. Hadoop子項(xiàng)目 Avro-RPC
  3. Caucho提供的Hessian
  4. 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架構(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è)界流行的框架:

  1. Dubbo/Dubbox(阿里/當(dāng)當(dāng)開源)
  2. HSF(阿里商業(yè)版)
  3. DSF(華為商業(yè)版)
  4. Coral Service(亞馬遜內(nèi)部)
  5. Spring Cloud(pivotal開源/商業(yè)版)

在上述框架中大家最熟悉的應(yīng)該是Dubbo框架,Dubbo框架的官方文檔寫的非常好,學(xué)習(xí)分布式服務(wù)框架必讀文檔。

SOA架構(gòu)的應(yīng)用部署方式:

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)維等。

微服務(wù)架構(gòu)

上面一張ppt基本概括了微服務(wù)的一切,應(yīng)該是蓋住了。。。

結(jié)束語:第一篇寫于家中文章,回頭看看還可以,本文主要寫的是一個(gè)發(fā)展過程,還是宏觀的東西多一點(diǎn),循序漸進(jìn),后面會慢慢深入進(jìn)去。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容