包含标签 grpc 的文章

「连载十」分布式链路追踪 gRPC + Opentracing + Zipkin

在实际应用中,你做了那么多 Server 端,写了 N 个 RPC 方法。想看看方法的指标,却无处下手? 本文将通过 gRPC + Opentracing + Zipkin 搭建一个分布式链路追踪系统来实现查看整个系统的链路、性能等指标。 Opentracing 是什么 OpenTracing 通过提供平台无关、厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现 不过 OpenTracing 并不是标准。因为……

阅读全文

「连载九」gRPC Deadlines

前言 在前面的章节中,已经介绍了 gRPC 的基本用法。那你想想,让它这么裸跑真的没问题吗? 那么,肯定是有问题了。今天将介绍 gRPC Deadlines 的用法,这一个必备技巧。内容也比较简单 Deadlines Deadlines 意指截止时间,在 gRPC 中强调 TL;DR(Too long, Don’t read)并建议始终设定截止日期,为什么呢? 为什么要设置 当未设置 Deadlines 时,将采用……

阅读全文

「连载八」对 RPC 方法做自定义认证

前言 在前面的章节中,我们介绍了两种(证书算一种)可全局认证的方法: TLS 证书认证 基于 CA 的 TLS 证书认证 Unary and Stream interceptor 而在实际需求中,常常会对某些模块的 RPC 方法做特殊认证或校验。今天将会讲解、实现这块的功能点 课前知识 type PerRPCCredentials interface { GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) RequireTransportSecurity() bool } 在 gRPC 中默认定义了 PerRPCCredentials,它就……

阅读全文

「连载七」让你的服务同时提供 HTTP 接口

前言 接口需要提供给其他业务组访问,但是 RPC 协议不同无法内调,对方问能否走 HTTP 接口,怎么办? 微信(公众号、小程序)等第三方回调接口只支持 HTTP 接口,怎么办 我相信你在实际工作中都会遇到如上问题,在 gRPC 中都是有解决方案的,本章节将会进行介绍 🤔 为什么可以同时提供 HTTP 接口 关键一点,gRPC 的协议是基于……

阅读全文

「连载六」Unary and Stream interceptor

前言 我想在每个 RPC 方法的前或后做某些事情,怎么做? 本章节将要介绍的拦截器(interceptor),就能帮你在合适的地方实现这些功能。 有几种方法 在 gRPC 中,大类可分为两种 RPC 方法,与拦截器的对应关系是: 普通方法:一元拦截器(grpc.UnaryInterceptor) 流方法:流拦截器(g……

阅读全文

「连载五」基于 CA 的 TLS 证书认证

前言 在上一章节中,我们提出了一个问题。就是如何保证证书的可靠性和有效性?你如何确定你 Server、Client 的证书是对的呢? CA 为了保证证书的可靠性和有效性,在这里可引入 CA 颁发的根证书的概念。其遵守 X.509 标准 根证书 根证书(root certificate)是属于根证书颁发机构(CA)的……

阅读全文

「连载四」TLS 证书认证

前言 在前面的章节里,我们介绍了 gRPC 的四种 API 使用方式。是不是很简单呢 😀 此时存在一个安全问题,先前的例子中 gRPC Client/Server 都是明文传输的,会不会有被窃听的风险呢? 从结论上来讲,是有的。在明文通讯的情况下,你的请求就是裸奔的,有可能被第三方恶意篡改或者伪造为“非法”的数据 抓个包 嗯,明文传输无误。这是……

阅读全文

「连载三」gRPC Streaming, Client and Server

前言 本章节将介绍 gRPC 的流式,分为三种类型: Server-side streaming RPC:服务器端流式 RPC Client-side streaming RPC:客户端流式 RPC Bidirectional streaming RPC:双向流式 RPC 流 任何技术,因为有痛点,所以才有了存在的必要性。如果您想要了解 gRPC 的流式调用,请继续 图 gRPC Streaming 是基于 HTTP/2 的,后续章节再进行详细讲解 为什么不用 Simple RPC 流式为什么要存在呢,是 Simple RPC 有什么……

阅读全文

「连载二」gRPC Client and Server

前言 本章节将使用 Go 来编写 gRPC Server 和 Client,让其互相通讯。在此之上会使用到如下库: google.golang.org/grpc github.com/golang/protobuf/protoc-gen-go 安装 gRPC go get -u google.golang.org/grpc Protocol Buffers v3 wget https://github.com/google/protobuf/releases/download/v3.5.1/protobuf-all-3.5.1.zip unzip protobuf-all-3.5.1.zip cd protobuf-3.5.1/ ./configure make make install 检查是否安装成功 protoc --version 若出现以下错误,执行 ldconfig 命名就能解决这问题 protoc: error while loading shared libraries: libprotobuf.so.15: cannot open shared object file: No such file or directory Protoc Plugin go get -u github.com/golang/protobuf/protoc-gen-go 安装环境若有问题,可参考我先前的文章 《介绍与环境……

阅读全文

「连载一」gRPC及相关介绍

项目地址:https://github.com/zshipu/go-grpc-example 作为开篇章,将会介绍 gRPC 相关的一些知识。简单来讲 gRPC 是一个 基于 HTTP/2 协议设计的 RPC 框架,它采用了 Protobuf 作为 IDL 你是否有过疑惑,它们都是些什么?本文将会介绍一些常用的知识和概念,更详细的会给出手册地址去深入……

阅读全文