熊喵君的博客

Thinking will not overcome fear but action will.

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...

gRPC 源码分析之 Balancer 篇

gRPC 客户端平衡器分析

0x00 前言 本篇文章详细分析下 gRPC-Banlancer 的实现。 首先,提几个问题,带着这几个问题,再看源码会收货更多: resolver 获取到的后端列表,在哪里进行初始化连接的? resolver 和 balancer 的交互是怎样的? balancer 提供给用户的接口在哪里生效? picker 如何实现? 0x01 gRPC 的平衡器 Balan...

gRPC 源码分析之 DnsResolver 篇

如何使用内置的 DNS 负载均衡器

0x00 介绍 关于 gRPC Naming 机制,官方有比较详细的 文档 介绍。 Resolver(解析器)在 gRPC 中完成了这样一个过程,它对来自服务注册中心的数据(Push 或者 Pull 两种方式),做出响应,将得到的结果数据通知 gRPC 内置的负载均衡器 Balancer。在实现上通常划分为 Resolver 和 Watcher 两个模块。官方提供了一个基于 DNS 的实...

gRPC 源码分析之 Resolver 篇

gRPC 客户端解析器实现分析

0x00 前言 gRPC 负载均衡是针对每次请求,而不是连接,这样可以保证服务端负载的均衡性,所有 gRPC 负载均衡算法实现都在客户端。本系列文章对 gRPC 的负载均衡框架做深入的分析。 gRPC客户端的全景视图: 0x01 gRPC 的解析器 Resolver Resolver,直观上就联想到域名解析配置 /etc/resolv.conf,配置域名解析规则,和 DNS 服务器交互...

后台开发积累(2019 年)

感觉只是做了一点微小的工作

背景 如何提升后台服务的可靠性,如何提升后台服务的吞吐量(性能),如何避免重复造轮子,工作中需要经常带着这些问题去思考。 本文我想结合自己的遇到的问题,聊聊如何完成后台开发的工作,介绍一些工作中遇到的经验。 基础篇 需求对齐,确定方案,避免无效工作 阶段总结,及时调整 升级和扩容篇 系统如何做到不停机在线扩容?扩容后负载均衡方式会改变吗?如果 LB 算法采用一致性 ha...

一个安全的 Web-Console 的实现思路

使用 xterm.js+Go-Gin 实现 Web-Console 的 SSH 登录

0x00 基础 本文将描述如何实现一个具备安全认证的 WebConsole,基于 Golang-SSH 库 实现。WebConsole 的核心实现是打通了 WebSocket+SSH 的输入输出流,使得用户直接使用浏览器就可以运行 SSH 终端,非常适合于轻便运维的场景。WebSocket 基于 TCP 传输协议,并复用 HTTP 的握手通道,关于 WebSocket 和 Golang...

Etcd 应用开发之分布式锁

Etcd 应用开发(续)

0x00 分布式锁基础 在分布式系统中,为了实现对互斥资源的安全访问(独占),必须要用到分布式锁。另外在工作中,还有一个应用场景是,在分布式的后台服务中,某些服务只允许单个实例(机器或 Docker)运行,其他的备份机器作为 BackUps 备份节点(比如在笔者的项目中,负责数据同步的逻辑同一时刻只能有一台机器进程来执行),当正在运行的单实例机器(进程)故障后,在线的 BackUps 按照排...