RPC 技术出来很多年了,出来的时候我估计还刚刚上大学,在国内,dubbo应该算是先驱者吧,下面的图更是RPC架构经典中的经典

RPC在我的认知体系中,简而言之,就是调用端,也可以称之为消费者(Consumer)获取到提供者的网络地址,并把方法调用的入参通过网络传递给Provider端,提供者端监听网络上的某个端口获取到参数,调用己方的方法,把结果再通过网络回传给消费者端

整个流程代码实现,可以参考dubbo作者梁飞的博客:http://javatar.iteye.com/blog/1123915

再说一下角色问题,RPC中可以认为有四个角色,消费者(Consumer),提供者(Provider) 注册中心(Registry),监控中心(Monitor),这个还是很好理解的,以前在同一系统的方法的调用者因为网络的存在,变成了消费者,被调的方法成了提供者

同样因为注册中心Registry的存在,其实就是为了让消费者实时的去感知提供者的存在,去告诉消费者它对应的提供者的地址

Monitor顾名思义,监控者,其实在整个过程中,它并不是一定要存在,只是它可以做统计,做一些数据分析,提供整个系统的可用性,健壮性。

好了,我们先简单分析一下Registry / Consumer / Provider / Monitor 这四个角色的定义和每个角色如何各司其职,相互协作完成这整个过程的

分析,分析分成两个方面,一是每个角色在网络的定位,二是每个角色所要完成的职责

1)Registry注册中心

简述:

①注册中心可以有多个,都是无状态的,每个注册中心之间信息不交互

②从网络的角度来说,它都是server端,它不需要主动地连接其他的任何实例,只需要像一个地主一样等待别人来连接

③消费者随机选择注册中心集群中的任何实例建立长连接,提供者与注册中心中的每一个实例都建立长连接

职责(与其说职责,还不如说代码要实现的功能):

①接收服务提供者的服务注册信息,接收到信息之后,发送ACK信息给服务提供者,否则服务提供者重新发送注册信息

②接收消费者的订阅信息,并把它订阅的结果返回给消费者

③如果注册信息变更,会主动通知订阅变更信息的消费者,注册信息的变更包括服务提供者下线,服务被人工降级,或者服务提供者的地址变更

④持久化一些服务信息,例如某些服务管理员审核过了,则该服务重新注册后则不需要再审核,再例如,某个服务负载均衡的策略被管理员设置为轮询,那么下次它在注册的时候,则就是轮询,而不是默认的负载策略

2)Provider提供者

简述:

①提供者是一个精神分裂的病人,它在网络上(可以更加明确地说是站在Netty的角度上)饰演两个角色:

1)一是它是客户端,需要去连接Registry,发送注册信息,它也需要去连接monitor端,去发送一些调用的统计信息

2)二是它也是服务端,需要作为server端等待Consumer去连接,连接成功后调用服务

职责:

①将自己的信息,提供的接口信息编织成注册信息发送给registry端

②能够动态去调自己的方法,可以通过反射,cglib等一些方法去调用自己提供的那些方法

③提供服务降级等服务,如果当某些服务调用的失败率高于限定值的时候,可以有一个对应的mock方法,提供降级服务

④限流服务,限流的方式有很多种,也有很多实现方式,最简单的就是控制调用次数,比如100w次,其实简单的就是控制单位时间的调用次数,防止业务洪流冲垮服务

⑤统计活动,将一些调用信息统计好发送给Monitor端

⑥补充......

3)Consumer消费者

简述

①它也是有两个网络角色,不过并不是精神分裂,它都是作为网络的客户端存在,一它需要去连接registry去获取到订阅信息,二是它需要主动去连接provider端去调用服务

职责

①去向Registry端订阅服务,拿到registry端返回的结果,这个结果也就是provider的网络地址,先建立TCP的长连接,可能是多个地址,因为提供某个服务的可能有多个提供者

②当开始系统主动调用该服务的时候,拿到刚才建立的连接的集合,根据某个方法,是随意还是轮询,获取到其中的一个连接,发送方法入参,等待响应

③当注册中心发送某个服务的调用的负载策略发生变化过,发送信息给consumer,consumer需要做相应的变更

4)Monitor监控者

简述

①这个与整个系统是没有任何直接的关系的,实现方式也是多样的,可以与上面一样建立长连接,接收每个角色统计的信息,然后展示给用户,可以使用MQ,使用消息队列,每个角色把自己统计的信息放到队列中,Monitor去消费这些信息,这样做的好处就是解耦,如果monitor宕了,不影响服务

