熊喵君的博客

Thinking will not overcome fear but action will.

神奇的 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...

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