Implementing Remote Procedure Calls学习笔记2
第二遍阅读,能从更高层次去看这篇文章。
首先学习如何写论文,要把前因后果写清楚,先写出目前的背景,再提出目标,定义功能,实现结构,最后结论。
该文章很清楚的写出来RPC诞生的背景,就是分布式系统,方法调用不像原来单机那么简单,多进程间调用,而且不在一台机器上,很复杂,想隔离这部分复杂度,简化这部分的难度。让方法间调用像单机一个方便。
目标有几点,
第一,希望像本地访问,移除不必要的困难,只留下构建分布式系统的基本困难:时序,组件的独立故障以及独立执行环境的共存。
第二,RPC沟通是高效的
第三,RPC 包的语义尽可能强大,不失简单和高效
第四,建立安全的连接。
这部分定义清楚,哪些是RPC该做的,哪些不是他该做的,划分边界。
实现结构上采用user,user-stub,RPCRuntime,server-stub,server的结构,server端写导出接口,自动生成server-stub,RPCRuntime是一个单独的包,用来连接client-server,user导入server接口,生成user-stub,用户只需要调用user-stub即可。
其中有几部分工作需要做,
1.server自动生成stub,以及user端的导入
2.RPCRuntime连接user和server,如何binding,以及多个server的Naming
3.网络传输,如何高效的传输数据,超时、异常等处理。
第一个问题比较好实现,第二个问题,作者的实现在user和server之间使用一个分布式数据库做连接,去查询这个数据库,server注册,user查询server地址,去实现binding和Naming,这个部分可以对比现在的实现。
第三个问题,也很重要,作者当时应该没有TCP/IP协议,所以是自实现协议的,现在看来都是基于TCP/IP的,然后就是使用在此之上的自定义协议,还是使用现有协议。而且还需要考虑BIO、NIO、AIO等网络传输的效率,现在基本都是使用Netty。
确实认识到实际上升到理论的重要性,可以一通百通,叠加式的进步,而不是一个个知识点的叠加。
后面再写一个文章分析一个binding和Naming,网络这块要继续学习Netty。