熊喵君的博客

Thinking will not overcome fear but action will.

Singleflight:原理与应用(续)

如何安全且正确的使用 singleflight

0x00 前言 前文 微服务中的缓存(一):Cache 使用与优化 介绍过 singleflight 的应用场景之解决缓存失效时的并发穿透场景。本文就笔者项目中对 Singleflight 机制的实际使用再做一次总结。先回顾下 singleflight 的定义: SingleFlight 是 Go 开发组提供的一个扩展并发原语。它的作用是在处理多个 goroutine 同时调用同一个函数的...

OpenSSH Certificate 与 Golang 的兼容性问题

0x00 前言 前文 OpenSSH Certificate 证书最佳实践 介绍了证书的实践,不过近期笔者在工作中遇到了非常麻烦的兼容性问题,这里摘录几个: x/crypto/ssh: “ssh-rsa-cert-v01@openssh.com” does not work for sshd OpenSSH 7.2-7.7 #58371 x/crypto/ssh: cann...

再看认证流程

TLS(HTTPS)、OpenSSH 协议的那些细节

0x00 前言 本文梳理下 TLS(HTTPS)、OpenSSH 在握手协议上的一些细节 DH 协议 握手协议的共享密钥的计算基础 0x01 HTTPS 认证 分为 HTTPS 单向认证和双向认证,以双向认证为例(下面第三步不验证客户端证书则为单向认证),流程如下: 第一阶段:协商,客户端发送 hello 消息,会包含自己能支持的最大支持的 TLS 版本,一个...

Golang 中的GC小结(未完待续)

0x00 前言 作为Google的得意之作,Golang自然也用上了tcmalloc的内存池技术。因此我们普通使用Golang时,无需关注内存分配的性能问题。 0x01 Golang中的Map 为什么不用sync.Map map并不是线程安全的。多个协程同步更新map时,会有概率导致程序core掉 0x0 参考

微服务中的缓存(四):内存缓存使用的一些技巧

记录项目中遇到的问题及解决方案

0x00 前言 本文梳理下笔者在项目开发中使用过一些内存缓存的技巧 0x01 双缓冲:double buffering 有一个场景是,存在某一本地文件配置(修改少),程序初始化时把文件内容读取到本地内存里(假设为 map1),由于程序逻辑需要频繁且高性能的读取 map1(尽量不加锁),在这种背景下如何实现安全的修改文件自动同步到 map 里(且不加锁)?有两种思路: 分段锁 ...

Mysql:Session && Transaction

Mysql 基础回顾:会话与事务

0x00 前言 会话(Session): 指客户端与 MySQL 服务器之间的一个连接。当客户端连接到 MySQL 服务器时,服务器会为客户端分配一个会话。会话是数据库操作的基本单位,每个会话都有一个唯一的 ID。在会话中,用户可以执行 SQL 语句来查询和修改数据。会话可以持续很长时间,直到客户端断开与服务器的连接。 事务(Transaction):事务是数据库...

WebSocket:原理与应用

WebSocket 在 golang 中的应用介绍

0x00 前言 本文汇总下 WebSocket 的应用及概念。笔者接触过的 websocket 有如下场景: GoIm 的 websocket Server 支持 webconsole 登录到 SSH/docker 的转发层 长连接服务端(消息推送) 利用 websocket 构建正向代理 0x01 Websocket 基础及用法 WebSocket 是一种...

基于redis的分布式限频库分析:ratelimit(未完待续)

0x00 前言 项目中要对接口调用进行并发限制,所以需要分布式的限流中间件,本文分析下基于Redis实现的分布式限流器,ratelimit 参考 基于redis的分布式限频库

Cronsun:任务统一集中管理(调度)系统设计与分析

分析一款典型的分布式任务调度系统

0x00 开篇 cronsun 是一个分布式任务系统,单个节点和 Linux 机器上的 crontab 类似,目的是解决多台 Linux 机器上 crontab 任务管理不方便的问题,同时提供任务高可用的支持(当某个节点死机的时候可以自动调度到正常的节点执行),此外,有页面配置及告警邮件支持等。汇总如下3点: 替换 crontab 执行不能单点失败的任务,具备一定可靠性运行...

Bash 日常应用总结

A Linux Bash Cookbook

0x00 前言 本文汇总下笔者常用的Bash指令备份 0x01 BASH 1、批量查找文件内容 主要使用grep -rl,如下面指令,查询当前目录下所有出现yyyy字符串的文件列表: grep yyyy -rl --include="*.txt" ./ 2、批量替换文件内容 常用sed搭配grep指令使用,如下面指令,将当前目录./下的所有.txt文件中的yyyy字符串替换为xxxx...