系统设计的问题,就是让你站在系统设计的角度,来考虑一下,到底如果要设计一个RPC框架,你会如何来考虑
动态代理:比如消费者和提供者,其实都是需要一个实现某个接口的动态代理的,RPC框架的一切的逻辑细节,都是在这个动态代理中实现的,动态代理里面的代码逻辑就是你的RPC框架核心的逻辑。
JDK提供了API,去创建针对某个接口的动态代理。
调用动态代理对象的方法之后,此时就应该先干一个事情,通过Cluster层的一些组件,服务注册中心,是用什么技术来进行实现呢?往简单了说,服务注册中心也可以是你自己手撸一个,也不难。
自己手撸一个,服务去注册,其他服务去拉取注册表进行发现。
ZooKeeper,稍微自己上网百度搜索一下,ZooKeeper入门使用教程,基本概念和原理,还有基本的使用,了解一下
Cluster层,从本地缓存的服务注册表里获取到要调用的服务的机器列表
负载均衡,面试突击第一季里,我们分析过Dubbo的负载均衡策略,此时你就可以把那些策略说一说,我要设计多少种策略,从服务的机器列表中采用负载均衡算法从里面选择出来一台机器。
选择好了机器,知道了对方的端口号,而且知道你的请求调用,调用哪个Interface的哪个方法,把这些信息交给协议层。
把数据组织一下,协议,序列化机制,底层用什么网络通信框架,比如netty,mina现在用的比较少,序列化和反序列化有没有概念,Java基础概念,一个复杂的请求数据序列化成二进制的字节数组。
反序列化就是从字节数组变成请求数据结构。
按照那个协议的规范对请求数据进行组织,不同的协议,组织出来的数据看起来是不一样的。
netty基本的原理。
解析完毕了之后,就知道,应该调用自己本地哪个Interface的实现类的哪个方法。
zookeeper入门:https://blog.csdn.net/java_66666/article/details/81015302
zookeeper集群选举:https://blog.csdn.net/u010013573/article/details/90148935