Dubbo被阿里放棄原因分析

一、阿里放棄Dubbo的原因

Dubbo是阿里巴巴旗下的分布式服務框架,但是在2018年,阿里巴巴宣布放棄對Dubbo的開發和維護,轉而支持Apache Dubbo(原名Apache Dubbox)。具體原因如下:

1、項目架構不夠透明化

Dubbo使用ZooKeeper作為服務註冊中心和調用時的路由管理,這使得Dubbo的內部結構比較難以理解和擴展。而ZooKeeper本身也有着靈活性不夠、性能不高等問題。這些問題都限制了Dubbo的擴展和發展。

2、缺少社區支持

儘管Dubbo曾經是國內最火的RPC框架,但是缺少社區支持一直是Dubbo的一個問題。相比之下,Apache Dubbo有着更加活躍的社區,社區成員更加廣泛,這使得Dubbo的發展受到了限制。

3、技術棧日益老舊

Dubbo使用的技術棧相對較老,雖然能夠滿足一般的需求,但是在大數據和AI等領域可能就存在一些不足之處。

二、阿里用什麼替代了Dubbo

阿里放棄Dubbo並不代表放棄分布式服務框架,相反,阿里一直在積極推進分布式服務框架的發展。那麼,阿里用什麼替代了Dubbo呢?以下是3個代表性的框架。

1、Apache Dubbo

Apache Dubbo是在Dubbo基礎上演化而來的分布式服務框架,是基於Java實現的RPC框架,其主要特點有:

(1)高性能,低延遲

(2)支持多種序列化方式,包括Hessian、JSON、FST等

(3)支持集群和負載均衡,可擴展性好

(4)支持多種註冊中心,包括Zookeeper、Redis、Simple、Multicast等

(5)支持多種協議,包括dubbo、http、hessian等

2、Spring Cloud

Spring Cloud是一個基於Spring Boot的分布式系統開發工具集,其核心組件是Spring Cloud Netflix,常用組件有Eureka、Feign、Ribbon、Zuul等。Spring Cloud能夠方便地實現服務註冊、服務發現、負載均衡、熔斷器等功能。

3、Service Mesh

Service Mesh是一種新興的微服務網絡架構。它提供了一種語義透明的方法,用於發布、維護和管理服務的生命周期。常用的Service Mesh有Istio、Linkerd等。

三、總結

從Dubbo被阿里放棄的原因和阿里用什麼替代了Dubbo兩個方面來看,Dubbo的發展被內部結構不夠透明化、缺少社區支持、技術棧日益老舊等問題所限制。而阿里用Apache Dubbo、Spring Cloud、Service Mesh等技術來替代Dubbo,從而實現分布式服務的發展。隨着分布式技術的發展,我們相信未來分布式服務框架將會更加強大和智能,為AI等領域的應用提供更好的支持。

以下是Dubbo的代碼示例:

//服務提供者
public class DubboProviderApplication {
 
    public static void main(String[] args) throws Exception {
        SpringApplication.run(DubboProviderApplication.class, args);
 
        //阻塞主線程,避免服務停止
        new CountDownLatch(1).await();
    }
 
    //在ProviderConfig中添加:registry、protocol、service
    @Bean
    public ServiceConfig greetingService() {
        ServiceConfig serviceConfig = new ServiceConfig();
        serviceConfig.setInterface(GreetingService.class);
        serviceConfig.setRef(new GreetingServiceImpl());
     
        return serviceConfig;
    }
 
