(如有不全锐帜,煩請指出田盈,后續(xù)不斷跟進修正)
一、什么是RPC缴阎?為什么要學習RPC允瞧?有沒有RPC的代替品?
——今后所有的學習筆記都將以此三問起頭蛮拔。關于編程述暂,個人覺得由此三問,可助于編碼人更加透徹清晰的了解學習目的建炫,以及學下去的動力畦韭!
? ?1. 什么是RPC(Remote Procedure Call Protocol,遠程過程調(diào)用)肛跌?
????????(部分摘抄于https://www.zhihu.com/question/25536695用心閣回答)
? ??????官解:它是一種通過網(wǎng)絡從遠程計算機程序上請求服務艺配,而不需要了解底層網(wǎng)絡技術的協(xié)議。RPC協(xié)議假定某些傳輸協(xié)議的存在衍慎,如TCP或UDP妒挎,為通信程序之間攜帶信息數(shù)據(jù)。在OSI網(wǎng)絡通信模型中西饵,RPC跨越了傳輸層和應用層酝掩。RPC使得開發(fā)包括網(wǎng)絡分布式多程序在內(nèi)的應用程序更加容易。
????????通解:簡單的來說就是像調(diào)用本地服務一樣調(diào)用遠程服務眷柔。比如兩臺服務器A期虾,B,一個應用部署在A服務器上驯嘱,想要調(diào)用B服務器上應用提供的函數(shù)/方法镶苞,由于不在一個內(nèi)存空間,不能直接調(diào)用鞠评,需要通過網(wǎng)絡來表達調(diào)用的語義和傳達調(diào)用的數(shù)據(jù)茂蚓。
? ??????用例:定義一個方法:Employee getEmployeeByName(String fullName)
????????????????????需要解決的問題:(1.通訊 | 2.尋址 | 3.序列化和編組 | 4.反序列化 | 5. ?3 4問題的重復)
????2.為什么要學習RPC?
? ??????????????學習契機:公司游戲服務器需要與我這邊的代理后臺交互剃幌,主要的交互有:充值及反饋聋涨、查詢游戲數(shù)據(jù)、公告等等负乡。同時雙方使用不同數(shù)據(jù)庫牍白。游戲服務器這邊的大神使用GO,熟悉Google的gRPC框架抖棘,商討下決定使用RPC通信茂腥。
? ??????????????比較決定:
????????????????????相較于HTTP通信:速度慢狸涌、數(shù)據(jù)包大、實時交互壓力大(無連接最岗、無狀態(tài))帕胆、數(shù)據(jù)傳輸、安全性差般渡。
????????????????????相較于socket通信:較高的開發(fā)水平要求惶楼、較大的開發(fā)量
????????????? ??優(yōu)勢:
????????????????????可以實現(xiàn)跨語言跨平臺調(diào)用,GO可以調(diào)用JAVA服務诊杆,反之亦可歼捐。
????????????????????每一次調(diào)用方只需要提出需求,不需要了解對方具體的業(yè)務晨汹。
????????????????????各自模塊各自業(yè)務隔離開來豹储,滿足面向對象思維,各自封裝各自的業(yè)務邏輯淘这,不會因為不熟悉業(yè)務的人的修改而導致系統(tǒng)崩潰剥扣。
????????????????????易于拓展,易于復用(當然滿足了面向對象的特性肯定有具有面向對象的優(yōu)勢铝穷。)
? ? 3.有沒有RPC的代替品钠怯?
????????????????本地通信——內(nèi)存映射
????????????????網(wǎng)絡通信——socket、rpc曙聂。RESTful
二晦炊、目前開源的RPC框架有:
? ??推薦大家閱讀分布式RPC框架性能大比拼 ,有詳細比較宁脊,這里我只加入了去年剛剛開源的bRPC断国。
? ? ? ? 1.Dubbo(阿里的soa服務化治理方案的核心框架,內(nèi)置有rpc組件榆苞,國內(nèi)最流行的rpc框架稳衬,目前聽說又開始維護了)
? ??????2.gRPC(Google開發(fā),2016年開源)
????? ??3.THrift(facebook開發(fā)坐漏,2007年貢獻到apache基金)
????? ??4.bRPC(百度開發(fā)薄疚,據(jù)說是百度唯一良心的項目,可惜目前僅開源了C++)
????? ??5.Motan(新浪開發(fā)赊琳,2016/5開源)