RPC
allenxguo
C++
展开
-
【RPC-Python】RPC消息协议设计
本系列均来自大神“老钱”的小册学习 https://juejin.im/user/5a9c4a13f265da23826d733a深入理解RPC消息协议设计对于一串消息流,我们必须能确定消息边界,提取出单条消息的字节流片段,然后对这个片段按照一定的规则进行反序列化来生成相应的消息对象。消息边界RPC 需要在一条 TCP 链接上进行多次消息传递。在连续的两条消...转载 2018-08-05 11:50:18 · 1679 阅读 · 0 评论 -
【RPC-Python】深入RPC分布式原理
前面几节讲的都是单机 RPC 服务的模式,无论是多线程也好多进程也好,它们都只能算是单点的设计。现代企业的关键性 RPC 服务是绝不可以只使用单点部署的。本节我们要对 RPC 服务进行分布式化,使得服务可以容忍个别节点故障仍能继续对外提供服务。客户端当 RPC 服务部署在多个节点上时,客户端得到的是一个服务列表,有多个 IP 端口对。客户端的连接池可以随机地挑选任意的 RPC 服务...转载 2018-09-04 21:53:43 · 3509 阅读 · 1 评论 -
【RPC-Python】多进程描述符传递模型
这个一个基于Node Cluster的多进程并发模型。Nginx 并发模型我们知道 Nginx 的并发模型是一个多进程并发模型,它的 Master 进程在绑定监听地址端口后 fork 出了多个 Slave 进程共同竞争处理这个服务端套接字接收到的很多客户端连接。 这多个 Slave 进程会共享同一个处于操作系统内核态的套接字队列,操作系统的网络模块在处理完三次握手后就会将套接字塞...转载 2018-09-04 21:10:54 · 613 阅读 · 0 评论 -
【RPC-Python】单进程异步模型
单进程异步模型本小节我们开始讲 RPC 的异步模型。异步模型是现代服务器的通用模型,它比古典的同步模型在效率上要高出一大截,但是编程难度上也要加大不少,需要程序员有较高的编程素养。关于如何应用异步模型,我们需要要先从非阻塞 IO 开始讲起,逐步理解基本原理和必备的工具和库之后,再用代码实现。非阻塞IO操作系统提供的文件读写操作默认都是同步的,它必须等到数据就绪后才能返回,如果数据没有就...转载 2018-08-28 22:42:32 · 1249 阅读 · 0 评论 -
【RPC-Python】多进程同步模型
上节我们完成了一个简单的多线程服务器,可以并发处理多个客户端连接。但是 Python 里多线程使用的并不常见,因为 Python 的 GIL 致使单个进程只能占满一个 CPU 核心,多线程并不能充分利用多核的优势。所以多数 Python 服务器推荐使用多进程模型。我们将使用 Python 内置的 进程模块创建子进程。multiprocessing多进程运行模型如下: # serv...原创 2018-08-28 22:05:20 · 1298 阅读 · 0 评论 -
【RPC-Python】多线程同步模型
上节我们编写了一个最简单的 RPC 服务器模型,简单到同时只能处理单个连接。本节我们为服务器增加多线程并发处理能力,同时可以处理多个客户端连接。后来的客户端连接再也不用排队了。这也是古典 RPC 服务最常见的处理模型。既然要使用多线程,自然离不开 Python 内置的多线程编程库。我们在上节引出的 socket、struct 和 json 三个库的基础上再增加第四个内置库 thread,本节程...转载 2018-08-16 22:32:09 · 1317 阅读 · 0 评论 -
【RPC-Python】单线程同步模型
如上图所示,现在我们开始使用代码来描述 RPC 的服务器模型,从简单变化到复杂,从经典变化到现代。简介本节我们会主要讲解以下内容:使用三个非常重要的 Python 内置的库,它们分别是 socket、struct 和 json,分别承担 RPC 服务的网络通信功能、字节转换功能和消息序列化功能。网络通信的内容是字节序列,消息序列化的目标是将 Python 的数据结构转换...转载 2018-08-13 22:28:16 · 912 阅读 · 0 评论 -
【深入理解RPC】基于Python自建分布式高并发RPC服务
系列索引:原创 2018-08-01 22:03:32 · 4365 阅读 · 0 评论 -
【RPC-Python】深入 RPC 客户端设计
RPC 客户端实现起来要比服务器简单,所以我们先讲客户端的实现原理和方法。当然,实现 RPC 客户端也具有一定的挑战性,其核心难点在于客户端往往并不是单线程的,我们需要考虑多线程下如何流畅使用客户端而不出现并发问题。我们将根据下图所示的模型图逐步讲解: 在多线程客户端中,客户端和数据库之间会维护一个连接池。当线程中的代码需要访问数据库时,先从连接池中获取一个连接,与数据库交互完成后再将这...原创 2018-08-12 16:51:03 · 2172 阅读 · 0 评论 -
【RPC-Python】Redis 协议的缺陷
连接重连RPC 是建立在 TCP 协议基础上进行消息传递,而 TCP 连接并不总是稳定的,它会受到网络波动的影响而导致连接断开。同时大部分服务器也会限制空闲连接的生存期,如果一个 TCP 连接闲置过久,也会被服务器主动关闭。如果这个 RPC 是以手机作为客户端发起的请求,那么这种连接断开的情况就更为频繁,用户的网络切换行为随时都会引发连接断开。当 RPC 连接断开时,客户端一般都需要实现连...原创 2018-08-12 15:52:42 · 1058 阅读 · 0 评论 -
【RPC-Python】Protobuf二进制协议结构
ProtobufProtobuf 协议是 Google 开源的二进制 RPC 通讯协议,它可能是互联网开源项目中使用最为广泛的 RPC 协议。Protobuf 提供了一种描述通讯协议的接口描述语言 IDL,通过编写接口协议,Protobuf 可以自动生成多种语言的 RPC 通讯代码,目前官方已经支持了近 10 种语言。协议格式| key1 | value1 | key2 | v...转载 2018-08-10 21:41:43 · 3164 阅读 · 0 评论 -
【RPC-Python】RPC交互过程
本系列均来自大神“老钱”的小册学习 https://juejin.im/user/5a9c4a13f265da23826d733a什么是RPCRPC (Remote Procedure Call)即远程过程调用,是分布式系统常见的一种通信方法,已经有 40 多年历史。当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手段之一。除 RPC 之外,常见的多...原创 2018-08-01 22:25:14 · 7999 阅读 · 2 评论 -
【RPC-Python】Redis文本协议结构
RedisRedis 在互联网存储技术上使用非常普遍,它以高性能高并发、易于理解和易于使用而广泛应用于互联网服务的存储系统上。Redis 要对外提供存储服务,客户端和服务器之间免不了也要进行 RPC 通信,Redis 作者 Antirez 为 Redis 设计了一套专用的文本通讯协议 RESP。Antirez 认为数据库系统的瓶颈一般不在于网络流量,而是数据库自身内部逻辑处理上。所以即...转载 2018-08-05 13:00:29 · 1213 阅读 · 1 评论 -
【RPC-Python】分布式 RPC 知识基础
分布式 RPC 知识基础分布式 RPC 知识基础杀死子进程信号处理函数错误码特殊信号收割子进程信号连续打断kazoo分布式 RPC 知识基础本节要学习一下 ZooKeeper 的进程管理、信号处理和服务发现的 Python 客户端基本使用。杀死子进程killparentchildPython 提供了 os.kill 函数,它可以向指定进程发送信号。比如你要强制杀死某个进程,可以向它发送...转载 2018-09-17 22:24:09 · 1458 阅读 · 0 评论