熊喵君的博客

Thinking will not overcome fear but action will.

微服务基础之熔断保护(Breaker)

熔断器机制基础

0x00 前言 什么是熔断器 / Breaker?    熔断器是为了当依赖的服务已经出现故障时,主动阻止对依赖服务的请求(通常情况下是执行本地的服务降级办法,亦或直接返回错误),从而保证自身服务的正常运行不受依赖服务影响,防止雪崩效应。 在实现上,它的思路是在调用方 Caller 增加一种 “避让” 机制,当下游出现异常时能够停止(熔断)对下游的继续请求,当等待一段时间后缓慢放...

理解 Hystrix-go 中的 RollingCount 实现

0x00 前言   Hystrix-go 中实现接口错误率计算的数据结构,是一个非常典型的 RollingCount + 滑动窗口实现的计数桶(更专业一点的称呼:时间序列数据库)。这篇文章来分析下其代码实现。其主要的功能 实现代码 在此。 0x01 滑动窗口    默认的统计控制器 DefaultMetricCollector 保存着熔断器的所有状态,成功次数(successes),调用...

一个 Http(s) 反向代理(网关)的实现分析

如何使用几百行代码实现一个高可用的反向代理服务

0x00 前言 本篇文章主要是对先前阅读过一篇关于 http-gateway 实现的文章的总结:Let’s Create a Simple Load Balancer With Go 的小结。 0x01 目标拆解 我们从要实现的功能及目标出发,来拆解一个 高可用 的(反向代理)网关,需要支持哪些功能? 从架构图来看,我们将网关划分为控制平面(control plane...

Kratos 源码分析:分析 Warden 框架 Dynamic-WRR 负载均衡算法的实现

Warden 框架中的 WRR 算法代码分析

0x00 前言 回顾下在先前的文章 gRPC 源码分析之官方 Picker 实现 中,分析过实现自定义 gRPC Balancer 算法的三个步骤: 注册 Balancer 的名字 实现 PickerBuild 及 Builder() 方法,用于当 resolver 解析器发生解析变更时(后端节点增删)时,更新 Picker 使用的 LoadBalance-Pool 实现 P...

Golang 中的 sync.Pool 使用

调优系列:Golang 优化系列之临时对象池

0x00 前言 当多个 goroutine 都需要创建同⼀个对象的时候,如果 goroutine 数过多,导致对象的创建数⽬剧增,进⽽导致 GC 压⼒增大。形成并发⼤ --> 占⽤内存⼤ --> GC 缓慢 --> 处理并发能⼒降低 --> 并发更⼤这样的恶性循环。 在这个时候,需要有⼀个对象池,每个 goroutine 不再⾃⼰单独创建对象,⽽是从对象池中获取出⼀...

Golang 中网络编程开源项目汇总(持续更新)

我们可以从开源项目中学习到什么(二)

Tcp脚手架 Zinx:基于Golang轻量级TCP并发服务器框架 link:Go语言网络层脚手架 gnet:gnet 是一个高性能、轻量级、非阻塞的事件驱动 Go 网络框架。 Web 相关 WSP:golang webserver framework, simple and flexible PUSH 长连接 connsvr:golang 实现的长连接服务...

Golang 高性能 LocalCache:BigCache 设计与分析

如何在 Golang 构建一个高性能的本地缓存

0x00 前言 通常在 Golang 中,缓存的实现离不开如下几种: 原生 map sync.Map 基于以上二者封装的复合型 map 前两者的缺点也很明显: 当 map 中存在大量 keys 时,GC 扫描 map 产生的停顿将不能忽略(针对 map 中存储指针或数据类型底层也是由指针实现这样的场景) 加锁的粒度 基于较新版本的 Golang(大于 1...

gRPC 微服务构建之日志(Logging)

zap库应用及使用 gRPC 实现zap日志拦截器(With Tracing)

0x00 前言    结构化日志对于后台项目的重要性不言而喻,通常调试、记录运行错误及基于日志关键字的监控都会需要后台提供足够充分的日志。Golang 中有非常多优秀的日志库,如 Zap 和 Logus 等。这篇文章分享下在项目中,如何将 Zap 和 gRPC 完美的融合在一起,保证日志的可读性和高效,同时也兼顾了性能。 0x01 Zap 库介绍 Zap 库满足了常见日志库的所...

Go-Micro 微服务框架使用入门

Go-Mirco 框架之基础

0x00 介绍 Go-Micro:是一个 Pure Golang 的微服务开发框架(旧版本 nitro):官方介绍如下 Micro is built as a microservices architecture and abstracts away the complexity of the underlying infrastructure. We compose this ...

Uber-Automaxprocs 分析

Docker 中的 CPU 调度总结

0x00 前言    前一篇文章 GOMAXPROCS 的 “坑”,简单描述了 GOMAXPROCS 在容器场景可能会出现的问题。解决方法是使用 Uber 提供的 Automaxprocs 包,自动的根据 CGROUP 值识别容器的 CPU quota,并自动设置 GOMAXPROCS 线程数量,本篇文章就简答分析下 Automaxprocs 是如何做到做一点的。 0x01 再看 Dock...