「连载八」对 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 都是明文传输的,会不会有被窃听的风险呢? 从结论上来讲,是有的。在明文通讯的情况下,你的请求就是裸奔的,有可能被第三方恶意篡改或者伪造为“非法”的数据 抓个包 嗯,明文传输无误。这是……

阅读全文

log 标准库

日志 输出 2018/09/28 20:03:08 zshipu Blog... 构成 [日期]<空格>[时分秒]<空格>[内容]<\n> 源码剖析 Logger type Logger struct { mu sync.Mutex prefix string flag int out io.Writer buf []byte } mu:互斥锁,用于确保原子的写入 prefix:每行需写入的日志前缀内容 flag:设置日志辅助信息(时间、文件名、行号)的写入。可选如下……

阅读全文

「连载三」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 你是否有过疑惑,它们都是些什么?本文将会介绍一些常用的知识和概念,更详细的会给出手册地址去深入……

阅读全文

Go 大杀器之性能剖析 PProf

前言 写了几吨代码,实现了几百个接口。功能测试也通过了,终于成功的部署上线了 结果,性能不佳,什么鬼?😭 想做性能分析 PProf 想要进行性能优化,首先瞩目在 Go 自身提供的工具链来作为分析依据,本文将带你学习、使用 Go 后花园,涉及如下: runtime/pprof:采集程序(非 Server)的运行数据……

阅读全文