Liangjf

The darkest hour is that before the dawn.

图解性能分析

性能的分析基础

第二章 性能涉及到CPU,IO,网络,磁盘等资源。因此需要借助性能分析工具来对这些资源进行监控或者分析。准确的测量才能做出正确的性能分析。 对系统的性能测试是有方法论的,一般是通过分段查找的方法。举个例子,在排序的数组中查找某元素,通过二分查找法可以实现O(logN)的时间复杂度。这是因为每次都能过滤一段数据。 性能问题排查也是一样,通过分段来逐渐排除问题,逼近真相。性能信息是IT工程师...

限流器

剖析juju/ratelimit限流器

剖析juju/ratelimit 项目地址 源码分析地址 该项目是一个令牌桶算法实现的限流器, 众所周知, 限流器可以用于控流, 限制访问频率, 保护后端服务. 令牌桶算法实现的限流器可以较好的应对突然流量, 也可以较好的平滑请求 juju/ratelimit的实现不是像一般的使用后台线程来生成令牌, 前台来取令牌的方案. juju/ratelimit方案 1.通过逻辑时间...

图解性能优化

性能的基础知识

第一章 这本书是日本人写的,日本的技术书的风格独具一格,写得比较细腻,配图也比较生动有趣。这本书也是继承了这样的风格。趁着这个周末阅读完这本书,因此趁着这个机会就为这本书做一个小结。 整本书是围绕着“性能”来展开的。内容时符合书的名字,图解,确实书里用许多的图片来帮助读者的理解。 第一章 性能的一些基础知识。性能其实就是算法的实现和选择,书里提到了算法的好坏对性能有很大的影响。算法好坏...

mysql b+树

mysql的innodb为什么用b+树, 不用红黑树/b树/跳表/LSM[上]?

mysql的innodb为什么用b+树, 不用红黑树/b树/跳表/LSM[上]? 思路 1.对比各个数据结构的优缺点 2.描述mysql的特点, 磁盘io, 页 3.用了b+树会给innodb带来什么好处 4.对比其他数据库说出区别, MongoDB, redis, RockDB 几种树的特点 红黑树 是一棵二叉树 近乎完全平衡 具有稳定的时间复杂度O(n...

ratelimit限流器

限流器在项目中的应用

限流器在项目中的应用 mos项目(盒子/投影仪)应用到限流器的接口 1.广告列表接口[/v2/mos/adlist] 2.获取应用推荐列表[/v2/mos/app_recommend] 3.获取屏保的列表v2.0[/v2/mos/screens] 都是使用redis实现的原子计数法限流(集群计数限流), 分布式流控不可用时(例如缓存挂掉), 切到单机流控 目的是这三个接...

短连接系统设计

短连接服务原理和系统设计

短连接服务原理和系统设计 项目源码地址github 原理 长链连接映射, 301/302 算法 hash算法 原子自增(mysql/redis)[进制法] 元数据中心发号器(zk/etcd)[进制法] hash算法 todo redis原子自增分布式 负载均衡器+n个短连接服务 比如起10个短连接服务, 每个分别以0~9结尾, 负债均衡器采用轮训方式转发请求, 每次...

redis客户端缓冲区

redis客户端缓冲区

redis客户端缓冲区 客户端缓冲区原理 redis网络架构是Reactor模型, 基于io多路复用, 每个客户端一条连接, 然后redis负责监听每个连接的非阻塞io的读写事件, 然后触发对应的响应处理函数 读事件监听是一直存在的, 但是写事件是在需要的时候通过构造一个写对象的结构, 发送到对象结构的客户端写缓冲区, 另外一端会根据客户端写缓冲区的对象有无来触发一次写事件, 然后就会触...

redis网络模型

redis网络模型

redis网络模型 redis的网络涉及以下文件(与客户端) server.c(redis server入口) ae.c(redis 网络模型ae对象, 封装了epoll/select/kqueue/evport) ae_epoll.c/ae_evport.c/ae_kqueue.c/ae_select.c(操作系统的网络系统函数) anet.c(对socket的操作的...

redis-go-cluster

从redis-go-cluster报错源码分析

从redis-go-cluster报错源码分析 redis-go-cluster报错: client can't connect to Redis cluster, node.address is 172.16.7.16:8002@18002 现象: 可以连接集群, 但是执行命令出错 redis版本: redis-5.0.5 redis-go-cluster版本: 1.0.0 可以查...

sync.RWMutex

sync.RWMutex源码分析

sync.RWMutex源码分析 读写锁 原理: 读操作可并发重入,写操作是互斥的。 读写锁通常用互斥锁、条件变量、信号量实现 实现: 通过原子变量(模拟条件变量), 信号量与互斥锁结合的方式, 实现读写锁; 主要是借助原子变量, 信号量控制模拟了读写的等待和唤醒 一直有读锁进来, 写锁就一直饿死? 不会的, 通过readerWait会记录下写锁前的最后一个读锁, 这个读锁释放锁后...