RPC
核心: 遠程方法調(diào)用
有兩個微服務項目a,b,a中需要遠程調(diào)用b的方法,通過rpc框架,a中只需要使用一個接口調(diào)用其方法,來實現(xiàn)調(diào)用到b中接口實現(xiàn)類的具體方法內(nèi)代碼
和本地方法調(diào)用相反,遠程方法調(diào)用的方法體是在其他項目里,調(diào)用的項目中只存在一個接口
實現(xiàn)
服務提供方
- 接收網(wǎng)絡請求:rpc框架內(nèi)部啟動tomcat來接收網(wǎng)絡請求
- 處理網(wǎng)絡請求:rpc框架中自定義一個servlet,通過service()來內(nèi)部處理網(wǎng)絡請求
- 網(wǎng)絡請求內(nèi)容:調(diào)用方的網(wǎng)絡請求包含三部分內(nèi)容:接口名,方法名,方法參數(shù)
- 執(zhí)行服務調(diào)用:需要根據(jù)接口名找到其實現(xiàn)類執(zhí)行方法體,通過本地注冊表map來存儲接口及其實現(xiàn)類,那么b中啟動時就分為兩步
- 將接口及其實現(xiàn)類添加到本地注冊表
- 啟動tomcat容器
服務調(diào)用方只需要按照參數(shù)規(guī)定構(gòu)建http請求發(fā)送接收即可
服務調(diào)用方
本質(zhì)是構(gòu)建一次http請求,如何將其優(yōu)化為只需要調(diào)用接口方法呢
-->只需要讓接口有實現(xiàn)類,然后實現(xiàn)類的方法內(nèi)部構(gòu)建http請求
-->動態(tài)代理生成實現(xiàn)類,在invoke增強方法內(nèi)獲取參數(shù)構(gòu)建http請求
注冊中心
用于實現(xiàn)服務注冊與發(fā)現(xiàn),確保服務消費者和提供者之間的動態(tài)尋址和通信
核心為 共享數(shù)據(jù),心跳機制,監(jiān)聽機制
想要不把服務提供方的ip地址寫死,引入注冊中心,將接口作為key,url組成list作為值進行存儲
負載均衡實現(xiàn)?
比如將url組成的list取出,然后利用指定隨機算法取出目標url
為什么要采用redis,nacos等單獨項目
因為要保證注冊中心的map是多線程共享的
注冊中心還需要提供哪些實現(xiàn)?
心跳機制:如果一臺主機掛掉,則需要到list中刪除對應url
本地緩存,變更監(jiān)控機制
采用注冊中心,那調(diào)用方每發(fā)一次請求都需要到注冊中心查數(shù)據(jù),然后再發(fā)送請求,等于多了一次網(wǎng)絡io
那么可以采用本地緩存存儲map數(shù)據(jù)
為了保證數(shù)據(jù)一致性就需要給注冊中心實現(xiàn)變更監(jiān)控機制,保證map變更要同步本地緩存中的數(shù)據(jù)
注重點
- 拓展性
- 網(wǎng)絡請求對象序列化接口應對多次序列化方式
- 提供參數(shù)配置來啟動不同類型的網(wǎng)絡容器
拓展
報錯重試機制
記錄fengdongnan的知識產(chǎn)出文檔,歡迎大家來一起交流學習