前言
设计模式是我们编程道路上绕不开的一环,用好了设计模式能够让代码拥有良好的维护性、可读性以及扩展性,它仿佛就是“优雅”的代名词,各个框架和库也都能见到它的身影。
正是因为它有种种好处,所以很多人在开发时总想将某个设计模式用到项目中来,然而往往会用得比较别扭。其中一部分原因是业务需求并不太符合所用的设计模式,还有一部分原因就是在Web项目中我们对象都是交由Spring框架的Ioc容器来管理,很多设计模式无法直接套用。那么在真正的项目开发中,我们就需要对设计模式做一个灵活的变通,让其能够和框架结合,在实际开发中发挥出真正的优势。
容灾又分为异地容灾和同城容灾
FS作为生产存储支持ebakcup或者第三方备份管理软件的备份
FS的高级特性
双活
hyper metro
远程复制(异步)
hyper replication
可以实现存储层容灾
三、FS的DHT算法
==========
DHT(分布式哈希表,Distrubuted Hash Table)
111 698d51a19d8a121ce581499d7b701668
112 7f6ffaa6bb0b408017b62254211691b5
将十进制的数,转化为2的128次方的数,就可以实现平均切随机
一个存储池对应一个DHT环(逻辑)
读写流程:
1.scsi流交给vbs—>vbs转换scsi流为key-value
2.对key值进行—>hash寻址
目的:将主机下发的IO平均且随机的落到存储池各个OSD对应硬盘上
也就是为了实现****IO的负载均衡
3.经过hash得到一个2的32次方的数值—>模运算–>得到patition
目的:缩减表的尺度,加速查找DHT环
4.查询由MDC维护的映射表记录的是patition和osd的关系patition—>得到osd
目的:解决坏盘或者扩容场景,准确定位patition对应的osd位置
5.osd做key-value到iscsi流的转化,做磁盘的读写操作
四、存储池和卷
=======
存储池是由一组服务器本地硬盘构成,硬盘类型相同、容量相同、参数相同等限制(参考产品文档)
主存类型:SATA机械 SAS机械 SAS-SSD SATA-SSD NVME SSD盘、SSD卡
一块硬盘只能属于一个存储池
一个存储池可以划多个卷(划卷依赖vbs)
一个卷只能属于一个存储,不能跨存储池
卷可以通过scsi挂载给vbs或者iscsi映射给业务主机使用
一个主机可以使用多个卷,多个卷可以来自不同存储池
五、FS的可靠性和安全级别
=============
可靠性
副本机制:
2副本–50% 3副本–33.3%
EC机制: M=2,3,4 N最大22
EC(Erusure code)算法,分布式raid算法,可以跨界点raid
N+M 坏M块硬盘或者M个节点数据不丢失,业务不中断
N是数据分片
M是校验分片
N+M:B 坏M块硬盘或者B=1个节点数据不丢失,业务不中断
22+2保护 高达91%空间利用率
安全级别
FSM配置界面创建存储池仅支持服务器级和机柜级
服务器级安全:数据副本或者EC的数据分片一定不会放在同一个服务器节点内
机柜级安全:数据副本或者EC的数据分片一定不会放在同一个机柜内
机房级安全:数据副本或者EC的数据分片一定不会放在同一个机房内
不同的存储池可配置不同的数据保护方式和安全级别
六、VBS结构
=======
scsi:将内核态VSC模块的scsi流引入VBS用户态
============================
VBP:scsi流转换成key-value
client:key–hash—mod–patition–查io-view–主OSD 走存储网络平面将io流转发至主OSD
VBM:卷和快照生命周期管理操作 创建卷、挂载卷、卸载卷、查询卷、删除卷、创建快照、删除快照、基于快照创建卷等
hearbeat:心跳模块 通过存储平面与MDC交互心跳包 使MDC维持VBS view状态视图
七、OSD结构
=======
RSM:复制协议实现。
SNAP:实现卷与快照的IO功能、磁盘空间的管理。
CACHE:实现cache功能。
AIO:实现异步IO下发到底层SMIO模块和通过调用SMIO接口来监控介质故障。
SMIO:下发到IO到实际的物理介质、监控物理介质故障、获取磁盘信息。
八、FS的IO流程
=========
1)写IO
APP–》OS–》scsi/iscsi—》VSC内核模块接收—》scsi initiator–》scsi target—》VBP(LUN ID/LBA ID/length–>key data–>value)
—》client(key–hash–mod–patition–查io view–主OSD)—》主OSD(key–hash–mod–patition–查patition view–备OSD)–》主OSD一方面下发写IO到本端cache,一方面通过RSM复制IO到备OSD—》主备OSD同步写cache成功–》由主OSD返回VBS写成功(回写),VBS返回APP写成功。
2)读IO
APP–OS–scsi/iscsi—VSC内核模块接收—scsi initiator–scsi target—VBP(LUN ID/LBA ID/length–>key data–>value)—client(key–hash–mod–patition–查io view–主OSD)—主OSD
1、主OSD正常,先读cache,如果cache读命中,返回读成功,如果未读命中,主OSD向主存disk查询读数据。
2、主OSD异常,MDC会检测硬盘异常触发退盘,修改视图(OSD view IO view Patition view),指导VBS引流到备OSD(新主OSD读数据),先读cache,如果cache读命中,返回度成功,如果未读命中,主OSD向主存disk查询读数据。
九、ZK的作用
=======
Zookeeper(简称ZK)分布式服务框架主要用来解决分布式应用中经常遇到的,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等,ZK主要工作包括三项:
MDC主备管理:
MDC采用一主两备部署模式;在MDC模块进程启动后,各个MDC进程会向ZK注册选主,先注册的为主MDC;运行过程中,ZK记录MDC主备信息,并通过心跳机制监控MDC主备健康状况,一旦主MDC进程故障,会触发MDC重先选主。
数据存储
《一线大厂Java面试真题解析+Java核心总结学习笔记+最新全套讲解视频+实战项目源码》开源
Java优秀开源项目:
/public/P7/Java/git
最后
针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。
下面的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新收集的一些大厂的面试真题(都整理成文档,小部分截图)
最新整理电子书
数据存储
《一线大厂Java面试真题解析+Java核心总结学习笔记+最新全套讲解视频+实战项目源码》开源
Java优秀开源项目:
/public/P7/Java/git
最后
针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。
下面的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新收集的一些大厂的面试真题(都整理成文档,小部分截图)
[外链图片转存中…(img-jQtXcXnW-1649342846889)]
最新整理电子书
[外链图片转存中…(img-8wBNwgat-1649342846890)]