Zomato 是一家食品订购、外卖及餐馆发现平台,被称为印度版的“大众点评”。目前,该公司的业务覆盖全球24个国家(主要是印度,东南亚和中东市场)。本文将介绍该公司的 Food Feed 业务是如何从 Redis 迁移到 Cassandra 的。

Food Feed 是 Zomato 社交场景中不可或缺的一部分,因为它可以让我们的用户参与其中并与朋友的餐厅评论和图片保持同步,甚至可以通过这个获取餐厅提供的优惠和折扣。开始我们选择 Redis 作为消息 Feed 流的存储引擎,因为在当时的用户场景这是最好的选择。但是随着业务的发展,我们需要更高的可用性和负载支持,而 Redis 不能很好的满足这个需求。虽然我们可以通过丢失一些数据来避免系统的中断,但这不是我们想做的事情。为了确保我们的系统具有高可用性,我们不得不放弃 Redis,而选择 Cassandra 作为其替代品。

Cassandra 非常适合这个用例,因为它是分布式的,就有高可用性等。并且 Cassandra 也可以用于存储时间序列数据 - 这实际上就是我们的Feed 流。在做出这一重大改变之前,我们确实有一些 Cassandra 的使用经验,但对于像 Feed 这样重要的东西来说肯定是不够的。我们必须弄清楚如何顺利的从 Redis 过渡到 Cassandra,并像在 Redis 上那样有效地运行 Feed,并且没有停机时间。

我们开始花时间在 Cassandra 上,在前两周深入探索其配置并调整它以满足我们的要求。接下来,在最终确定 Feed 的架构之前,我们明确了一下两个情况:

  • Feed 流信息一般只用于读取而基本上不会修改。使用 Redis 的时候,我们可以同时读取上百个 keys 而不必担心读取延迟,但是对于Cassandra 而言,连接延迟可能是读取请求过程中一个相当重要的部分。
  • schema 需要足够灵活,以便将来允许 Feed 中新类型的数据。鉴于我们不断迭代并致力于丰富产品体验,因此在 Feed 中添加元素和功能几乎是不可避免的。

我们花了几天时间用于收集了我们项目的数据模式以及各种用户案例,然后开始使用2个数据中心,每个数据中心有3个节点。 我们从 Redis 中迁移大概 6000万条记录到 Cassandra 中用于测试其性能。由于是测试阶段,我们只将一部分流量切入到 Cassandra ,并准备了两个版本的代码,分别写入到 Cassandra 和 Redis 。架构图如下:

我们监控系统的延迟和其他问题,令人惊讶的是,我们遇到了写入吞吐量的瓶颈问题。 我们知道 Cassandra 的写入能力非常强,但是我们无法实现我们在各种博客文章和文章中阅读的写入吞吐量。 我们知道出了什么问题,但我们不知道是什么。我们从三个节点中获得的最佳结果是每秒1500次写入,这完全不能满足线上的需求,我们不得不在几个小时内回滚并重新评估。

经过几天的排查,我们意识到问题不在于 Cassandra,而在于 Elastic Block Store(EBS)。EBS是安装在每个EC2实例上的网络驱动器,具有10 Gigabits 的共享带宽和网络流量。当在单个EC2实例上的所有用户之间共享时,该带宽成为我们的瓶颈。为了满足这一需求,我们将数据从基于网络的EBS存储移动到同一EC2实例中的磁盘存储。然后我们在每个服务器上逐个部署由 Cassandra 提供支持的新 Food Feed,以便我们控制吞吐量。很高兴的是,这次成功了。

然后我们开始从我们的生产 Redis 服务器迁移数据(我们花了14个小时来迁移所有内容),在迁移过程中我们没有任何故障或额外负载。这就是 Redis 和 Cassandra 的强大功能。今天,我们的 Food Feed 完全运行在 Cassandra 上,我们在没有停机的情况下完成了这项工作。新的架构如下:

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

  • 在写入期间避免数据的读取。“读取”吞吐量大致保持不变,而“写入”规模与节点数量成比例;
  • 避免数据的删除。删除意味着压缩(compaction),当它运行时,节点的资源会被占用;
  • 延迟是一个问题。与Redis相比,Cassandra的连接延迟很高,大约是 Redis 的10x-15x。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

