熊喵君的博客

Thinking will not overcome fear but action will.

Golang 标准库:net/http 应用(二)

net/http 客户端在项目中的应用经验小结

0x00 前言 本文汇总下项目中使用 net.http 包的一些经验总结;在生产环境中,golang 自带的 http client 需要配置合适的参数才能适应项目场景。 0x01 http 连接池的使用 关于 net.http 的连接池,先给出一些结论: 长连接必须客户端与服务端都开启,任何一端不支持,连接池也就没效果了 http 客户端默认开启的是长连接(即 Disa...

Golang 并发协程池实现分析(三)

分析 Ants 协程池实现

0x00 前言 本文分析下协程池库 ants 的实现,仓库 在此,此库基于 fasthttp 的协程池实现。 0x01 ants 协程池使用 ants 提供了两种执行模式: 1、ants.NewPool(pool_size) 通过这种方式创建的 Pool,需要调用 pool.Submit(task) 提交任务,任务是一个无参数无返回值的函数,适合不关注结果的并发任务场景 2、ant...

Golang 的分布式任务队列:Asynq 分析

0x00 前言 asynq:Golang distributed task queue library,许多设计思想都来自sidekiq。官方文档给出的特点如下(省略了若干): 任务已写入Redis后会持久化(支持Redis Cluster/Sentinels) 任务执行失败自动 retry 支持任务优先级权重(加权优先级队列) 支持定时发送任务 可使用 uni...

数据结构与算法回顾(七):Golang 中的 Sort 算法实现解析

排序算法回顾

0x00 前言 本文分析下 golang 的 sort 算法实现 0x01 sort 的典型使用 Golang 的 sort.Sort 使用了一个接口类型 sort.Interface 来指定通用的排序算法和可能被排序到的序列类型之间的约定。这个接口的实现由序列的具体表示和它希望排序的元素决定,通常排序的对象是 slice case1:[]int 排序 对 []int slice ...

数据结构与算法回顾(一):多阶 hash

一种高利用率的 hash 存储结构分析

0x00 前言 hashtable 是一种非常高效的数据结构,它通过散列函数将 key 映射成数组下标以达到 O(1) 算法复杂度的高效数据结构,通常对于不同的 key 哈希函数算出的结果出现哈希碰撞,解决方式通常有:开放地址法、再哈希法、链地址法。多阶(级)Hashtable 是一种极其精妙的实现,常用于海量数据(如 UIN、即时通讯关系链等)的存储,此外,结合 Linux 共享内存机制,...

Kubernetes 应用改造(八):如何在 TKE 上搭建 Redis 环境

Statefulsets 应用场景

0x00 前言 本篇文章总结下,项目背景是需要在 Kubernetes 集群中部署 Redis 单机 / 集群,需要利用 Statefulsets 与 NFS 来生成。 0x01 单机 Redis 搭建 创建 ConfigMap 首先,把 Redis 的配置文件 redis.conf 存储在 configmap 中,注意其中定义的 Redis 运行目录:/data/middlewar...

安全: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...