Liangjf

The darkest hour is that before the dawn.

短连接系统设计

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

短连接服务原理和系统设计 项目源码地址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会记录下写锁前的最后一个读锁, 这个读锁释放锁后...

sync.Once

sync.Once源码分析

sync.Once源码分析 sync.Once是借助原子变量和锁来实现函数只执行一次的功能. 通过上锁, 避免首次并发竞争, 以后是通过atomic来cas获取变量状态来判断是否已执行, 提高效率 由于首次doSlow会上锁, 因此首次并发情况下, 会出现其他goroutine等待函数执行完并设置了done标志, 这里会有一个延时等待, 但是结合Once的使用, 一般是作为初始化时使...

sync.Map

sync.Map源码分析

sync.Map源码分析 思路 通过两个map, 一个是只读map[read], 一个是读写map[dirty], 通过expunged标记和misses阈值来触发dirty覆盖更新read; 读操作, 先去read中查询, 没有再去dirty中查询, 逻辑上的读写分离, 提高查询效率(sync.Map适用于高并发中多读少写); 存储操作, 先尝试对read的key更新, 没...

mysql同步redis

通过MySQL触发器UDF自动同步刷新Redis

通过MySQL触发器UDF自动同步刷新Redis 将编译得到的动态库放入/usr/lib/mysql/plugin h_myredis_udf.so libmysql_redis_udf_2nd.so libmysql_redis_udf.so libmysql_json_udf.so 下载地址 创建数据库, 数据表, 触发器, udf #创建数据库 create...

性能问题分析

go+grafana+influxdb性能分析和问题排查

go+grafana+influxdb性能分析和问题排查 组件: go程序 grafana influxdb 1.在Docker容器中运行InfluxDB和Grafana docker run --name influxdb -d -p 8086:8086 influxdb docker run -d -p 9090:3000/tcp --link influxdb -...

grpc

grpc服务发现分析

grpc服务发现分析 etcdv3作为grpc服务发现组件 github naming naming/naming.go grpc自带只支持dns域名解析名字服务注册发布, 但是通过开放接口的形式, 满足用户的自定义名字发现组件 创建一个监视器,返回是Watcher, 用于监视目标域名的名称解析, 从而得到ip地址 ```go type Resolver interface { ...