熊喵君的博客

Thinking will not overcome fear but action will.

Mysql 项目应用笔记(二)

Mysql 索引与优化总结 - InnoDB 篇

0x00 前言 本篇介绍下 InnoDB 引擎的索引使用及优化。重点关注几个问题: 索引的原理 如何建索引 如何使用索引 如何调优? 索引的本质 索引就像一本书的目录。而当用户通过索引查找数据时,就好比用户通过目录查询某章节的某个知识点。这样就帮助用户有效地提高了查找速度。所以,使用索引可以有效地提高数据库系统的整体性能。 索引分类 从用户使用的角度:单列...

Raft 协议分析与实战:构建自己的分布式缓存

hashicorp/raft的应用实战与分析

0x00 前言 0x01 验证 按照如下组成一个raft集群: raft节点 端口 peer端口 存储目录 Node-1 6000 7000 node0 Node-2 6001 7001...

数据结构与算法回顾(四):环形内存缓冲区 ringbuffer

一种高效进程间通信的机制:环形内存缓冲区

0x00 前言 环形队列是一种 FIFO 数据结构,适合内存 / 共享内存的存储场景,是项目中解耦模块间(进程间)通信的可用手段之一。通常也称为 Ring Buffer、Circular Buffer。下图描绘了一个 A 24-byte keyboard circular buffer: 0x01 实现 ringbuffer 的实现主要依赖于读写指针的移动(head-ReadIndex...

微服务项目中的自适应(Adaptive)技术分析与应用

分析 go-zero 框架中自适应技术的运用

0x00 前言 本篇文章分析下自适应技术在微服务领域的实践,以 go-zero项目 为例,此项目非常值得借鉴。 0x01 背景 自适应解决了什么问题呢?以 circuitbreaker熔断器 而言,可选的配置参数非常多,和系统预期吞吐 / qps 的经验值都会有关系,配置合适的参数是一件很麻烦的事情。所以,通过自适应算法能让我们尽量少关注参数,只要简单配置就能满足大部分场景。 0x02 ...

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