【 问题背景】
阅读了一下PD提供grpc服务实现的代码,发现在心跳,Region操作等实现上都回去先判断当前PD是否为leader,如果不为leader就将请求转发到Leader上去执行这样的操作。
【核心问题】
我的问题是,根据上面的判断,如果所有的工作都交给Pd集群中单个的leader节点去负责执行各类操作。
1.那么当Tidb集群非常大情况下,比如有几百个Tikv节点,这么多的Tikv节点同时在进行心跳信息上传等操作时,PD这个Leader单节点岂不是要承担很的大的压力?并且这种压力是不是也无法通过水平扩容PD集群进行解决?
2.集群存储的数量非常巨大的时候,如果每一个Region的leader都要向PD发送心跳信息,这岂不是很大的一个qps。假如集群存储100T的数据,按照每个region上限324MB,那么需要上传心跳的信息的Region数量为:10010241024/324 = 319687 个region。这么多个region同时去心跳信息,PD的压力岂不是非常大?