RPC基本入门知识

什么是RPC

Remote procedure call 远程过程调用

为什么会有RPC

在单机条件下,我们要调用某个类的某个方法,只需要通过如下模式即可:

Person person = new Person();
person.run();

但是在多台服务器的情况下,每台服务器提供不同的服务,不可能像单机条件下那样进行调用,于是就诞生了RPC。

RPC调用流程

如服务器A需要调用服务器B的服务

  1. A通过网络传输的方式通知B
  2. B收到A的调用请求之后,调用A要调用的方法
  3. B将将调用之后的结果通过网络传输返回给A

RPC调用需要解决的几个问题

  1. 服务器A连接上服务器B,如何连接?
    通过Socket IO,这其中又涉及到BIO、NIO等连接模式,以及Netty等网络框架

  2. 如何定位B服务器上的服务?
    方案一:采用IP+端口号的方法
    弊端:服务挂掉如何处理?手工处理此类问题比较麻烦
    方案二:采用注册中心,如zookeeper

  3. 消息(如Java中的对象)如何在网络上传输?
    将对象变成二进制数据在网络中进行传输,需要进行对象的序列化和反序列化。

A端:	对象    ---->	二进制(序列化)
网络:	二进制传输
B端:	二进制	--->	对象(反序列化)
  1. 如何序列化与反序列化?
    基础方式:实现Serializable接口,并提供一个serialVersionUID
    这是Java中默认的序列化机制,但是
  • 不能跨语言操作
  • 性能比较低

目前对此的解决方案有:

  • json
  • xml
  • kryo
  • protocol buf
  • hessian
  • messagepack
  • thrift
    几种序列化方式的比较如下
    几种序列化方式比较
    以上信息参考了咕泡学院的公开课相关资料并进行了一些修改。如有错误,欢迎指正。
发布了136 篇原创文章 · 获赞 94 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/somehow1002/article/details/83094851