最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Dubbo Service Mesh基礎(chǔ)架構(gòu)組件改造

 更新時(shí)間:2023年03月02日 09:23:23   作者:Redick01  
Service Mesh這個(gè)“熱”詞是2016年9月被“造”出來(lái),而今年2018年更是被稱為service Mesh的關(guān)鍵之年,各家大公司都希望能在這個(gè)思潮下領(lǐng)先一步

前言

公司的分布式架構(gòu)是基于Alibaba Dubbo實(shí)現(xiàn)的,微服務(wù)的相關(guān)治理也是基于Alibaba Dubbo做的,隨著公司系統(tǒng)規(guī)模的增長(zhǎng)服務(wù)發(fā)布,服務(wù)的治理,注冊(cè)中心的壓力,硬件成本等問(wèn)題逐漸的凸顯出來(lái),尤其是服務(wù)發(fā)布和服務(wù)治理,比如多版本的發(fā)布,金絲雀發(fā)布,精細(xì)化的流量控制等,用Alibaba Dubbo實(shí)現(xiàn)這些分布式語(yǔ)義很麻煩,在Service Mesh架構(gòu)下,解決這些問(wèn)題都會(huì)變得容易,基于此,本篇介紹一下公司Dubbo項(xiàng)目Service Mesh改造方案。

其他基礎(chǔ)架構(gòu)

除了Alibaba Dubbo,公司使用Zookeeper作為配置中心,分布式消息隊(duì)列rocketmq,分布式緩存redis,阿里云分庫(kù)分表產(chǎn)品DRDS,阿里云關(guān)系型數(shù)據(jù)庫(kù)RDS,這些基礎(chǔ)組件在整個(gè)Service Mesh架構(gòu)的改造中是不變的。

Dubbo項(xiàng)目Service Mesh改造具體實(shí)現(xiàn) 基礎(chǔ)技術(shù)方案

Dubbo架構(gòu)改造成Service Mesh架構(gòu)就要Dubbo框架從項(xiàng)目中移除,我們這里將Dubbo框架移除,并且將服務(wù)端接口全部改造成rest接口,這就需要服務(wù)端使用新的容器發(fā)布rest接口,所以干脆就將項(xiàng)目改造成Sping Boot Web應(yīng)用,協(xié)議問(wèn)題沒(méi)有了,但是如何盡可能改動(dòng)小的能夠讓消費(fèi)端快速的接入Sping Boot Web應(yīng)用的服務(wù)端就成為了難點(diǎn),由于Dubbo項(xiàng)目API模塊的作用與Spring Cloud Feign模塊的作用十分相似,模塊內(nèi)都是一些interface,需要服務(wù)端定義xxxServiceImpl去實(shí)現(xiàn)各個(gè)interface,然后消費(fèi)者通過(guò)Spring依賴注入將interface注入并使用,這就使得Dubbo最復(fù)雜的服務(wù)間調(diào)用方式有了解決的方案。

基礎(chǔ)組件改造

  • 根pom.xml引入SpringBoot parent,增加 spring-cloud-dependencies import引用
  • 刪除所有dubbo相關(guān)引用。

這一步驟簡(jiǎn)單來(lái)說(shuō)就是將pom.xml中Dubbo的所有jar依賴全部刪除,并且引入SpringBoot parent和 spring-cloud-dependencies的引用,例如:

改造前:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.8.4</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-log4j12</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>log4j</artifactId>
                    <groupId>log4j</groupId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.curator</groupId>
                    <artifactId>curator-client</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>curator-framework</artifactId>
                    <groupId>org.apache.curator</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>zookeeper</artifactId>
                    <groupId>org.apache.zookeeper</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
            <!-- 移除log4j的打印框架,否則,log 4j日志不生效 -->
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-log4j12</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>log4j</artifactId>
                    <groupId>log4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>

改造后:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.3.RELEASE</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>feign-hystrix</artifactId>
                    <groupId>io.github.openfeign</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-cloud-starter-netflix-archaius</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-cloud-netflix-ribbon</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>

Dubbo門(mén)面API改造

  1. pom.xml增加spring-cloud-starter-openfeign引用。
  2. 刪除所有Dubbo相關(guān)引用Dubbo相關(guān)配置文件。
  3. Dubbo原有API接口是標(biāo)準(zhǔn)的JAVA接口定義,與Feign Restful接口定義十分類(lèi)似。這里可以在原有的API接口基礎(chǔ)上增加 @FeignClient、@RequestMapping等注解,將一個(gè)普通的API接口改造成一個(gè)Feign Restful接口,后續(xù)會(huì)使用Feign這個(gè) Restful框架來(lái)處理服務(wù)間調(diào)用等問(wèn)題。由于Feign本身是自帶了Ribbon負(fù)載均衡,服務(wù)訪問(wèn)者經(jīng)過(guò)負(fù)載均衡后會(huì)找到服務(wù)提供者的一個(gè) IP+Port進(jìn)行調(diào)用,這與K8S Service要求的服務(wù)名調(diào)用的方式相沖突,所以必須想辦法去掉Feign自帶的負(fù)載均衡。好在 @FeignClient可以手工指定一個(gè)固定的調(diào)用地址,這里可以把這個(gè)地址設(shè)置成K8S Servicename名稱,從而實(shí)現(xiàn)了通過(guò)Feign對(duì) K8S Service服務(wù)名調(diào)用的能力。此部分需要每個(gè)API接口增加注解一次,改造工作量相對(duì)可控。
  4. 由于Feign要求接口使用Restful格式,所以接口中的每個(gè)抽象方法都必須添加@RequestMapping,@GetMapping,@PostMapping等注解暴露成一個(gè)Restful資源地址。此部分改造涉及到每個(gè)API接口的每個(gè)抽象方法,是整個(gè)方案里改動(dòng)量最大的一部分。
  5. 此部分整體改造工作量取決于原有的Dubbo項(xiàng)目包含多少個(gè)API接口,以及每個(gè)API包含多少個(gè)抽象方法。

