存储的本质|青训营笔记
这是我参与「第五届青训营」伴学笔记创作活动的第15天
在后面会依次倒叙回顾之前的学习课程,便于复习~
一、课程重点内容
- 存储与数据库简介
- 分布式系统理论
下面是对课程重点内容的思考与总结,有问题或者错误,可以批评指正呐~
二、基本概念
一个提供了读写,控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统
存储系统特点
存储系统作为后端软件的底座,性能敏感,容易受硬件影响,其中较为明显的影响是不断地拷贝与IO操作。
在设计上需要明确一下几个要点:
- 缓存:很重要,应该贯穿整个存储体系
- 拷贝:很昂贵,应该尽量减少
- 硬件设备五花八门,需要抽象统一的接口
数据库特点
背景:现代计算系统每天在网络上都会产生庞大的数据量。这些数据有很大一部分是由关系型数据库管理系统(RDBMSs)来处理,其严谨成熟的数学理论基础使得数据建模和应用程序编程更加简单。
-
关系型数据库
- 关系型数据库中的关系=集合=任意元素组成的若干有序偶对反应了事物间的关系。
- 关系型数据库是存储系统,但是在存储之外,又发展出其他能力非关系型数据库也是存储系统,但是一般不要钱严格的结构化
但随着信息化的浪潮和互联网的兴起,传统的RDBMS在一些业务上开始出现问题。
首先,对数据库存储的容量要求越来越高,单机无法满足需求,很多时候需要用集群来解决问题,而RDBMS由于要支持join,union等操作,一般不支持分布式集群。
其次,在大数据大行其道的今天,很多的数据都“频繁读和增加,不频繁修改”,而RDBMS对所有操作一视同仁,这就带来了优化的空间。
另外,互联网时代业务的不确定性导致数据库的存储模式也需要频繁变更,不自由的存储模式增大了运维的复杂性和扩展的难度。
由此诞生非关系型数据库,NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。
这类数据库主要有这些特点:非关系型的、分布式的、开源的、水平可扩展的。最初的目的是为了大规模web 应用。
NoSQL 的拥护者们提倡运用非关系型的数据存储,通常的应用如下特点:模式自由、支持简易复制、简单的API、最终的一致性(非ACID)、大容量数据等。
-
非关系型数据库
- 非关系型数据库也是存储系统,但是一般不要钱严格的结构化
三、分布式理论
-
基本理论
- 分布式系统的核心理念是让多台服务器协同工作,完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。分布式是NoSQL数据库的必要条件。
- 分布式系统每个节点一般不采用高性能的服务器,而是使用性能相对一般的普通PC服务器。提升分布式系统的整体性能是通过横向扩展(增加更多的服务器),而不是纵向扩展(提升每个节点的服务器性能)实现。
- 分布式系统最大的特点是可扩展性,它能够适应需求变化而扩展。
-
CAP问题
在可用性和一致性之间永远无法存在一个两全其美的方案。由于NoSQL的基本需求就是支持分布式存储,严格一致性与可用性需要互相取舍,由此延伸出了CAP理论来定义分布式存储遇到的问题。
CAP理论告诉我们:一个分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Availability)、分区容错性(P:Partitiontolerance)这三个基本需求,并且最多只能满足其中的两项。
-
概念:
- 对于一个分布式系统来说,分区容错是基本需求,否则不能称之为分布式系统。因此需要在C和A之间寻求平衡。
-
权衡一致性与可用性 - BASE理论
- Base = Basically Available + Soft state + Eventuallyconsistent 基本可用性+软状态+最终一致性,由eBay架构师DanPritchett提出。
- Base是对CAP中一致性A和可用性C权衡的结果,源于提出者自己在大规模分布式系统上实践的总结。核心思想是无法做到强一致性,但每个应用都可以根据自身的特点,采用适当方式达到最终一致性。
-
-
分布式存储算法
- 一致性算法 – Paxos
- 分区(Partitioning)
- 分片(Replication)
- 一致性哈希(Consistent Hashing)
五、课程总结
存储作为一个后端底层的服务,需要不断地随着时代的脚步,不断地进步与发展,新的硬件、人工智能等新技术地加入,后面应该又会有新的存储介质出现!