学习大数据,发现server与agent,hdfs中的nn与dn,yarn中的rm与nm都是通过rpc来进行通信的,今天就学习一下什么是rpc
rpc是什么
remove produce call
远程过程调用
区别于调用本地方法,相当于调用远程服务器组件中的一个函数
rpc与restful
当然在学校做项目的时候都是通过restful进行远程调用。
restful都是基于http调用的,后端暴露接口给前端,前端用ajax请求直接访问后端的url,并且传入对应的参数,后端进行调用之后返回前端想要获取的字段,通常都是通过json格式来衡定风格,最终完成调用。
按照上图所说,其实rpc可以通过http协议调用,也可以通过tcp/udp。主要看还是应用的业务场景来分析。
很多框架rpc使用的都是tcp协议,因为tcp在运输层,http在应用层。相比较来说可能tcp比http某种程度上要轻一些。http效率可能低,封装复杂。
rpc的远程调用过程
第一步:因为需要有一个调用的接口。我们就用动态代理生成一个假的接口。
第二步:动态代理的接口,需要进行远程调用。涉及到了tcp协议。需要传递目标端口与ip,将调用的参数进行序列化。通过通信的方式发送请求。
第三步:远程的接口,反序列化参数,执行要执行的函数,返回结果。
这样就是一个完整的rpc调用过程。
再说一次,不是说RPC好,也不是说HTTP好,两者各有千秋。本质上,两者是可读性和效率之间的抉择,通用性和易用性之间的抉择。最终谁能发展更好,很难说。