从Redis转投Cassandra,Instagram节约了75%的成本

jopen 11年前

Rick Branson:   Instagram架构师。

Matt Pfeil:  DataStax联合创始人。

Matt: 你好,我叫Matt Pfeil。在我身边的是Instagram的架构师Rick Branson。Rick今天过得怎样?

Rick: 还好啦,你呢?

Matt:我挺好的,现在能跟你对话就更好了。

Rick: 一直都想跟你会一会呢。

Matt: 我也是。有些人可能不知道,我跟Rick在DataStax共事了很长一段时间,后来他去了Instagram。Rick,在Instagram你们用的是Cassandra,能不能跟听众们谈谈你们是怎么用的?

Rick: 当然可以,Cassandra我们已经用了7到8个月。我们前期的开发集中在存储与安全和网站完整性相关的审计数据。这是个什么概念呢?这意味着打击垃圾邮件、检测滥用用户以及其他类似的东西。Cassandra很吸引人的一点就在这里。这些功能是我们原来已经用 Redis实现了的,但数据增长就是太快了,让这些数据长驻内存在生产环境中是不现实的。拥有极高的写速率和较低的读速率,这就是Cassandra为什么这么流行的原因,所以最后的结果是,面对同样的问题,傻瓜也会选Cassandra。我们开始时用了3个节点集群,后来增加到12个。这就是我们的后端基础程序的变换的过程。

我们最近决定移植另一部分更重要的东西。我们花了点时间让团队里的每一个人都熟悉Cassandra的最新版本,读文档,然后练着看怎样让它跑得更好。我们选择用Cassandra来做我们应用中叫做“inboxes”的部分(就是动态回复那块)。这大致上就是用户账号关联的全部动态的反馈,亦即你会看到大家喜欢你的照片、粉你、有朋友加入了、有人评论了你,等等。我们决定将这部分移到Cassandra的原因是,之前用Redis也有类似情况,而我们的内存就快不够用了。

我们觉得Cassandra的可靠性跟可用性让我们用起来很顺手。这是一个非常不同的工作负载:我们在SSD上跑Cassandra 1.2,我们可以获得有包括VnodesLeveled Compaction等全部新特性的最新版本。Cassandra是个很成功的项目,我们只花了几天就移植完毕了。

关于我们这些集群的一些细节:12个节点的集群/用了(亚马逊的)EC2 hi1.4xlarge/存储了大概1.2TB的数据。峰值时我们在这个集群每秒大概做20,000个写操作和15,000个读操作。Cassandra 处理这些操作的方式让我们印象深刻。同时我们也减少了我们的足迹,所以这对我们来说真是极好的体验。第一个实现为我们这次移植积累了不少的经验。现在每次人们打开Instagram,他们都是在跟这12个节点的集群要数据,这是极其振奋人心的一点。

Matt: 好牛呀。我听你说到了一个很有趣的东西,你说你们是从Redis移到Cassandra的,这明显得在内存里进行。是什么在推动你们做这个移植的呢?

Rick: 比方说前面说的针对后端的第一次移植,我们是从一个Redis 主/从复制设置中移出,因为这东西实在是太贵了。我们从将什么东西都放到内存里(通常会很大),变成将全部东西放到硬盘上。当你不需要频繁的读时,这样会运行得很好。采用Cassandra后我们在这一块花的钱是之前的四分之一。不仅花费减少了,这同样将我们的人手解放出来了,因为这样能更好扩展,需要的话我们可以随时增加节点。特别需要指出的一点是,如果你要将一个之前不共享的设置改成共享,这是件很痛苦的事。用Cassandra你可以免费获得这样的功能,在它里面你不必经历共享数据的痛苦过程。

另外一次移植,我们叫做“Inbox”实例,反馈信息是已经共享了的。它原来是在32个节点集群上,16个主库和16个冗余备份(失败的备份),我们当然得经历共享所有这些东西的过程。我们发现我们的机器眼看着就要没有空间了,它们其实并没消耗太多的CPU(Redis有很高的CPU利用率),但很明显的是当你内存快没了。。。你就真的没有内存了。

这里用Cassandra集群更具成本效益和更易操作,你不需要那种在内存级别的性能。耐久性是一个很重要的因素,这点Redis没有实现好,这点我将会在Cassandra Summit 2013上深入的讲讲。

Matt: 我觉得你是在吊起大家的胃口,吸引大家到时都去听这个演讲。

Rick: 这还不是跟你学的。

Matt: 呃,很高兴我教了你一课。底下的人如果他们自己没用过Cassandra,但很感兴趣的话,你有什么建议?

Rick: 再打下广告,在Cassandra Summit 2013上我将会深入的讲讲我们采用的策略及其他类似主题。

我建议大家深入这个系统,一篇不落的读完 Cassandra 文档,特别是 DataStax网站上的内容。我看过的相关文档中最好的一点是它们会包含很多关于内部实现的额外信息,实实在的搞懂这些东西是很重要的。不管你用什么数据库或数据存储,为了用得更好更地道,你都得深挖它的文档。太快或错误地采用某个方案,或者前期不做功课,这时人们经常拐不过弯来。特别是用了数据存储的,确保它是你的系统中最稳定最可靠的部分至关重要。

Matt: 这话中听。谢谢Rick今天抽时间来,像你所说,大家记得今年6月11号到12号在旧金山 Fort Mason阿Rick会做关于Instagram怎样用Cassandra的演讲。界时我也会跟他有个名为Deciding Dollars:It's Actually Actuarial的访谈。再次谢谢你抽空来,Rick。

Rick: 客气啥,另外大家可以在IRC channel 刮到我架。

Matt: 你讲得没错。如果你也没有响推特粉阿Rick,IRC频道上你可以刮到各种有用的东西架。