    @Bean
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("dubbo-provider");
        return applicationConfig;
    }
 
    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress("zookeeper://127.0.0.1:2181");//註冊中心地址
        registryConfig.setClient("curator");
        return registryConfig;
    }
 
    @Bean
    public ProtocolConfig protocolConfig() {
        ProtocolConfig protocolConfig = new ProtocolConfig();
        protocolConfig.setName("dubbo");//協議名
        protocolConfig.setPort(20880);//協議端口
        return protocolConfig;
    }
 
}
//服務消費者
public class DubboConsumerApplication {
 
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(DubboConsumerApplication.class, args);
        GreetingService greetingService = context.getBean(GreetingService.class);
        String message = greetingService.sayHello("dubbo");
        System.out.println(message);
    }
 
    @Bean
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("dubbo-consumer");
        return applicationConfig;
    }
 
    @Bean
    public ConsumerConfig consumerConfig() {
        ConsumerConfig consumerConfig = new ConsumerConfig();
        consumerConfig.setTimeout(3000);//配置超時時間
        consumerConfig.setCheck(false);
        return consumerConfig;
    }
 
    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress("zookeeper://127.0.0.1:2181");//註冊中心地址
        registryConfig.setClient("curator");
        return registryConfig;
    }
 
    @Bean
    public ReferenceConfig greetingService() {
        ReferenceConfig referenceConfig = new ReferenceConfig();
        referenceConfig.setInterface(GreetingService.class);
        referenceConfig.setVersion("1.0");
     
        return referenceConfig;
    }
 
}

原創文章,作者:DEFO,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/130924.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
DEFO的頭像DEFO
上一篇 2024-10-03 23:29
下一篇 2024-10-03 23:42

相關推薦

  • 為什麼Python不能編譯?——從多個方面淺析原因和解決方法

    Python作為很多開發人員、數據科學家和計算機學習者的首選編程語言之一,受到了廣泛關注和應用。但與之伴隨的問題之一是Python不能編譯,這給基於編譯的開發和部署方式帶來不少麻煩…

    編程 2025-04-29
  • Python運行不報錯又無任何結果輸出可能產生的原因以及解決方法

    在Python編程過程中,有時候會出現程序運行不報錯但卻沒有任何結果輸出的情況。本文將從多個方面解析這個問題,並提供相應的解決方法。 一、語法錯誤 語法錯誤是Python程序中最常…

    編程 2025-04-29
  • Python運行慢的原因

    Python語言一直被人們認為是一門易於學習和使用的語言,被廣泛應用於數據分析、機器學習和人工智能等領域。然而,與其他編程語言相比,Python的運行速度卻明顯較慢,這是因為以下幾…

    編程 2025-04-27
  • Python OOM異常的原因和解決方法

    Out of Memory(OOM)異常是 Python 程序在內存不足或不足以分配新的對象時,拋出的異常之一。Python 應用程序通常會因為內存瓶頸而崩潰或降低性能,但這並不是…

    編程 2025-04-27
  • 阿里雲郵箱主機名

    阿里雲郵箱主機名是指在阿里雲購買並綁定域名後,為郵件服務配置的一個記錄類型。在這篇文章中,我們將從多個方面對阿里雲郵箱主機名進行詳細闡述,幫助您更好地了解它的作用、使用方法和注意事…

    編程 2025-04-27
  • 阿里Python技術手冊

    本文將從多個方面對阿里Python技術手冊進行詳細闡述,包括規範、大數據、Web應用、安全和調試等方面。 一、規範 Python的編寫規範對於代碼的可讀性和可維護性有很大的影響。阿…

    編程 2025-04-27
  • Python無法運行的原因及解決方法

    Python是一種開源的高級編程語言,具有簡潔易讀、易於學習、跨平台等特點,深受開發者喜愛。但有時候我們會遇到Python無法正常運行的問題,這時候我們需要逐一排查,找出問題所在,…

    編程 2025-04-27
  • 阿里雲Grass使用指南

    本文將為大家詳細介紹阿里雲Grass平台,包括核心概念、使用場景、基本操作、高級特性等內容,幫助大家全面掌握Grass的使用。 一、核心概念 Grass是阿里雲開發的一款全新PAA…

    編程 2025-04-27
  • Linuxifconfig命令找不到原因詳解

    一、命令找不到原因 在使用Linux操作系統時,有時會遇到運行ifconfig命令時提示“command not found”的情況。ifconfig命令是用於配置和顯示Linux…

    編程 2025-04-25
  • Linux網絡連接激活失敗原因及解決方法

    一、網卡驅動問題 1、缺少網卡驅動 若使用新的網卡,需要安裝對應網卡驅動,否則會導致網絡連接激活失敗。可通過以下命令查看當前系統中是否存在網卡驅動: lsmod | grep et…

    編程 2025-04-25

發表回復

登錄後才能評論