cassandra生产监控_碎玻璃:诊断生产Cassandra问题

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

cassandra生产监控

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

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

相关文章

C语言实用算法系列之DOS传参“加减乘除计算器”

简介 主要采用str族函数实现字符检测&#xff0c;只能用DOS传参进行计算&#xff0c;详见运行结果。 代码 #include <stdio.h> #include <string.h> #include <stdlib.h>/* int main(int argc, char** argv) { int i0; printf("总共有%d条有效字符串…

动态主机配置协议DHCP协议

如何给主机配置IP地址&#xff1f; ①手动配置 ②DHCP 什么是DHCP&#xff1f; 动态主机配置协议&#xff08;应用层协议&#xff09; 功能&#xff1a;客户端分配IP&#xff0c;使得客户机能够利用这个IP上网 为什么需要DHCP&#xff1f; ①早期是为了解决IPv4公网不够用的…

两个Oracle JDK的故事

最近有人担心 Java开发人员现在会无意中使用错误的Oracle提供的JDK实现&#xff08;从JDK 11开始 &#xff09;&#xff0c; Oracle提供了开放源代码OpenJDK的构建 &#xff0c;并且还提供了主要基于OpenJDK源代码的商业JDK构建。 下表比较并对比了Oracle提供的两个JDK版本&am…

C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针+switch

函数指针简介 #include <stdio.h>int add(int a, int b) {return a + b; }int dec(int a, int b)

为什么要区分不同的网段IP地址

不划分网段的问题&#xff1f; ①广播流量太多&#xff0c;占用网络带宽和设备资源。 ②管理复杂&#xff0c;不利于发现问题、排除故障。 ③不利于安全风险的隔离&#xff0c;安全问题影响范围更大。 如何划分不同的网段&#xff1f; IP地址如&#xff1a;192.168.1.10 / 25…

不同网段通信的过程

第一步&#xff1a;判断对方在不在同一个网段 不在 第二步&#xff1a;PC通过本地路由查找默认网关信息 第三步&#xff1a;PC通过本地ARP表查找默认网关MAC地址 有默认网关MAC&#xff0c;则接着第四步&#xff1b;没有默认网关MAC&#xff0c;则通过ARP广播寻址&#xff1b…

【终极完美高效】C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针数组

代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <stdlib.h>enum {READ_ONLY,HIDE,SYSTEM = 55,TEST }

ARP地址解析协议(深信服X计划)

文章目录一、ARP需求背景二、ARP概述及工作原理三、免费ARP概述及案例四、代理ARP概述及案例一、ARP需求背景 在以太网中&#xff0c;一个主机和另一个主机进行直接通信&#xff0c;必须要知道目标主机的MAC地址。单这个目标MAC地址是如何获得的呢&#xff1f;它就是通过ARP&a…

grails框架_Play和Grails Java框架的优缺点

grails框架框架通过为程序员提供一些有用的功能来简化应用程序开发过程。 由于开发人员的普遍使用&#xff0c;Java框架经常被开发人员使用。 您可以在市场上找到各种Java开发框架。 新手开发人员经常在论坛上发布一个常见问题&#xff1a;“哪种Java框架是最好的&#xff1f;”…

TCP和UDP协议(深信服X计划)

文章目录一、TCP协议概述二、TCP三次握手和四次挥手三、UDP协议概述四、TCP和UDP对比及应用场景一、TCP协议概述 TCP (Transmission Control Protocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;由ETF的RFC 793定义。在简化的计算机网络O…

C语言实用算法系列之时间族函数、目录遍历

时间族函数测试 代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <stdlib.h> #include <time.h>void main() {time_t tt;//long __int64time(&tt);tm* time localtime(&tt);char* ws[] { "日","一","…

跟踪反应流–将Spring Cloud Sleuth与Boot 2结合使用

Spring Cloud Sleuth在OpenZipkin Brave的基础上增加了对Spring工具的支持&#xff0c; 从而使Spring Boot应用程序的分布式跟踪变得异常简单。 这是一篇关于如何使用此出色的库添加对分布式跟踪支持的简要说明。 考虑两个应用程序–一个使用上游服务应用程序的客户端应用程序…

DNS域名解析协议(深信服X计划)

文章目录一、DNS协议背景二、DNS协议概述三、DNS工作原理四、DNS常用的记录及作用一、DNS协议背景 在Internet网中连接着数量众多的主机&#xff0c;要让这些主机进行通信&#xff0c;需要有一套名字标识体系&#xff0c;让主机之间能够彼此找到对方&#xff0c;我们可以用多种…

【总结】C语言实用算法系列之知识点梳理_附学生管理系统各模块代码

1、内存四区特点 a)全局区变量空间缺省每个字节为00,栈空间缺省是cc,堆缺省是cd b)堆、全局区(静态区)、字符串常量区,与栈区空间的位置距离很大,栈区访问速度可能最快; 2、C语言与C++编译器的区别: a)所有的.c文件在VC或者VS编译器中按C编译器编译; b)所有的.cp…

基于51单片机的温度检测监测报警系统设计

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发生关键词&#xff1a;单片…

【1】C++语法与数据结构之C语言学生管理系统转C++学生管理系统

从本文开始,后续将陆续发布C++语法与数据结构的相关内容,同样还是以学生管理系统来融汇贯通所有知识点。 接上篇博客【终极完美高效】C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针数组C++中定义CStudent类 文件名:Student.h typede…

rest 验证demo_如何实现REST资源的输入验证

rest 验证demo如何实现REST资源的输入验证 我正在使用的SaaS平台具有一个RESTful接口&#xff0c;该接口可以接受XML有效负载。 实施REST资源 对于像我们这样的Java商店&#xff0c;使用JAX-B从XML Schema生成JavaBean类是有意义的。 在像Jersey的JAX-RS环境中&#xff0c;使…

校园点餐系统:点餐、食堂管理、商户管理和菜品管理(Java和MySQL)

微信公众号&#xff1a;创享日记 发送关键词&#xff1a;校园点餐系统 获取报告数据库设计说明项目源码源文件工程文件 1 实验环境 操作系统&#xff1a;Windows 10&#xff0c;主要开发工具&#xff1a;PowerDesign&#xff0c;MySQL&#xff0c;Eclipse 2 实验过程 2.1 系统…

病情预测:指示病情程度、预测病情指标(深度学习和Python)

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送关键词&#xff1a;病情…

QueryDSL中包含通配符的字符串的精确匹配

在我们最近的一个项目中&#xff0c;我们的客户要求一个搜索字段&#xff0c;该字段可以搜索名字&#xff0c;姓氏和电子邮件地址&#xff0c;唯一的通配符是星号“ *”&#xff0c;表示部分匹配。 听起来很简单&#xff0c;但它使我们陷入了混乱。 在我们的项目中&#xff0c;…