1.说明

gRPC英文全名为Google Remote Procedure Call,
即Google远程过程调用,
是Google发布的一个高性能、通用的开源RPC框架,

2.gRPC定义

gRPC是一个现代的开源高性能RPC框架,
可以在任何环境中运行。
它可以高效地连接数据中心内和跨数据中心的服务,
支持可插拔的负载平衡、跟踪、运行状况检查和身份验证。
它也适用于分布式计算的最后一英里连接设备,
移动应用程序和浏览器后端服务。

gRPC提供了一种简单的方法来精确地定义服务,
使用Protocol Buffers定义服务,
为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。
基于HTTP/2传输层标准协议设计的,
可以设置为同步或者异步通讯。

gRPC提供了支持多种编程语言的、
对网络设备进行配置和管理的方法。
通信双方可以基于该软件框架进行二次开发。

3.为什么使用gRPC

我们的例子是一个简单的路由映射的应用,
它允许客户端获取路由特性的信息,
生成路由的总结,
以及交互路由信息,
如服务器和其他客户端的流量更新。

有了gRPC,
我们可以一次性的在一个.proto文件中定义服务,
并使用任何支持它的语言去实现客户端和服务器,
反过来,它们可以在各种环境中,
从Google的服务器到你自己的平板电脑,
gRPC帮你解决了不同语言及环境间通信的复杂性。
使用Protocol Buffers还能获得其他好处,
包括高效的序列化,
简单的IDL以及容易进行接口更新。

3.1.简单的服务定义

使用Protocol Buffers定义服务,
Protocol Buffers是一种强大的二进制序列化工具集和语言。

3.2.快速启动并扩大规模

使用单行安装运行时和开发环境,并使用框架扩展到每秒数百万个rpc。

3.3.跨语言和平台工作

以各种语言和平台为你的服务自动生成惯用的客户端和服务器存根。

3.4.双向流和集成认证

双向流和完全集成了基于HTTP/2的传输的可插拔身份验证。

4.协议栈

gRPC协议栈分层模型:

分层 说明
消息内容层 业务模块的通信双方需要了解彼此的数据模型,才能正确处理数据
Protocol Buffers编码层 gRPC通过Protocol Buffers编码格式承载数据
gRPC层 远程过程调用,定义了远程过程调用的协议交互格式
HTTP层 gRPC承载在HTTP/2协议上
TCP层 TCP连接提供面向连接的、可靠的数据链路

5.网络架构

gRPC网络采用客户端/服务器模型,
使用HTTP/2协议传输报文:

gRPC网络的工作机制:

  1. 服务器通过监听指定服务端口来等待客户端的连接请求。
  2. 用户通过执行客户端程序登录到服务器。
  3. 客户端调用.proto文件提供的gRPC方法发送请求消息。
  4. 服务器回复应答消息。

服务器和客户端可以是任意语言编写的,
不需要保持一致,
服务端可以是C++编写的,
客户端可以是Java编写的,
通信双方只要支持gRPC,
不关心具体使用的编程语言。

6.支持开发语言

由于gRPC提供使用Protocol Buffers定义服务,
Protobuf3是类似json,xml的数据交换协议,
但是它比它们传输的数据更小,传输的速度更快;
跨语言交互,支持大部分主流编程语言:

  1. C++
  2. C#/.NET
  3. Objective-C
  4. Dart
  5. Go
  6. Java
  7. Android Java
  8. Kotlin/JVM
  9. Node.js
  10. Ruby
  11. Web
  12. PHP
  13. Python

还有更多支持语言在开发中。

7.参考文章

Supported languages and platforms
gRPC创建Java RPC服务
ProtoBuf3语法指南(Protocol Buffers)_上
ProtoBuf3语法指南(Protocol Buffers)_下

gPRC基本介绍的更多相关文章

  1. grpc介绍

    grpc入门(一) 一.什么是grpc grpc是谷歌开源的一款高性能的rpc框架 (https://grpc.io),可以使用protocol buffers作为IDL(Interface Defi ...

  2. Nginx接入gPRC

    gPRC官网:https://grpc.io/ NGINX将在1.13.10版本中包含grpc相关功能 这个版本支持NGINX代理gRPC TCP连接.可以用来: 发布gRPC服务,包括未加密/加密的 ...

  3. 微服务系列(二)GRPC的介绍与安装

    微服务系列(二)GRPC的介绍与安装 1.GPRC简介 GRPC是Google公司基于Protobuf开发的跨语言的开源RPC框架.GRPC基于HTTP/2协议设计,可以基于一个HTTP/2链接提供多 ...

  4. CSS3 background-image背景图片相关介绍

    这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...

  5. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  6. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

  7. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

  8. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  9. HTML DOM 介绍

    本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...

随机推荐

  1. HTML DOM 对象 - 方法和属性

    一些常用的 HTML DOM 方法: getElementById(id) - 获取带有指定 id 的节点(元素) appendChild(node) - 插入新的子节点(元素) removeChil ...

  2. 剖析虚幻渲染体系(13)- RHI补充篇:现代图形API之奥义与指南

    目录 13.1 本篇概述 13.1.1 本篇内容 13.1.2 概念总览 13.1.3 现代图形API特点 13.2 设备上下文 13.2.1 启动流程 13.2.2 Device 13.2.3 Sw ...

  3. Groovy获取Bean两种方式(奇淫技巧操作)

    前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 背景: 在Java代码中当我们需要一个Bean对象,通常会使用spring中@Autowired注解,用来自动装配对象. 在Groovy ...

  4. 内存泄漏避雷!你真的了解重写equals()和hashcode()方法的原因吗?

    基本概念 要比较两个对象是否相等时需要调用对象的equals() 方法: 判断对象引用所指向的对象地址是否相等 对象地址相等时, 那么对象相关的数据也相等,包括: 对象句柄 对象头 对象实例数据 对象 ...

  5. Table.FirstN保留前面N….First…(Power Query 之 M 语言)

    数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...

  6. CF20B Equation 题解

    Content 解方程 \(ax^2+bx+c=0\). 数据范围:\(-10^5\leqslant a,b,c\leqslant 10^5\). Solution 很明显上求根公式. 先来给大家推推 ...

  7. 什么是协程?与线程和进程对比优劣在哪?gevent协程示例代码

      协程 协程,又称微线程,纤程.英文名Coroutine..一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在 ...

  8. vnc mirror driver

    2012年4月,大二下学期,平静的课堂上老师通知了一个比赛...第一届大学生软件设计大赛!然后我选了第六题:windows屏幕录像.就这样我就开始了我的vc开发生涯. 之前学了c/c++作为基础,自认 ...

  9. Vue页面内公共的多类型附件图片上传区域并适用折叠面板

    在前端项目中,附件上传是很常用的功能,几乎所有的app相关项目中都会使用到,一般在选择使用某个前端UI框架时,可以查找其内封装好的图片上传组件,但某些情况下可能并不适用于自身的项目需求,本文中实现的附 ...

  10. Error: Not found: 'package:json_annotation/json_annotation.dart'

    问题原因 json_annotation版本不对 修改json_annotation版本号 当前可用版本号 json_annotation: ^2.2.0