分布式存储系统学习(1)

ops/2024/9/24 11:45:32/

1学习来源

《大规模分布式存储系统原理解析与架构实战》--杨传辉

2学习目标

  • 数据分布:如何使数据均匀分布到多台服务器上?分布到多台服务器后如何实现跨服务器读写操作?
  • 一致性:如何将数据的多个副本复制到多台服务器?即使在异常情况下,也能保证不同副本间数据的一致性
  • 容错:如何检测到服务器故障?故障后如何将数据和服务迁移到集群中的其他服务器上?
  • 负载均衡:新增服务器/集群正常运行过程中如何实现自动负载均衡?数据迁移过程中如何不影响已有服务?
  • 事务与并发控制:如何实现分布式事务?如何实现并发控制?
  • 易用性:如何设计对外接口使系统变得易用?如何设计监控系统并将系统的内部状态方便的暴露给运维人员?
  • 压缩/解压缩:如何根据数据的特点设计压缩/解压缩算法?如何平衡压缩算法节省的存储空间和消耗的CPU计算资源?

3分布式存储分类

分布式文件系统:常作为分布式表格系统和分布式数据库系统的底层存储。

分布式键值系统:只提供基于主键的CRUD功能,即根据主键创建、读取、更新、删除一条键值记录

分布式表格系统:用于存储较为复杂的半结构化数据。

分布式数据库:存储结构化数据,典型的包括:Mysql数据库分片集群、Amazon RDS、Microsoft SQL Azure。

4Tips

  1. 存储系统性能主要包含2个维度:吞吐量以及访问延时。设计系统时要求在保证访问延时的基础上,通过最低成本尽可能实现更高的吞吐。磁盘和SSD的访问延时差别很大、但带宽差别不大,因此磁盘适合大块顺序访问的存储系统,SSD适合随机访问较多或者延时敏感的关键系统。
  2. 事务的ACID特性:

        A(原子性):事务对数据库的修改,要么全都执行,要么全都不执行;

        C(一致性):例如数据的类型必须正确或者银行账户余额不能是负数;

        I(隔离性):数据库在并发执行多个事务时,每个事务可能需要对多个表项进行修改和查询。数据库需要保证每个事务在它的修改全部完成前,对其他的事物上不可见的。也就是,不能让其他事务看到该事务的中间状态;

        D(持久性):事务提交后对数据库的影响是永久性的,即使系统出现异常也是如此

  1. 如何解决死锁?一是为每个事务设置一个超时时间,超时后自动回滚;二是死锁检测,如果发现事务之间相互依赖构成一个环路,就回滚某些事物来解除循环依赖
  2. 存储系统在选择压缩算法时,需要考虑压缩比和效率

5存储引擎

哈希存储引擎

bitcask是一个基于哈希表结构的键值存储引擎。她仅支持追加操作,即所有的写只追加而不修改老的数据。在bitcask系统中,每个文件有大小限制,文件增加到相应大小时会产生一个新文件,老文件只读不写,这样在任意时刻,只有一个文件是可写的,用于数据追加,称为活跃数据文件。而其他已经达到大小限制的文件成为老数据文件。

数据结构

哈希存储引擎:基于哈希表结构,在内存中存储了主键和value的索引信息,磁盘文件中存储了主键和value的实际内容。内存中存储file_id、value_pos、value_size.通过读取file_id对应的value_pos开始的value_size个字节,这样就得到了最终的value值。

定期合并

bitcask的记录删除或更新后,原来的数据为垃圾数据。为了解决这些数据,它会定期做合并(compaction)来实现垃圾回收。所谓合并,就是把老数据文件中的数据重新扫描一遍生成新的数据文件,把同一个key的记录只保留最新的,这样新数据文件里就没有冗余数据了。

快速恢复

bitcask的索引信息存储在内存中,服务器断电重启后需要重建索引表:需要重新扫描磁盘上的数据文件来重建索引表,这个过程很耗时,为了提高效率,bitcask通过索引文件来提高速度,也就是把内存中的索引表转储的磁盘中,这样只需一行行读取索引文件中的数据重建即可,大大减少了重启后的恢复时间

6B树存储引擎

Mysql InnoDB按照页面(Page)来组织数据,每个页面对应B+树的一个节点。其中,叶子结点保存每行的完整数据,非叶子节点保存索引信息。

LSM树存储引擎

将对数据的修改增量保存在内存中,达到指定的大小限制后将这些修改操作批量写入磁盘,读取时需要合并磁盘中的历史数据和内存中最近的修改操作。LSM树的优势是有效规避磁盘随机写入问题,但读取时可能需要访问更多的磁盘文件。

6问题

  1. ESSD的三副本是否在同一个机架上?
  2. ESSD的增删改读流程
  3. 对ESSD来说什么是垃圾数据,或者说什么样的数据需要GC?


http://www.ppmy.cn/ops/33495.html

相关文章

【软件测试理论001】认识软件测试、测试分类、测试原则

目录 1 认识软件测试 1.1 什么是软件 1.2 什么是软件测试 1.3 软件测试的发展历程 1.4 为什么要进行软件测试 1.5 软件测试职业规划 2 软件测试的分类 2.1 按开发阶段划分 单元测试(Unit Testing) 集成测试(Integration Testing&am…

vue什么是服务端渲染(SSR)

Vue服务端渲染(SSR)在优化SEO方面有着显著的优势,因为它允许搜索引擎直接访问服务器渲染的页面,从而更容易解析页面内容。以下是一些关于如何使用Vue SSR优化SEO的建议: 为每个URL生成静态HTML:Vue SSR允许…

004 验证码注册

文章目录 ResourcesConfig.javaUserController.javaUser.javaUserServiceImpl.javaIUserService.javaMsgUtils.javaServerResult.javaFshopAppApplication.javaServletInitializer.javauser.sqlUserMapper.xmlapplication.yamllogin.htmllogin.jsindex.htmlindex.jspom.xml Res…

【数据结构与算法】力扣 239. 滑动窗口最大值

题干描述 给你一个整数数组 nums,有一个大小为 k **的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入: nums [1,3,-1,-3,5,3…

R语言实战——中国职工平均工资的变化分析——相关与回归分析

链接: R语言学习—1—将数据框中某一列数据改成行名 R语言学习—2—安德鲁斯曲线分析时间序列数据 R语言学习—3—基本操作 R语言学习—4—数据矩阵及R表示 R语言的学习—5—多元数据直观表示 R语言学习—6—多元相关与回归分析 1、源数据 各行业平均工资变化 各地区平均工资…

代码随想录35期Day30-Java

Day30题目 写在前面 五一收假&#xff0c;并且这三道题都是选做&#xff0c;明天看一下吧。 LeetCode332.重新安排行程 &#xff1a;todo LeetCode51. N皇后 class Solution {List<String> path new ArrayList<>();List<List<String>> res new …

windows驱动开发-PNP设备的启动/停止/删除

和PNP相关的IRP非常多&#xff0c;遗憾的是&#xff0c;它们并非都是必需的&#xff0c;所以这里仅仅给出一些常规实现功能的相关讲解&#xff0c;在那之前我们先看一下所有相关的IRP: 注意不会关注基于FDO的子总线的情况&#xff0c;这个最可能得应用是指的是UDE&#xff0c;但…

Spring 原理

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;Spring学习之路&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 Bean的作用域 代码实现 观察Bean的作用域 Bean的生命周期 Spring …