博客
关于我
深入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/

    你可能感兴趣的文章
    node-request模块
    查看>>
    Node.js 8 中的 util.promisify的详解
    查看>>
    Node.js 函数是什么样的?
    查看>>
    Node.js 历史
    查看>>
    Node.js 在个推的微服务实践:基于容器的一站式命令行工具链
    查看>>
    Node.js 实现类似于.php,.jsp的服务器页面技术,自动路由
    查看>>
    Node.js 异步模式浅析
    查看>>
    node.js 怎么新建一个站点端口
    查看>>
    Node.js 文件系统的各种用法和常见场景
    查看>>
    Node.js 的事件循环(Event Loop)详解
    查看>>
    node.js 简易聊天室
    查看>>
    Node.js 线程你理解的可能是错的
    查看>>
    Node.js 调用微信公众号 API 添加自定义菜单报错的解决方法
    查看>>
    node.js 配置首页打开页面
    查看>>
    node.js+react写的一个登录注册 demo测试
    查看>>
    Node.js中环境变量process.env详解
    查看>>
    Node.js之async_hooks
    查看>>
    Node.js升级工具n
    查看>>
    Node.js卸载超详细步骤(附图文讲解)
    查看>>
    Node.js基于Express框架搭建一个简单的注册登录Web功能
    查看>>