一、阿里放弃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
微信扫一扫
支付宝扫一扫