grpc简介

参考文章

  • rpc简介:https://www.jianshu.com/p/b0343bfd216e
  • grpc官方中文文档:http://doc.oschina.net/grpc?t=56831
  • 知乎:https://zhuanlan.zhihu.com/p/148139089,非常推荐

RPC作用

  • 可以像调用本地方法一样调用远程方法
  • 微服务的基础
  • Http有用信息占比少

Grpc简介

  • 基于HTTP2 + protobuf3实现

为什么GRPC基于HTTP2.0而不是基于私有协议

  • 成熟、通用性好
  • 支持流式传输
  • 相较于HTTP1,性能好
  • 安全性好,支持ssl

RESTful HTTP JSON

  • HTTP的header和Json的数据冗余和低压缩率使得传输性能差
  • JSON难以表达复杂的参数类型,如结构体等

protobuf3

  • 体积小、传输快
  • 冗余字符少:
    • json需要传输field名称,并且有{}””等冗余字符
    • pb中由于双端共享proto文件,无需传输field名称,只需要传递field编号即可
    • pb中一个kv的结构为Tag(1字节,field编号+数据类型)-Leg(value字符串长度,方便取值)-Value
  • 编码时进行压缩:
    • 整数采用varint类型,即变长整数,不固定为32字节而是根据数据的实际大小进行位数分配
    • 负数采用zigzag类型,可以避免补码使用较多位数的情况

服务发现

rpc服务的实例启动后将自己注册到服务中心,调用方通过服务中心拉取到可调用地址

etcd

负载均衡

Docker Swarm

Docker Swarm 提供了一套高可用 Docker 集群管理的解决方案,完全支持标准的 Docker API,方便管理调度集群 Docker 容器,合理充分利用集群主机资源

  • 管理节点
  • 工作节点
  • 任务:一个容器
  • 服务:多个容器

负载均衡

参考文章

  • VIP:分配独立的虚拟IP,DNS记录解析到服务名中作为代理IP。
  • dnsrr:DNS记录不解析VIP,而去解析每个容器内的IP。dnsrr模式不支持端口对外暴露。

I/O复用:epoll

服务端采用epoll处理请求

Grpc

特性

  1. 基于服务的思想:服务端和客户端均存有服务
  2. 使用protobuf作为IDL(接口描述语言),并且实现通信数据之间的序列化和反序列化
  3. 支持同步调用和异步调用
  4. 基于HTTP2:支持流式传输
  5. 没有直接实现负载均衡和服务发现的功能,但是已经提供了自己的设计思路。已经为命名解析和负载均衡提供了接口

ProtoBuf

  1. 支持比较复杂的数据结构
  2. 向后兼容
  3. 数据压缩率高
  • 冗余字符少:
    - json需要传输field名称,并且有{}””等冗余字符
    - pb中由于双端共享proto文件,无需传输field名称,只需要传递field编号即可
    - pb中一个kv的结构为Tag(1字节,field编号+数据类型)-Leg(value字符串长度,方便取值)-Value
  • 编码时进行压缩:
    • 整数采用varint类型,即变长整数,不固定为32字节而是根据数据的实际大小进行位数分配
    • 负数采用zigzag类型,可以避免补码使用较多位数的情况
  1. 跨语言

实现注册中心

注册中心的作用

  • 解耦服务提供者和服务消费者
  • 实现负载均衡

注册中心两种方案

集中式 LB (Load Balance),代理模型
  • 代理本身就具备负载均衡算法,心跳检测,失败重试,失败转移等功能
  • 不支持动态的新增服务提供者,并发量大以后,代理会成为瓶颈,代理也有可能会成为单点等问题
进程内 LB (Load Balance),软负载
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: RPC(Remote Procedure Call)和 gRPC 是两种不同的远程过程调用协议。RPC是一种通过网络从远程计算机程序上请求服务的协议,它可以实现不同节点之间的通信。而gRPC是一种基于RPC协议的框架,它使用了Google开发的Protocol Buffers作为序列化和协议编解码器,以及HTTP/2作为网络传输协议。\[1\]\[2\]\[3\] 区别在于,gRPC相比传统的RPC框架具有以下特点: 1. 序列化和协议编解码器:gRPC使用Protocol Buffers作为默认的序列化和协议编解码器,它可以高效地序列化和传输数据。 2. 网络传输协议:gRPC使用HTTP/2作为网络传输协议,可以提供更高的性能和更低的延迟。 3. 多语言支持:gRPC支持多种编程语言,包括C++、Java、Python等,可以方便地在不同的语言之间进行通信。 4. 异步支持:gRPC支持异步调用,可以提高系统的并发性能。 5. 服务定义:gRPC使用Protocol Buffers定义服务接口和消息类型,可以自动生成客户端和服务端的代码,简化开发过程。 总之,gRPC是一种基于RPC协议的框架,通过使用Protocol Buffers和HTTP/2等技术,提供了更高效、更灵活的远程过程调用方式。 #### 引用[.reference_title] - *1* *2* *3* [Rpc 和 gRpc 简介汇总](https://blog.csdn.net/Jailman/article/details/126056469)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值