熊喵君的博客

Thinking will not overcome fear but action will.

gRPC 应用篇之 Resolver 接口封装

如何封装 gRPC 的 Resolver(Kratos)

本篇文章分析下,Kratos 中如何封装 gRPC 中服务发现的接口,已经在项目中是如何使用的。 0x00 再看 gRPC 的 Resolver(解析器)接口 1.1 Resolver 暴露的三个接口 前文说过,gRPC 内置的服务治理功能,对开发者暴露了服务发现的 interface{},resolver.Builder 和 resolver.ClientConn 和 res...

gRPC 源码分析之 Picker 篇

gRPC 客户端选择器实现分析

0x00 再看 RR-Picker 实现    前文中分析了官方提供的轮询 Picker 代码,我们可以使用 gRPC 提供的 balancer 包中的接口实现自定义的选择器 Picker,也就是自定义的负载均衡逻辑,只需要三步即可。这篇文章,讨论下,我们自己实现的 Picker 逻辑是如何 gRPC 中生效的。 一个 RR-Picker 实现步骤    一个简单的实现如下所示: 第...

Hashcorp Vault 使用

更安全的 Secret 存储系统:vault

0x00 前言 我们在工作中是如何管理大量的 Secret 信息的?(比如笔者的项目中会涉及到对 OpenSSH 的秘钥及口令存储、以及对此的定时轮转及外部调用) 以配置文件的形式固化,存放于服务器文件或者 Database 中 以代码的方式存在于 git 私有仓库上,并严格控制此库的访问权限 以 KMS(Key Management Service,云服务居多)方式托管在...

Golang IO copy 系列方法探究

golang-IO 包使用经验(二)

0x00 前言 前文 神奇的 Golang-IO 包,介绍了 io.Copy()、io.Pipe() 等方法的使用,本文再对近期项目中笔者使用的 io 方法做一次深入总结。 0x01 再看文件复制 使用 golang 完成文件复制,通常有下面几种方法: 1、 使用 ioutils 库的 ReadFile 及 WriteFile,一次性将文件读取到内存,大文件场景不合适 fu...

神奇的 Golang-IO 包

golang-IO 包使用经验(一)

0x01 Golang 的 io 包介绍 在 golang 中,标准库中的 package 设计的基本原则是职责内聚。通常开发者可以使用自定义 Wrapper 的方式来封装标准库 package 中的 interface 接口,亦或在此基础上扩展,添加自定义的功能。N但是有一点,返回值必须封装的方法保持一致 0x02 神奇的 io.Copy io.Copy 的好处 io.Copy(...

Nginx 负载均衡及算法分析

Nginx 实现反向代理的项目使用与总结

0x00 前言 本文总结下笔者在使用Nginx的一些经验总结(主要用于反向代理) 0x01 Nginx 中的负载均衡介绍 2019 下半年,笔者在私有化 Sass 项目,使用 Nginx C Module 与企业微信 OpenAPI实现了一个 OAuth 认证网关(提供 WebApi 调用鉴权),过程中对 Nginx 的模块开发、负载均衡 upstream、proxy-pass 等...

Kubernetes 应用改造(二):健康检查

健康检查与探针的应用

0x00 前言 健康检查(HealthCheck)机制用于检测后端服务节点是否正常工作,通常应用于负载均衡下的业务,如果后端节点的状态探测异常,将会把该实例下线,保证服务的可用性。 服务的健康检测一般是指的是检测服务是否正常运行: 是否存在,因为程序逻辑错误或者 OOM 等进程不存在 存在是否可以正常的响应请求,尽管进程存在但可能因为请求量过大或者程序逻辑错误,导致服务 HA...

Golang 中有趣的后台项目汇总

可以从开源项目中学习到什么?

项目汇总 go-awesome Safety-Project-Collection 有哪些值得学习的 Go 语言开源项目? Uber Go 语言编码规范 SSH 相关 sshesame,官方介绍:A fake SSH server that lets everyone in and logs their activity,可以用于实现 ssh 蜜罐 cashi...

gRPC 源码分析之官方 Picker 实现

gRPC 客户端选择器分析(Picker With RoundRobin)

0x00 前言   gRPC 官方提供了基于 RoundRobin 轮询算法 的Picker实现。这篇文章简单分析下其源码,理解此过程,可以很轻易的实现自定义的负载均衡逻辑。前面文章已经介绍了 Balancer 和 Picker 的内部实现机制,本篇就在此基础上进行分析。官方给出的 Picker 接口实例化,整体逻辑比较直观,先贴下源码: package roundrobin import...

gRPC 之 Interceptor 实战篇

如何优雅的使用 gRPC 拦截器

0x00 背景 在实现 RPC 服务时,如果想在调用 RPC 方法的前 or 后做某些(如服务器登录鉴权、Tracing、耗时统计等等)事情,比如一个典型的应用场景是,当客户端进行 RPC 请求时,先对请求中的某些字段(Metadata)进行验证,验证通过再执行相应的 RPC 方法。怎么实现? gRPC 提供了拦截器(Interceptor)机制,可以完成这个功能。 拦截器(Int...