在单体应用时,不同业务模块部署在同一个JVM进程内,这时通过本地调用就可以解决不同业务模块之间的相互引用﹔但在多体应用时,不同业务模块大多部署到不同的机器上,这时一个高效、稳定的RPC框架就显得特别重要了。Apache Dubbo作为阿里巴巴开源的分布式RPC框架,是众多RPC框架中比较优秀的一个,在进入Apache孵化器项目后现已毕业,相信在开源社区的不断贡献下,它会成为RPC框架中的佼佼者。
为何要研究Apache Dubbo的实现原理
我们首先可以学习和深刻体会到分层架构带来的好处。Dubbo框架从整体上分为了业务(Business)层、RPC层和远程调用(Remoting〉层,其中业务层提供API,让使用者方便地发布与引用服务﹔RPC层则是对服务注册与发现、服务代理、路由、负载均衡等功能的封装,该层又可以被划分为很多层﹔远程调用层则是对网络传输与请求数据序列/反序列化等的抽象。使用分层架构可以保证下层的改变对上层不可见,并且可以实现关注点分离,比如使用者使用Dubbo时只关心如何使用业务层的API来发布与引用服务,而不需要关心RPC层的实现,当新版本 Dubbo升级了RPC层的逻辑时,使用者只需要升级Dubbo的版本就可以了,这是因为RPC层的修改对业务层使用者来说是透明的。
我们也可以学习到好的框架应该具有可扩展性。Dubbo就是一个扩展性极强的框架,其RPC层中的所有组件都是基于SPI扩展接口实现的,每个组件都可以被替换﹔Dubbo增强了JDK中提供的标准SPI功能,并且增加了对扩展接口的loC(一个扩展接口可以直接使用setter()方法注入其他扩展接口)和AO