大体的RPC的流程稍微理了一下,接下来我们就来一一去实现这些功能~

一起写RPC框架(一)RPC之我所见相关推荐

  1. 【RPC框架、RPC框架必会的基本知识、手写一个RPC框架案例、优秀的RPC框架Dubbo、Dubbo和SpringCloud框架比较】

    一.RPC框架必会的基本知识 1.1 什么是RPC? RPC(Remote Procedure Call --远程过程调用),它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络的技术. ...

  2. 从零实现RPC框架1:RPC框架架构设计

    从零实现RPC框架1:RPC框架架构设计 1.什么是 RPC? RPC 的全称是 Remote Procedure Call,即远程过程调用.简单解读字面上的意思,远程肯定是指要跨机器而非本机,所以需 ...

  3. RPC 框架梳理——RPC使用方的调用流程梳理

    背景 myrpc是基于protobuf开发的远程调用框架,对于rpc服务,在proto文件中的定义如下:    经过protoc编译后,会生成两个类:UserServiceRpc 和 UserServ ...

  4. 把接口调用打成jar包的类怎么写_直观讲解RPC调用和HTTP调用的区别

    来源 :浮生忆梦 很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~N ...

  5. 支撑微博千亿调用的轻量级RPC框架:Motan

    随着微博容器化部署以及混合云平台的高速发展,RPC 在微服务化的进程中越来越重要,对 RPC 的需求也产生了一些变化.今天主要介绍一下微博 RPC 框架 Motan,以及为了更好的适应混合云部署所做的 ...

  6. 什么是RPC?RPC框架dubbo的核心流程

    一.REST 与 RPC: 1.什么是 REST 和 RPC 协议: 在单体应用中,各模块间的调用是通过编程语言级别的方法函数来实现,但分布式系统运行在多台机器上,一般来说,每个服务实例都是一个进程, ...

  7. 走进Dubbo——RPC框架简介

    前言 dubbo是阿里开源的分布式rpc框架,在许多中小企业的微服务化过程中发挥着核心作用.但是想把dubbo运行起来也不是那么简单的,这几天我想搭个dubbo环境玩玩,一路受阻. 相信前来了解rpc ...

  8. RPC编程:Hessian RPC一个老的RPC框架(一)

    RPC编程:Hessian RPC一个老的RPC框架 一:Hessian RPC 1:Hession RPC一个老的RPC框架 2:老,为什么还要研究? 3:Hession RPC概念 二:Hessi ...

  9. 使用C++开发RPC框架

    使用C++开发RPC框架 RPC(Remote Procedure Call)框架使得远端的一个进程可以调用远端另一个进程所提供的方法,是构建分布式系统的基础通信协议.本项目使用了C++开发了一个RP ...

  10. Java实现简单的RPC框架

    一.RPC简介 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用) ...

最新文章

  1. POJ 2236 Wireless Network 并查集
  2. Echart遇到的问题:tooltip提示框大小异常
  3. Matlab中函数使用
  4. java dbtype_Java实现数据库的读写分离
  5. 为啥通过MSIE判断浏览器信息
  6. 生成configDataContextRefres失败:Error creating bean with name ‘configDataContextRefresher‘
  7. 【杨中科】问苍天,微软的技术更新真的快吗
  8. 超级简单的自动刷新_Excel动态透视表,刷新即可更新内容,简单方便 #职场 #办公技巧...
  9. 一步步实现SDDC-分布式交换机入门
  10. HDU 5586 Sum
  11. Ubuntu20.04、22.04安装nvidia显卡驱动
  12. The preferences of “An Overview of Speech Dereverberation“
  13. 2023南京信息工程大学计算机考研信息汇总
  14. 网站中木马病毒了怎么办
  15. Ain_电脑所有乱码文字集
  16. 严重: Compilation error org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
  17. 摄影测量:ERDAS自动、手动和导入特征点对(超详细)
  18. putty上传下载文件到windows
  19. QT5.15.2__wind10 64 源码编译
  20. Android_学习安卓必备网址

热门文章

  1. 33岁跳槽无路,濒临绝望之际受贵人指点,成功上岸阿里(Java岗)
  2. Kafka概述(二)进阶知识
  3. 如何在win10下安装IMSL6.0
  4. 分享一个便宜又好用的代理ip
  5. Thinking Everyday V: 在有微博之前
  6. 如何在uni-app中引入iconfont图标
  7. 如何在Google表格中添加当前日期和时间
  8. 百度api文字转语音效果
  9. linux 终端窗口最大化,如何设置终端打开最大化
  10. 计算机系统原理之程序是怎么运行的