Dubbo是一个优秀的分布式RPC服务框架,但直接查看Dubbo的源代码就会发现,它太复杂了,不容易启动。
所以我开发了一个类似的简易RPC框架。原理是相通的。很适合用来理解RPC框架。
RPC框架解决的是微服务架构下远程服务调用的问题。所以最核心的组件必然是服务的注册中心。这个注册中心运行服务提供方将服务注册上来。和Dubbo一样,我使用Zookeeper实现。服务消费方从注册中心拿到远程服务的地址。继而发起远程方法调用。虽然是远程调用,但是对消费端来讲像本地调用一样。所以这里是用到了前面讲的一个设计模式--代理模式。具体来说是动态代理。封装了底层远程调用的细节。因为是远程调用所以涉及到传输协议,像Dubbo是设计了Dubbo协议。我这简单的demo就没必要了。序列化方面我选用Protostuff,因为java原生的序列化在高并发下会有一些性能问题。IO方面选用NIO,阻塞IO支持不了这种高并发场景。NIO直接用netty框架。
综上,我会用到的技术如下:
1,spring:构建一个java应用的标配了
2,Netty,实现NIO传输方面的功能
3,Zookeeper,注册中心的核心
4,Protostuff,解决序列化问题
我的代码地址: