自定义RPC框架实战(一) 设计思路

RPC

转载请标注原文地址:https://blog.csdn.net/lilyssh/article/details/84306486
项目源码地址

一、缘由

学习rpc原理,锻炼自己设计能力。

二、功能

  • 服务端功能
  1. 服务注册
  2. 服务发现
  3. 定时接收客户端服务心跳
  4. 容错处理
  5. 集群
  6. 负载均衡
  7. 地址路由
  8. 服务监控
    服务治理
  • 消费端功能:
  1. 获取服务

    三、RPC系统架构设计

    RPC(即Remote Procedure Call,远程过程调用),指的是对网络上另外一个计算机上的,某段特定的函数代码的调用。

1. 注册中心:

首先得写一个注册中心服务,主要功能如下:
(1) 存储服务实例列表。
(2) 负载均衡。
(3) 服务实例健康监测。可动态增减服务提供者。

2. 服务注册:

(1) 服务提供者向注册中心注册其提供的服务。
(2) 服务消费者向注册中心获取服务提供者地址列表,通过负载均衡的算法选择服务提供者。
A服务要调用B服务中的接口,直连也可以,通过注册中心也可以,如果是后者的话首先B服务要在注册中心注册服务,得告诉A服务以下信息:

  • ip + port:因为是用netty调用,所以需要提供。
  • application:告诉A服务可调用的服务是什么名,如order-provider。
  • interface:告诉A服务,api接口是什么,如xxService。
  • methods:告诉A服务可调用的方法列表是什么。
    所以要把这些信息放进注册中心,A服务才能找到B服务。

    3. 服务发现:

    假如把order-provider部署在三个机子上,就会有三个不同ip的地址注册进注册中心,消费者调用的时候,注册中心查了一下,application叫order-provider的有三个,就根据负载均衡策略,选择合适的机子,给它调用。这就是服务注册为什么要这个服务名的原因,为了服务发现用的。
    调用服务时,A服务通过socket给B服务的socket服务发送JSON字符串,内容包含要调用的方法和入参。

    4. 健康检查

    监控服务的健康状态,是否可用。每个服务每分钟向注册中心发送心跳,注册中心在1分钟内收到心跳,视为正常,超过1分钟没收到心跳,视为服务宕掉了,先从服务列表中剔除掉该实例,剔除后,调用者调用服务时,负载算法时 就不会把该服务实例算进去了。等服务健康后,再加入进来。

负载均衡策略,可以每个服务自己控制,每个服务里都得有个监控器,监控所有服务是否健康,缺点是会有点沉重,好处一是可以把压力分摊到每个服务器上。二是不依赖注册中心, 自己就可以找到对应的服务,就算服务挂了,不影响其他服务的RPC交互。
这个监控器也可以放在注册中心,单独管理。

实现过程请参考下一篇文章:https://lilyssh.cn/rpc/2-rpc-implement/
在实现过程中,会不断完善此设计文档。

本文由 lilyssh创作。可自由转载、引用,但需署名作者且注明文章出处。


当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器