TIDB 的大脑 PD 到底是干什么的

2021-07-18 00:00:00 数据 事务 分布式 信息 申请

PD  Server --- placement driver  是管理整体TIDB 元数据的功能模块, 为分布式系统分配全局统一的事务ID, 存储整体TIKV分布式数据库的实时元数据信息,和TIDB的数据库整体的结构. 提供TIDB 监控管理的UI 界面. 除此以外PD 还上报整体TIKV数据存储的分布情况,以及后面根据相关的情况来调整数据的在多个TIKV节点的分布. PD 本身需要基数节点部署,并且PD包含了ETCD分布式,保证PD的高可用.


1  PD 主要的作用之一就是分配事务号, 而一个分布式的分配事务号的系统设计与单机的是有很大区别的.


1  PD 是一套独立的系统,在传统数据库中并不会单独列出一个系统来进行相关的工作. PD 对于TIDB 的重要性毋庸置疑,如果PD 无法工作则数据会处于丢失和无法访问的状态.相关的数据调度也会无法工作. 所以PD 必须是高可用的状态进行工作.


2  PD 对事务的TSO 号进行分配通过本地的时间和逻辑时间来形成一个INT64的全局事务号.


3  分布式数据库中考虑问题需要考虑并发和单位时间事务量的问题, 这里PD 建立TSO 进行了性能优化 , 针对申请进行了时间段的申请, 不是即时分配事务TSO,而是提前申请,将一段时间设置为申请的段,申请后,直接生成TSO,事务在高并发执行是,不会在计算TSO,而是直接给出已经计算好,并且在内存中存储的TSO 给申请的事务即可.


4  申请TSO 和获取TSO 也需要时间来沟通,所以这里申请TSO的客户端也不会一次仅申请一个TSO,而是将一组TSO 拿走方便后续使用,提高性能.


5  PD  管理TIKV 的REGION的分割后的管理,如果REGION 达到一定的大小会分割,当数据delete后也会进行相关的数据的清理,进行REGION的合并. PD 为这些新增的或消减的REGION 进行编号的发放和记载.


6  路由信息, 从TIDB 上下发的获取数据的指令是要通过PD来指定到哪里进行数据的获取的, PD 告知相关信息在那个TIKV 并且将信息缓存在 TIDB 中,下次如果继续访问数据可以从自己的缓存中获得地址, 同时如果TIKV的REGION分割,删除,新增了,则次获取数据会失败, 会将新的地址更新,让TIDB 在此访问新的位置获取数据.


其中   上面 1  2  3  4 几个点进行一些详细的解释和说明

这里PD 的工作中有几个重点

1  时间, 时间不准确会导致分配事务的中断和问题

2  缓存, TSO ,一次会批量计算,所以需要更多的内存来支持存储预先计算好的TSO

3  批量获取TSO ,然后应对并发,这里如果事务回滚,相关的TSO 应该作废,所以如果有大批量的事务回滚是会消耗大量的TSO.



TIKV  与 PD 之间的信息是TIKV 上传到PD 其中包含两种信息  

1   store 信息

store  信息包含每个TIKV中存储的region 信息,如多少个region

其中有多少个region leader 等信息

2   region leader 信息

每个region 根据高可用以及分布式协议的问题, 都有region leader的,那么region 的整体的信息都通过region leader 进行上报的.


所以TIKV 会有两个方面对自己的整体和region 的信息进行上报PD的过程.


从以上设计中可以感受到PD 在整个 TIDB 的重要性,以及扩展的方便性,share nothing 中在节点扩展是无感的, PD 则是节点任意伸缩支持的重要的根本,也是在高并发中,可能会产生性能瓶颈,需要关注的地方.


相关文章