摘要:背景目前應(yīng)用越來越廣泛,但和的體系接入困難,所以我們需要實(shí)現(xiàn)端的邏輯。使用實(shí)現(xiàn)一個(gè)可用的完全沒有問題,最簡單的實(shí)現(xiàn)則是在對應(yīng)集群注冊接口與機(jī)器的映射關(guān)系,便可以訪問對應(yīng)接口。在評估了各種實(shí)現(xiàn)方案后,決定放棄開發(fā)端,使用的模式。
背景
目前nodejs應(yīng)用越來越廣泛,但和java的dubbo體系接入困難,所以我們需要實(shí)現(xiàn)node端的dubbo provider邏輯。java的dubbo provider是和consumer在一個(gè)jar中,提供了服務(wù)配置、注冊、集群與負(fù)載均衡、監(jiān)控和多種協(xié)議。使用nodejs實(shí)現(xiàn)一個(gè)可用的dubbo provider SDK完全沒有問題,最簡單的實(shí)現(xiàn)則是在對應(yīng)ZK集群注冊接口與機(jī)器IP的映射關(guān)系,consumer便可以訪問對應(yīng)rpc接口。可是,在可用基礎(chǔ)上,仍然需要提供相關(guān)配套設(shè)施如配置、注冊和監(jiān)控等,達(dá)到商業(yè)上的高可用。在評估了各種實(shí)現(xiàn)方案后,決定放棄開發(fā)node provider端sdk,使用node+agent的proxy模式。
agent是一個(gè)可與node服務(wù)交互通信的,并提供dubbo provider功能的java服務(wù)。agent部署在nodejs服務(wù)機(jī)器上,扮演dubbo服務(wù)的入口角色,同時(shí)node服務(wù)返回的數(shù)據(jù)類型由agent進(jìn)行轉(zhuǎn)換映射,如 object(node) -> Map(Java), 具體轉(zhuǎn)換規(guī)則則由node接口提供方提供調(diào)用接口jar包,consumer使用jar包進(jìn)行調(diào)用即可。
整體架構(gòu)其中 vitamin為基于數(shù)據(jù)庫的統(tǒng)一配置平臺(tái),解耦各個(gè)系統(tǒng)的強(qiáng)依賴。
Node中間件Node中間件提供dubbo接口上報(bào)和服務(wù)提供功能。上報(bào)http接口要暴露的Dubbo服務(wù)配置信息(interface+version+method)即映射關(guān)系,node的提供rpc服務(wù)以HTTP形式存在(兼容之前業(yè)務(wù)),由agent進(jìn)行調(diào)用,數(shù)據(jù)類型為JSON。
Agent根據(jù)Vitamin的實(shí)時(shí)配置向zookeeper注冊dubbo服務(wù)(泛化)
泛化服務(wù)每個(gè)method會(huì)根據(jù)Vitamin中的映射關(guān)系找到對應(yīng)的http本地接口(localhost)進(jìn)行調(diào)用
-入?yún)⒑头祷刂颠M(jìn)行json和Java類型的轉(zhuǎn)換
Node業(yè)務(wù)方Node提供普通的HTTP+JSON服務(wù),可復(fù)用歷史接口
提供一個(gè)對應(yīng)dubbo接口的jar包,需保證http接口json和jar中的model轉(zhuǎn)換關(guān)系可行
上游業(yè)務(wù)拿到j(luò)ar包依賴之后,像普通dubbo服務(wù)一樣調(diào)用即可
類型轉(zhuǎn)換Dubbo方法入?yún)⑥D(zhuǎn)換成NodeJs的http調(diào)用參數(shù):強(qiáng)類型轉(zhuǎn)弱類型,可直接轉(zhuǎn)換
NodeJs服務(wù)返回的json轉(zhuǎn)Dubbo方法返回值:弱類型轉(zhuǎn)強(qiáng)類型
解決方案:Dubbo泛化服務(wù)返回Map,consumer端拿到這個(gè)Map會(huì)自動(dòng)根據(jù)client.jar的方法返回值類型(支持泛型)進(jìn)行相應(yīng)的字段注入
agent不會(huì)在調(diào)用nodejs服務(wù)進(jìn)行熔斷,即nodejs服務(wù)大量超時(shí)可能會(huì)讓agent連接池或線程池占滿
agent進(jìn)程的生命周期由node進(jìn)程維護(hù),通過基于配置中心的心跳機(jī)制檢測agent進(jìn)程是否存活
錯(cuò)誤排查定位由于多了一層調(diào)用,更為復(fù)雜
可能存在的單機(jī)性能問題
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/76568.html
摘要:背景目前應(yīng)用越來越廣泛,但和的體系接入困難,所以我們需要實(shí)現(xiàn)端的邏輯。使用實(shí)現(xiàn)一個(gè)可用的完全沒有問題,最簡單的實(shí)現(xiàn)則是在對應(yīng)集群注冊接口與機(jī)器的映射關(guān)系,便可以訪問對應(yīng)接口。在評估了各種實(shí)現(xiàn)方案后,決定放棄開發(fā)端,使用的模式。 背景 目前nodejs應(yīng)用越來越廣泛,但和java的dubbo體系接入困難,所以我們需要實(shí)現(xiàn)node端的dubbo provider邏輯。java的dubbo ...
摘要:續(xù)上篇所需技術(shù)等說明本編講解一個(gè)分布式架構(gòu)的整個(gè)流程,首先對上編中的工程作一些小小的改動(dòng),以支持接下來的實(shí)驗(yàn)。本篇中,定義了服務(wù)提供者,注冊中心及客戶端消費(fèi)者三者關(guān)系。一服務(wù)提供者這里首先對服務(wù)端進(jìn)行改造。 (續(xù)上篇) 所需技術(shù):spring、mybatis、druid、flyway、logback、nodejs,zookeeper,dubbo,dubbo-admin等;說明:本編講解...
摘要:是的默認(rèn)負(fù)載均衡策略。一致性哈希負(fù)載均衡。所以負(fù)載均衡是分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一。考慮主要是如何讓下游接收到的請求是均勻分布的第層客戶端層反向代理層的負(fù)載均衡。通過輪詢第層反向代理層層的負(fù)載均衡。 一、 什么是負(fù)載均衡? 什么是負(fù)載均衡? 記得第一次接觸 Nginx 是在實(shí)驗(yàn)室,那時(shí)候在服務(wù)器部署網(wǎng)站需要用 Nginx 。Nginx 是一個(gè)服務(wù)組件,用來反向代理、負(fù)載平衡...
摘要:學(xué)習(xí)筆記的設(shè)計(jì)目的動(dòng)態(tài)注冊發(fā)現(xiàn)服務(wù),軟負(fù)載均衡和服務(wù)降級(jí)。一下是整個(gè)工程的內(nèi)容公共定義一般和共享的接口應(yīng)該單獨(dú)一個(gè)包進(jìn)行定義,方便雙方的共享。暴露的服務(wù)實(shí)現(xiàn)如下入口類的實(shí)現(xiàn)如下實(shí)現(xiàn)其文件和類似其配置如下,聲明了對服務(wù)的引用。 Dubbo學(xué)習(xí)筆記 Dubbo的設(shè)計(jì)目的 動(dòng)態(tài)注冊、發(fā)現(xiàn)服務(wù),軟負(fù)載均衡和服務(wù)降級(jí)。 描述服務(wù)依賴關(guān)系,描述整體服務(wù)架構(gòu)。 統(tǒng)計(jì)服務(wù)負(fù)載,按需擴(kuò)展容量。 簡單...
摘要:一前言框架對于開發(fā)來說并不陌生,通常新增一個(gè)接口,我們可以直接用測試。但是工作中有時(shí)遇到一些接口的實(shí)現(xiàn)會(huì)獲取上下文中的信息,如果需要測試的話就只能另外編寫代碼設(shè)置上下文,調(diào)用接口實(shí)現(xiàn),相對來說會(huì)比較麻煩。 一、前言 dubbo框架對于java開發(fā)來說并不陌生,通常新增一個(gè)dubbo接口,我們可以直接用telnet測試。但是工作中有時(shí)遇到一些dubbo接口的實(shí)現(xiàn)會(huì)獲取上下文中的信息,如果...
閱讀 1411·2021-10-11 11:12
閱讀 3244·2021-09-30 09:46
閱讀 1633·2021-07-28 00:14
閱讀 3132·2019-08-30 13:49
閱讀 2581·2019-08-29 11:27
閱讀 3211·2019-08-26 11:52
閱讀 598·2019-08-23 18:14
閱讀 3435·2019-08-23 16:27