zoukankan      html  css  js  c++  java
  • 初识RPC框架

    RPC:

    服务化有什么好处?

    • 防止代码拷贝
    • 防止底层复杂性的扩散
    • 防止公共库的耦合
    • 保证 SQL 的质量,能够解除数据库的耦合

    RPC:Remote Procedure Call Protocol,远程过程调用协议,像调用本地函数一样,去调用一个远端服务。

    相比“同一个进程”的“本地”函数调用,有没有办法,调用一个“跨进程”的“远程”函数呢?

    Socket 通讯,只能传递连续的字节流,如何将 “入参/函数” 放到连续的字节流里呢?需要设计“应用层报文(协议)”

    “跨进程”“远程”调用的过程

    RPC 框架的架构职责

    上述跨进程调用远端的服务,存在的问题是没有将通用操作抽离出来。

    RPC框架职责:

    1. 让调用端,像调用本地函数一样,便捷的调用远程的服务
    2. 让服务端,像提供本地函数一样,便捷的提供远程的服务

    向调用方屏蔽各种复杂性,向服务方也屏蔽各种复杂性,让调用方感觉上就是在调用本地函数一样,来调用一个远端的服务;让服务方就像实现一个本地函数一样,便捷地提供远端服务。

    为什么需要序列化?

    需要将对象等数据进行二进制转储。

    所谓序列化,是将“对象”形态的数据转化为“连续空间二进制字节流”形态数据的过程。

    如何进行序列化?

    如何将一个 class User 的内存实体 u1 转化为二进制字节流?

    • 方案一:自描述

      自描述的标记性语言 (XML/JSON),来进行转换。规定好转换规则。

    • 方案二:序列化协议

      序号 | key 长度 | key 值 | value 长度 | value 值

    序列化协议设计,要考虑什么因素?

    1. 解析效率
    2. 压缩率,传输有效性
    3. 扩展性,兼容性
    4. 可读性,可调试性
    5. 跨语言
    6. 通用性

    总结:

    1. 什么是 RPC?

      像调用本地函数一样,去调用一个远端服务

    2. 为什么需要 RPC 框架?

      用来屏蔽 rpc 调用过程中,跟业务代码无关的底层技术细节

    3. 什么是序列化?为什么需要序列化?

      将对象转换为二进制流的过程

    4. 同步 RPC-Client 的核心组件是什么?

      序列化/反序列化、连接池

    5. 异步 RPC-Client 的核心组件是什么?

      收发队列(用于解耦)、工作线程、上下文管理器

  • 相关阅读:
    BZOJ5368:[PKUSC2018]真实排名(组合数学)
    【HDU2222】Keywords Search
    KMP算法
    【BZOJ3262】 陌上花开
    【POJ2104】kth num
    【BZOJ1251】序列终结者
    【BZOJ3524】 [Poi2014]Couriers
    【BZOJ2049】 [Sdoi2008]Cave 洞穴勘测
    【BZOJ1468】Tree
    【BZOJ2152】聪聪可可
  • 原文地址:https://www.cnblogs.com/yuanmingzhou/p/14578034.html
Copyright © 2011-2022 走看看