熊喵君的博客

Thinking will not overcome fear but action will.

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

golang-LRU 缓存设计与实现(二)

分析 go-zero 中的进程内缓存库 collection.Cache 实现

0x00 开篇 本文分析下 go-zero 框架的 LRU-cache 组件 实现,此库有如下特性: 缓存增删改,自动失效,可以指定过期时间(基于 TimeWheel 时间轮策略实现了 TTL 过期的机制,很精妙);缓存大小限制,可以指定缓存个数 LRU 支持 缓存命中率统计 并发安全,解决缓存击穿问题 解决缓存击穿问题(syncx.SingleFlight 机制...

一种基于 TTY-based 的 kubernetes console 实现思路

如何使用 ssh 协议打通 kubernetes EXEC 登录?

0x00 开篇 网上基于 websocket 打通 kubernetes pod 的实现非常多,但是受限于 webconsole 的不便利性,这边文章来分析下如何使用 SSH 方式打通 kubernetes 的登录 Kubectl exec 的原理简介 通过 kubectl exec 进行容器的数据流如下: 0x01 实现思路 1、remotecommand 暴露的 E...

CAP 分析 && 实战:Gossip 协议

AP 协议:gossip && hashicorp/memberlist 分析

0x00 前言 前文 Etcd 最佳实(踩)践(坑) 中,了解 CAP 定理中,满足 AP 的典型协议就是 Gossip,本文就介绍下该协议。 Gossip protocol 也叫 Epidemic Protocol (流行病协议),是一种 去中心化、容错并保证最终一致性的协议;其基本思想是通过不断的和集群中的节点 Gossip 交换信息,经过 O(log(N)) 个回合, Goss...

分布式链路追踪(OpenTracing)之应用篇

使用 http/gin 构建 OpenTracing 机制

0x00 前言 前文 微服务基础之链路追踪(OpenTracing) 介绍了分布式链路追踪的理论知识,本文基于 net/http、gin 等库来构建客户端到服务端的 OpenTracing 实践(使用 jaeger 接入) APM 就是跟踪一个 traceId 在多个微服务中的传递并记录。在进入第一个服务的时候,就生成一个 traceId,接下来这个 traceId 将跟随整个微服务...

Golang 中的错误处理

如何优雅的处理 Golang 错误以及 gRPC 的错误

0x00 前言 本文总结下如何优雅的处理 golang 的错误: 本地 error gPRC 中的错误 再次明确下,golang 中的 error 只是简单的接口,任何实现了 Error() 方法的 struct 都可以用来处理错误信息。 // The error built-in interface type is the conventional interface ...

数据结构与算法回顾(五):golang 的 container 包

list、heap 和 ring

0x00 前言 golang 的标准库 container 中,提供了 heap/list/ring 的实现。本文简单分析下实现和应用。 0x01 heap 以 minheap 最小二叉堆为例,堆具有以下特性: 任意节点小于它的所有子孙节点,最小节点在堆的根上(堆序性) 堆是一棵完全树(complete tree):即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右...