RPC是帮助我们屏蔽网络编程细节,实现调用远程方法就跟调用本地方法一样的体验。
RPC是一个远程调用,需要通过网络来传输数据,并且RPC常用于业务系统之间的数据交互,需要保证其可靠性,所以一般默认采用TCP来传输。
网络传输数据必须是二进制的,但是调用方请求的出入参数都是对象,对象没法直接进行网络传输,需要提前把转换成可传输的二进制,而且要求转换过程是可逆的,这个过程叫做序列化。
数据需要有一定的格式,这种约定内容叫做协议。大多数协议会分成两部分,分别是数据头和消息体。数据头一般用于身份识别,包括协议标识、数据大小、请求类型、序列化类型等,消息体主要是请求的业务参数信息和扩展属性等。
序列化
网络通信
常见的网络IO模型:同步阻塞,同步非阻塞,IO多路复用,异步非阻塞IO。
比较常用的是同步阻塞和IO多路复用。
IO多路复用:多个网络连接的IO可以注册到一个复用器(select)上,当用户进程调用了select,那么整个进程会被阻塞,同时内核会监视所有select负责的socket,当任何一个select数据准备好之后,这个时候用户进程再调用select 函数,将数据从内核拷贝到用户进程。
在编程语言上,无论C++还是Java,在高性能的网络编程框架编写上,大多数基于Reactor模型。其中最典型的就是java的netty框架,而Reactor是基于IO多路复用的。在非高并发场景下,同步阻塞IO是最常见的。
RPC就是把拦截到的方法参数,转成可以在网络中传输的参数,并保证在服务提供方能正确的还原出语义,最终实现像调用本地一样调用远程方法。
心跳机制:健康状态、亚健康状态、死亡状态。
路由策略:
负载均衡:
重试机制:考虑业务逻辑幂等,超时时间重置,去掉有问题节点,
应用优雅关闭:
优雅启动
熔断机制:调用端可以通过熔断机制进行自我保护,防止调用下游服务出现异常,
RPC是解决应用间相互通信的框架,而应用之间的远程通信一般是不会暴露在公网上的。
标签:调用,多路复用,记录,阻塞,学习,RPC,IO,select From: https://www.cnblogs.com/gaoshikenan/p/18110613