9
回答
【开源访谈】奇虎 360 陈宗志:开源能让项目走得更长久
终于搞明白,存储TCO原来是这样算的>>>   

Pika 是 360 DBA 和基础架构组联合开发的类 Redis 存储系统,完全支持 Redis 协议,用户不需要修改任何代码,就可以将服务迁移至 Pika。在 Pika 的开发过程中,有哪些值得我们学习和借鉴的地方?Pika 的优势和特点又是什么呢?本期,【开源访谈】邀请到了 360 平台部基础架构技术经理陈宗志,和大家聊聊 Pika 的开源之路。

【本期嘉宾】

陈宗志, 360 平台部基础架构技术经理,毕业于天津大学软件学院,毕业后先后在美团,百度,360 工作。曾负责设计实现了 Bada,Pika,Floyd 等一系列存储相关的产品,开发设计团队内部的基础库 Pink,Mario 等等。目前主要负责 360 基础机构组内部的基础组件 Bada,Pika,Zeppelin,Ceph,Qconf 等开发和维护。

【访谈实录】

1、先简单介绍一下自己。(学习工作经历,以及主要负责的领域)

我叫陈宗志,目前在 360 Web 平台部基础架构组担任技术经理,在 360 工作将近4年。毕业于天津大学软件学院,毕业后先后在美团,百度,360 工作。

目前主要负责 360 基础机构组内部的基础组件 Bada,Pika,Zeppelin,Ceph,Qconf 等开发和维护。Bada,Pika,Zeppelin,Ceph,Qconf 几乎使用在 360 所有业务线中,每天承担百亿级别的访问。其中 我们已开源 Pika,Zeppelin,Qconf 项目。我们还开源了我们团队开发的一些基础组件,比如在我们团队稳定使用 3 年多的网络编程库 pink,基于 raft 协议实现的一致性协议库 floyd,基于 rocksdb 实现的高性能的多数据结构存储引擎 nemo 等等。

自己对存储,内核,分布式系统有一定的了解,所以对这些领域比较感兴趣。

2、简单谈谈 Pika 项目开发的初衷是什么?(项目开发背景)

因为 Redis 提供了丰富的多数据结构的接口,因此 Redis 在公司内部大量使用。用户把越来越多的数据存储在 Redis 中,慢慢线上就会有 50G,80G 大小这样的 Redis。

DBA 在运维管理这个大容量 Redis 的过程中慢慢遇到的诸多问题,比如:恢复时间长,一主多从,主从切换代价大,缓冲区容易写满,内存价格昂贵等等。因此 DBA 就和我们基础架构团队一起解决这类问题,因此就有了Pika。

所以 Pika 是 DBA 需求,基础架构组开发的大容量、高性能、持久化、支持多数据结构的类 Redis 存储系统。由于 Pika 有专门的 DBA 同学进行把关,因此 Pika 的可用性,可维护性应该是同类产品中最好的,这也是为什么 Pika 短期内有大量的内部、外部业务接入的原因。

3、Pika 作为类 Redis 存储系统,与 Redis 相比,有哪些优势?又有哪些缺点?

优势

大容量存储:Pika 数据容量受制于磁盘,最大使用空间等于磁盘空间的大小,而 Redis 数据容量受限于主机内存。

秒级启动:Pika 在写入的时候,数据是落盘的。Pika 重启不用加载所有数据到内存,不需要进行回放数据操作。而 Redis 启动需要将所有数据从磁盘加载到内存,随着容量增加,启动时间递增到分钟级甚至更长时间。

秒级备份:Pika 的备份方式是将所有数据文件做快照。Redis 无论是用 RDB 还是 AOF 的方式来实现数据备份的目的,都需要将全量的数据写入到磁盘,备份速度慢。

秒删数据:Pika 的数据删除是标记删除,Pika Key 的元信息上有版本信息,表示当前 key 的有效版本,已删除的数据在 Compact 合并数据的过程中删除。而单线程的 Redis 在大量删除数据时候会影响线上业务,删除大对象会阻塞住 Redis 的主线程,删除速度慢。

同步续传:Pika 写入数据会有 write2file 日志文件,只要该文件未删除,无需全量同步数据,均可断点续传数据。而 Redis 一旦主从同步缓冲区被循环重写,容易导致全量数据重传。

高压缩比:Pika 存储的数据默认会被压缩,相对于 Redis,Pika 有 5~10 倍的压缩比。所以 Redis 的数据存储到 Pika,数据体积会小很多。

高性价比:相对于 Redis 使用昂贵的内存成本,Pika 使用磁盘存储数据,性价比极高。

缺点

读写性能较弱:Pika 是持久化的,基于磁盘的 kv 存储。而 Redis 是内存数据库。虽然 Pika 是多线程的,但是在大多场景下,性能还是略逊色于 Redis。

多数据结构性能损耗:Pika 底层使用 Rocksdb 存储引擎,它并不支持多数据结构,Pika 在 Rocksdb 的上层进行了改造和封装,实现了对多数据结构的支持。同时在性能上会有一些损耗。

兼容大部分 Reids 接口:Pika 兼容了 90% 的 Redis 接口,使其易用性得到大大提升。但是目前还没有做到完全兼容。

4、Pika 是否会取代 Redis?为什么?

Pika 并不会取代 Redis,Pika 是作为 Redis 的一个补充,从上面的对比可以看出 Pika 的主要应用场景在于:

