熊喵君的博客

Thinking will not overcome fear but action will.

安全:KMS 的那些事

KMS 原理与使用

0x00 前言 密钥管理系统(Key Management Service,KMS)是一款安全管理类服务,可以让您轻松创建和管理密钥,保护密钥的保密性、完整性和可用性,满足用户多应用多业务的密钥管理需求,符合监管和合规要求。 KMS 是基于硬件加密机的云上密钥管理系统,核心服务如下: 密钥的全生命周期管理 加密、解密算法 真随机数 密钥轮换 0x01 KM...

Golang ReverseProxy 分析

原生库的反向代理代码分析

0x00 前言 在工作项目中,曾使用 gin 与 httputil.ReverseProxy 实现了认证网关和反向代理的功能,该认证网关的主要流程为: 1、 通过 gin 实现的 https 网关 接收浏览器 Web 发起的请求 2、 网关通过 httputil.ReverseProxy 发起一个带 API 签名的 HTTP 请求给后台 CGI 服务,实现代理功能 3、 网关接收到后台...

一个基于 golang 的轻量级 IM 项目分析:gochat

分析一款实时通信 IM 项目 gochat

0x00 开篇 gochat 是一款基于 golang 实现轻量级的 im 系统。技术上各层之间通过 RPC 通讯,使用 Redis 作为消息存储与投递的队列,模块间基于 etcd 的服务发现。其架构和 goim 很相像。本文简单了解下下面两个功能的实现: 点对点的消息发送(用户对用户) 点对面的消息发送(用户在房间里广播消息) 涉及到业务流程: 用户注册 &...

GoWorkers 通用异步工作队列分析

分析一款基于 Golang 后台队列任务执行框架:jrallison/go-workers

0x00 前言 go-workers 是 sidekiq 的 go 实现,异步队列框架。完全满足了基于 redis queue 的任务调度工作,同时支持了自定义 middleware 供接入者开发延伸需求,仅支持 redis,支持延时任务。作者给出的特点如下: reliable queueing for all queues using brpoplpush handles...

DiDi 开源 API 网关 gatekeeper (v1.0)项目分析

一个微服务网关的设计与实现

0x00 前言 Didi-gatekeeper 是一个 Golang 的不依赖分布式数据库的 API 网关(基于 gin),使用它可以高效进行服务代理,支持在线化热更新服务配置以及纯文件方式服务配置,支持主动探测方式自动剔除故障节点以及手动方式关闭下游节点流量,还可以通过自定义中间件方式灵活拓展其他功能。 本文主要分析下其实现中可以借鉴的思路及细节: 插件式中间件引入 部署架...

Golang 的分布式任务队列:Machinery (v1)分析(二)

Machinery 应用场景梳理&&使用说明

0x00 前言 通常,在设计业务模型中,Machinery 的 Worker 通常用于处理复杂 / 耗时的任务,即通过异步任务的方式来增加系统的吞吐量,减少同步请求的耗时。 0x01 应用场景 1:异步处理大量耗时任务 如业务场景中对涉及到大文件的用户数据导入及下载,数据删除等耗时场景,就比较适合用 Machinery 来做异步化处理: 用户数据导入:客户端上传数据集压缩包后,...

在 Golang 中实现 Openssl 的 AES-CBC-256 算法(With Salt)

0x00 前言 今天在使用 openssl 工具中遇到如下的 case: plaintext="I'm password" password="abcdefghijklmn" echo $plaintext | openssl enc -salt -aes-256-cbc -e -a -k $password encrypted=`echo $plaintext | openssl en...

开源熔断组件分析(一):gobreaker

分析 Sony 的 gobreaker 熔断器实现(Circuit Breaker 的一种实现)

0x00 前言 gobreaker 实现了 Circuit Breaker pattern 模式的熔断机制。本篇文章简单分析下其实现。 Circuit Breaker 回顾 回顾下 Circuit Breaker 的状态机模型:即 3 种状态,4 种状态(变化)迁移,如下图: Circuit Breaker 状态如下 熔断器关闭状态(StateClosed), 服务正常...

安全:SSO 认证协议的那些事

0x00 前言 最近工作用到了较多的 SSO(单点登录)知识,本文简单梳理下。主要涉及的到的有如下几块: OAuth2 SAML2 OpenID JWT OpenSSH Login with SSO:如何将 SSO 的认证理念嵌入到 OpenSSH 的登录身份认证中去 授权 && 认证 授权 认证 0x01 通讯主体 浏览器...

Hot Reload:Golang 如何实现配置文件优雅的热更新

配置文件的优雅热加载实现以及 viper 库的机制分析

0x00 前言 Nginx 中有个 reload 指令,提供了不重启服务下针对配置文件的热加载能力,本文讨论下在 golang 下的文件热加载实现。 通过 signal 手动触发 通过文件监听 notify 自动触发 0x01 golang 中的实现 手动触发 要点有如下几点: 配置文件指针化,并且加锁保护(配置的单例模式) 捕获信号,重新读配置 在代码逻辑引用...