熊喵君的博客

Thinking will not overcome fear but action will.

理解 Prometheus 的基本数据类型及应用(基础篇)

Prometheus 介绍及基础应用

0x00 前言 本文分析下 Prometheus 以及常用的 Metrics,Metrics 是一种采样数据的总称,是一种对于度量计算单位的抽象。Prometheus 是一个数据监控的解决方案,能随时掌握系统运行的状态,快速定位问题和排除故障。并提供了从指标暴露,到指标抓取、存储和可视化,以及最后的监控告警等一系列组件。 prometheus 的整体架构如下: Prometheus 的...

微服务中的缓存(二):微服务基础之多级服务缓存(Cache)

微服务应用中缓存的使用策略、问题及解决

0x00 前言   在微服务架构中,后台组件开启热数据缓存,可以有效的降低 Mysql 等后端存储的读负载。在笔者项目后台服务构建中,一般会有本地缓存(Local-cache)—> Redis(高可用缓存服务)—>Mysql(高可用存储集群),这种层级的缓存逻辑。 0x01 缓存更新模式 不管如何更新缓存,这里有一个前提是:缓存必须有过期时间(TTL),就像在 Redi...

Kubernetes Certificate 使用 && 总结

How to manipulate kubernetes's certificates?

0x00 TLS 认证 在前文 证书(Certificate)的那些事 中介绍了 X509 体系、证书认证等相关知识,采用 TLS/SSL 体系一般两种方式: 服务器单向认证:只需要服务器端提供证书,客户端通过服务器端证书验证服务的身份,但服务器并不验证客户端的身份。这种情况一般适用于对 Internet 开放的服务,例如搜索引擎网站,任何客户端都可以连接到服务器上进行访问,但客...

OpenSSH Certificate 证书最佳实践

How Do We USE OpenSSH Certificate Properly?

0x00 前言 针对零信任安全领域的 SSH 服务器安全管控,OpenSSH 的证书体系绝对是最佳的安全选择。上一篇文章 证书(Certificate)的那些事 简单介绍了 OpenSSH 的证书体系。本文针对 OpenSSH Certificate 的应用做一个系统的梳理。大概涉及到如下几个方面,本文中 Certificate 代指 OpenSSH 证书: Certificat...

Golang 并发模型:Pipelines and cancellation

Channel 的经典应用(基础)

0x00 前言 Go Concurrency Patterns: Pipelines and cancellation 一文介绍了 Golang 的最经典的并发及控制模型:Pipeline(流水线模型),基于 Channel 的生产者消费者模型。本文即整理及总结。 文中给出了几个典型 goroutine 的并发及控制场景: Squaring numbers:计算平方数 Fa...

开源限流组件分析(二):Golang-time/rate 限速算法实现分析

分析 Golang 标准库提供的令牌桶限流器

0x00 前言 这篇文章来分析下标准库 time/rate 的使用及实现细节,此库同样基于令牌桶(Token Bucket)实现了限流。 0x01 time/rate 的使用 创建限流器 使用 NewLimiter(r Limit, b int) 创建限速器,令牌桶容量为 b。初始化状态下桶是满的,即桶里装有 b 个令牌,以后再以每秒往里面填充 r 个令牌。有两种特例: 允许...

微服务基础之限流(RateLimit)

限流的基础概念

0x00 微服务中的限流 本篇博客来介绍下微服务中的服务限流(Ratelimit),它是保证服务稳定的基础组件之一。其他类似的概念还有服务熔断。微服务中的限流主要指业务代码的逻辑限流。 通常,限流策略相较于熔断,使用的更为广泛一些,因为限流的同时可以对其他(被限制)服务请求进行排队处理,而不是像熔断策略直接拒绝掉这些被限制的请求。当然了,简单的处理方式就是被限制的流量,可以根据具体的业...

开源限流组件分析(三):JuJu-Ratelimit 限速算法实现分析

分析一款基于令牌桶实现的限速算法

0x00 前言 这篇文章来分析下 juju-ratelimit 的使用及实现细节,这个 Golang 的项目基于 Token Bucket 实现了限流。核心的逻辑就两点: (初始化)生产令牌桶 消费令牌的接口 0x01 核心结构 Clock 结构 对 time 相关接口的封装,主要提供产生当前时间 // Clock represents the passage of...

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

熔断器机制基础

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

理解 Hystrix-go 中的 RollingCount 实现

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