【Cassandra从入门到放弃系列 一】概述及基本架构

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 【Cassandra从入门到放弃系列 一】概述及基本架构

【Redis深度学习系列 二】 基本概念这篇博客的开始我简单介绍了下NoSQL的基本概念和使用场景,也比较了几种NoSQL数据库,这里再次重温下Web2.0 三个需要解决的问题:

  • High performance - 高并发读写,在web2.0时代,需要依据用户个性化需要高并发读写,关系型数据库读还可以,写就很难做到了。例如论坛这样的站点, 网站的用户并发性非常高,往往达到每秒上万次读写请求,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈
  • Huge Storage - 海量数据的高效率存储和访问,海量数据高效率存储和访问, 网站每天产生的数据量是巨大的,对于关系型数据库来说,在一张包含海量数据的表中查询,效率是非常低的,类似facebook这样的社交网站、社区。
  • High Scalability && High Availability - 高可拓展性和高可用性, 在基于web的结构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。

为解决这些问题而使用的一些数据库常用的两种和它们的应用场景:

产品 存储方式 典型应用 数据模型 优点 缺点
Redis 键值(key-value) 内容缓存,主要用于处理大量数据的高访问负载 一系列键值对 快速查询 存储的数据缺少结构化
Cassandra 列存储数据库 分布式的文件系统 以列模式存储,将同一列数据存在一起 查找速度快,可扩展性强,更容易进行分布式扩展 功能相对局限
MongoDB 文档型数据库 Web应用(与Key-value)类似,Value是结构化的 一系列键值对 数据结构要求不严格 查询性能不高,而且缺乏统一查询语法

从以上表格可以发现二者的适用场景:Redis更适合做缓存,而Cassandra更适合做可扩展性的业务数据库,MongoDB则更重一些,介于关系型和非关系型数据库之间,解决的web2.0时代的问题分别为高并发读写高扩展性、高可用性和海量数据的高效率存储和访问。就效率而言,Cassandra的写操作较MongoDB强一些而且可扩展性更强,所以感觉更适合做业务数据库。同【Kafka从入门到放弃系列 一】概述及基本架构的学习和写作模式类似,对于Cassandra的学习分为如下几部分:

  • 【Cassandra从入门到放弃系列 一】概述及基本架构:Cassandra的基本特点和基本架构
  • 【Cassandra从入门到放弃系列 二】基本原理和机制解析:Cassandra的基本原理,详细的机制解读。
  • 【Cassandra从入门到放弃系列 三】数据模型及查询语句:Cassandra的数据模型和查询语言CQL。
  • 【Cassandra从入门到放弃系列 四】安装、配置和运行:Cassandra的安装、配置和运行。

本篇博客是Cassandra系列的第一篇,旨在解答问题的why和when,也就是为什么需要用kafka和什么时候用kafka,again:至于为何是从入门到放弃系列,因为俺相信,框架总会过时,总有更优秀的会出现,重要的是思想,所以这里的放弃是脱离框架而探寻框架的实现原理和思想,这个相较而言更重要吧但是你无论如何还是需要通过一个中间件的学习去了解设计原理和思想的,这也是浅尝辄止学习的意义)。

Apache Cassandra是一个开源的、分布式、无中心、弹性可扩展、高可用、容错、一致性可调、面向列的数据库,它基于Amazon Dynamo的分布式设计和Google BigTable的数据库。用于处理大量商用服务器上的大量数据,提供高可用性无单点故障。所以使用Cassandra的场景大多是进行海量业务数据的存储和分布式数据的扩展存储,但是读的性能差一些,所以搭配ElasticSearch进行快速查询和读取感觉就是不错的一个组合了。

在写作过程中参照了部分w3c内容: https://www.w3cschool.cn/cassandra/cassandra_architecture.html

Cassandra基本特点

在学习之前,先了解下Cassandra有哪些特点,并且根据这些特点给出我一些简单的理解,之后再通过原理探究讨论为何Cassandra具备这些特点:

  • 弹性可扩展性 - Cassandra是高度可扩展的; 它允许添加更多的硬件以适应更多的客户和更多的数据根据要求。这个应该是Cassandra最值得骄傲的一个特性了,待之后探究下他是怎么实现的
  • 始终基于架构 - Cassandra没有单点故障,它可以连续用于不能承担故障的关键业务应用程序。热修复,无坏点,再辣鸡的硬件服务器也可以扛?
  • 快速线性性能 - Cassandra是线性可扩展性的,即它为你增加集群中的节点数量增加你的吞吐量。因此,保持一个快速的响应时间(Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以增加动态添加节点即可。不必重启任何进程,改变应用查询,或手动迁移任何数据。)。
  • 灵活的数据存储 - Cassandra适应所有可能的数据格式,包括:结构化,半结构化和非结构化。它可以根据您的需要动态地适应变化的数据结构。
  • 便捷的数据分发 - Cassandra通过在多个数据中心之间复制数据,可以灵活地在需要时分发数据。
  • 事务支持 - Cassandra支持属性,如原子性,一致性,隔离和持久性(ACID)。这里的一些ACID估计不是很稳定的,例如一致性Cassandra只支持最终一致性,副本同步还需要时间
  • 快速写入 - Cassandra 执行快速写入,并可以存储数百TB的数据,而不牺牲读取效率。

