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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
29天前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
61 2
|
29天前
|
存储 分布式计算 API
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
73 0
|
8天前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
29 3
|
10天前
|
存储 监控 Linux
Docker技术架构概述
【10月更文挑战第22天】Docker采用CS架构,Client与Daemon交互,Compose管理多容器应用。
|
14天前
|
存储 前端开发 测试技术
Android kotlin MVVM 架构简单示例入门
Android kotlin MVVM 架构简单示例入门
22 1
|
19天前
|
消息中间件 关系型数据库 Java
‘分布式事务‘ 圣经:从入门到精通,架构师尼恩最新、最全详解 (50+图文4万字全面总结 )
本文 是 基于尼恩之前写的一篇 分布式事务的文章 升级而来 , 尼恩之前写的 分布式事务的文章, 在全网阅读量 100万次以上 , 被很多培训机构 作为 顶级教程。 此文修改了 老版本的 一个大bug , 大家不要再看老版本啦。
|
7天前
|
监控 API 持续交付
后端开发中的微服务架构:从入门到精通
【10月更文挑战第26天】 在当今的软件开发领域,微服务架构已经成为了众多企业和开发者的首选。本文将深入探讨微服务架构的核心概念、优势以及实施过程中可能遇到的挑战。我们将从基础开始,逐步深入了解如何构建、部署和管理微服务。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的建议。
18 0
|
20天前
|
前端开发 Unix Linux
KVM 架构概述
【10月更文挑战第12天】KVM是基于硬件辅助虚拟化技术的虚拟机监控器,核心依赖于CPU的虚拟化支持如Intel VT和AMD-V。
|
29天前
|
存储 分布式计算 算法
大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构
大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构
38 0
|
29天前
|
消息中间件 分布式计算 Kafka
大数据-98 Spark 集群 Spark Streaming 基础概述 架构概念 执行流程 优缺点
大数据-98 Spark 集群 Spark Streaming 基础概述 架构概念 执行流程 优缺点
37 0

热门文章

最新文章