?分布式中的遠(yuǎn)程調(diào)用
在微服務(wù)架構(gòu)中,通常存在多個服務(wù)之間的遠(yuǎn)程調(diào)用的需求。遠(yuǎn)程調(diào)用通常包含兩個部分:序列化和通信協(xié)議。常見的序列化協(xié)議包括json、xml、 hession、 protobuf、thrift、text、 bytes等,目前主流的遠(yuǎn)程調(diào)用技術(shù)有基于HTTP的RESTful接口以及基于TCP的RPC協(xié)議。
( 1 )RESTful接口
REST,即Representational State Transfer的縮寫,如果一個架構(gòu)符合REST原則,就稱它為RESTful架構(gòu)。
資源(Resources )
所謂"資源" ,就是網(wǎng)絡(luò)上的一個實體,或者說是網(wǎng)絡(luò)上的一個具體信息。它可以是一段文本、 一張圖片、 一首歌曲、 一種服務(wù),總之就是一個具體的實在。你可以用一個URI(統(tǒng)一資源定位符)指向它, 每種資源對應(yīng)一個特定的URI。要獲取這個資源,訪問它的URI就可以,因此URI就成了每一個資源的地址或獨(dú)一無二的識別符。 REST的名稱"表現(xiàn)層狀態(tài)轉(zhuǎn)化"中,省略了主語。 "表現(xiàn)層"其實指的是"資 源"( Resources)的 "表現(xiàn)層"。
表現(xiàn)層(Representation)
"資源"是一種信息實體,它可以有多種外在表現(xiàn)形式。我們把"資源"具體呈現(xiàn)出來的形式,叫做它的"表 現(xiàn)層"(Representation)。比如,文本可以用txt格式表現(xiàn),也可以用HTML格式、XML格式、JSON格 式表現(xiàn),甚至可以采用二進(jìn)制格式;圖片可以用JPG格式表現(xiàn),也可以用PNG格式表現(xiàn)。 URI只代表資源的實體,不代表它的形式。嚴(yán)格地說,有些網(wǎng)址最后的".html"后綴名是不必要的,因為這個后綴名表示 格式,屬于"表現(xiàn)層"范疇,而URI應(yīng)該只代表"資源"的位置。
狀態(tài)轉(zhuǎn)化(State Transfer )
訪問一個網(wǎng)站,就代表了客戶端和服務(wù)器的一個互動過程。在這個過程中,勢必涉及到數(shù)據(jù)和狀態(tài)的變化?;ヂ?lián)網(wǎng)通信協(xié)議HTTP協(xié)議,是一個無狀態(tài)協(xié)議。這意味著,所有的狀態(tài)都保存在服務(wù)器端。因此,如果客戶端想要操作服務(wù)器,必須通過某種手段,讓服務(wù)器端發(fā)生"狀態(tài)轉(zhuǎn)化"( State Transfer )。 客戶端用到的手段,只能是HTTP協(xié)議。具體來說,就是HTTP協(xié)議里面,四個表示操作方式的動詞:
GET、 POST、 PUT、 DELETE。它們分別對應(yīng)四種基本操作:GET用來獲取資源,POST用來新建資源 (也可以用于更新資源),PUT用來更新資源,DELETE用來刪除資源。
綜合上面的解釋,我們總結(jié)一下什么是RESTful架構(gòu):
每一個URI代表一種資源;
客戶端和服務(wù)器之間,傳遞這種資源的某種表現(xiàn)層;
客戶端通過四個HTTP動詞,對服務(wù)器端資源進(jìn)行操作,實現(xiàn)"表現(xiàn)層狀態(tài)轉(zhuǎn)化"。
( 2 )RPC協(xié)議
RPC( Remote Procedure Call )一種進(jìn)程間通信方式。允許像調(diào)用本地服務(wù)一樣調(diào)用遠(yuǎn)程服務(wù)。 RPC框架的主要目標(biāo)就是讓遠(yuǎn)程服務(wù)調(diào)用更簡單、透明。 RPC框架負(fù)責(zé)屏蔽底層的傳輸方式(TCP或者UDP)、序列化方式(XML/JSON/二進(jìn)制)和通信細(xì)節(jié)。開發(fā)人員在使用的時候只需要了解誰在什么位置提供了什么樣的遠(yuǎn)程服務(wù)接口即可,并不需要關(guān)心底層通信細(xì)節(jié)和調(diào)用過程。
( 3)區(qū)別與聯(lián)系
比較項 |
RESTful |
RPC |
通訊協(xié)議 |
HTTP |
一般使用TCP |
性能 |
略低 |
較高 |
靈活度 |
高 |
低 |
應(yīng)用 |
微服務(wù)架構(gòu) |
SOA架構(gòu) |
1、 HTTP相對更規(guī)范,更標(biāo)準(zhǔn),更通用,無論哪種語言都支持http協(xié)議。如果你是對外開放API,例如 開放平臺,外部的編程語言多種多樣,你無法拒絕對每種語言的支持,現(xiàn)在開源中間件,基本最先支持 的幾個協(xié)議都包含RESTful。
2、 RPC 框架作為架構(gòu)微服務(wù)化的基礎(chǔ)組件,它能大大降低架構(gòu)微服務(wù)化的成本,提高調(diào)用方與服務(wù)提 供方的研發(fā)效率,屏蔽跨進(jìn)程調(diào)用函數(shù)(服務(wù))的各類復(fù)雜細(xì)節(jié)。讓調(diào)用方感覺就像調(diào)用本地函數(shù)一樣 調(diào)用遠(yuǎn)端函數(shù)、讓服務(wù)提供方感覺就像實現(xiàn)一個本地函數(shù)一樣來實現(xiàn)服務(wù)。
?分布式中的CAP原理
現(xiàn)如今,對于多數(shù)大型互聯(lián)網(wǎng)應(yīng)用,分布式系統(tǒng)(distributed system)正變得越來越重要。分布式系統(tǒng)的最大難點,就是各個節(jié)點的狀態(tài)如何同步。 CAP 定理是這方面的基本定理,也是理解分布式系統(tǒng)的起點。
CAP理論由 Eric Brewer 在ACM研討會上提出,而后CAP被奉為分布式領(lǐng)域的重要理論。分布式系統(tǒng)的 CAP理論,首先把分布式系統(tǒng)中的三個特性進(jìn)行了如下歸納:
Consistency(一致性) :數(shù)據(jù)一致更新,所有數(shù)據(jù)的變化都是同步的
Availability(可用性) :在集群中一部分節(jié)點故障后,集群整體是否還能響應(yīng)客戶端的讀寫請求
Partition tolerance(分區(qū)容忍性) :某個節(jié)點的故障,并不影響整個系統(tǒng)的運(yùn)行
通過學(xué)習(xí)CAP理論,我們得知任何分布式系統(tǒng)只可同時滿足二點,沒法三者兼顧,既然一個分布 式系統(tǒng)無法同時滿足一致性、可用性、分區(qū)容錯性三個特點,所以我們就需要拋棄一樣:
選 擇 |
說 明 |
CA |
放棄分區(qū)容錯性,加強(qiáng)一致性和可用性,其實就是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的選擇 |
AP |
放棄一致性(這里說的一致性是強(qiáng)一致性),追求分區(qū)容錯性和可用性,這是很多分布式 系統(tǒng)設(shè)計時的選擇,例如很多NoSQL系統(tǒng)就是如此 |
CP |
放棄可用性,追求一致性和分區(qū)容錯性,基本不會選擇,網(wǎng)絡(luò)問題會直接讓整個系統(tǒng)不可用 |
SpringCloud
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發(fā)便利性巧妙地簡化了分布式系統(tǒng)基 礎(chǔ)設(shè)施的開發(fā),如服務(wù)發(fā)現(xiàn)注冊、配置中心、消息總線、負(fù)載均衡、斷路器、數(shù)據(jù)監(jiān)控等,都可以用Spring Boot的開發(fā)風(fēng)格做到一鍵啟動和部署。 Spring Cloud并沒有重復(fù)制造輪子,它只是將目前各家 公司開發(fā)的比較成熟、經(jīng)得起實際考驗的服務(wù)框架組合起來,通過Spring Boot風(fēng)格進(jìn)行再封裝屏蔽掉了復(fù)雜的配置和實現(xiàn)原理,最終給開發(fā)者留出了一套簡單易懂、易部署和易維護(hù)的分布式系統(tǒng)開發(fā)工具包。
ServiceComb
Apache ServiceComb是業(yè)界第一個Apache微服務(wù)頂級項目, 是一個開源微服務(wù)解決方案,致力于幫助 企業(yè)、用戶和開發(fā)者將企業(yè)應(yīng)用輕松微服務(wù)化上云,并實現(xiàn)對微服務(wù)應(yīng)用的高效運(yùn)維管理。其提供一站 式開源微服務(wù)解決方案,融合SDK框架級、 0侵入ServiceMesh場景并支持多語言文章來源:http://www.zghlxwxcb.cn/news/detail-673894.html
ZeroC ICE
ZeroC IceGrid是ZeroC公司的杰作,繼承了CORBA的血統(tǒng),是新一代的面向?qū)ο蟮姆植际较到y(tǒng)中間件。作為一種微服務(wù)架構(gòu),它基于RPC框架發(fā)展而來,具有良好的性能與分布式能力。文章來源地址http://www.zghlxwxcb.cn/news/detail-673894.html
到了這里,關(guān)于分布式核心知識以及常見微服務(wù)框架的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!