当前位置: 首页 > 后端技术 > Java

Dubbo可扩展性设计

时间:2023-04-01 23:16:32 Java

扩展设计理念可扩展性是任何系统所追求的,同样适用于Dubbo。什么是可扩展性?可扩展性是一种设计理念,代表了我们对未来的愿景。我们希望在现有的架构或设计的基础上,当将来某些方面发生变化时,我们可以尽量减少更改以适应这种变化。可扩展性优势可扩展性优势主要表现在模块之间的解耦,符合开闭原则,对扩展开放,对修改关闭。系统增加新功能时,无需修改现有系统的结构和代码,只需增加一个扩展即可。ExtensionImplementation一般来说,系统会使用Factory、IoC、OSGI等来管理扩展(插件)的生命周期。考虑到Dubbo的适用性,我不想强??依赖Spring等IoC容器。而且自己搭建一个小的IoC容器感觉有点设计过度,所以选择最简单的Factory方式来管理扩展(插件)。在Dubbo中,所有内部和第三方的实现都是平等的。Dubbo中的可扩展性对第三方实现一视同仁。在Dubbo中,所有的内部实现和第三方实现都是平等的,用户可以根据自己的业务需求替换Dubbo提供的原生实现。每个扩展点只封装一个变化因子以最大化重用。每个扩展点的实现者往往只关心一件事。如果用户需要扩展,只需要扩展他们关心的扩展点,大大减少了用户的工作量。DubboExtension的特点Dubbo中的扩展能力是在JDK标准SPI扩展点发现机制的基础上增强的,改善了JDK标准SPI的以下问题:JDK标准SPI会一次性实例化所有扩展点的实现,如果有是一个extension,实现初始化是比较耗时的,但是如果不使用和加载,又是一种资源浪费。如果扩展点加载失败,连扩展点的名称都获取不到。例如:JDK标准的ScriptEngine,通过getName()获取脚本类型的名称,但是如果RubyScriptEngine加载RubyScriptEngine类失败是因为jruby.当用户执行ruby脚本时,会报不支持ruby,并不是失败的真正原因。基于Dubbo提供的扩展能力,用户可以根据自己的需要方便地扩展其他协议、过滤器、路由等。下面介绍一下Dubbo的扩展能力的特点。按需加载。Dubbo的扩展能力并不是一次实例化所有的实现,而是实例化使用哪个扩展类来减少资源浪费。增加扩展类的IOC能力。Dubbo的扩展能力不仅仅是发现扩展服务实现类,而是在此基础上更进一步。如果扩展类的属性依赖其他对象,Dubbo会自动完成依赖对象的注入功能。为扩展类添加了AOP功能。Dubbo的扩展能力会自动发现扩展类的包装类,完成包装类的构建,增强扩展类的功能。它具有动态选择扩展实现的能力。Dubbo扩展会在运行时根据参数动态选择对应的扩展类,提高了Dubbo的扩展性。可以订购扩展实现。扩展实现的执行顺序可以根据用户需求指定。提供扩展点的自适应功能。该能力使得一些扩展类在消费者端生效,一些扩展类在提供者端生效。从Dubbo扩展的设计目标可以看出,Dubbo实现的一些特性,比如扩展实现的动态选择、IOC、AOP等,可以为用户提供非常灵活的扩展能力。Dubbo扩展加载流程Dubbo加载扩展的整个过程如下:4个主要步骤:读取并解析配置文件,缓存所有扩展,根据用户执行实现扩展,实例化对应的扩展,实现扩展实例属性和实例的IOC注入Extended实现AOP特性的包装类如何使用Dubbo的扩展能力进行扩展下面以扩展协议为例,说明如何使用Dubbo提供的扩展能力对Triple协议进行扩展。(1)在协议实现jar包中放置一个文本文件:META-INF/dubbo/org.apache.dubbo.remoting.api.WireProtocoltri=org.apache.dubbo.rpc.protocol.tri.TripleHttp2Protocol(2)实现类内容@ActivatepublicclassTripleHttp2ProtocolextendsHttp2WireProtocol{//...}说明:Http2WireProtocol实现了WireProtocol接口(3)在Dubbo配置模块中,扩展点都有对应的配置属性或标签,通过配置指定要使用的扩展。例如:从上面的扩展步骤可以看出,用户基本完成了黑盒下的扩展。Dubbo的扩展应用Dubbo的扩展能力非常灵活,在自身功能的实现上无处不在。Dubbo的扩展性使得可以很容易的将Dubbo项目一个一个的划分成子模块,实现热插拔的特性。用户完全可以根据自己的需要替换Dubbo的原生实现,满足自己的业务需求。使用场景如果需要自定义负载均衡策略,可以使用Dubbo的扩展性。如果需要实现自定义注册中心,可以使用Dubbo的扩展能力。如果需要实现自定义过滤器,可以使用Dubbo的扩展能力。Dubbo扩展对内部实现和第三方实现一视同仁。更多使用场景请参考Dubbo官网SPI扩展实现原文:https://cn.dubbo.apache.org/z...欢迎给DubboStarhttps://github.com/阿帕奇/达博。搜索并关注官方微信公众号:ApacheDubbo,了解更多行业最新动态,掌握各大厂面试必备的Dubbo技能