一、阿里放棄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
微信掃一掃
支付寶掃一掃