一、阿里放棄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-tw/n/130924.html