关于rpc编程的思考
关于rpc编程的思考
思考
一个应用程序要像调用本地服务那样调用远程服务,要如何做到?
首先必有两个角色,一个是消费者,它是服务的调用方;一个是生产者它是服务的提供方。既然是远程,那么服务的调用实际上就是通过网络请求生产者的服务,其中必定涉及网络数据的传输。也即,生产者的服务需要以网络接口的方式供消费者请求,从而获取服务的数据。那么问题来了,在生产者这边,我们如何将其提供的服务封装为网络接口,又如何将服务的结果数据上传到网络?在消费者这边,又如何与生产者交互,如何知道生产者可以提供哪些服务呢?得到的数据又如何转成相应的实体呢?
第一个问题,数据传输的问题,数据传输必定涉及数据传输协议。这个协议应当是安全稳定高效的,如此才能在数据传输层面保证数据的安全性和及时性。那么是采用现有的协议还是自定义数据传输协议?一般而言,自定义传输协议更能满足丰富的数据传输需求。如果自定义数据传输协议,那么这就涉及到了socket编程。其中是选择tcp还是udp协议?
数据的序列化和反序列化,生产者执行服务后的响应数据要先序列化再进行传输,那么消费者那边就要对接收到的数据进行反序列化。
消费者如何与生产者交互?如何知道生产者的IP地址?一种是将生产者的ip直接配置到到消费者项目中,让消费者直接选择ip,或者用一个中间组件,让消费者获通过中间件取到生产者的ip地址。这样有个好处,可以在中间组件做一些负载均衡类的监控工作。
本文由作者按照 CC BY 4.0 进行授权