我知道的RPC框架:就知道Dubbo是
RPC是什么:远程方法调用,消费者能够通知另一个进程下的方法执行,把执行结果返回给消费者。
设计RPC框架应该注意什么:比如dubbo,provider应该提供一个接口,这个接口和参数类型返回值类型的Model应该单独在一个Maven模块里。打包能让消费者只依赖provider接口(全在一个模块就成一个项目了)。
两个进程间通讯应该用网络,可以是Http的Tomcat,可以是Netty。
消费者和provider之间网络通信应该指定一种序列化返序列化机制,可以是SDK的序列化,Json或protocol。
如果provider接口有不同的实现类,应该在应该指定一个默认的。
消费者接口引用可以只想一个代理对象。对象方法应该是,像provider地址发送接口信息,方法信息,参数类型信息,方法版本号信息。
provider可以用map映射k和Class的关系,在根据反射执行方法。
注册中心:消费者应该通过注册中心得到provider地址。注册中心要根据接口方法参数信息对provider地址做映射。地址映射应该不止一个,因为provider可能是个集群每个地址是集群里的一个节点。每次调用可以负载均衡(轮训,随机)(实际生产中不是单纯的随机和轮训),方式通知节点执行。
消费者本地缓存地址:注册中心挂了,就废了,消费者可以本地缓存provider集群的所有节点地址。
消费者可以订阅注册中心地址改动的事件,以免,缓存和注册中心不一致。
消费者调用provider时可能因为网络,或者provider挂掉收到了一个异常。那么消费者应该再去尝试其他节点。
provider应该用心跳机制告诉注册中心本节点还活着。
provider在启动的时候,应该向注册中心提供地址。
SPI
Dubbo自己实现SPI没用JDK的
Dubbo的SPI
111
Dubbo工作流程
111
Dubbo服务调用过程
111
Dubbo的分层
111
Dubbo服务暴露过程
111
Dubbo负载均衡
111
Dubbo集群容错
111
Dubbo支持的注册中心
111
Zookeeper挂掉后怎么办
111