综合而言,最牛的特性应该就是高可扩展,高可用,容易部署(增加服务器节点很简单),数据写入性能强。读取性能一般(但可以通过查询工具弥补(ElasticSearch))。

Cassandra基本架构

在Cassandra中,集群中的一个或多个节点充当给定数据片段的副本(P2P模式而非Master-Slave模式)。如果检测到一些节点以过期值响应,Cassandra将向客户端返回最近的值。返回最新的值后,Cassandra在后台执行读修复以更新失效值。

基本术语表

在该集群中有很多组件,作用各不相同,执行流程和使用方式目前还不甚确定,先将术语表列出来看一下:

  • 节点 - 它是存储数据的地方。
  • Raker -一个逻辑集合,有多个彼此临近node的组成。比如一个机架上的所有物理机器。
  • 数据中心 - 它是相关节点的集合(上图展示了一个数据中心)。
  • 集群 - 集群是包含一个或多个数据中心的组件。
  • 提交日志 - 提交日志是Cassandra中的崩溃恢复机制。每个写操作都写入提交日志。
  • Mem-表 - mem-表是存储器驻留的数据结构。提交日志后,数据将被写入mem表。有时,对于单列族,将有多个mem表
  • SSTable - 它是一个磁盘文件,当其内容达到阈值时,数据从mem表中刷新。
  • 布隆过滤器 - 快速,非确定性的算法,用于测试元素是否是集合的成员。它是一种特殊的缓存。 每次查询后访问Bloom过滤器。

基本术语表的组件在下一篇使用流程和机制中再详细介绍下。

Gossip协议

Gossip是一种p2p协议,用于failure detection,跟踪其他节点的状态,每秒运行一次。运用Phi Accrual Failure Detection实现failure detection,计算出一个结果level of suspicion,表示节点失败的可能性

使用Gossip协议,允许节点相互通信并检测集群中的任何故障节点

总结

本篇博客主要是对Cassandra进行一个简单了解,其适用场景,和其它Nosql的区别,以及基本架构和防坏点机制,在下一篇博客里将会介绍Cassandra的详细执行机制和基本原理。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
2月前
|
存储 SQL 关系型数据库
ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计
ClickHouse的核心架构包括执行过程和数据存储两部分。执行过程涉及Parser与Interpreter解析SQL,通过Column、DataType、Block、Functions和Storage模块处理数据。Column是内存中列的表示,Field处理单个值,DataType负责序列化和反序列化,Block是内存中表的子集,Block Streams处理数据流。Storage代表表,使用不同的引擎如StorageMergeTree。数据存储基于分片和副本,1个分片由多个副本组成,每个节点只能拥有1个分片。
197 0
ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计
|
2月前
|
存储 测试技术 数据库
谈谈代码:降低复杂度,从放弃三层架构到DDD入门
最近我发现团队某项目的复杂度越来越高(典型的三层架构),具体表现为: - 代码可读性较差:各个服务之间调用复杂,流程不清晰 - 修改某服务业务代码导致大量无关服务的测试用例失败,单个功能开发者很难迅速定位相关问题 - 测试用例特别难编写,需要mock大量数据来拉起整块服务
124 4
谈谈代码:降低复杂度,从放弃三层架构到DDD入门
|
2月前
|
存储 SQL Java
数据库TiDB-01.数据库架构概述
TiDB兼容MySQL 5.7协议,支持水平扩容或者缩容的金融级高可用的云原生分布式数据库。
395 2
数据库TiDB-01.数据库架构概述
|
2月前
|
SQL 分布式计算 Hadoop
Azkaban【基础 01】核心概念+特点+Web界面+架构+Job类型(一篇即可入门Azkaban工作流调度系统)
【2月更文挑战第6天】Azkaban【基础 01】核心概念+特点+Web界面+架构+Job类型(一篇即可入门Azkaban工作流调度系统)
143 0
|
2月前
|
Python API 网络架构
Django实践-10RESTful架构和DRF入门
Django实践-10RESTful架构和DRF入门
Django实践-10RESTful架构和DRF入门
|
2月前
|
Java Docker 容器
美团大牛精心整理SpringBoot学习笔记,从Web入门到系统架构
近期慢慢复工,为了准备面试,各路码友们都开始磨拳擦脚,背面试题、知识点。小编最近得一良友赠送了一份关于SpringBoot的学习笔记,简直不要好用,理论解析言简意赅,每一步操作都有图片展示。这么好的东西肯定不能私藏,为了感谢大家在2019年里的支持,我现在将这份笔记赠送给大家,祝大家前程似锦,Offer不断!
|
2月前
|
存储 运维 关系型数据库
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
|
2月前
|
缓存 自然语言处理 前端开发
第一章 引言-HTTP协议基础概念和前后端分离架构请求交互概述
第一章 引言-HTTP协议基础概念和前后端分离架构请求交互概述
|
1天前
|
存储 监控 Linux
Docker技术架构概述
【6月更文挑战第29天】Docker采用CS架构,Client与Daemon交互,Compose管理多容器应用。
|
2天前
|
设计模式 监控 Java
打造高效的Java应用架构:从入门到精通
打造高效的Java应用架构:从入门到精通