碎玻璃:诊断生产Cassandra问题

我刚刚在健康市场科学(HMS)成立二周年之际,我们几乎一直在这里与Cassandra一起工作。 那时,我们遇到的问题很少。 就像我曾经使用过的其他几种技术一样,Cassandra“行之有效”。

但是,就像我曾经使用过的*每一种*技术一样,您最终还是会遇到某种问题,即使这不是技术本身,而是技术的使用。 这就是这里的情况。 (枪?检查。脚?检查。瞄准……射击。=)

这是我们的子弹遇见脚的故事...

自从生产以来,我们对Cassandra的依赖程度成倍增加。 我们一直在以越来越高的速度向这些产品线添加产品线和客户。 并取得了成功,我们不得不随着时间的推移发展架构,但是系统的某些部分却一直未受影响,因为它们一直在不断发展。 在过去的几周中,其中一个部分抬起了丑陋的头。

我们一直在垂直扩展集群中的节点以适应需求。 我们的集群完全是虚拟的,因此这始终是阻力最小的路径。 需要更多内存吗? 没问题。 需要更多CPU? 没问题。 需要空间/磁盘吗? 我们的SAN中有很多东西。 您这样做的次数越来越多,而且频率越来越高,您可能会发现趋势并没有很好地结束。 =)

首先,随着我们增加内存占用量,我们对以下页面中的调整参数没有给予足够的关注: http : //www.datastax.com/docs/1.0/operations/tuning

给定系统内存,我们将堆大小设置得太大,这开始在Cassandra中引起打ic。 一旦将它带回在线中,我们又爬了几个星期。

然后,上周事情到了顶点。 我们在路的尽头看到了悬崖。 我们在一个客户端应用程序中发现了一个“错误”,该错误无意中引入了人工节流阀。 太棒了! 我们进行代码更改(两行代码),进行一些测试,然后将其发布到生产环境中。 Bam,我们将并发性提高了几个数量级。 哦,那是什么? 卡桑德拉cho死了吗?

卡桑德拉开始Swift收集垃圾。 我们Swift向Google Gods咨询,并向Oracle(矩阵参考,而非数据库制造商=)寻求建议: http : //www.slideshare.net/aaronmorton/cassandra-sf-2013-in-case-of-emergency-打破玻璃。 如果您尚未阅读该演示文稿,请在阅读为时已晚之前阅读。 对于性能调整和C *诊断,没有比Aaron Morton(@aaronmorton)更强大的功夫了。

我们开始研究tpstats和cfstats。 一切似乎都还好。 有什么可以扩大我们的足迹?

好吧,我们有很多列族。 我们已经改进了体系结构和数据模型,并且在较新的应用程序中,我们采用了虚拟键空间方法,使用复合行键将数据合并为单个大列族。 但是可惜,遗留数据模型仍在生产中。 这些列系列中的许多列流量很少,但是Cassandra仍然为它们保留一些内存。 那可能是罪魁祸首,但是那些柱子家族自从开始以来就一直在那里。 我们必须更深入地研究。

我们听说过Bloom Filter膨胀 ,我们认为这可能是问题所在。 但是查看过滤器的磁盘大小(ls -al ** / * Filter.db),所有内容看起来都是笨拙的,可以很好地放入我们的巨大堆中。 ( 在1.2中,这些已移出堆 )

等一下…

当我们有一个绝妙的主意来引入一些服务器端AOP代码来充当触发器时,就可以回溯了。 最初,我们使用它们来使索引保持同步:宽行,甚至在某一时刻,我们都使用服务器端触发器使Elastic Search保持最新状态。 这使客户端代码变得简单而愚蠢。 连接到C *的应用程序不需要了解我们的任何索引编制机制。

最终,我们发现最好在应用层(通过Storm)控制数据流,但是我们仍然在服务器端使用AOP代码来管理宽行。 尽管我最近一直在反对我们以前的方法 ,但该代码仍然存在。 这可能是根本原因吗? 我们的行肯定会越来越宽……(此时已进入数百万列)

我们的一个工作人员(对Sandrew表示敬意)找到了JMeter Cassandra,并开始在非生产环境中进行测试。 我们附加了一个探查器,该探查器暴露了我们的问题-内部的AOP。 幸运的是,我们已经在研究从C *中删除AOP的补丁。 该补丁将AOP代码移到了客户端(切点Hector而不是Thrift / Cassandra)。 我们应用了补丁并进行了测试。

瞧,C *再次嗡嗡作响,从此以后我们所有人都过着幸福的生活。

再次非常感谢+ Aaron Morton的帮助。 你是摇滚明星。 对于HMS的工作人员来说,与这样一支才华横溢,热情洋溢的团队合作是一种荣幸。

很好呀。

参考: 破碎的玻璃:诊断生产Cassandra问题来自我们的JCG合作伙伴 Brian ONeill,网址为Brian ONeill的Blog博客。

翻译自: https://www.javacodegeeks.com/2013/08/broken-glass-diagnosing-production-cassandra-issues.html

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

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

相关文章

java 一维数组_java基础 ---- 一维数组

为什么要使用数组: 因为不使用数组计算多个变量的时候太繁琐,不利于数据的处理。-------- 数组也是一个变量,是存储一组相同类型的变量声明一个变量就是在内存中划出一块合适的空间声明一个数组就是在内存中划出一块连续的空间数组长度就是…

四则运算2

作业描述: 悲催的二柱子接到了老师要求给软件增加一些小小的功能,具体要求如下: 1、除了整数以外,还要支持真分数的四则运算(需要验证结果的正确性); 2、一次出的题目避免相互重复; …

Java中的策略设计模式-示例教程

