博客
关于我
深入RPC原理
阅读量:94 次
发布时间:2019-02-26

本文共 1889 字,大约阅读时间需要 6 分钟。

深入RPC原理

为什么要学习RPC

在分布式系统中,RPC(Remote Procedure Call)是一种常用的进程间通信方式。它允许程序在不直接操作另一台机器的情况下,调用另一台机器上的函数或方法。RPC的核心特点是简化远程调用,使开发者无需显式管理网络通信细节。

TCP/UDP协议

TCP协议

TCP(传输控制协议)是一种面向连接的、可靠的流协议。它通过三次握手建立连接,确保数据传输的顺序性和完整性。TCP的主要特点包括:

  • 面向连接:连接建立前需要经过三次握手,断开时需要四次挥手。
  • 可靠性:通过序列号和确认机制保证数据传输的完整性。
  • 流控制:通过滑动窗口机制避免数据过载。

UDP协议

UDP(用户数据包协议)是一种无连接的、不可靠的数据报协议。其特点包括:

  • 无连接:连接建立和断开不需要额外的握手过程。
  • 不可靠性:数据包可能丢失或乱序,需要上层协议进行处理。
  • 高效率:传输速度快,但数据传输不保证可靠性。

HTTP和RPC协议

HTTP协议

HTTP是一种应用层协议,用于在客户端和服务器之间传输网页内容。其特点包括:

  • 无状态性:每次请求服务器时,服务器不需要记住客户端的状态信息。
  • 请求-响应模式:客户端发起请求,服务器返回响应。
  • 连接管理:支持持续连接(keep-alive)和分段传输(chunked encoding)。

RPC协议

RPC是一种进程间通信方式,允许程序在不直接操作另一台机器的情况下,调用另一台机器上的函数或方法。其特点包括:

  • 简化远程调用:开发者无需显式管理网络通信细节。
  • 分布式设计:支持分布式系统中的服务间通信。
  • 解耦服务:服务间可以直接进行方法调用,无需依赖彼此。

HTTP和RPC对比

对比项 HTTP RPC
传输协议 基于TCP协议 可以基于TCP或HTTP协议
传输效率 不适合大数据传输 适合大数据传输
性能消耗 JSON序列化效率低 自定义序列化效率高
负载均衡 需配置Nginx、HAProxy 内置负载均衡策略
服务治理 需手动通知配置 自动化服务发现与通知

主流RPC框架

  • Dubbo:阿里巴巴开源的RPC框架,支持Java。
  • Motan:微博开源的RPC框架,支持Java。
  • Tars:腾讯开源的RPC框架,支持C++。
  • Spring Cloud:国外Pivotal公司开源的RPC框架。
  • gRPC:Google开源的跨语言RPC框架。
  • Thrift:Facebook最初开发的跨语言RPC框架。

应用场景

  • 分布式操作系统:进程间通讯。
  • 分布式软件设计:服务间远程通信。
  • 远程数据库服务:客户端访问数据库服务器。
  • 分布式应用程序设计:简化远程调用逻辑。
  • 分布式程序调试:通过反向RPC实现调试功能。

RPC调用流程

  • 客户端通过本地调用的方式调用服务。
  • 客户端存根接收请求,进行序列化和地址查找。
  • 消息通过网络传输到服务端。
  • 服务端存根解码消息,调用本地服务。
  • 服务返回结果,客户端存根进行反序列化和处理。
  • 序列化技术

    序列化技术将对象转换为二进制数据,主要优点包括:

    • 性能高效:二进制数据传输速度快。
    • 压缩率高:相比于JSON等文本格式,二进制数据体积更小。
    • 扩展性强:支持动态类型,适应新字段添加。

    动态代理

    动态代理通过生成代理类实现接口调用,核心特点包括:

    • 透明性:调用透明化,用户无需关心远程调用逻辑。
    • 功能扩展:代理类可以添加额外功能,如连接管理、日志记录。

    服务注册与发现

    服务注册与发现通过注册中心实现服务发现,主要流程包括:

    • 服务注册:服务提供方发布服务信息到注册中心。
    • 服务订阅:服务消费方从注册中心获取服务信息。
    • 心跳检测:维护服务状态,确保服务可用性。

    网络IO模型

    网络IO模型分为阻塞IO和多路复用模型:

    • 阻塞IO:单线程模型,适合低并发场景。
    • 多路复用IO:多线程模型,适合高并发场景。

    零拷贝技术

    零拷贝技术通过减少内核与用户空间的数据拷贝,提升网络通信效率。Netty框架通过直接内存和组合缓冲区实现零拷贝。

    时间轮

    时间轮通过定时任务实现任务调度,减少不必要的轮询,提升系统性能。Dubbo框架使用HashedWheelTimer实现时间轮。

    异步处理机制

    异步处理通过Future方式实现,服务端和调用端都支持异步调用,提升系统吞吐量。

    路由与负载均衡

    路由通过服务注册中心实现,负载均衡策略包括随机、轮询、权重等,Dubbo默认使用随机负载均衡策略。

    熔断限流

    熔断限流通过控制请求流量,保护服务节点免受过载。Sentinel框架提供滑动窗口限流策略,实现服务自我保护。

    转载地址:http://gssz.baihongyu.com/

    你可能感兴趣的文章
    Nginx的是什么?干什么用的?
    查看>>
    Nginx访问控制_登陆权限的控制(http_auth_basic_module)
    查看>>
    nginx负载均衡器处理session共享的几种方法(转)
    查看>>
    nginx负载均衡的5种策略(转载)
    查看>>
    nginx负载均衡的五种算法
    查看>>
    Nginx运维与实战(二)-Https配置
    查看>>
    Nginx配置ssl实现https
    查看>>
    Nginx配置TCP代理指南
    查看>>
    Nginx配置——不记录指定文件类型日志
    查看>>
    Nginx配置代理解决本地html进行ajax请求接口跨域问题
    查看>>
    Nginx配置参数中文说明
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    NHibernate学习[1]
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>