方波
1、redis实现集群需要解决的问题列表:
1 多key读写(mget mset)
2 多key计算(集合交并集计算)
3 扩缩容
4 proxy冗余
2、一致性hash环:
1 一致性Hash算法将整个哈希值空间组织成一个虚拟的圆环,比如redis的16384个slot。
2 将机器虚拟并随机在环上分配相应slot区间。随机虚拟节点是为了解决数据倾斜问题。
3 增加机器时,将原区间上的数据重新hash到两个区间,比如[b2, c1],加入d3为[b2, d3], [d3, c1]
4 机器故障时,只会影响分配到该机器的key。
3、go协程与线程的讨论
go调度器如何管理goroutine:
实验代码:
package main
import (
“fmt”
“time”
)
func main() {
for i:=0;i<10000;i++ {
go func() {
fmt.Println(“start “, i)
time.Sleep(time.Duration(100)*time.Second)
fmt.Println(i)
}()
}
time.Sleep(time.Duration(2000)*time.Second)
fmt.Println(“main end”)
}
当for循环创建10w协程时,线程数量大约1w+;
当for循环创建1w协程时,线程数量大约700+;
原理部分,后续阅读golang源码再进一步定位。
发表回复