改造前示例:

public interface IOdaApi {
    ModelsReturn<ModelsCommonResponse<ConsumptionODAResponse>> consumptionODA(ConsumptionODARequest consumptionODARequest);
    ModelsReturn<ModelsCommonResponse<RefundODAResponse>> refundODA(RefundODARequest refundODARequest);
    ModelsReturn<ModelsCommonResponse<ConsumptionODAResponse>> consumptionQueryODA( ConsumptionQueryODARequest consumptionQueryODARequest);
    ModelsReturn<ModelsCommonResponse<String>> repayODA(RepayODARequest repayODARequest);
}

改造后示例:

@FeignClient(name = "miss-xxx-svc", url = "http://miss-xxx-svc:8080")
public interface IOdaApi {
    @PostMapping(value = "/xxxService/consumptionODA")
    ModelsReturn<ModelsCommonResponse<ConsumptionODAResponse>> consumptionODA(@RequestBody ConsumptionODARequest consumptionODARequest);
}

Dubbo Provider端改造

  1. pom.xml增加spring-boot-starter-web、spring-cloud-starter-openfeign等引用,同時(shí)增加SpringBoot mainClass 標(biāo)準(zhǔn)啟動(dòng)項(xiàng)配置。刪除所有Dubbo相關(guān)引用、Dubbo相關(guān)配置文件。
  2. 增加SpringBoot啟動(dòng)類(lèi),增加@SpringBootApplication、@EnableFeignClients兩個(gè)注解,配置dubbo provider服務(wù)端口號(hào)。
  3. xxxServiceImpl服務(wù)實(shí)現(xiàn)類(lèi)上增加@RestController注解,提供 consumer Restful 訪問(wèn)的能力。 這個(gè)需要每個(gè)服務(wù)實(shí)現(xiàn)類(lèi)都加上@RestController注解,不要遺漏。
  4. 此部分大都屬于一次性改動(dòng),改造工作量相對(duì)可控。

改造后示例:

pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        ...
    </parent>
    <artifactId>MISS.xxxService</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.xxx.xxx</groupId>
            <artifactId>MISS.xxxService.API</artifactId>
            <version>2.0.5-RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
    <build>
        ...
    </build>
</project>

改造后的 OdaImpl.java 代碼示例(改造前只是缺少 @RestController 注解,其他代碼完全一致):

@Slf4j
@RestController
public class OdaImpl implements IOdaApi {
    @Resource
    private OdaService odaService;
    @Override
    public ModelsReturn<ModelsCommonResponse<ConsumptionODAResponse>> consumptionODA(ConsumptionODARequest consumptionODARequest) {
        try {
            Validation.validate(consumptionODARequest);
            ...
            return ErrorCode.returnMsg(ErrorCode.OPSERATE_SUCCESS, odaService.consumptionODA(consumptionODARequest.getMultiIndustryInfo(),consumptionODA));

        } catch (Exception e) {
            log.error(LogUtil.exceptionMarker(), "ODA交易異常",e);
            return ErrorCode.returnMsgByErrorMessage(ErrorCode.PARA_ERROR, "ODA交易異常");
        }
    }
}

Dubbo Comsumer端改造

  • pom.xml增加spring-boot-starter-web、spring-cloud-starter-openfeign等引用,同時(shí)增加SpringBoot mainClass 標(biāo)準(zhǔn)啟動(dòng)項(xiàng)配置。
  • 刪除所有Dubbo相關(guān)引用、Dubbo相關(guān)配置文件。
  • 增加SpringBoot啟動(dòng)類(lèi),增加@SpringBootApplication、@EnableFeignClients(需要配置 basePackages 掃描包路徑) 兩個(gè)注解,并配置dubbo consumer服務(wù)端口號(hào)。
  • 此部分大都屬于一次性改動(dòng),改造工作量相對(duì)可控。

由于dubbo consumer項(xiàng)目改造與dubbo provider改造極其相似,這里不再貼出代碼示例。

總結(jié)

至此Dubbo項(xiàng)目的Service Mesh改造就已經(jīng)完成了,k8s + Istio的部署這里就不做介紹了,此方案是在我司成功落地的技術(shù)方案,并且使用次方案進(jìn)行改造的服務(wù)也具有一定規(guī)模,目前生產(chǎn)環(huán)境還沒(méi)有遇到任何問(wèn)題。

