Cassandra 被设计为分布式数据库管理系统 (DBMS),依赖于点对点架构。Cassandra 集群中的每个节点或存储部分数据的单个服务器都是平等的,不依赖于主节点。
数据分布在各个对等节点,而非集中存储,从而消除了单点故障(单一故障可能会迅速引发连锁反应)。通过这种设计,系统即使在计划内停机或突发变化期间,也能实现无缝复制、高效数据分发并保持持续服务。
Cassandra 提供自动化、数据备份和集成指标,适用于管理联网物联网(IoT) 设备等用例。更具体地说,它具有线性可扩展性、高可用性和容错性,因而成为大数据应用和实时工作负载的热门选择。截至 2024 年 9 月,Cassandra 已被全球 30,000 多家组织使用。
Cassandra 的故事始于 2007 年 Facebook,当时工程师们正在寻找一种可以为公司不断发展的消息平台存储数据的系统。通过结合已建立的 NoSQL 数据库模型(Amazon 的 Dynamo 和 Google 的 Bigtable),他们创建了一个具有高效数据结构和最终一致性的系统,其中更新会传播,直到所有副本随着时间的推移最终一致。
2008 年,Cassandra 以开源项目发布,迅速受到希望替代传统关系数据库的开发者的青睐。Apache 软件基金会于 2009 年接管了管理权,正式确定了治理机制并加速了社区的采用。
随着 eBay、Spotify 和 Instagram 等早期采用者部署 Cassandra 来处理大数据,Cassandra 的发展势头日益强劲。IoT和实时个性化的兴起进一步巩固了 Cassandra 作为首选高可用、可扩展数据库的地位。
DataStax 的商业支持新增了企业级工具、教程和服务,而开源社区则开发了工具并扩展了文档。如今,Cassandra 仍是许多分布式系统的核心,在开源生态系统和企业部署中蓬勃发展。
从流媒体服务和社交媒体到在线购物,客户期望获得始终在线的数字体验。对于公司而言,正常运行时间不再是 IT 目标,而是业务指标。如果达不到要求,代价将非常高昂:全球领先企业每年因计划外停机时间造成的损失估计高达 4000 亿美元。
与此同时,来自事件日志、遥测和数据流的非结构化数据激增,使得跨地区和云环境的运营变得更加复杂,增加了系统故障的可能性。组织需要一个可靠的数据库,可以处理多种数据类型并根据全球基础设施的需求进行扩展。Cassandra 专为满足这些需求而设计。
各行业依靠 Cassandra 的高性能来处理数十亿次写入操作(插入、更新和删除),同时为用户提供实时准确的服务。其弹性来自于在商用服务器或标准化现成服务器之间复制数据,从而最大限度降低中断风险,并确保即使硬件故障也能保持持久性。
Cassandra 能够管理跨多个数据中心的工作量,为全球的公司提供一致性和可用性。Netflix 和 Amazon 等组织使用 Cassandra 提供个性化体验,同时防止停机和数据丢失。实际上,Netflix 的资产管理平台团队使用 Cassandra 来管理大约 19 亿条标注(约 2.6 TB),将其集群从 12 个节点增加到 24 个节点。
与依赖严格模式定义和集中控制的关系数据库不同,Cassandra 是为分布式规模而构建的。在关系系统中,主键与严格的数据建模和有限的可扩展性相关联。相比之下,Cassandra 使用分区密钥和复制因子来决定数据集如何跨节点和数据中心存储。
虽然结构化查询语言 (SQL) 系统擅长处理复杂的连接和聚合,但它们经常会引入瓶颈和单点故障的风险。Cassandra 通过采用分布式架构和最终一致性来避免这种情况。与 MongoDB 相比,Cassandra 数据库更倾向于跨多个数据中心的写入密集型、线性可扩展的工作量。
对于管理大量数据的组织,Cassandra 具有明显的优势:高吞吐量、低延迟和耐受中断。然而,Cassandra 并不提供某些关系数据库所提供的相同级别的临时查询。使用 Cassandra 的开发人员应该仔细设计数据建模以优化写入操作、副本和数据完整性。
Cassandra 的设计将分布式系统的创新与企业级数据管理工具相结合。主要功能包括:
Cassandra 是 Apache 软件基金会旗下的开源项目,可帮助组织避免供应商锁定并定制数据库以满足他们的需求。需要企业级帮助时,团队可以利用社区资源或选择商业支持和托管服务。
Cassandra 的存储引擎采用由提交日志、内存表(memtable)和排序字符串表(SSTable)文件组成的分步流程(或写入路径)。该流程快速接受写入操作并予以保护。频繁访问的数据保存在缓存中以供低延迟查询,而压缩(一种自动管理功能)有助于确保高效的长期数据存储。
根据 CAP 定理,当发生网络分区时,分布式系统只能提供三个所需特征中的两个:一致性、可用性和分区容错性 (CAP)。Cassandra 通过可调的一致性级别解决了这种权衡,允许用户根据用例优先考虑可用性或一致性。
Cassandra 通过在不中断服务的情况下添加新节点来增加容量,从而在商用服务器上提供线性可扩展性,而不是昂贵的垂直升级。随着节点的增加,Cassandra 会自动在簇中重新分配数据和流量,因此工作量会横向扩展,吞吐量也会成比例增加。
Cassandra 跨节点和数据中心复制数据,因此本地用户可以体验低延迟,同时避免单点故障。它还集成了 Kubernetes、应用程序编程接口 (API) 框架和亚马逊网络服务 (AWS) 环境。它是用 Java 编写的,并在 Java 虚拟机 (JVM) 上运行。
团队使用镜像 SQL 的 Cassandra 查询语言 (CQL) 来快速定义核心结构,例如键空间、表和主键。CQL shell (cqlsh) 和官方教程等交互式工具也可以帮助缩短新开发者的入门时间。
Cassandra 通过 CQL 与应用程序进行交互,CQL 是一种受 SQL 启发的域特定语言。数据库开发人员熟悉 CQL 语法,允许他们定义键空间、模式、数据类型以及主键和分区键。
例如,在全球游戏发布期间,开发者可以创建一个 Keyspace,即定义复制设置的 Cassandra 顶级数据库等效数据库。之后,他们可以设计其中分区键(例如球员 ID 或地区)在相同节点上保留相关数据的表,以实现高效的数据分发。使用 cqlsh,团队可以运行教程、验证查询,并在添加新节点以应对玩家量的增加时管理 Cassandra 簇。
由于 Cassandra 注重写入操作和吞吐量,因此其语法避免了可能降低性能的功能,例如复杂联接。相反,开发人员依靠二级索引、聚合和优化的数据建模来实现灵活性。
尽管 CQL 类似于 SQL,但两种语言反映了不同的数据管理方法。
SQL 可在规范化的表上运行,而 CQL 专为与分区键对齐的非规范化 Cassandra 数据而设计。
SQL 假定严格的数据完整性,而 Cassandra 在最终一致性和可配置一致性级别之间取得平衡。
SQL 系统通常依赖于垂直扩展,而 Cassandra 通过向 Cassandra 集群添加新节点来实现线性可扩展性。
SQL 针对事务进行了优化,而 CQL 专为实时查询和大规模写入操作而设计。
从 SQL 迁移的开发人员可以快速适应 CQL 的语法,但必须重新考虑数据建模策略,才能充分利用 Cassandra 的分布式系统方法。
Cassandra 为需要高性能、低延迟和弹性的各行业中的任务关键型工作负载提供支持。例如:
除了这些垂直领域外,Cassandra还支持组织为大数据和可扩展数据存储构建分布式系统。结合 API 支持、企业工具和开放社区教程,Cassandra 仍然是现代数据库管理系统的基石。
设计数据战略,消除数据孤岛、降低复杂性并提高数据质量,以获得卓越的客户和员工体验。
watsonx.data 支持您通过开放、混合和已治理数据,利用您的所有数据(无论位于何处)来扩展分析和 AI。
通过 IBM® Consulting 发掘企业数据的价值,建立以洞察分析为导向的组织,实现业务优势。
† Apache Cassandra 和 Cassandra 是 Apache 软件基金会的注册商标。