熊喵君的博客

Thinking will not overcome fear but action will.

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

使用 Golang 实现 SSH 和 SSHD(三)

Bash 中的控制字符功能说明 && 分析

0x00 前言 项目中,需要实现 OpenSSH 字符终端审计及输入命令还原,因而需要了解 Bash 中的特殊按键行为及其对终端屏显的影响。本篇文章梳理下特殊按键的行为。 0x01 常用按键对应的 ascii 码 按键 name ASCII-HEX ENTER 回车 ...

Golang 系统编程:如何实现对后台服务优雅的热重启?

网关的热重启机制:原理&&实现&&分析(fvbock/endless)

0x00 前言 基本概念 热重启(Graceful Restart),是一项保证服务可用性的手段。它允许服务重启期间,不中断已经建立的连接,老服务进程不再接受新连接请求,新连接请求将在新服务进程中受理。对于原服务进程中已经建立的连接,也可以将其设为读关闭,等待平滑处理完连接上的请求及连接空闲后再行退出。通过这种方式,可以保证已建立的连接不中断,连接上的事务(请求、处理、响应)可以正常...

Golang CRON 库 Crontab 的使用与设计

基于 golang 的定时任务模型分析

0x00 前言 cron 是一个用于管理定时任务的库(单机),基于 Golang 实现 Linux 中 crontab 的功能 0x01 使用 Linux 的 crontab crontab 基本格式: # 文件格式說明 # ┌──分钟(0 - 59) # │ ┌──小时(0 - 23) # │ │ ┌──日(1 - 31) # │ │ │ ┌─月(1 - 12) # ...

Golang httprouter 库分析

高效的路由框架 julienschmidt/httprouter 分析

0x00 前言 httprouter 非常高效的一个 http 路由框架,gin 框架的路由也基于此库。使用比较简单: func main() { router := httprouter.New() // 注册路由 router.GET("/", Index) router.GET("/hello/:name", Hello) log.Fat...