加入收藏 | 设为首页 |

希斯莱杰-印度版的“群众点评”如何将FoodFeed事务从Redis迁移到Cassandra

海外新闻 时间: 浏览:149 次

Zomato 是一家食物订货、外卖及饭馆发现渠道,被称为印度版的“群众点评”。现在,该公司的事务掩盖全球24个国家(主要是印度,东南亚和中东商场)。本文将介绍该公司的 Food Feed 事务是怎么从 Redis 搬迁到 Cassandra 的。

Food Feed 是 Zomato 交际场景中不可或缺的一部分,由于它能够让咱们的用户参加其间并与朋友的餐厅谈论和图片坚持同步,乃至能够经过这个获取餐厅供给的优惠和扣头。开端咱们挑选 Redis 作为音讯 Feed 流的存储引擎,由于在其时的用户场景这是最好的挑选。可是跟着事务的开展,咱们需求更高的可用性和负载支撑,而 Redis 不能很好的满意这个需求。尽管咱们能够经过丢掉一些数据来防止体系的中止,但这不是咱们想做的作业。为了保证咱们的体系具有高可用性,咱们不得不抛弃 Redis,而挑选 Cassandra 作为其替代品。

Cassandra 十分合适这个用例,由于它是分布式的,就有高可用性等。而且 Cassandra 也能够用于存储时刻序列数据 - 这实际上便是咱们的希斯莱杰-印度版的“群众点评”如何将FoodFeed事务从Redis迁移到CassandraFeed 流。在做出这一严重改动之前,咱们的确有一些 Cassandra 的运用经历,但关于像 Feed 这样重要的东西来说肯定是不行的。咱们有必要弄清楚怎么顺畅的从 Redis 过渡到 Cassandra,并像在 Redis 上那样有效地运转 Feed,而且没有停机时刻。

咱们开端花时刻在 Cassandra 上,在前两周深化探究其装备并调整它以满意咱们的要求。接下来,在终究确认 Feed 的架构之前,咱们清晰了一下两个状况:

  • Feed 流信息一般只用于读取而基本上不会修正。运用 Redis 的时分,咱们能够一起读取上百个 keys 而不用忧虑读取推迟,可是关于Cassandra 而言,衔接推迟可能是读取恳求过程中一个适当重要的部分。
  • schema 需求满意灵敏,以便将来答应 Feed 中新类型的数据。鉴于咱们不断迭代并致力于丰厚产品体会,因此在 Feed 中增加元素和功用几乎是不可防止的。

咱们花了几天时刻用于收集了咱们项目的数据形式以及各种用户事例,然后开端运用2个数据中心,每个数据中心有3个节点。 咱们从 Redis 中搬迁大约 6000万条记录到 C希斯莱杰-印度版的“群众点评”如何将FoodFeed事务从Redis迁移到Cassandraassandra 中用于测验其功用。由所以测验阶段,咱们只将一部分流量切入到 Cassandra ,并预备了两个版别的代码,别离写入到 Cassandra 和 Redis 。架构图如下

咱们监控体系的推迟和其他问题,令人惊奇的是,咱们遇到了写入吞吐量的瓶颈问题。 咱们知道 Cassandra 的写入才能十分强,可是咱们无法完成咱们在各种博客文章和文章中阅览的写入吞吐量。 咱们知道出了什么问题,但咱们不知道是什么。咱们从三个节点中取得的最佳结果是每秒1500次写入,这彻底不能满意线上的需求,咱们不得不在几个小时内回滚并从头评价。

经过几天的排查,咱们意识到问题不在于 Cassandra,而在希斯莱杰-印度版的“群众点评”如何将FoodFeed事务从Redis迁移到Cassandra于 Elastic Block Store(EBS)。EBS是安装在每个EC2实例上的网络驱动器,具有10 Gigabits 的同享带宽和网络流量。当在单个EC2实例上的一切用户之间同享时,该带宽成为咱们的瓶颈。为了满意这一需求,咱们将数据从根据网络的EBS存储移动到同一EC2实例中的磁盘存储。然后咱们在每个服务器上逐一布置由 Cassandra 供给支撑的新 Food Feed,以便咱们操控吞吐量。很快乐的是,这次成功了。

然后咱们开端从咱们的出产 Redis 服务器搬迁数据(咱们花了14个小时来搬迁一切内容),在搬迁过程中咱们没有任何毛病或额定负载。这便是 Redis 和 Cassandra 的强重生之宠爱一生柴夏壮功用。今日,咱们的 Food Feed 彻底运转在 Cassandra 上,咱们在没有停机的状况下完成了这项作业。新的架构如下:

总而言之,经过上面这个项目,咱们学到了以下几点:

  • 在写入期间防止数据的读取。“读取”吞吐量大致坚持不变,而“写入”规划与节点数量成份额;
  • 防止数据的删去。删去意味着紧缩(compaction),当它运转时希斯莱杰-印度版的“群众点评”如何将FoodFeed事务从Redis迁移到Cassandra,节点的资源会被占用;
  • 推迟是一个问题。与Redis比较,Cassandra的衔接推迟很高,大约是 Redis 的10x-15x。

作者:明惠