熊喵君的博客

Thinking will not overcome fear but action will.

数据结构与算法回顾(四):环形内存缓冲区 ringbuffer

一种高效进程间通信的机制:环形内存缓冲区

0x00 前言 环形队列是一种 FIFO 数据结构,适合内存 / 共享内存的存储场景,是项目中解耦模块间(进程间)通信的可用手段之一。通常也称为 Ring Buffer、Circular Buffer。下图描绘了一个 A 24-byte keyboard circular buffer: 0x01 实现 ringbuffer 的实现主要依赖于读写指针的移动(head-ReadIndex...

微服务项目中的自适应(Adaptive)技术分析与应用

分析 go-zero 框架中自适应技术的运用

0x00 前言 本篇文章分析下自适应技术在微服务领域的实践,以 go-zero项目 为例,此项目非常值得借鉴。 0x01 背景 自适应解决了什么问题呢?以 circuitbreaker熔断器 而言,可选的配置参数非常多,和系统预期吞吐 / qps 的经验值都会有关系,配置合适的参数是一件很麻烦的事情。所以,通过自适应算法能让我们尽量少关注参数,只要简单配置就能满足大部分场景。 0x02 ...

Golang 网络编程(二):轻量级 TCP 框架实现分析

分析典型的 TCP 框架:getty && xtcp

0x00 前言 本文分析两个典型的 tcp-framework 实现: xtcp 是一个轻量级的 tcp 框架,支持用户自定义如下属性: how to define the protocol format how to create server and client how to custom the logger how to handle event ho...

数据结构与算法回顾(二):一种固定 Size 的高性能 hashtable 实现

一种高效的 hash 存储结构分析

0x00 前言 本文介绍一种高性能的 hashtable,使用场景是结合最小堆统计单位时间窗口的 key 值计数并排序,该 hashtable 的特点是: hashtable 的整体大小是固定的,不扩容(避免问题),存储地址连续的(需要提前预估好存储上限) 无指针,以 index 作为链接下一个节点 存储分为 bucket 区和冲突链,冲突链上以 hop(非链表,还是以位置代...

Golang 网络编程:UDP 的若干细节

基于 Golang Udp 的高性能编程总结

0x00 前言 内网 UDP 的好处: 内网的 UDP 丢包率极小(低于万分之三) 发送端和接收端约定好通信协议,为了避免分片,每个 UDP 包的最大字节数应该是 1500-20-8=1472 通常使用 UDP 服务来做日志接收服务 0x01 golang-UDP 的连接性? 当然,这里的连接性指的是 Lib 层面,golang 中 UDP 分为已连接(connected ...

数据结构与算法回顾(六):Golang IO shaping

基于限流器的流量整形算法实现

0x00 前言 关于流量整形,接触过两种不同的概念: DDoS 的限速(流),按照流量或者 QPS 进行限制,超出的部分丢弃 SCP 工具传输的限速(FTP 数据源端限速),如 scp -l 1000 file user@remote:/path/to/dest/S,仅限制速率恒定,不丢弃 本文讨论一个现实的问题,在调用 io.Copy() 进行数据传输时,能够有效的控制...

关于 Kafka 应用开发知识点的整理(三)

一些关于 kafka 客户端库实践经验汇总

0x00 前言 本篇文章,总结下在项目中使用 sarama-kafka 库的一些经验。是对前文 关于 Kafka 应用开发知识点的整理(二) 的补充。部分参考阿里云的 kafka最佳实践 0x01 阿里云的最佳实践 Producer 最佳实践 Producer 最佳实践,降低发送消息的错误率: 1、发送消息 发送消息的示例代码如下,时间戳这个可以加,用于在消费端感知消息的时效...

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

分析 Jeffail/tunny 协程池实现

0x00 前言 本文分析下tunny协程池的实现。先说结论:tunny的并发控制核心是固定数量的工作goroutine,监听唯一的任务管道,即全局reqChan,每个工作goroutine都需要经历等待获取任务->获取任务->获取任务参数->执行任务->异步返回任务结果->再次等待获取任务这一完整的过程,从而Pool通过此实现了控制并发。 由于工作协程goro...

Mysql 项目应用笔记(一)

Mysql 日常使用总结

0x00 前言 本文是对项目中 Mysql 使用的一些经验汇总,包含如下几个方面: 分区表 索引的使用 插入 / 查询优化 业务上分库分表 MySQL 开发经验 0x01 分区表 对于操作日志、任务日志等大量日志的存储场景,方便管理,比如日志仅保留最近半年(遇到使用 innodb 引擎的 MySQL 进行 delete 操作后,底层文件不会变小的问题...

Hashcorp Vault 实战(应用篇)

更安全的 Secret 存储系统:Vault

0x00 前言 前文Hashcorp Vault 使用介绍了Vault的基础知识,本文基于最近的实践小结下使用vault的一些问题及解决。 如何部署高可用的vault集群(后端选择MySQL)? 如何优雅的重启vault vault-API调用 0x01 vault的高可用模式 官方文档提供了HA的部署方案,有两个地方都需要考虑: 服务的高可用 存储的高...