什么是Restful
Restful是一種架構(gòu)設(shè)計風(fēng)格拉一,提供了設(shè)計原則和約束條件囤攀,而不是架構(gòu)背稼,而滿足這些約束條件和原則的應(yīng)用程序或設(shè)計就是 Restful架構(gòu)或服務(wù)桨嫁。
主要的設(shè)計原則:
- 資源與URI
- 統(tǒng)一資源接口(HTTP方法如GET植兰,PUT和POST)
- 資源的表述
- 資源的鏈接
- 狀態(tài)的轉(zhuǎn)移
總之,RESTful的核心就是后端將資源發(fā)布為URI瞧甩,前端通過URI訪問資源钉跷,并通過HTTP動詞表示要對資源進行的操作弥鹦。
什么是SOAP
簡單對象訪問協(xié)議是一種數(shù)據(jù)交換協(xié)議規(guī)范肚逸,是一種輕量的爷辙、簡單的、基于XML的協(xié)議的規(guī)范朦促。SOAP協(xié)議和HTTP協(xié)議一樣膝晾,都是底層的通信協(xié)議,只是請求包的格式不同而已务冕,SOAP包是XML格式的血当。
SOAP的消息是基于xml并封裝成了符合http協(xié)議,因此禀忆,它符合任何路由器臊旭、 防火墻或代理服務(wù)器的要求。
SOAP可以使用任何語言來完成箩退,只要發(fā)送正確的soap請求即可离熏,基于soap的服務(wù)可以在任何平臺無需修改即可正常使用。
RPC
RPC就是從一臺機器(客戶端)上通過參數(shù)傳遞的方式調(diào)用另一臺機器(服務(wù)器)上的一個函數(shù)或方法(可以統(tǒng)稱為服務(wù))并得到返回的結(jié)果戴涝。
RPC 會隱藏底層的通訊細(xì)節(jié)(不需要直接處理Socket通訊或Http通訊)
RPC 是一個請求響應(yīng)模型滋戳。客戶端發(fā)起請求啥刻,服務(wù)器返回響應(yīng)(類似于Http的工作方式)
RPC 在使用形式上像調(diào)用本地函數(shù)(或方法)一樣去調(diào)用遠程的函數(shù)(或方法)奸鸯。
4種典型RPC遠程調(diào)用框架
(1):RMI實現(xiàn),利用java.rmi包實現(xiàn)可帽,基于Java遠程方法協(xié)議(Java Remote Method Protocol)和java的原生序列化娄涩。
(2):Hessian,是一個輕量級的remoting onhttp工具映跟,使用簡單的方法提供了RMI的功能钝满。 基于HTTP協(xié)議,采用二進制編解碼申窘。
(3):thrift是一種可伸縮的跨語言服務(wù)的軟件框架弯蚜。thrift允許你定義一個描述文件,描述數(shù)據(jù)類型和服務(wù)接口剃法。依據(jù)該文件碎捺,編譯器方便地生成RPC客戶端和服務(wù)器通信代碼。
(4):dubbo贷洲,阿里的RPC框架收厨。
(5):還有SpringCloud框架,微服務(wù)全家桶优构。為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)的一些工具诵叁,包括配置管理、服務(wù)發(fā)現(xiàn)钦椭、斷路器拧额、路由碑诉、微代理、事件總線侥锦、全局鎖进栽、決策競選、分布式會話等等恭垦。
微服務(wù)在本質(zhì)上快毛,就是rpc。rpc有基于tcp的番挺,http的唠帝,mq的等等。spring cloud是基于spring boot的玄柏,spring boot 實現(xiàn)的是http協(xié)議的rpc没隘,算是rpc的一個子集。
什么是SOA
SOA(Service-Oriented Architecture)禁荸,中文全稱:面向服務(wù)的架構(gòu)右蒲。
通俗點來講,SOA提倡將不同應(yīng)用程序的業(yè)務(wù)功能封裝成“服務(wù)”并宿主起來赶熟,通常以接口和契約的形式暴露并提供給外界應(yīng)用訪問(通過交換消息)瑰妄,達到不同系統(tǒng)可重用的目的。
SOA是一個組件模型映砖,它能將不同的服務(wù)通過定義良好的接口和契約聯(lián)系起來间坐。服務(wù)是SOA的基石。
微服務(wù)和SOA的區(qū)別
微服務(wù)是SOA架構(gòu)演進的結(jié)果邑退。兩者說到底都是對外提供接口的一種架構(gòu)設(shè)計方式,隨著互聯(lián)網(wǎng)的發(fā)展竹宋,復(fù)雜的平臺、業(yè)務(wù)的出現(xiàn)地技,導(dǎo)致SOA架構(gòu)向更細(xì)粒度蜈七、更通過化程度發(fā)展,就成了所謂的微服務(wù)了莫矗。
總之飒硅,微服務(wù)是SOA發(fā)展出來的產(chǎn)物,它是一種比較現(xiàn)代化的細(xì)粒度的SOA實現(xiàn)方式作谚。
SOA與微服務(wù)的區(qū)別在于如下幾個方面:
- 微服務(wù)相比于SOA更加精細(xì)三娩,微服務(wù)更多的以獨立的進程的方式存在,互相之間并無影響妹懒;
- 微服務(wù)提供的接口方式更加通用化雀监,例如HTTP RESTful方式,各種終端都可以調(diào)用眨唬,無關(guān)語言会前、平臺限制好乐;
- 微服務(wù)更傾向于分布式去中心化的部署方式,在互聯(lián)網(wǎng)業(yè)務(wù)場景下更適合回官。
為什么要使用微服務(wù)?
技術(shù)為業(yè)務(wù)而生搂橙,架構(gòu)也為業(yè)務(wù)而出現(xiàn)歉提,當(dāng)然SOA和微服務(wù)也是因為業(yè)務(wù)的發(fā)展而出現(xiàn)。出現(xiàn)SOA和微服務(wù)框架與業(yè)務(wù)的發(fā)展区转、平臺的壯大密不可分苔巨,下面借用dubbo的網(wǎng)站架構(gòu)發(fā)展圖和說明:
單一應(yīng)用架構(gòu)
當(dāng)網(wǎng)站流量很小時,只需一個應(yīng)用废离,將所有功能都部署在一起侄泽,以減少部署節(jié)點和成本。
此時蜻韭,用于簡化增刪改查工作量的數(shù)據(jù)訪問框架(ORM) 是關(guān)鍵悼尾。
垂直應(yīng)用架構(gòu)
當(dāng)訪問量逐漸增大,單一應(yīng)用增加機器帶來的加速度越來越小肖方,將應(yīng)用拆成互不相干的幾個應(yīng)用闺魏,以提升效率。
此時俯画,用于加速前端頁面開發(fā)的Web框架(MVC)是關(guān)鍵析桥。
分布式服務(wù)架構(gòu)
當(dāng)垂直應(yīng)用越來越多,應(yīng)用之間交互不可避免艰垂,將核心業(yè)務(wù)抽取出來泡仗,作為獨立的服務(wù),逐漸形成穩(wěn)定的服務(wù)中心猜憎,使前端應(yīng)用能更快速的響應(yīng)多變的市場需求娩怎。
此時,用于提高業(yè)務(wù)復(fù)用及整合的分布式服務(wù)框架(RPC)是關(guān)鍵胰柑。
流動計算架構(gòu)
當(dāng)服務(wù)越來越多峦树,容量的評估,小服務(wù)資源的浪費等問題逐漸顯現(xiàn)旦事,此時需增加一個調(diào)度中心基于訪問壓力實時管理集群容量魁巩,提高集群利用率。
此時姐浮,用于提高機器利用率的資源調(diào)度和治理中心(SOA)是關(guān)鍵谷遂。
平臺隨著業(yè)務(wù)的發(fā)展從 All in One 環(huán)境就可以滿足業(yè)務(wù)需求(以Java來說,可能只是一兩個war包就解決了)卖鲤。
發(fā)展到需要拆分多個應(yīng)用肾扰,并且采用MVC的方式分離前后端畴嘶,加快開發(fā)效率;在發(fā)展到服務(wù)越來越多集晚,不得不將一些核心或共用的服務(wù)拆分出來窗悯,其實發(fā)展到此階段,如果服務(wù)拆分的足夠精細(xì)偷拔,并且獨立運行蒋院,我覺得就可以將之理解為一個微服務(wù)了。
往期精彩內(nèi)容
《 面試總結(jié):2019年最全面試題資料學(xué)習(xí)大全—(含答案) 》
關(guān)注作者微信公眾號 “java爛豬皮” 了解更多你學(xué)到想放棄的后端架構(gòu)知識。