摘要:都是分開部署,多帶帶上線的。序列化畢竟是遠程通信,需要將對象轉化成二進制流進行傳輸。服務化架構的演進架構當業務規模很小時,將所有功能都不熟在同一個進程中,通過雙機或者負載均衡器實現負債分流此時,分離前后臺邏輯的架構是關鍵。
前言
為什么需要RPC,而不是簡單的HTTP接口?
剛開始還是菜鳥的時候,時常把RPC和HTTP搞混淆,本身概念還沒理解清楚,心里就浮躁的不行,導致鬧出了不少笑話。
什么是RPC?RPC(Remote Promote Call) 一種進程間通信方式。允許像調用本地服務一樣調用遠程服務。
RPC框架的主要目標就是讓遠程服務調用更簡單、透明。RPC框架負責屏蔽底層的傳輸方式(TCP或者UDP)、序列化方式(XML/JSON/二進制)和通信細節。開發人員在使用的時候只需要了解誰在什么位置提供了什么樣的遠程服務接口即可,并不需要關心底層通信細節和調用過程。
什么是HTTP?HTTP協議是應用層的超文本傳送協議,它是Web的基礎。HTTP協議位于TCP/IP協議棧的應用層。基于HTTP協議的客戶/服務器模式的信息交換過程,分四個過程:建立連接、發送請求信息、發送響應信息、關閉連接。
?
第七層:應用層:?????定義了用于在網絡中進行通信和數據傳輸的接口 - 用戶程式;提供標準服務,比如虛擬終端、文件以及任務的傳輸 和處理;?
第六層:表示層:?????掩蓋不同系統間的數據格式的不同性; 指定獨立結構的數據傳輸格式; 數據的編碼和解碼;加密和解密;壓縮和 解壓縮?
第五層:會話層:?????管理用戶會話和對話; 控制用戶間邏輯連接的建立和掛斷;報告上一層發生的錯誤?
第四層:傳輸層:?????管理網絡中端到端的信息傳送; 通過錯誤糾正和流控制機制提供可靠且有序的數據包傳送; 提供面向無連接的數 據包的傳送;?
第三層:網絡層:?????定義網絡設備間如何傳輸數據; 根據唯一的網絡設備地址路由數據包;提供流和擁塞控制以防止網絡資源的損耗?
第二層:數據鏈路層:?????定義操作通信連接的程序; 封裝數據包為數據幀; 監測和糾正數據包傳輸錯誤?
第一層:物理層:??????定義通過網絡設備發送數據的物理方式; 作為網絡媒介和設備間的接口;定義光學、電氣以及機械特性。
RPC是一種概念,http也是rpc實現的一種方式。論復雜度,dubbo/hessian用起來是超級簡單的。最近用dubbo和hessian比較多,http的幾乎都被廢棄了。
至于為什么用,其實很簡單,業務場景不一樣。我最早的單位所有的代碼都在一個工程里,一次要發布幾百m的代碼。這種架構是非常有利于小程序的。但是我們為什么要應用rpc層呢,一個功能,一套代碼下來不就解決了么?我覺得有幾個好處:
靈活部署
解耦
系統做大了,肯定是需要做微服務的。 現在我們做電商就是這樣,多帶帶有一個訂單系統,支付系統,商品系統,用戶系統。都是分開部署,多帶帶上線的。 但我們交互是用HTTP接口來交互的,我想轉用RPC,但問題是我現在還沒發現為什么需要用RPC,我還沒能理解它的作用和意義。
用http交互其實就已經屬于rpc了。
不知道大家看到這里有沒有解決掉文章開頭的那個問題呢?看似普普通通的一個問題,實際上暗藏了很多玄機,只有從頭到尾都完完整整的了解過一遍之后才能真正地得到想要的答案。大部分程序員應該都有在工作過程中碰到各式各樣的問題,那是否都深入去追究過問題的本質呢?如果有機會不妨去試一試,你會發現海面下隱藏的“冰山”是表面上的許多倍。
為什么面試官問的都是同樣的問題,有的人覺得沒什么太多能回答的點,有的人卻能滔滔不絕?我想每個人思維的深度面試官一眼就能看出來,正好就印證了那句話:架構是一種思想,技術只是外殼。技術可能淘汰,思想才能長存。
人因為有了思想,才沒有成為野獸。
在這里推薦一個架構群895244712,除了分布式、微服務、性能優化等技術點的技術分享,更重要的是架構思想的形成。
這邊不再糾結,詳細理解一下RPC的相關問題。
廣義和狹義的RPC廣義的遠程通訊技術包括:RPC , WebService , RMI , JMS , EJB , JNDI .
廣義RPC發展歷程 狹義RPC技術框架CORBA:面向對象的編程體系規范,分布式系統,跨語言,對標RMI(競爭關系)。
SOAP:簡單對象訪問協議,微軟聯合廠商對xml-rpc標準化,soap協議就是聯合標準化的結果,而且微軟搶先完善了soap協議,推出了webservice。對象訪問協議指的是使用XML描述web service的信息(URI/類/參數/返回值),理論上SOAP就是一段xml
WebService:屬于廣義rpc的一種(常見的廣義rpc實現還有xml-rpc和json-rpc),支持異構系統間的交互, 支持不同語言的通信,使用http通信,通過serlvet提供XML格式的數據,是SOAP協議的封裝,WSDL是它的描述方式。
WSDL:webservice描述語言,描述SOAP協議的,也是段XML
RMI:遠程調用對象,其實是java實現了RPC的一組接口
JMS:MQ
EJB:大型分布式,rmi-iiop協議
由于目前跨內存調用的普遍性,RPC往往代稱更加具體的基于底層協議二進制流的RPC框架,與WebService最大的不同就是: 狹義的RPC基于二進制流的序列化和反序列化,故不能夠提供跨語言的服務,但是比基于文本解析的WebService更加高效。
狹義RPC框架一般需要高性能的網絡框架,如Netty,Mina,高性能的序列化反序列化框架,尋址方式,如果是帶會話的RPC,還要有會話和狀態保持功能。
當下XML-RPC,SOAP,WebService技術的缺陷RPC框架實現的幾個核心技術點:冗余數據太多,處理速度太慢。?
RPC 風格的 Web Service 跨語言性不佳,而 Document 風格的 Web Service 又太過難用。?
Web Service 沒有解決用戶的真正問題,只是把一個問題變成了另一個問題。?
Web Service 的規范太過復雜,以至于在 .NET 和 Java 平臺以外沒有真正好用的實現,甚至沒有可用的實現。?
跨語言跨平臺只是 Web Service 的一個口號,雖然很多人迷信這一點,但事實上它并沒有真正實現。?
RPC面臨的挑戰遠程提供者需要以某種形式提供服務調用相關的信息,包括但不限于服務接口定義、數據結構、或者中間態的服務定義文件。例如Facebook的 Thrift的IDL文件,Web service的WSDL文件;服務的調用者需要通過一定的圖景獲取遠程服務調用相關的信息。
遠程代理對象:服務調用者用的服務實際是遠程服務的本地代理。說白了就是通過動態代理來實現。
通信:RPC框架與具體的協議無關。
序列化:畢竟是遠程通信,需要將對象轉化成二進制流進行傳輸。不同的RPC框架應用的場景不同,在序列化上也會采取不同的技術
在大規模服務化之前,應用可能只是通過RPC框架,簡單的暴露和引用遠程服務,通過配置URL地址進行遠程服務調用,路由則通過F5負載均衡器等進行簡單的負載均衡。
當服務越來越多的時候,服務的URL配置管理變得更加困難。單純的使用RPC就有點吃不消。所以在大規模分布式集群中,RPC只是作為集群的一個方法調用手段。例如在Hadoop的進程間交互都是通過RPC來進行的,比如Namenode與Datanode直接,Jobtracker與Tasktracker之間等。
服務化架構的演進MVC架構:當業務規模很小時,將所有功能都不熟在同一個進程中,通過雙機或者負載均衡器實現負債分流;此時,分離前后臺邏輯的MVC架構是關鍵。
PRC架構:當垂直應用越來越多,應用之間交互不可避免,將核心和公共業務抽取出來,作為獨立的服務,實現前后臺邏輯分離。此時,用于提高業務復用及拆分的RPC框架是關鍵。
SOA架構:隨著業務發展,服務數量越來越多,服務生命周期管控和運行態的治理成為瓶頸,此時用于提升服務質量的SOA服務治理是關鍵。
微服務架構:通過服務的原子化拆分,以及微服務的獨立打包、部署和升級,小團隊的交付周期將縮短,運維成本也將大幅度下降。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71890.html
摘要:是一個分布式服務框架,以及治理方案。手寫注意要點手寫注意要點基于上文中對于協議的理解,如果我們自己去實現,需要考慮哪些技術呢其實基于圖的整個流程應該有一個大概的理解。基于手寫實現基于手寫實現理解了協議后,我們基于來實現一個通信框架。閱讀這篇文章之前,建議先閱讀和這篇文章關聯的內容。[1]詳細剖析分布式微服務架構下網絡通信的底層實現原理(圖解)[2][年薪60W的技巧]工作了5年,你真的理解N...
摘要:調用流程服務容器負責啟動,加載,運行服務提供者。服務提供者在啟動時,向注冊中心注冊自己提供的服務。注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數據給消費者。這就是分布式服務注冊中心的由來。 Dubbo是什么 一款分布式服務框架 高性能和透明化的RPC遠程服務調用方案。這里簡單介紹一下RPC,所謂RPC就是遠程過程調用,全稱為Romate Proce...
摘要:調用流程服務容器負責啟動,加載,運行服務提供者。服務提供者在啟動時,向注冊中心注冊自己提供的服務。注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數據給消費者。這就是分布式服務注冊中心的由來。 Dubbo是什么 一款分布式服務框架 高性能和透明化的RPC遠程服務調用方案。這里簡單介紹一下RPC,所謂RPC就是遠程過程調用,全稱為Romate Proce...
閱讀 3648·2021-10-09 09:58
閱讀 1188·2021-09-22 15:20
閱讀 2495·2019-08-30 15:54
閱讀 3509·2019-08-30 14:08
閱讀 887·2019-08-30 13:06
閱讀 1817·2019-08-26 12:16
閱讀 2678·2019-08-26 12:11
閱讀 2507·2019-08-26 10:38