【每日笔记】【Go学习笔记】2018-12-27

方波
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源码再进一步定位。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理