这两天在学习公司一牛人写的RPC框架,一直都对RPC的概念很模糊,现在稍微清晰了些。
 
rpc定义:RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
 
我理解的是在应用中要想对集群中所有的机器状况有了解,就要有一台机器知道集群中的所有机器的情况,这台就是server了,其他的都是agent。agent要知道谁是server,包括ip和端口,server要事先主动暴露ip、端口还有注册的服务。这样agent主动周期发送心跳并携带本机的相关参数到server,server接收请求并处理,返回相应数据。当然中间需要一致的协议,目前我们使用的是msgpack。
 
以下是阅读代码时的记录,类名及相关参数是基于源码的。
server端:
class RPCServer实例化时启动一个http server应该是监控server 处理情况的(下面处理过程中更新的handleStatus)
RPCServer启动前要注册服务,类名或者是moudle.class,这个也就是client端调用时的service和method,可以注册多个。注册的服务是放到RPCServer实例的serviceMap字典中,key是service名称,value是service实例。
然后RPCServer启动,通过eventlet.server监听某个端口及绑定处理客户端链接的方法---handle
 
handle的处理:
1.更新handleStatus活动连接数
2.实例化一个eventlet.GreenPool池
3.循环:
     从暴露的端口中读取client的数据,更新handleStatus接收字节数,反序列化并从greenpool中取一个协程处理,直到端口中没有数据为止
     协程处理是采用线程安全的方式,调用相应的处理方式---从RPCServer启动前注册服务的字典serviceMap中找,找到
     就调用方法处理message,并序列化返回的结果给client,更新handleStatus返回字节数。
4.最后更新handleStatus活动连接数 减1
 
handleStatus主要为http server提供RPCServer的处理状态的
 
agent(client)端:
client是要知道server的地址及监听端口,还有注册的服务的,client启动时实例化一个Session实例(用来保存发送到server的信息,实际应该是监控请求发送是否完成),每发送一次请求到server都会在client端的这个实例的_request_table(一个字典)中设置本次请求的msg_id,值为Future,Future是用来监控返回是否成功的【self.session.set(msgid, request.future)】
然后序列化(msgpack)请求信息 包括请求id,service,method等,放到一个client维护的队列中,这个队列是client启动时就实例化的,同时还启动了三个协程
pool.spawn_n(self.read_greenlet)
pool.spawn_n(self.write_greenlet)
pool.spawn_n(self.heartbeat_greenlet)
read_greenlet:监听server端的响应(死循环)
write_greenlet:从队列获取请求并发送到server(死循环)
heartbeat_greenlet:心跳

 
---完

我理解的RPC的更多相关文章

  1. 理解REST和RPC

    REST 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 网站开发,完全可以采用软件开发的模式.但是传统上,软件和网络是两个不同的领域,很少有交集:软件开发主要针对单机环境,网络则主要研究 ...

  2. RPC 使用中的一些注意点

    最近线上碰到一点小问题,分析其原因发现是出在对 RPC 使用上的一些细节掌握不够清晰导致.很多时候我们做业务开发会把 RPC 当作黑盒机制来使用,但若不对黑盒的工作原理有个基本掌握,也容易犯一些误用的 ...

  3. RPC 的概念模型与实现解析

    今天分布式应用.云计算.微服务大行其道,作为其技术基石之一的 RPC 你了解多少?一篇 RPC 的技术总结文章,数了下 5k+ 字,略长,可能也不适合休闲的碎片化时间阅读,可以先收藏抽空再细读:) 全 ...

  4. RPC原理详解

    RPC 功能目标 RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性. 为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分 ...

  5. RPC介绍

    转载http://blog.csdn.net/mindfloating/article/details/39474123/ 近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 ...

  6. 深入浅出 RPC - 浅出篇+深入篇

    摘自: http://blog.csdn.net/mindfloating/article/details/39473807 近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 ...

  7. 深入浅出 RPC - 深入篇

    <深入篇>我们主要围绕 RPC 的功能目标和实现考量去展开,一个基本的 RPC 框架应该提供什么功能,满足什么要求以及如何去实现它? RPC 功能目标 RPC 的主要功能目标是让构建分布式 ...

  8. RPC 的概念模型与实现解析(转)

    今天分布式应用.云计算.微服务大行其道,作为其技术基石之一的 RPC 你了解多少?一篇 RPC 的技术总结文章,数了下 5k+ 字,略长,可能也不适合休闲的碎片化时间阅读,可以先收藏抽空再细读:) 全 ...

  9. 浅析RPC概念框架

    本文原封不动的来至于csdn MindWind,原文请见 RPC:RPC 的全称是 Remote Procedure Call 是一种进程间通信方式.它允许程序调用另一个地址空间(通常是共享网络的另一 ...

随机推荐

  1. C++ union 公共体

    union myun { struct { int x; int y; int z; }u; int k; }a; int main() { a.u.x =; a.u.y =; a.u.z =; a. ...

  2. 基于BOOST 实现并发服务器框架

    一:设计思路 本服务器框架使用 UDP 传输协议,程序柱线程等待客户端数据,并将数组存取队列缓冲区.另外可开启多个工作线程,工作线程可以依据具体项目实现不同的功能 ,例如可以将队列缓冲区中的数据逐个取 ...

  3. SD卡FAT32文件系统格式

    一.声明 1.本文来源和主旨 2.本文测试环境 二.SD卡FAT文件系统 1.SD卡FAT32文件系统的整体布局 2.FAT文件系统简介 ① 文件分配表 ② 目录项 三.DBR(DOS BOOT RE ...

  4. 利用Multipeer Connectivity框架进行WiFi传输-b

    什么是Multipeer Connectivity? 在iOS7中,引入了一个全新的框架——Multipeer Connectivity(多点连接).利用Multipeer Connectivity框 ...

  5. 关于Windows环境下安装Android模拟器Genymotion的教程

    打开Genymotion的官网www.genymotion.com,点击按钮"get genymotion", 选择"Free"下的"DOWNLOAD ...

  6. hdu 3483 A Very Simple Problem

    两种构造的方式都是正确的: 1. #include<cstdio> #include<cstring> #include<algorithm> #define ma ...

  7. php-- 避免表单的重复提交

    用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题.我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交. 1.使用客户端脚本 提 ...

  8. easyui源码翻译1.32--Calendar(日历)

    前言 前几天加班比较忙 未能及时更新翻译的 今天多发布几篇..下载该插件翻译源码 日历控件显示一个月的日历,允许用户选择日期和移动到下一个或上一个月.默认情况下,一周的第一天是周日.它可以通过设置'f ...

  9. CentOS镜像163更新源

    首先备份/etc/yum.repos.d/CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-B ...

  10. c++模板实现抽象工厂

    类似于rime的rime::Class<factory type, product type>实现方式. C++模板实现的通用工厂方法模式 1.工厂方法(Factory Method)模式 ...