grpc & 云原生 概念介绍

226 阅读3分钟

grpc & 云原生 概念介绍

grpc 在当下的云原生的时代中,他的发展甚至比 java 体系中的 dubbo 更为好。技术一直在发展我们是无法改变的这也是必然的趋势,例如 thrift,hessian 等 rpc 框架,他们如雨后春笋一般的在慢慢诞生,发展,但是我们可以关注他们的本质其实就是技术诞生的时机,以及他解决的问题是什么,不管他的实现语言是什么。

简介

grpc 是由 google 开源的高性能的 rpc 框架(他是如何做到高性能呢?),他是由 tubby (google 内部的 rpc 框架)发展而来的,他是 2015 年开源,经过这么长时间的发展他已经成为了云原生是的的 rpc 标准,云原生中使用的容器,如 docker 或者 kubernetes 他们都是基于 go 语言实现的,云原生种最为重要的是容器的概念,容器编排的概念,这个时候就不可避免的会发生容器间通讯,这个时候 rpc 是必然的,内部如果使用 grpc 他们天然的无缝的可以衔接,这些东西就构成了我们今天的云原生 设计思路

  • 通讯
    • google 封装了 grpc 的通讯部分,并且针对不同的语言都有支持,如果是 java 他默认的底层实现是使用 netty 来实现的
  • 协议
    • 协议的实现使用的是 http2,(thrift,hessian 是自己实现的的一种自定义协议和 grpc 并不一样)http2 底层是使用二进制,大根就是二进制所以比 1 或者 1.1 的文本传输效率更高,并且支持双向流传输,而且支持多路复用
  • 序列化方式
    • 广义上是文本和二进制,文本传统就是 json,二进制比较复杂,可以是 prototype,java 的序列化,thrift 的二进制,grpc 底层就是使用 protobuf(protocol buffer) 来实现的,他也是由 google 开源的,这是一种序列化方式,不仅 grpc rpc 可以使用,其他的 rpc 也可以使用 protobuf 作为序列化方式来交,这也就是 google 为什么单独开源这个序列化方式的主要原因。
  • 代理
    • 让使用的开发让调用远端服务的时候像调用本地方法一样调用

grpc 和 thrift 的对比

共性

  • 都支持异构系统

区别

  • 网络通讯层面
    • grpc http2
    • thrift tcp 专属协议
  • 性能角度
    • 官方并没有给出一个明确的比较,但是开源社区有对比的结果是 thrift 的性能比 grpc 更要厉害。(大致原因是因为 http2 虽然是基于二进制的,但是毕竟是应用层协议,他注定要比 tcp 的要慢一些,而且虽然 grpc 的序列化使用的是 protobuf,但是 thrift 也有 compact binary 的二进制传输序列化的方式)
  • 背景
    • 大厂背书(google)
    • 云原生时代的宠儿

可以看出 thrift 也是一个很棒的 rpc 框架,他不逊色于 grpc,并且很多优秀的框架底层在使用,尤其是大数据领域,所以技术选型的时候要根据自己的实际情况来做选择

grpc 特点

  • rpc 基础的特点,高效的传输效率
  • 支持多语言,并且原生支持 go,java,c
  • 支持多平台,Linux,mac,windows,android,ios
  • 采用 protobuf 作为序列化方式
  • 使用 http2 作为网络传输