Dubbo測試環境服務調用隔離這麼玩對麼

2020-09-05 猿天地

背景闡述

前幾天,有位同學問我一個關於 Dubbo 的問題。他的訴求是這樣子的:

訴求一

第一個訴求是本地開發的時候想自己調用自己的服務,比如自己在改 A 服務,然後出問題了,本地再啟動一個 B 服務,A 服務調用 B 服務直接排查問題。

目前的問題是用的同一個註冊中心,所以會調用到其他的服務實例。

還有就是去網上找了一些文章的資料,按照資料上的配置沒有效果,也就是在@Reference 配置 url 來指定調用的服務地址。

配置如下:

@Reference(url=&34;)

訴求二

目前他們的測試環境沒有使用 Docker 來部署,而且每個服務只部署了一個實例。問題就是當一個項目並行開發時有多個分支,這些分支得合併後一起部署測試。經常會出現代碼衝突等問題。

還有就是快要上線時,需要下掉其他的分支做回歸測試。但是會出現其他團隊也要同一天上線,就只能協商等待來解決。

最好的方式就是可以實現一個分支部署一個實例,對於他們目前的這個規模和投入這個暫時做不了。所以他向我請教,有沒有什麼更好更快的方式。

解決方案

既然找了我,我還是給出一些建議吧,不一定很好,僅供參考。

訴求一解決方案

@Reference

在@Reference 中指定 url 是可以的,只是那位同學配置的地址有問題,在地址後面應該加上接口和版本的信息。

@Reference(url=&34;)

本地配置文件

在@Reference 中指定 url 不好的方式就是跟代碼耦合了,很容易出現將這種代碼提交的情況。所以我們介紹另一種方式。

在自己電腦的用戶目錄下建一個 dubbo-resolve.properties 文件,路徑是 ${user.home}/dubbo-resolve.properties ,然後文件裡配置好需要直連的服務信息,不需要修改本地工程的其他配置信息。

dubbo-resolve.properties

com.xxx.xxx=dubbo://localhost:20880/com.xxx.xxx:1.0.0

com.xxx.xxx 是接口的全路徑,等於號後面就是服務的地址了。

訴求二解決方案

既然短時間內不太可能去改造部署系統,那麼可以先簡單的處理。目前他們就兩個團隊共用一套測試環境,我認為可以再新增一套環境來進行團隊間的隔離。

對於入口處的 Web 程序或者網關,可以弄兩個域名解決。主要是內部服務的調用需要進行隔離,比如我 A 團隊部署的服務不能讓 B 團隊調用到,因為分支不一樣會出問題。

註冊隔離

註冊隔離指的是在服務註冊的時候就將兩個團隊的測試服務分別註冊,比如各自使用一個獨立的註冊中心。

獨立的註冊中心肯定可以解決問題,但是完全沒必要這麼麻煩。他們註冊中心用的 Nacos,可以使用 Nacos 的 namespace 來隔離即可。

-Ddubbo.registry.address=nacos://api.nacos.beta.xxx.com:8848?namespace=xxx

本地配置文件

同樣也可以用本地配置文件的方式來指定調用的服務,這個方式的前提是部署的機器是獨立的,不能共用。如果新增了新的接口需要修改配置文件。

控制 Dubbo 路由或者負載均衡

控制路由或者負載均衡都是為了實現同樣的效果,也就是把所有的服務提供者信息給你,你自己選擇一個去調用。

官方文檔:

http://dubbo.apache.org/zh-cn/docs/dev/impls/router.html

http://dubbo.apache.org/zh-cn/docs/dev/impls/load-balance.html

總結

對於訴求一的解決方案,建議使用本地配置文件的方式。不需要改動代碼,比較方便。

對於訴求二的解決方案,建議使用註冊隔離的方式。這是最徹底的方式,用了註冊隔離,也就不用在想辦法去控制路由了,因為註冊上來的服務就是我這套環境需要的,不需要的要註冊信息在另一個命名空間裡面,相互不影響。

