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

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。


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用计算机上合并计算方法,excel如何使用合并计算

Excel使用合并计算的方法是:1、首先打开“数据”选项卡,单击“合并计算”按钮。2、打开“合并计算”对话框,在“函数”下拉列表中选择“求和”选项,然后单击“引用位置”文本框右侧的范围按钮。3、此时进入“合并计算-引用位置”状…

利用Packer自定义镜像创建容器集群

阿里云容器服务Kubernetes集群支持CentOS操作系统,在绝大多数情况下可以满足客户的要求。但是有些客户由于业务系统对操作系统依赖比较高,希望定制化一些操作系统参数,则可以用自定义镜像来创建Kubernetes集群。 创建自定义操作系统镜像有两…

“远程”、“协作”风靡之际,你对TA知晓多少?

作者|晶少 转载|CSDN博客 2.4亿人在线使用文档协作无延宕…… 6万名武汉中小学生实力打造“远程课堂”活学高效…… 疫情以来,“远程”、“协作”持续大热,此局毋庸置疑。 根据QuestMobile最新发布的《2020中国移动互联网“战役”专题报告》显示&am…

java 判断对象是否为空

public static void main(String[] args) {Hxprocesslog hxlog null;if (StringUtils.isEmpty(hxlog)) {logger.info("null");} else {logger.info("not null");}} 控制台输出: 2021-01-17 16:26:43,032:INFO main (DataConvertShell.java:351) - null

蚂蚁金服OceanBase性价比是传统数据库的十倍

200名数据库领域从业三年以上的会员投票和专业的评委评选,在如此严苛的条件之下,蚂蚁金服金融级分布式关系数据库OceanBase 2.0依然获得了专家评审团的一致青睐,荣获2019中国数据库技术大会的“年度最佳创新产品”奖。 蚂蚁金服资深总监韩鸿源…

微型计算机原理及其应用彭楚武答案第三章,微机原理及其应用_第1章.ppt

微机原理及其应用_第1章微机原理及其应用_第1章本课程的考核方式: 开卷考试 评分标准: 期末考试成绩占70 %、 实验成绩占10 %、 课堂考核及作业占20% 。 全院各专业统一命题、流水作业阅卷、统一评分 如何学好“微机原理与接口技术”? 关键在…

战疫内外,京东智联云如此“一鸣惊人”!

作者|晶少 转载|CSDN博客 鼠年春节,一场疫情突如其来地打破了人们平静的生活;但在滨州,一款名为“疫情助手”的上线软件却为滨州市民的疫情生活带来“雪中送炭”的丝丝温情,细微知著中人们深深感受到了京东诠释而来的“ABCDE”技…

亿级消息系统的核心存储:Tablestore发布Timeline 2.0模型

背景 互联网快速发展的今天,社交类应用、消息类功能大行其道,占据了大量网络流量。大至钉钉、微信、微博、知乎,小至各类App的推送通知,消息类功能几乎成为所有应用的标配。根据场景特点,我们可以将消息类场景归纳成三…

2个 string 日期比较

public static void main(String[] args) {String date1 "2019-02-12";String date2 "2019-01-21";int compareTo date1.compareTo(date2);if (compareTo > 0) {System.out.println("date1 大于 date2");} else if (compareTo 0) {System…

SLS机器学习最佳实战:日志聚类+异常告警

0.文章系列链接 SLS机器学习介绍(01):时序统计建模SLS机器学习介绍(02):时序聚类建模SLS机器学习介绍(03):时序异常检测建模SLS机器学习介绍(04)…

计算机网络的ip分配,IP地址分配_网络设备技术应用_太平洋电脑网PConline

2.2 IP地址分配IPv4地址分配初期采用基于类别的方式,有3类主要方式:A、B和C以及2种特殊的网络地址D和E。*类型A地址:其中前7bit用于网络标识,后24bit用于主机标识,A类地址可容纳128个网络,任意A类网络中可…

大数据成长之路:谈谈那些必须学习的Linux基础知识

作者| Roy瑞士责编| Carol封图| CSDN│下载于视觉中国这里主要介绍学习大数据过程中用到的Linux基础知识,现在主攻的方向是大数据开发,欢迎大家共同交流。环境推荐安装VMware虚拟机并安装CentOS操作系统,具体资源的下载和安装可以查到&#x…

html选中后当前变色,JS代码实现表格选中后变色操作有哪些代码?

【实例代码】html xmlnshttp://www。w3。org/1999/xhtml head title无标题页-学无忧(www。xue51。com)/titlescript languagejavascript var searchResultnew Array();//鼠标滑过时显示背景色 //改变背景色和边框颜色的方法function colorChange(table,color,color2){table。st…

字符串对象数组集合非空判断

String 字符串 //直接用字符串调用方法 str.isEmpty() 如果为null则会抛出异常 if (StringUtils.isEmpty(str)){// "" 和null均判断为空System.out.println("string为空"); }对象 //第1种:if (Objects.isNull(null)){ //nullSystem.out.println(&quo…

数据可用不可见!揭秘蚂蚁区块链摩斯安全计算平台

“数据安全”与“隐私泄漏”制约数字经济长期发展 在新的商业智能时代,已形成广泛的共识:数据是最基础的生产资料,各个行业与企业对于数据的利用也步入成熟期。可见的未来,数据利用的深度和广度将进一步升级,进入跨机…

如何与亦敌亦友的 null 说拜拜?大神原来是这么做的!

作者| 沉默王二责编| Carol封图| CSDN│下载于视觉中国从 10 年前我开始写第一行 Java 代码至今,一直觉得 null 在 Java 中是一个最特殊的存在,它既是好朋友,可以把不需要的变量置为 null 从而释放内存,提高性能;它又是…

计算机优化英语,英语对计算机专业的重要性及如何提高英语水平

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼计算机研发人员要掌握的专业英语要求教高,必须掌握大量的专业术语和缩略语; 熟练掌握语法和惯用法的表达方式和功能; 能阅读英文文档和技术资料,阅读熟读在100词/分钟以上; 能借助字典翻译专业技术图书; 能使…

K8s中Pod健康检查源代码分析

了解k8s中的Liveness和Readiness Liveness: 表明是否容器正在运行。如果liveness探测为fail,则kubelet会kill掉容器,并且会触发restart设置的策略。默认不设置的情况下,该状态为success. Readiness: 表明容器是否可以接受服务请求。如果re…

获取 当前日期、当前时间、前一天日期

/*** 获取前一天日期** return*/public String getYesterday() {Calendar calendar Calendar.getInstance();calendar.add(Calendar.DATE, -1); //得到前一天Date date calendar.getTime();DateFormat df new SimpleDateFormat("yyyy-MM-dd");return df.format(da…

CSE:阿里在线应用如何演进成Serverless架构

Cloud Service Engine,简称CSE,是中间件部门研发的面向通用Serverless计算的中间件产品,目标是具备AWS Lambda的各种优势,同时可以解决AWS Lambda的关键技术缺陷。 AWS Lambda如果用于核心业务,可能会有以下缺陷&…