RPC (remote procedure call) - 相关学习和总结

本文深入探讨RPC(远程过程调用)的概念,包括其基本流程、与REST的区别。接着,详细介绍了Go语言中RPC的client和server实现。最后,对比了gRPC、thrift和zerorpc三个RPC框架的特性和应用场景,强调了gRPC的高性能、多语言支持,thrift的跨语言服务开发以及zerorpc的低使用成本和高可用性。
摘要由CSDN通过智能技术生成

RPC (remote procedure call) - 相关学习和总结

一、概念总结

RPC - 远程过程调用(协议):一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络细节的应用程序通信协议。

服务器A、B,分别各自部署不同的应用a、b;a 调用 b 的函数,由于不是同一个内存空间,所以需要通过中间处理,将命令传输给 B 最后返回给 A 的 a。

1-1 RPC 的基本流程

  1. client - server 通过协议(TCP、UDP等)进行连接
  2. 寻址,通过主机、IP地址、端口、方法名等进行目标的查询
  3. client 发起远程调用时,需将参数序列化成二进制进行传输,并以寻址路线将二进制数据交与server
  4. server 获取请求后,将数据进行反序列化,本地调用相关函数,并将结果序列化返回 client
  5. client 接收响应,反序列化数据,交与相关应用。

img

1-2 RPC vs REST

REST

  • 面向资源,以名词为主的调用,基于 CRUD 等进行基本操作
  • e.g. DELETE /user/1
  • 通常应用于B/S架构
  • 一般基于 HTTP 协议

RPC

  • 面向命令,以动词为主的调用,多数仅仅只有 get 和 post
  • e.g. POST /deleteUser + { “id”: 1 }
  • 通常应用于C/S架构,多应用于跨语言夸平台的服务调用
  • 一个完善的RPC架构通常包含代码生成,通信规范等
  • 可以通过 socket、http、操作系统自带的管道等技术

二、RPC 下的 client 和 server - go

2-1 server 端

// server
package main

import (
    "errors"
    "log"
    "net"
    "net/http"
    "net/rpc"
    "os"
    "time"
)

type Args struct {
   
    A, B int
}

type Quotient struct {
   
    Quo, Rem int
}

type Arith int

//计算乘积
func (t *Arith) Multiply(args *Args, reply *int) error {
   
    time.Sleep(time.Second * 3) //睡三秒,同步调用会等待,异步会先往下执行
    *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值