rpc

RPC的全称是Remote Procedure Call,它是一种进程间通信方式。允许像本地服务一样调用远程服务,它的具体实现方式可以不同,例如spring的http invoker,Facebook的thrift二进制协议通信。Rpc具有以下特点:

  1. 简单:RPC概念十分清晰简单
  2. 高效:过程调用看起来十分简单而且高效
  3. 通用:在单机计算中往往是不同算法和API,跨进程调用最重要的是通用的通信机制。

RPC框架的定位

在分布式和微服务下,随着服务数量的增多,机器的增多,使用RPC直接调用接口地址变得越来越难维护,耦合越来越多,服务管理起来越来越困难。因此对服务调用需要统一管理。

RPC框架的目标是让远程过程调用更加简单,透明,RPC框架负责屏蔽底层的传输方式,序列化方式,和通信细节。框架使用者只需要了解谁在什么位置提供了什么样的远程服务接口,开发者无需关系底层通信细节和调用过程。

常见的RPC框架

  1. Apache thrift

  2. Arvo rpc protocol

  3. Hession

  4. gRpc

  5. dubbo

rpc框架有哪些要素?

  1. 服务订阅发布
    1. 配置化发布和引用服务
    2. 服务自动发现
    3. 服务在线注册和下线
    4. 服务健康状态检测
    5. 故障切换
    6. 高HA(注册中心宕机,走本地缓存)
    7. 心跳检查,断连重连机制
  2. 服务路由(负载均衡)
    1. 提供多种路由策略,轮询,权重
    2. 粘滞链接
    3. 路由定制
  3. 集群容错
    1. Failover
    2. Failback
    3. Failfast
    4. 服务无状态
  4. 服务调用方式
    1. 同步调用
    2. 异步调用
    3. 并行调用
  5. 多协议
    1. 私有协议(可以自定义扩展)
    2. 公有协议
  6. 序列化方式
    1. 二进制序列化(thrift,protobuf)
    2. 文本类序列化(json,xml)
  7. 统一配置
    1. 本地静态配置
    2. 基于配置中心的动态配置
  8. 服务监控
    1. 操作界面
    2. 性能统计
    3. 统计报表
    4. 告警

如何自己实现一个rpc?