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/n/130924.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
DEFODEFO
上一篇 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

发表回复

登录后才能评论