印度版的“大众点评”如何将 Food Feed 业务从 Redis 迁移到 Cassandra相关推荐

  1. 大众点评:下一个百亿公司

    这家公司过去 8 年的"匍匐前进"正在变成自己最大的财富.随着因智能手机的普及而成为从线上通往线下的商业桥梁,大众点评网也迎来了自己成就百亿市值公司的机遇. 大众点评网的 CEO ...

  2. 大众点评CEO张涛:踏实创业 低调打造百亿级公司

    大众点评网的CEO 张涛不太习惯面对镜头,尽管他是一个创业超过8年的互联网老兵. 过去的8 年里,张涛很低调,也享受着将一个小生意扎扎实实地做大的过程,只不过,他自己也没有料到,在2011年年末整个电 ...

  3. 看准网点评没有了_大众点评“亡”于2020

    2020年9月11日,美团点评发布公告,决定将名称简化为美团,生效日期为9月30日.美团与大众点评惊天大合并的五年之后,美团终于撕下了点评这张脸皮. 很多人说点评没有熬过"七年之痒" ...

  4. 【小o地图Excel插件版】不止能做图表,还能抓58、大众点评网页数据...

    小o地图Excel插件版:一款基于Excel软件开发的地图软件,提供基于Excel表格进行地理数据挖掘.地理数据分析.地图绘制.地图图表等功能的工具类软件.具有易用.高效.稳定的特点,能够满足地理数据 ...

  5. 北京 mysql 饭店_11城大众点评美食数据分析(mysql版)

    一.数据来源 本次数据来源于大众点评11个城市的推荐美食数据.每个城市均爬取了城市推荐美食的50页数据,但由于部分数据爬取时出现问题,最终每个城市数据量并不一致,在720条到760条之间,分析时应主要 ...

  6. 大众点评App的短视频耗电量优化实战,android应用案例开发大全第4版

    一.案例分析 短视频作为已被市场验证的新内容传播载体,能有效增加用户停留时长.大众点评App从9.3版本开始推出短视频相关内容,在各页面新增了短视频模块.在短视频功能测试中,我们发现如果在视频列表页中 ...

  7. MCI:移动持续集成在大众点评的实践

    一.背景 美团是全球最大的互联网+生活服务平台,为3.2亿活跃用户和500多万的优质商户提供一个连接线上与线下的电子商务服务.秉承"帮大家吃得更好,生活更好"的使命,我们的业务覆盖 ...

  8. 华为一则面试题登上热搜;大众点评会员因点赞过多被处罚;Linux Kernel 5.12 发布|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  9. 朋友圈新增访客记录?大众点评辟谣”被放弃”;百度 7 款 APP 进入 App Store 前十 | 极客头条...

    「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 快讯速知 微 ...

最新文章

  1. QT的Q3DTheme类的使用
  2. PostgreSQL 多重含义数组检索与条件过滤 (标签1:属性, 标签n:属性) - 包括UPSERT操作如何修改数组、追加数组元素
  3. Simulink之理想开关
  4. [机器学习-实践篇]贝叶斯算法
  5. python 相关系数函数会产生无穷大吗_python 求相关系数
  6. IOS精品源码,仿探探UIButton封装iOS提示弹框迅速引导页自定义导航栏
  7. java类验证和装载顺序_深度分析Java的ClassLoader机制(源码级别)
  8. transforms中RandomResizedCrop、Resize、CenterCrop的理解
  9. 国际混淆C代码大赛获奖作品部分源码
  10. 【ACWing】998. 起床困难综合症
  11. java报表工具FineReport使用中遇到的常见报错及解决办法(二)
  12. Docker容器化开发
  13. OSChina 周四乱弹 —— 针对热门上姐弟恋的解答
  14. 一种具有17路可调PWM直流电机的串口遥控机器人
  15. Day644.Spring框架开发双刃剑 -Java业务开发常见错误
  16. 大数据集群扩容机架分配
  17. Leetcode学习之贪心算法
  18. c# winform打包单个exe文件
  19. Android启动摄像机拍照存储展示
  20. Unity3D 内存管理

热门文章

  1. Java中数组的初始化
  2. python导出csv有引号_python – csv中的双引号元素不能用pandas读取
  3. axios vue 加载效果动画_vue+axios+element ui 实现全局loading加载示例
  4. python 字符串大小写转换 其它不变_python字符串大小写如何转换
  5. java打印已经被加载的类_使用URLClassLoader加载类,不会报错,但被加载类中的内容也没有打印出来...
  6. vfp操作excel排序_中招计算机信息技术考试训练|Excel操作题一|排序和筛选
  7. c语言变量命名规则_带你学习C语言—变量
  8. linux下c语言绘图库_Linux 下的图形库介绍
  9. mysql崩溃_mysql崩溃原因分析
  10. python中的画布控制_使按钮在画布上工作(tkinter)