關於作者:尹吉歡,簡單的技術愛好者,《Spring Cloud 微服務-全棧技術與案例解析》, 《Spring Cloud 微服務 入門 實戰與進階》作者, 公眾號 猿天地 發起人。


相關焦點

  • SpringBoot中使用dubbo實現RPC調用
    Dubbo(來自於阿里巴巴)Dubbo是一個分布式服務框架,致力於提供高性能和透明化的PRC遠程調用服務調用方案。(SpringCloud有一定的入侵)通過maven的install &deploy命令把interface和Model層發布到倉庫中,服務調用方只需要依賴interface和model層即可。
  • 本地調試dubbo服務的幾種方法
    一、通過修改版本號來區分本地版本把本地的某些服務版本修改調,和測試環境的做區分,測試環境就不會訪問到你本地啟動的服務了。3、查看提供者都提供了什麼服務,ls命令,ls com.cxxx.xxxx**dubbo>lscom.test.DemoServicedubbo>ls com.test.DemoServicequeryDemoPageListinsertDemolist4、調用方法
  • 服務應用突然宕機了?別怕,Dubbo 幫你自動搞定服務隔離
    我們可以通過修改 <dubbo:registry> 中的 group 屬性修改默認值,這樣修改之後不同分組的 dubbo 服務不會互相影響,也不會互相調用,可以用於環境隔離。接下來 Service 就是服務類的全路徑,包括包路徑。
  • Dubbo 源碼之服務調用過程(上)
    簡介本篇文章主要對 Dubbo 中的幾種服務調用方式,以及從雙向通信的角度對整個通信過程進行了詳細的分析。按照通信順序,通信過程包括服務消費方發送請求,服務提供方接收請求,服務提供方返迴響應數據,服務消費方接收響應數據等過程。
  • 網易考拉應用的dubbo泛化調用,是如何實現的?
    在網易考拉,泛化調用的使用場景比較廣泛,比如GOApi 接口測試平臺,無線網關等都是通過泛化調用直接調用後端的dubbo服務,那麼什麼是泛化調用呢?簡介在dubbo 官方文檔中,泛化調用的定義如下泛化接口調用方式主要用於客戶端沒有 API 接口及模型類元的情況,參數及返回值中的所有 POJO 均用 Map 表示,通常用於框架集成,比如:實現一個通用的服務測試框架
  • 教程丨使用MeterSphere做Dubbo接口測試
    註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連結推送變更數據給消費者;5. 服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用;6.
  • 使用SpringBoot+Dubbo 搭建一個簡單的分布式服務
    啟動測試開始實戰 2 :實現服務接口 dubbo-interface1. dubbo-interface 項目創建2.簡單來說 Dubbo 是一個分布式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。Dubbo 目前已經有接近 23k 的 Star ,Dubbo的Github 地址:https://github.com/apache/incubator-dubbo。
  • SpringCloud集成Dubbo實現RPC調用
    發現dubbo的rpc框架學習成本較高,代碼入侵性強,本身生態不完整,需要整合多個外部組件,故選擇了相對性能弱一點的Spring Cloud全家桶。直到Spring Cloud Alibaba的出現,使用Nacos作為服務發現與註冊,同時兼容使用Feign的http方式和使用Dubbo的rpc方式調用。
  • Dubbo調用過程解析
    過程說明dubbo消費者調用接口,將請求封裝為Request;發送請求,直接返回ResponseFuture(實現為DefaultFuture);dubbo調用默認為同步方式,即future.get()。
  • Dubbo 生態添新兵,Dubbo Admin 發布 v0.1
    /config/dubbo/dubbo.propertiesdubbo.registry.address=zookeeper://127.0.0.1:2181dubbo.metadata-report.address=zookeeper://127.0.0.1:2181配置中心裡的地址會覆蓋掉本地application.properties的配置。
  • Dubbo 中超簡單實用的功能 你知道幾個?
    dubbo功能非常完善,很多時候我們不需要重複造輪子,下面列舉一些你不一定知道,但是很好用的功能;直連Provider在開發及測試環境下,可能需要繞過註冊中心,只測試指定服務提供者,這時候可能需要點對點直連,點對點直連模式,將以服務接口為單位,忽略註冊中心的提供者列表,A 接口配置點對點
  • Dubbo 一些你不一定知道但是很好用的功能
    對編程感興趣的可以私信我獲取資料,或者點擊編程技術交流學習來與我面對面交流dubbo功能非常完善,很多時候我們不需要重複造輪子,下面列舉一些你不一定知道,但是很好用的功能;直連Provider在開發及測試環境下,可能需要繞過註冊中心,只測試指定服務提供者,這時候可能需要點對點直連
  • 源碼講解Dubbo服務暴露過程
    上一篇,我們講解了Dubbo服務調用的整體過程,本節我們源碼講解一下Dubbo服務暴露過程。說明所謂服務暴露,即是說服務可以被其他方調用,暴露形式有兩種:,這樣到會如果有本地調用,直接從本地服務調用即可,不必發起遠程調用;所有真實對象調用都是委託給代理,通過代理創建Invoker對象來實現調用;
  • Dubbo-go 源碼筆記(一)Server 端開啟服務過程
    其中 app 文件夾下保存 go 源碼,assembly 文件夾下保存可選的針對特定環境的 build 腳本,profiles 下保存配置文件。對於 dubbo-go 框架,配置文件非常重要,沒有文件將導致服務無法啟動。
  • Apache Dubbo反序列化漏洞
    簡介Dubbo是阿里巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的RPC實現服務的輸出和輸入功能,可以和Spring框架無縫集成。它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動註冊和發現。
  • Django測試工具平臺(二)之請求dubbo接口
    如果你對python如何請求Dubbo不熟悉,可以參考之前寫的一篇文章httprunner自動化實例—Dubbo接口測試,本文主要講解如何通過django實現功能。)同樣在dubbo_client.py 實現相關邏輯class TelnetClient(object): """通過telnet連接dubbo服務, 執行shell命令, 可用來調用dubbo接口 """ def __init__(self, server_host, server_port
  • 用隧道協議實現不同dubbo集群間的透明通信
    例如圖中A/B兩個網絡隔離的集群,兩者只能通過專線進行通信。但是對於在裡面的應用來說,調用另外一個集群的dubbo服務(例如app1調用app3)依舊和原來的方式一模一樣,無需做任何修改。但是業務確需要一大堆原來單元的基礎服務。而不同單元之間的網絡又無法打通(安全性要求)。
  • 實操塗鴉智能項目,帶你探索Dubbo-go 億級流量
    背景在塗鴉智能,dubbo-go 已經作為了 golang 服務與原有 dubbo 集群打通的首選 RPC 框架。接口信息,調用 dubbo 接口是基於 dubbo 泛化調用。但是,作為一個核心應用,跑通閉環離上生產環境還有很長的路要走,特別是使用了當時穩定性待測試的新框架。整個測試加上功能補全,整整花費了一個季度的時間,直到項目趨於穩定,壓測效果也良好。單臺網關機器( 2C 8G )全鏈路模擬真實環境壓測達到 2000 QPS。
  • springboot整合dubbo+zookeeper(三)
    2.寫好配置文件(一定要寫上dubbo.scan.base-packages該配置會掃描你寫的服務並註冊到zookeeper)3.具體服務實現4.運行springboot啟動類即可消費者相關代碼及配置pom主要配置:<groupId>com.dubbo.test<
  • springcloud小技能:服務註冊&發現如何隔離
    用過dubbo的都知道,dubbo服務發布&訂閱有2個重要的參數:version和group。;,新版本就可以申明為version="2.0.0";group主要作用就是某個接口有多個實現類,那麼通過group區分,消費者通過group參數決定調用哪個