策略模式是行为设计模式之一 。 当我们对一个特定任务有多种算法,并且客户端决定在运行时使用的实际实现时,将使用策略模式。 策略模式也称为策略模式 。 我们定义了多种算法,并让客户端应用程序将算法用作参数。 此模式的最佳示例之一是采用…

MySQL数据库主从复制

使用gtid (也需要开启binlog日志) CHANGE MASTER TO MASTER_HOST’192.168.95.11’, MASTER_USER’mysql12’, MASTER_PASSWORD’mysql12’,MASTER_AUTO_POSITION 1; 使用binlog CHANGE MASTER TO MASTER_HOST’192.168.95.12’, MASTER_USER’mysql…

vue-cli 3.0 使用全过程讲解

2018年8月13日更新: 恭祝vue-cli 3.0.0 官方正式版发布,此后我们可以正式在3.0环境下进行项目开发了。 此文发布以来受到了很多朋友的阅读,但我深知这篇文章还是很浅显的,因此,我会在后续的 3.0 使用过程中分享我遇到…

java反射机制在spring_Java反射机制在Spring IOC中的应用

IOC:即“控制反转”,不是什么技术,而是一种思想。使用IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。本篇文章主要讲解一下IOC底层实现的原理(反射),Bean容器的实现,就不对I…

【图像处理】Haar-like特征

特征提取的原理、代码等; 如果是白黑白,是减去一个黑的还是2个黑的,网上有不同的说法;应该需要看原论文了。 论文原文 The sum of the pixels which lie within the white rectangles are subtracted from the sum of pixels in t…

mysql获取某个表的所有字段名

转载:mym43210 mysql安装成功后可以看到已经存在mysql、information_schema和test这个几个数据库。 information_schema库中有一个名为COLUMNS的表,这个表中记录了数据库中所有表的字段信息。 知道这个表后,获取任意表的字段就只需要一条sele…

neo4j / cypher:悬挂查询参数

一直以来,我一直在使用neo4j的密码查询语言, 迈克尔一直在告诉我在查询中使用参数,但是查询的性能始终可以接受,因此我没有必要。 但是,最近我正在研究一个数据集,并使用类似于以下的代码创建了约500个节点…

java调用浏览器组件来_Java 网页浏览器组件介绍

在使用 Java 开发客户端程序时,有时会需要在界面中使用网页浏览器组件,用来显示一段 HTML 或者一个特定的网址。本文将介绍在界面中使用浏览器组件的四种方法,给出示例的代码,并且分析每种方法的优点与不足,便于 Java …

前端入行两年--教会了我这些道理

1.前言 光阴似箭,日月如梭。不得不感慨时间过得很快,2017差不多结束了,一下子我从事前端开发的时间已经两年了。这两年可以说是一波三折,回想这两年的经历,让我忍不住了写下了这篇文章,记录自己在这两年经历…

解决Nginx: [error] open() Nginx.pid

使用nginx -c的参数指定nginx.conf文件的位置 sudo /usr/sbin/nginx -c /etc/nginx/nginx.conf 转载于:https://www.cnblogs.com/vannn/p/9756132.html

巴霍巴利王

巴霍巴利王 惊心动魄的宫廷政变,必然铸就新的王朝更迭。时代的婉转,终究选上得民心的君主。我们的故事就这样悄无声息的将你带入幽深的宫廷内院。 夜幕之中,面对寒冷与杀戮,一位身负重伤王室女人,抱着一个新生儿&#…

Java中的观察者设计模式-示例教程

观察者模式是行为设计模式之一 。 当您对对象的状态感兴趣并希望在发生任何更改时得到通知时,观察者设计模式很有用。 在观察者模式中,监视另一个对象状态的对象称为Observer ,而正在监视的对象称为Subject 。 根据GoF,观察者模式…

华为大数求和 java_大数乘积java

{"data":{"id":"8000-000000437045-0","name":"SEO专题页栏目分发组","type":"1","position":"8000-000000004003-0","status":1,"linkList":[{"id"…

IdnentiyServer-使用客户端凭据访问API

情景如下:一个客户端要访问一个api,不需要用户登录,但是又不想直接暴露api给外部使用,这时可以使用identityserver添加访问权限。 客户端通过clientid和secrect访问identitserver的Token Endpoint,获取accesstoken; 接…

重要·Flutter 首个预览版 发布

今天,InfoQ China 主办的 GMTC 全球大前端技术大会在北京举行,在这次大会中 Google 宣布发布 Flutter 首个预览版。这无疑让 Flutter 迈上了一个新的台阶。于此同时推出了 Flutter 社区中文资源 。可能有些同学还不了解 Flutter,这里再普及一…

复习做UWP时涉及到的几种加密签名相关

复习做UWP时涉及到的几种加密签名相关 原文:复习做UWP时涉及到的几种加密签名相关本人菜鸟一枚,大学里凭兴趣学了一点WP的皮毛,后来又幸运(或者不幸)的进了一家专注于Windows生态的公司做了一段时间的UWP。在博客园写点自己遇到的…

Java中的中介器设计模式-示例教程

中介者模式是行为设计模式之一 ,因此它处理对象的行为。 中介器设计模式用于在系统中不同对象之间提供集中式通信介质。 根据GoF,中介者模式意图是: 通过封装不同对象集相互交互和通信的方式,允许松散耦合。 允许每个对象集的动作…

java gc full gc_Java中full gc什么意思?

慕雪6442864除直接调用System.gc外,触发Full GC执行的情况有如下四种。1. 旧生代空间不足旧生代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行Full GC后空间仍然不足,则抛出如下错误:java.lang.Out…