Go
文章平均质量分 92
探索云原生
一个云原生打工人的探索之路,专注云原生,Go,坚持分享最佳实践、经验干货。
同名 GZH 【探索云原生】欢迎关注~
展开
-
Go exec 包执行命令超时失效问题分析及解决方案
本文主要从源码层面分析了 Go exec 包执行命令超时失效问题,找出具体原因并给出相关解决方案。使用 os/exec 执行 shell 脚本并设置超时时间,然后到超时时间之后程序并未超时退出,反而一直阻塞。...原创 2022-07-09 14:00:25 · 2176 阅读 · 0 评论 -
Go语言之 Context 实战与源码分析
来自:指月 https://www.lixueduan.com原文:https://www.lixueduan.com/post/go/context/本文主要简单介绍了Go语言(golang)中的context包。给出了context 的基本用法和使用建议,并从源码层面对其底层结构和具体实现原理进行分析。1. 概述以下分析基于 Go 1.17.11.1 什么是 Context上下文 context.Context在Go 语言中用来设置截止日期、同步信号,传递请求相关值的结构体。上下文与原创 2021-12-25 10:35:26 · 525 阅读 · 0 评论 -
Kafka(Go)教程(六)---sarama 客户端 producer 源码分析
来自:指月 https://www.lixueduan.com原文:https://www.lixueduan.com/post/kafka/06-sarama-producer/本文主要通过源码分析了 Kafka Go sarama 客户端生产者的实现原理,包括消息分发流程,消息打包处理,以及最终发送到 Kafka 等具体步骤,最后通过分析总结出的常见性能优化手段。本文基于 sarama v1.29.11. 概述Kafka 系列相关代码见 Github具体流程如下图:Sarama原创 2021-09-20 11:45:19 · 1772 阅读 · 0 评论 -
Go语言之防缓存穿透利器Singleflight
来自:指月 https://www.lixueduan.com原文:https://www.lixueduan.com/post/go/singleflight/本文主要分析了 Golang 中的一个第三方库,防缓存击穿利器 singleflight,包括基本使用和源码分析。1. 缓存击穿平时开发中为了提升性能,减轻DB压力,一般会给热点数据设置缓存,如 Redis,用户请求过来后先查询 Redis,有则直接返回,没有就会去查询数据库,然后再写入缓存。大致流程如下图所示:以上流程存在一个问题原创 2021-07-17 13:26:20 · 1028 阅读 · 0 评论 -
史上最细gRPC(Go)入门教程(十三)---Kubernetes 环境下的 gRPC 负载均衡
本文主要介绍了 Kubernetes 环境中的 gRPC 负载均衡具体实现。gRPC 系列相关代码见 Github1. 概述系统中多个服务间的调用用的是 gRPC 进行通信,最初没考虑到负载均衡的问题,因为用的是 Kubernetes,想的是直接用 K8s 的 Service 不就可以实现负载均衡吗。但是真正测试的时原创 2021-06-06 19:33:11 · 1167 阅读 · 0 评论 -
史上最细gRPC(Go)入门教程(十二)---客户端负载均衡
本文主要介绍了 gRPC 内置的负载均衡策略及其配置与使用,包括 Name Resolver、ServiceConfig 等。gRPC 系列相关代码见 Github1. 概述gRPC 负载均衡包括客户端负载均衡和服务端负载均衡两种方向。本文主要介绍的是客户端负载均衡。gRPC 的客户端负载均衡主要分为两个部...原创 2021-05-29 17:31:24 · 2631 阅读 · 2 评论 -
史上最细gRPC(Go)入门教程(十一)---NameResolver 实战及原理分析
本文主要介绍了 gRPC 的 NameResolver 及其简单使用,同时从源码层面对其核心原理进行了分析。gRPC 系列相关代码见 Github1. 概述具体可以参考官方文档-Name ResolvergRPC 中的默认 name-system 是 DNS,同时在客户端以插件形式提供了自定义 name-system 的机制。gRP原创 2021-05-23 11:16:38 · 1406 阅读 · 0 评论 -
史上最细gRPC(Go)入门教程(十)------gRPC压测工具ghz
本文主要介绍了 gRPC 压测工具 ghz ,包括 ghz 的安装、使用及压测计划制定等。gRPC 系列相关代码见 Github1. 安装可以直接在Release页面下载二进制文件,也可以 clone 仓库手动编译。下载解压后即可使用# 下载$ wget https://github.91chifun.workers.dev/https:原创 2021-05-15 12:33:47 · 2664 阅读 · 0 评论 -
史上最细gRPC(Go)入门教程(九)---配置retry自动重试
本文主要记录了如何使用 gRPC 中的 自动重试功能。1. 概述gRPC 系列相关代码见 GithubgRPC 中已经内置了 retry 功能,可以直接使用,不需要我们手动来实现,非常方便。2. DemoServer为了测试 retry 功能,服务端做了一点调整。记录客户端的请求次数,只有满足条件的那一次(这里就是请求次数模4等于0的那一次)才原创 2021-05-05 12:00:18 · 2670 阅读 · 0 评论 -
史上最细gRPC(Go)入门教程(八)---使用context进行超时控制
本文主要记录了如何使用 context 为 RPC 请求设置超时时间,或者通过 cancel 手动取消本次请求。1. 概述gRPC 系列相关代码见 Github通过 ctx 完成 cancel 和 deadline 功能。Go 语言中可以通过 ctx 来控制各个 Goroutine,调用 cancel 函数,则该 ctx原创 2021-04-24 11:21:24 · 2515 阅读 · 0 评论 -
史上最细gRPC(Go)入门教程(七)---利用Gateway同时提供HTTP和RPC服务
本文主要记录了如何使用 gRPC-Gateway 同时对外提供 RESTful API 和 gRPC 接口。1. 概述gRPC 系列相关代码见 GithubgRPC-Gateway 是Google protocol buffers compiler(protoc)的一个插件。读取 protobuf 定义然后生成反向代理服务器,将 RE原创 2021-04-10 10:58:44 · 3717 阅读 · 6 评论 -
史上最细gRPC(Go)入门教程(二)---gRPC初体验--hello world
本文主要对 gRPC 框架做了简单的介绍,同时记录了一个简单的 hello wolrd 教程。1. 概述gRPC 系列相关代码见 GithubgRPC 是一个高性能、通用的开源 RPC 框架,其由 Google 主要面向移动应用开发并基于 HTTP/2 协议标准而设计,基于 ProtoBuf(Protocol Buffers) 序列化协原创 2021-04-04 10:39:31 · 1314 阅读 · 3 评论 -
史上最细gRPC(Go)入门教程(六)---提升服务安全性之自定义身份校验
本文主要记录了如何在 gRPC 中使用自定义身份校验以提升服务安全性。1. 概述gRPC 系列相关代码见 Github在 gRPC 中,身份验证被抽象为了credentials.PerRPCCredentials接口:type PerRPCCredentials interface { GetRequestMetadata(ctx context.C原创 2021-04-04 10:01:59 · 719 阅读 · 0 评论 -
史上最细gRPC(Go)入门教程(四)---数据安全之--通过SSL/TLS建立安全连接
本文记录了gRPC 中如何通过 TLS 证书建立安全连接,让数据能够加密处理,包括证书制作和CA签名校验等。1. 概述gRPC 系列相关代码见 GithubgRPC 内置了以下 encryption 机制:1)SSL / TLS:通过证书进行数据加密;2)ALTS:Google开发的一种双向身份验证和传输加密系统。只原创 2021-02-21 11:18:28 · 2668 阅读 · 3 评论 -
史上最细gRPC(Go)入门教程(一)---Protobuf介绍及其编译原理
本文主要记录了 Protobuf 的基本使用。包括 编译器 protoc 、Go Plugins 安装及 .proto文件定义、编译等。gRPC 系列文章欢迎访问我的个人博客 指月山瀑1. 概述Protocol buffers 是一种语言无关、平台无关的可扩展机制或者说是数据交换格式,用于序列化结构化数据。与 XML、JSON 相比,Protocol buffers 序列化后的码流更小、速度更快、操作更简单。Protocol buffers are a language-neutral, p原创 2021-01-04 20:33:33 · 2179 阅读 · 1 评论 -
史上最细gRPC(Go)入门教程(五)---gPRC拦截器Interceptor
本文主要介绍了 gPRC中 的拦截器(Interceptor)和具体使用实例。1. 概述gRPC 系列相关代码见 GithubgRPC 提供了 Interceptor 功能,包括客户端拦截器和服务端拦截器。可以在接收到请求或者发起请求之前优先对请求中的数据做一些处理后再转交给指定的服务处理并响应,很适合在这里处理验证、日志等流程。gRPC原创 2021-03-21 12:29:26 · 2474 阅读 · 0 评论 -
史上最细gRPC(Go)入门教程(三)---gRPC流式传输--Streaming
本文主要讲述了 gRPC 中的四种类型的方法使用,包括普通的 Unary API 和三种 Stream API:ServerStreaming、ClientStreaming、BidirectionalStreaming。gRPC 系列文章欢迎访问我的个人博客 指月1. 概述gRPC 系列相关代码见 GithubgRPC 中的 Service API 有如下4种类型:1)UnaryAPI:普通一元方法2)ServerStreaming:服务端推送流3)ClientStreaming原创 2021-01-30 13:55:47 · 8152 阅读 · 5 评论