此種改造方案改動(dòng)量相對(duì)于完全的去掉dubbo而不使用feign改造的方式來(lái)說(shuō)改動(dòng)較小,如有更好的改造方案歡迎交流。

到此這篇關(guān)于Dubbo Service Mesh基礎(chǔ)架構(gòu)組件改造的文章就介紹到這了,更多相關(guān)Dubbo Service Mesh內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java語(yǔ)法之 Java 的多態(tài)、抽象類(lèi)和接口

    Java語(yǔ)法之 Java 的多態(tài)、抽象類(lèi)和接口

    上節(jié)介紹了 Java 基礎(chǔ)語(yǔ)法之解析 Java 的包和繼承,如果這類(lèi)知識(shí)有點(diǎn)疑惑的小伙伴,可以去 Java 的包和繼承 這章看看,或許可以幫你解決一些疑惑喲!今天這篇文章我們將講解的是 Java 的多態(tài)、抽象類(lèi)和接口,感興趣的小伙伴可以參考下面文章的具體內(nèi)容
    2021-09-09
  • Java8特性之用Stream流代替For循環(huán)操作詳解

    Java8特性之用Stream流代替For循環(huán)操作詳解

    這篇文章主要介紹了Stream流代替For循環(huán)進(jìn)行輸出,這樣可以使代碼更簡(jiǎn)潔,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-09-09
  • Spring?依賴查找的使用小結(jié)

    Spring?依賴查找的使用小結(jié)

    在不同的編程框架和容器中,依賴查找的方式可能會(huì)有所不同,本文主要介紹了Spring依賴查找的使用小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • 如何實(shí)現(xiàn)在IDEA中導(dǎo)入一個(gè)模塊

    如何實(shí)現(xiàn)在IDEA中導(dǎo)入一個(gè)模塊

    這篇文章主要介紹了如何實(shí)現(xiàn)在IDEA中導(dǎo)入一個(gè)模塊方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Spring @ExceptionHandler注解統(tǒng)一異常處理和獲取方法名

    Spring @ExceptionHandler注解統(tǒng)一異常處理和獲取方法名

    這篇文章主要介紹了Spring注解之@ExceptionHandler 統(tǒng)一異常處理和獲取方法名,在實(shí)際項(xiàng)目中,合理使用@ExceptionHandler能夠提高代碼的可維護(hù)性和用戶體驗(yàn),通過(guò)本文的解析和實(shí)踐,讀者可以更好地理解和掌握@ExceptionHandler的用法和原理
    2023-09-09
  • Java基于ServletContextListener實(shí)現(xiàn)UDP監(jiān)聽(tīng)

    Java基于ServletContextListener實(shí)現(xiàn)UDP監(jiān)聽(tīng)

    這篇文章主要介紹了Java基于ServletContextListener實(shí)現(xiàn)UDP監(jiān)聽(tīng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 實(shí)現(xiàn)分布式WebSocket集群的方法

    實(shí)現(xiàn)分布式WebSocket集群的方法

    本文總結(jié)出了幾個(gè)實(shí)現(xiàn)分布式WebSocket集群的辦法,從zuul到spring cloud gateway的不同嘗試,總結(jié)出了這篇文章,希望能幫助到某些人,并且能一起分享這方面的想法與研究
    2022-03-03
  • Java責(zé)任鏈模式定義與用法分析

    Java責(zé)任鏈模式定義與用法分析

    這篇文章主要介紹了Java責(zé)任鏈模式定義與用法,結(jié)合具體實(shí)例分析了java責(zé)任鏈模式的功能、定義、使用方法、適用情況等,需要的朋友可以參考下
    2017-06-06
  • Springboot項(xiàng)目的Mapper中增加一個(gè)新的sql語(yǔ)句

    Springboot項(xiàng)目的Mapper中增加一個(gè)新的sql語(yǔ)句

    本文主要介紹了Springboot項(xiàng)目的Mapper中增加一個(gè)新的sql語(yǔ)句,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • 詳解使用Maven構(gòu)建多模塊項(xiàng)目(圖文)

    詳解使用Maven構(gòu)建多模塊項(xiàng)目(圖文)

    這篇文章主要介紹了詳解使用Maven構(gòu)建多模塊項(xiàng)目(圖文),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09

最新評(píng)論

福贡县| 油尖旺区| 扶余县| 林芝县| 汤原县| 革吉县| 富锦市| 如东县| 承德市| 闻喜县| 应用必备| 长丰县| 阳信县| 郴州市| 安化县| 仪征市| 海门市| 应用必备| 桑日县| 毕节市| 镇康县| 城口县| 云和县| 中西区| 麦盖提县| 江山市| 交城县| 鄂尔多斯市| 洮南市| 苏尼特左旗| 五台县| 拉萨市| 和林格尔县| 玉田县| 新津县| 扎赉特旗| 东兰县| 朝阳市| 许昌市| 天气| 神农架林区|