阿里P8架构师谈:Restful、SOAP、RPC、SOA、微服务之间的区别
內(nèi)容大綱:
1.介紹Restful、SOAP、RPC、SOA以及微服務(wù)
2.重點(diǎn)談?wù)凷OA與微服務(wù)的區(qū)別
3.以及為什么要使用微服務(wù)架構(gòu)
什么是Restful
Restful是一種架構(gòu)設(shè)計(jì)風(fēng)格,提供了設(shè)計(jì)原則和約束條件,而不是架構(gòu),而滿足這些約束條件和原則的應(yīng)用程序或設(shè)計(jì)就是 Restful架構(gòu)或服務(wù)。
主要的設(shè)計(jì)原則:
- 資源與URI
- 統(tǒng)一資源接口(HTTP方法如GET,PUT和POST)
- 資源的表述
- 資源的鏈接
- 狀態(tài)的轉(zhuǎn)移
總之,RESTful的核心就是后端將資源發(fā)布為URI,前端通過URI訪問資源,并通過HTTP動詞表示要對資源進(jìn)行的操作。
什么是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就是從一臺機(jī)器(客戶端)上通過參數(shù)傳遞的方式調(diào)用另一臺機(jī)器(服務(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)用遠(yuǎn)程的函數(shù)(或方法)。
4種典型RPC遠(yuǎn)程調(diào)用框架
(1)RMI實(shí)現(xiàn),利用java.rmi包實(shí)現(xiàn),基于Java遠(yuǎn)程方法協(xié)議(Java Remote Method Protocol)和java的原生序列化。
(2)Hessian,是一個輕量級的remoting onhttp工具,使用簡單的方法提供了RMI的功能。 基于HTTP協(xié)議,采用二進(jìn)制編解碼。
(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 實(shí)現(xiàn)的是http協(xié)議的rpc,算是rpc的一個子集。
什么是SOA
SOA(Service-Oriented Architecture),中文全稱:面向服務(wù)的架構(gòu)。
通俗點(diǎn)來講,SOA提倡將不同應(yīng)用程序的業(yè)務(wù)功能封裝成“服務(wù)”并宿主起來,通常以接口和契約的形式暴露并提供給外界應(yīng)用訪問(通過交換消息),達(dá)到不同系統(tǒng)可重用的目的。
SOA是一個組件模型,它能將不同的服務(wù)通過定義良好的接口和契約聯(lián)系起來。服務(wù)是SOA的基石。
微服務(wù)和SOA的區(qū)別
微服務(wù)是SOA架構(gòu)演進(jìn)的結(jié)果。兩者說到底都是對外提供接口的一種架構(gòu)設(shè)計(jì)方式,隨著互聯(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實(shí)現(xiàn)方式。
SOA與微服務(wù)的區(qū)別在于如下幾個方面:
為什么要使用微服務(wù)?
技術(shù)為業(yè)務(wù)而生,架構(gòu)也為業(yè)務(wù)而出現(xiàn),當(dāng)然SOA和微服務(wù)也是因?yàn)闃I(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é)點(diǎn)和成本。
- 此時,用于簡化增刪改查工作量的?數(shù)據(jù)訪問框架(ORM)?是關(guān)鍵。
- 垂直應(yīng)用架構(gòu)
- 當(dāng)訪問量逐漸增大,單一應(yīng)用增加機(jī)器帶來的加速度越來越小,將應(yīng)用拆成互不相干的幾個應(yīng)用,以提升效率。
- 此時,用于加速前端頁面開發(fā)的?Web框架(MVC)?是關(guān)鍵。
- 分布式服務(wù)架構(gòu)
- 當(dāng)垂直應(yīng)用越來越多,應(yīng)用之間交互不可避免,將核心業(yè)務(wù)抽取出來,作為獨(dú)立的服務(wù),逐漸形成穩(wěn)定的服務(wù)中心,使前端應(yīng)用能更快速的響應(yīng)多變的市場需求。
- 此時,用于提高業(yè)務(wù)復(fù)用及整合的?分布式服務(wù)框架(RPC)?是關(guān)鍵。
- 流動計(jì)算架構(gòu)
- 當(dāng)服務(wù)越來越多,容量的評估,小服務(wù)資源的浪費(fèi)等問題逐漸顯現(xiàn),此時需增加一個調(diào)度中心基于訪問壓力實(shí)時管理集群容量,提高集群利用率。
- 此時,用于提高機(jī)器利用率的?資源調(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ù)拆分出來,其實(shí)發(fā)展到此階段,如果服務(wù)拆分的足夠精細(xì),并且獨(dú)立運(yùn)行,我覺得就可以將之理解為一個微服務(wù)了。
你可能也喜歡:
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎
總結(jié)
以上是生活随笔為你收集整理的阿里P8架构师谈:Restful、SOAP、RPC、SOA、微服务之间的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis系列教程(二):详解Redis
- 下一篇: 美团点评Docker容器管理平台