摘要:每個(gè)都可以通過(guò)其路徑唯一標(biāo)識(shí),同時(shí)每個(gè)節(jié)點(diǎn)還可以存儲(chǔ)少量數(shù)據(jù)。監(jiān)聽(tīng)機(jī)制,監(jiān)聽(tīng)某個(gè)當(dāng)該發(fā)生變化時(shí),會(huì)回調(diào)該,但是這個(gè)是一次性的,下次需要監(jiān)聽(tīng)時(shí)還得再注冊(cè)一次。
前面的文章中 我用netty實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的一對(duì)一的RPC
11個(gè)類(lèi)實(shí)現(xiàn)簡(jiǎn)單java rpc
接下來(lái)的文章中 我將使用zookeeper作為rpc調(diào)用的分布式注冊(cè)中心 從而實(shí)現(xiàn)多對(duì)多(多個(gè)調(diào)用者,多個(gè)提供者)的rpc調(diào)用,負(fù)載均衡及相應(yīng)的分布式協(xié)調(diào)功能
首先簡(jiǎn)單介紹下zookeeperzookeeper是hadoop中一個(gè)重要組件,其主要是作為分布式協(xié)調(diào)服務(wù)
zookeeper采用節(jié)點(diǎn)樹(shù)的數(shù)據(jù)模型,類(lèi)似linux文件系統(tǒng),/,/app1,/app2 比較簡(jiǎn)單
每個(gè)節(jié)點(diǎn)稱(chēng)做一個(gè)ZNode。每個(gè)ZNode都可以通過(guò)其路徑唯一標(biāo)識(shí),同時(shí)每個(gè)節(jié)點(diǎn)還可以存儲(chǔ)少量數(shù)據(jù)。
節(jié)點(diǎn)可分為常規(guī)節(jié)點(diǎn),臨時(shí)節(jié)點(diǎn)和順序節(jié)點(diǎn)
還有兩個(gè)比較重要的東西 session和watcher
每個(gè)zk客戶(hù)端與zk連接時(shí)會(huì)創(chuàng)建一個(gè)session,在設(shè)置的sessionTimeOut內(nèi),客戶(hù)端會(huì)與zk進(jìn)行心跳包的定時(shí)發(fā)送,從而感知每個(gè)客戶(hù)端是否宕機(jī),如果創(chuàng)建某個(gè)臨時(shí)Znode的對(duì)應(yīng)session銷(xiāo)毀時(shí),相應(yīng)的臨時(shí)節(jié)點(diǎn)也會(huì)被zk刪除。
watcher:監(jiān)聽(tīng)機(jī)制,監(jiān)聽(tīng)某個(gè)Znode 當(dāng)該znode發(fā)生變化時(shí),會(huì)回調(diào)該watcher,但是這個(gè)watcher是一次性的,下次需要監(jiān)聽(tīng)時(shí)還得再注冊(cè)一次。
當(dāng)然 這幾個(gè)只是zookeeper的各種特性之一,能實(shí)現(xiàn)注冊(cè)中心的也不止zookeeper(例如redis),注冊(cè)中心也只是zk的功能之一,還有互斥鎖,樂(lè)觀鎖,命名服務(wù)等也是zk能實(shí)現(xiàn)的,本文只講述rpc框架需要的3個(gè)重要內(nèi)容
臨時(shí)節(jié)點(diǎn),session,watcher其余內(nèi)容請(qǐng)讀者自行查閱
(這是我的思路 可能沒(méi)和dubbo框架一模一樣)
服務(wù)名稱(chēng)作為次級(jí)znode,下層的znode為對(duì)應(yīng)的類(lèi)型,調(diào)用者還是提供者
對(duì)應(yīng)的類(lèi)型下面是他們的URL 即對(duì)應(yīng)機(jī)器的IP地址 URL這個(gè)znode為臨時(shí)節(jié)點(diǎn)
提供者服務(wù)啟動(dòng)后向zookeeper注冊(cè)他有的services,并將自己的ip地址和端口作為路徑,創(chuàng)建對(duì)應(yīng)的URL臨時(shí)節(jié)點(diǎn)
調(diào)用者調(diào)用相應(yīng)服務(wù)時(shí),找到對(duì)應(yīng)的service節(jié)點(diǎn),獲得service所有的子節(jié)點(diǎn),并且watch service節(jié)點(diǎn),然后同樣注冊(cè)自己的znode節(jié)點(diǎn)
每個(gè)調(diào)用端需明確提供者和調(diào)用者的數(shù)量以及提供者相應(yīng)的IP地址
之后調(diào)用端獲得 service/providers的所有子節(jié)點(diǎn) 即獲得所有的提供者的IP 使用對(duì)應(yīng)負(fù)載均衡策略連接其中一個(gè)ip地址,進(jìn)行rpc調(diào)度
當(dāng)提供者或調(diào)用者出現(xiàn)宕機(jī)或者網(wǎng)絡(luò)故障時(shí),對(duì)應(yīng)session的臨時(shí)znode會(huì)被銷(xiāo)毀,即哪個(gè)IP的機(jī)子宕機(jī)了,他對(duì)應(yīng)的url節(jié)點(diǎn)在sessionTimeOut后,就會(huì)被銷(xiāo)毀,此時(shí)由于service節(jié)點(diǎn)已發(fā)生了變化,所有可用調(diào)用者都會(huì)收到watcher的通知,此時(shí)重新獲得所有的調(diào)用者提供者IP及其數(shù)量,并繼續(xù)監(jiān)聽(tīng),從而悉知調(diào)用端和服務(wù)端的服務(wù)可用情況。
常見(jiàn)負(fù)載均衡策略有(權(quán)重)輪詢(xún),隨機(jī),最小連接數(shù),一致性hash等等
后續(xù)文章會(huì)分析并選取其中一種進(jìn)行實(shí)現(xiàn)
以上為rpc框架使用zookeeper作為注冊(cè)中心的思路
下篇博客將是對(duì)上述思路的具體代碼實(shí)現(xiàn),并整合進(jìn)RPC框架
http://blog.csdn.net/we_phone...
歡迎持續(xù)關(guān)注我的博客及我的github:MeiZhuoRPC
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68336.html
摘要:等之所以支持跨語(yǔ)言,是因?yàn)樗麄冏约憾x了一套結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式,如的,用于編解碼對(duì)象,作為各個(gè)語(yǔ)言通信的中間協(xié)議。 前段時(shí)間覺(jué)得自己一直用別人的框架,站在巨人的肩膀上,也該自己造造輪子了 一時(shí)興起 就著手寫(xiě)起了RPC框架 這里寫(xiě)了系列博客拿給大家分享下 這篇是開(kāi)篇的思路篇 項(xiàng)目最終的代碼放在了我的github上https://github.com/wephone/Me... 歡迎sta...
摘要:項(xiàng)目版本源碼在上一博文中跟大家講了的實(shí)現(xiàn)思路思路畢竟只是思路那么這篇就帶著源碼給大家講解下實(shí)現(xiàn)過(guò)程中的各個(gè)具體問(wèn)題讀懂本篇需要的基本知識(shí)若尚未清晰請(qǐng)自行了解后再閱讀本文動(dòng)態(tài)代理框架的基本使用的基本配置最終項(xiàng)目的使用如下調(diào)用端代碼及配置測(cè)試類(lèi) 項(xiàng)目1.0版本源碼 https://github.com/wephone/Me... 在上一博文中 跟大家講了RPC的實(shí)現(xiàn)思路 思路畢竟只是思路...
摘要:是一個(gè)相對(duì)比較新的微服務(wù)框架,年才推出的版本雖然時(shí)間最短但是相比等框架提供的全套的分布式系統(tǒng)解決方案。提供線程池不同的服務(wù)走不同的線程池,實(shí)現(xiàn)了不同服務(wù)調(diào)用的隔離,避免了服務(wù)器雪崩的問(wèn)題。通過(guò)互相注冊(cè)的方式來(lái)進(jìn)行消息同步和保證高可用。 Spring Cloud 是一個(gè)相對(duì)比較新的微服務(wù)框架,...
摘要:的服務(wù)治理平臺(tái)發(fā)源于早期的個(gè)人項(xiàng)目??蛻?hù)端發(fā)現(xiàn)模式要求客戶(hù)端負(fù)責(zé)查詢(xún)注冊(cè)中心,獲取服務(wù)提供者的列表信息,使用負(fù)載均衡算法選擇一個(gè)合適的服務(wù)提供者,發(fā)起接口調(diào)用請(qǐng)求。系統(tǒng)和系統(tǒng)之間,少不了數(shù)據(jù)的互聯(lián)互通。隨著微服務(wù)的流行,一個(gè)系統(tǒng)內(nèi)的不同應(yīng)用進(jìn)行互聯(lián)互通也是常態(tài)。 PowerDotNet的服務(wù)治理平臺(tái)發(fā)源于早期的個(gè)人項(xiàng)目Power.Apix。這個(gè)項(xiàng)目借鑒了工作過(guò)的公司的服務(wù)治理方案,站在...
摘要:英文全名為,也叫遠(yuǎn)程過(guò)程調(diào)用,其實(shí)就是一個(gè)計(jì)算機(jī)通信協(xié)議,它是一種通過(guò)網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù)而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。 Hello,Dubbo 你好,dubbo,初次見(jiàn)面,我想和你交個(gè)朋友。 Dubbo你到底是什么? 先給出一套官方的說(shuō)法:Apache Dubbo是一款高性能、輕量級(jí)基于Java的RPC開(kāi)源框架。 那么什么是RPC? 文檔地址:http://dubbo.a...
閱讀 1352·2019-08-30 15:44
閱讀 1414·2019-08-29 18:42
閱讀 464·2019-08-29 13:59
閱讀 803·2019-08-28 17:58
閱讀 2848·2019-08-26 12:02
閱讀 2448·2019-08-23 18:40
閱讀 2438·2019-08-23 18:13
閱讀 3138·2019-08-23 16:27