熊喵君的博客

Thinking will not overcome fear but action will.

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...

微服务中的缓存(三):缓存一致性原理 && 实践

一道美团的面试题:Redis 与 MySQL 双写一致性如何保证?

0x00 前言 前两篇文章介绍了微服务中的缓存常用概念及一致性的问题解决,本文以 go-zero 项目为例,看下其针对于多级缓存的实现分析。 微服务中的缓存(一):Cache 使用与优化 微服务中的缓存(二):微服务基础之多级服务缓存(Cache) 0x01 问题 本文汇总下微服务的缓存使用原理,再结合go-zero框架分析下如何优雅的针对一致性问题的实践。 0x...

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

Kafka 的高可用(可靠)及 sarama 库的使用细节

0x00 前言 本篇文章,总结下在项目中使用 sarama-kafka 库的一些经验及对 Kafka 集群高可用的一些认识。核心围绕着:如何主动感知到 push 到 kafka 的消息哪些未被消费(生产到消费的各个环节)以及如何避免这种情况的 0x01 Kafka 的基本概念 回顾下 kakfa 的架构: Producer:生产者,可以将数据发布到所选择的 topic 中 ...