熊喵君的博客

Thinking will not overcome fear but action will.

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的部署方案,有两个地方都需要考虑: 服务的高可用 存储的高...

基于 CRON 库扩展的分布式 Crontab 的实现

基于 golang 的分布式定时器任务模型的通用实现

0x00 前言 最新项目中使用到了分布式定时器事件(场景是服务器定期修改密码),本篇文章小结下。 0x01 单机 CRON 库介绍 Golang CRON 库 Crontab 的使用与设计 前文介绍了单机 Cron 的使用及分析,但是在现实环境中,需要解决单个节点(进程)的高可用问题,保证定时任务正常执行不受影响。 应用的需求 保证任务不能被多个节点重复执行 单个节点宕机时能...

使用 Golang 实现 RDP 和 VNC(一)

rdp/vnc 协议基础 && 使用(入门篇)

0x00 前言 (RDP)Windows Remote Desktop Protocol、VNC(Virtual Network Computing)都是图形化的登录终端(远程桌面)协议。本文介绍基础概念及使用,涉及如下知识,参考 此文: RDP:RDP 远程桌面协议(支持 linux/windows) VNC:linux 中常用的屏幕分享协议 Guacamole Protoc...