假設(shè)我們開發(fā)一個rpc遠(yuǎn)程調(diào)用框架
那么這個框架需要怎么去寫
1呻畸、首先有遠(yuǎn)程配置中心config
2拆檬、有服務(wù)代理層【包裝業(yè)務(wù)上的服務(wù)做一個代理】
3列敲、有服務(wù)注冊中心【代理了服務(wù)之后 向該注冊中心注冊服務(wù)代理】
4、有路由【遠(yuǎn)程調(diào)用先走路由獲取服務(wù)代理實例、集群必備的東西】
5、有遠(yuǎn)程調(diào)用層【發(fā)起服務(wù)調(diào)用】
6据途、有網(wǎng)絡(luò)傳輸層、有信息交換層【這個是一個傳輸協(xié)議的實現(xiàn)層】
7寂拆、有序列化層【針對網(wǎng)絡(luò)IO信息編碼方式的統(tǒng)一坯屿、傳輸協(xié)議最基本的東西】
8、服務(wù)監(jiān)控【不屬于RPC检激、但是服務(wù)監(jiān)控必不可少】
總結(jié):
核心配置:服務(wù)注冊中心肴捉、服務(wù)代理和服務(wù)調(diào)用
優(yōu)化配置:配置中心腹侣、服務(wù)監(jiān)控、
基石配置:網(wǎng)絡(luò)傳輸以及協(xié)議齿穗、序列化方式的定制
簡單用自己的語言描述這個圖
1傲隶、左上角 Dubbo Framework
2、左上角往右簡單標(biāo)識 每個顏色代表什么意思窃页、更好理解圖中數(shù)據(jù)流向
消費(fèi)者跺株、提供者、開始脖卖、接口乒省、類、繼承關(guān)系畦木、調(diào)用鏈方向袖扛、依賴方向
3、左側(cè)一豎列十籍、黑體字 service\config蛆封、等等
服務(wù)接口【service】、配置層【config】勾栗、服務(wù)代理層【proxy】惨篱、注冊中心【registry】、
路由【cluster】围俘、監(jiān)控中心【monitor】砸讳、遠(yuǎn)程調(diào)用【protocol】、
信息交換【exchange】界牡、網(wǎng)絡(luò)傳輸【transport】绣夺、數(shù)據(jù)序列化【serialize】
結(jié)合自己所想做一個分類
核心配置:服務(wù)代理層【proxy】、注冊中心【registry】欢揖、遠(yuǎn)程調(diào)用【protocol】
優(yōu)化配置:配置層【config】陶耍、路由【cluster】、監(jiān)控中心【monitor】
基石配置:信息交換【exchange】她混、網(wǎng)絡(luò)傳輸【transport】烈钞、數(shù)據(jù)序列化【serialize】
簡單猜想一下dubbo這么設(shè)計的代碼架構(gòu)
service:對外暴露接口 API與SPI分離
config:核心referenceConfig、ServiceConfig
serviceConfig----獲取遠(yuǎn)程倉庫配置坤按、獲取文件配置毯欣、貌似還可以獲取環(huán)境變量【實質(zhì)上跟修改本地host一個道理、規(guī)定了一個locahost代理 然后操作系統(tǒng)去解析這個配置】
referenceConfig--是消費(fèi)端配置臭脓、其應(yīng)該是從服務(wù)端獲取配置信息
proxy:不由想到代理模式酗钞、原業(yè)務(wù)邏輯bean不變、新建bean來實現(xiàn)原bean的代理【也算是一種封裝】
registry:注冊中心、看過eureka砚作、底層內(nèi)存中維護(hù)了 一個雙map結(jié)構(gòu)數(shù)據(jù)列表窘奏、維護(hù)服務(wù)實例、服務(wù)地址葫录、以及代理service等
cluster:路由器着裹、想到最簡單的就是url轉(zhuǎn)發(fā)、當(dāng)然肯定沒這么簡單米同、應(yīng)該還會有骇扇、實時獲取服務(wù)列表、負(fù)載均衡算法等等
monitor:監(jiān)控中心面粮、這個web服務(wù)把各路信息提上來做一個展示少孝、應(yīng)該沒啥、最多維護(hù)一個硬盤文件
protocol:遠(yuǎn)程調(diào)用熬苍、怎么調(diào)用--不太清楚--再看看
exchange:信息交換稍走、request、response封裝
transport:網(wǎng)絡(luò)傳輸冷溃、大名鼎鼎的netty就在這吧~~
seriallize:數(shù)據(jù)序列化、提供多重序列化方式梦裂、hessian【本地存根方式】似枕、rmi等等吧