sentinel-go 之熔断降级

在高可用设计中,除了流控外,对分布式系统调用链路中不稳定的资源(比如 RPC 服务等)进行熔断降级也是保障高可用的重要措施之一。 现代微服务架构基本都是分布式的,整个分布式系统由非常多的微服务组成。不同服务之间……

阅读全文

sentinel-go 之流量控制

最近考虑把工作中手头的一个鉴权服务加上限流的能力,由于接入业务方越来越多,服务的负载也越来越大,除了扩容外,服务本身也需要有限流降级的自我保护能力,避免被瞬时的流量高峰击垮,从而保障服务的高可用性。 sentinel-go……

阅读全文

Google Protobuf 编译器使用笔记

背景 Protobuf 是 google 开源的高性能序列化库,支持 C++、C#、Dart、Java、Go、Python、Rust 等语言,同时也是跨平台的。 Protobuf 包含序列化格式的定义、各种语言的库以及一个 IDL 编译器。正常情况下你需要定义 proto……

阅读全文

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

阅读全文

再见2020

第一次正式在博客公开写年终总结,其实之前也都有写,只是随手写在了某个笔记软件上,没有统一进行归档整理,更不方便查阅,然后就开始吃灰了。这次也许是个好的开始,希望以后年年坚持写下去。 2020 年确实过的很快,感……

阅读全文

[转]Go语言如何使用条件编译

当开发需要依赖底层平台或处理器体系特性的Go包时,提供对应的特定实现是非常有必要的。 Go没有预处理,没有宏定义系统,不可以像c语言那样使用#define来控制是否包含平台相关的特定代码。作为替代,Go……

阅读全文

Linux dd 命令使用详解

dd 命令介绍 Linux dd 命令用于读取、转换并输出数据。 dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。 dd 命令使用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。可……

阅读全文

Go源码阅读 | channel 设计与实现

本文基于 Go1.14 源码阅读 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91……

阅读全文

Go源码阅读 | context.Context设计与实现

本文基于 Go1.14.2 Go 自带的 context 包设计的很巧妙,最近阅读了下源码实现,可谓是短小精悍,很值得投入时间去学习。 什么是 context Go1.7 开始引入的 context 标准库包,主要用来在协程之间传递上下文信息,包括:取消信号、超时控制、截止时间、k……

阅读全文