分类 Go源码阅读 中的文章

hystrix-go 之流量控制实现

在分析 hystrix-go 主流程中,我们知道只有当获取令牌成功后才能继续往下正常执行用户自定义的闭包函数,否则还是会进行降级处理。 1 cmd.ticket = <-circuit.executorPool.Tickets: // 获取令牌成功 今天我们分析下,hystrix-go 是如何进行流量控制的。 源码分析……

阅读全文

hystrix-go 之统计控制器实现

上一篇 我们分析断路器时有用到 metricExchange,但并未展开详细介绍,本篇我们主要介绍它以及实现原理。 metricExchange 主要是用来收集处理上报的所有事件,并对事件进行汇总处理,最后根据计算出来的一段时间内的错……

阅读全文

hystrix-go 之断路器实现

上一篇我们分析 hystrix-go 主流程时知道,对于每个 command 都有一个对应的断路器,而且在 GoC 中首先要通过 GetCircuit(name) 获取断路器对象,该方法会在断路器不存在时新建一个,并赋值给 cmd.circuit。 回顾下 command 结构体: 1 2 3 4 5 type command struct {……

阅读全文

hystrix-go 之核心流程实现

前言 上一篇文章我们介绍了服务保护熔断器 sentinel-go 如何使用,今天介绍另外一款优秀的集限流、熔断、降级于一身的组件 hystrix-go。hystrix-go 是著名开源库 hystrix 的 Go 语言简化版本,实现了核心功能,源码实现……

阅读全文

juju/ratelimit 令牌桶限流器分析

上一篇 我们介绍了基于漏桶算法的限流器 - uber-go/ratelimit,为了应对突发流量,它做了最大松弛量的改良。本篇文章继续介绍另外一种限流器:令牌桶(Token Bucket)。 什么是令牌桶 漏桶的……

阅读全文

uber-go/ratelimit 漏桶限流器分析

限流器是微服务中不可缺少的组件,起着保护下游服务负载过高、保证服务稳定性的作用。 什么是限流器 Web servers typically use a central in-memory key-value database, like Redis or Aerospike, for session management. A rate limiting algorithm is used to check if the user session (or IP address) has to be limited based on the information in the session cache. In case a client made too many requests within a given……

阅读全文