1. 业务量并没有那么大,使用 Redis 内存成本太高

2. 数据量很大,使用 Redis 单个服务器内存无法承载

3. 经常出现时间复杂度很高的请求让 Redis 间歇性阻塞

4. 读写分离且不希望故障切主后影到从库,能够快速切换

因此对于对性能要求非常高,但是数据量非常小的场景,我们的 DBA 依然会推荐业务使用 Redis。

目前在公司内部是 Pika,Redis,Redis-cluster 均在线上使用的情况。

5、项目开源之后,是如何进行维护的?您有什么心得体会想和大家分享?

Pika 在开源之前我们已经在 360 内部稳定使用半年多,线上已经有大量的业务使用。我们一直秉持的原则就是在团队内部已经稳定运行使用后,再开源出来让更多的人使用上。

开源之后我们主要通过开源中国网站,Github,QQ 群,DBA 圈子等等进行推广,常见问题的答疑我们将内部的 wiki 全部都写在了 Github 上,对于有问题的用户我们有一个专门的 QQ 群进行答疑,目前形成了非常良好的沟通交流氛围。

由于国内的环境我们并没有使用邮件组,我们使用的是 QQ 群。用户遇到问题可以直接在 QQ 群里面提问,我们的 DBA 以及主要的开发者也都在 QQ 群里面,如果遇到问题我们会帮忙排查。同时我们会在我们的微信公众号 hulktalk 邀请我们的 DBA 谈谈 Pika 的高可用的运维,Pika 更详细的使用方法等等。

对于新需求,因为我们目前有专门的 DBA 来跟进 Pika,也会从 QQ 群以及根据公司内部的业务场景来制定合理的开发计划。

Pika 在开源很短一段时间就有用户提交代码,我觉得主要原因是 Pika 的代码可阅读性很好。因为在 Pika 开源之前我们经过的大量的 review,争取做到通过阅读代码以及文档,一个新人可以快速参与到开发,所以开源项目中代码的可读性是一个非常重要的指标,只有你的代码的可读性好才可以让其他人快速参与进来。

我们的目标是国外的用户也能够用上 Pika,在向国外推广方面我们确实没有多少的经验。

6、Pika 下一步的发展举措是什么?会进行哪些方面的优化?

Pika 下一步主要发展是多数据结构的性能优化,以及持续的可运维性的优化。目前 key-value 接口的性能已经满足线上的需求,但是 zset,list 等接口性能还是不够完美,因此我们还在考虑如何让性能更极致。另外,Pika 的定位一直是对 Redis 的补充,但是从数据的可靠性来看,Pika 是基于 Rocksdb 引擎持久化存储,有天然的优势。

Pika 目前的主从结构是和 Redis 一样,通过 slaveof 来实现,写入主成功即可返回。我们希望增强 Pika 的可靠性,主从副本机制改成通过 raft 协议实现的强一致,这样能够让 Pika 用在对一致性要求更严格的场景,比如金融、积分和消息相关的场景中。

7、你知道还有其他比较类似的项目吗?你觉得 Pika 的优势在哪里? 

类似的项目应该有 ssdb,ardb,还没有看到国外类似的项目。

Pika 的主要优势在于性能,可用性。因为 Pika 有专门的 DBA 进行需求把关,因此 Pika 的可维护性是非常好的,有使用 Redis 经验的人可以很快上手 Pika。并且 Pika 尽可能的兼容 Redis 协议,用户基本可以做到不修改代码就可以迁移到 Pika 上,Pika 还提供了一系列的迁移工具。性能方面我们对 rocksdb 也有比较深入的研究,也做了较多的优化。也有用户对比 ssdb,Pika 性能,Pika 还是在各个层面都优于 ssdb。

目前公司内部之前的 ssdb 都已经迁移到 Pika 上了。

8、现在越来越多的项目走上开源之路,您如何看待这种现象?

我觉得这个是一个特别好的现象,我们团队从 2013 年开始做开源,公司对团队做开源也是非常的支持。到目前为止,我们的核心项目 Atlas,Qconf,Pika,Zeppelin 均已经开源。

应该是从 Hadoop,MongoDB 开始,大家慢慢开始意识到开源的重要性,只有开源才可以让项目走的更加长久。MongoDB 从众多的 NoSQL 的项目中能够脱颖而出,MongoDB 的开源策略应该做了很大贡献。程序员有能看得见代码,用的才放心的情怀。而且通过开源 MongoDB 形成在 NoSQL 圈几乎最好的社区,后来的其他 NoSQL Aerospike,Couchbase 等等也相继开源,但是错过了最佳时机了。

9、对于正在做开源项目的朋友,您有什么话想对他们说?

我觉得做开源无论是对于项目本身,对公司,还是对于个人能力提高都是有正向帮助的一个事情。因为一个开源项目,一个 Github 上项目的提交历史对于一个人的认识远远比一张简历来的有说服力。而且现在国内的公司也都越来越重视开源,一个好的开源项目也会给公司带来好的口碑。

所以积极投入到开源项目中吧,现在是程序员最好的时代,你可以没有任何成本的看到世界上最优秀的程序员的代码,和最优秀的程序员进行沟通。加油吧,少年!

举报
达尔文
发帖于5个月前 9回/2K+阅
顶部