9

方波

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。

clipboard.png

3、go协程与线程的讨论

go调度器如何管理goroutine:

clipboard.png

实验代码:

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


AI及LNMPRG研究
7.2k 声望12.8k 粉丝

一群热爱代码的人 研究Nginx PHP Redis Memcache Beanstalk 等源码 以及一群热爱前端的人