说在最前面,ps/ps-lite是mxnet/cxxnet的参数服务器部分,原理上就是一个分布式kv服务,具备range类的pull/push操作;和其他的kv数据库相比(比如redis/leveldb),并没有把精力放在存储的数据结构/内存磁盘的转化之类上,而是大部分精力都用在分布式同步,结构层面,以及传输消息的异步处理和压缩里面了。
后期被定为做类库,可能也是其owner希望业界可以采用这样的结构。与其说是个kv数据库,不如说是分布式kv系统结构类库。和读了redis觉得其数据结构的功底惊为天人不同,ps/ps-lite看完就觉得是个学术界的同学做的系统结构,思路有亮点,结构实现的多少还是有点乱滴。。。当然了C++11用的很溜,每个函数级别的细节实现都还不错。
早年我个人看过淘宝的KV数据库Tair的实现源码(大约在2013年),思路类似,简单来说就是固定分片,每个分片的主机里面的数据更新后,异步同步到具有该分片的其他从分片。ps/ps-lite在这方面的优化其实是在同步时缩减消息内容,甚至多条一起合并。并且引入了mq做中间件,系统的稳定性更好。
1,历史版本
mxnet的parameter-server历史上,主干git可以看到主要的3个版本
mxnet的parameter-server历史上,主干git可以看到主要的3个版本