在了解分布式文件存储之前,我们可以先来了解一下什么是分布式存储,分布式存储的系统又分为哪些
在近些年来,随着各大的互联网公司的大数据应用的崛起,分布式系统被广泛的投入到实践当中。互联网分布式系统与传统的分布式系统区别就是互联网的规模大,成本低。在不同的互联网公司中,会根据自己的需求来设置出合适自己的方案,而分布式系统底层起支撑作用就是分布式存储系统。
扩展性:分布式存储可以通过添加机器的方式,使得系统的整体性能得以提升
低成本:低成本:分布式存储系统的自动容错与负载均衡的机制都在机器上
高性能:无论是针对单个服务器还是针对分布式存储群集,分布式存储系统都需要高性能。
易用性:分布式存储系统需要拥有能够对外的接口。
分布式存储系统有好几种,这里主要是对分布式文件系统进行讲解
随着现在的互联网时代,数据量呈爆发式增长,所以基本都离不开文件存储。当文件数据越来越多,是用哪个Tomcat或者是nginx虚拟化的静态资源文件在单一服务器节点内是存不下的,那如果用多个节点来存储呢?这显然也是不利于管理和维护的,所以我们需要一个能够管理多台机器节点上的文件数据系统,这就是分布式文件系统。
其实分布式文件系统是一个运行文件通过网络做为介媒在多台机器节点上分析的文件系统,许多台机器的节点组成位一个整体,为用户提供了更多的分享空间。像:xx网盘,其实它们的本质上就是一个分布式的文件存储系统,虽然是一个分布式文件系统,但是对于用户来说,是不可见的。用户使用的时候,就更像是在本地磁盘一样,分布式的文件系统可以提供备份,所以容错率很高!当出现节点宕机时,但是整体的文件服务并没有停止,还是能够为用户系统服务的,数据也不会丢失。
使用分布式文件系统能够解决什么问题?
1、海量文件数据存储
2、文件数据的高可用
3、读写性能和负载均衡
存储单位从KB、MB、GB、TB、PB到ZB级别的数据
图片、文档、素材静态化页面、长短视频、安装包等等
1、可以在系统中通过复制协议将数据同步到多个存储节点当中,并且确保在多个副本之间的数据一致性,当某个存储节点出现故障,系统能够自动将服务切换到其他的副本中
2、在分布式的存储当中,其实高性能与高可用是互相矛盾的,比如说要设计一个分布式的存储系统,那么它的CAP定理也可以推断出来。
(1)对性能的考虑,记录数据的时候可以先写一份数据到某台机器上,并且立即返回,然后进行异步发起多个数据被封的过程。这种的设计性能最好,但是也存在了容错性的风险,如果加入返回后,没来得及同步就宕机了,那么数据也就丢失了。
(2)如果同时写多个副本的话,每个副本都写成功以后才返回,这样又会导致性能下降,在这个过程中取决于最慢机器的性能。
那我们如何进行选择呢?
根据业务来定,如果要求性能高,偶尔出现文件丢失或者是访问出错则可以使用异步复制
要求高可用,则就使用同步多写的策略,牺牲一定的性能也要保证高可用数据的一致性
MinIO
是在 Apache License v2.0 下发布的对象存储服务器, 学习成本低,安装运维简单,主流语⾔的客户端整合都有, 号称最强的对象存储⽂件服务器,且可以和容器化技术 docker/k8s等结合,社区活跃但不够成熟,业界参考资料较少
官⽹:https://docs.min.io/cn/
FastDFS
一个开源的轻量级分布式文件系统,比较少的客户端可以整合,目前主要是C和Java客户端,在一些互联网创业公司当中采用的比较多,没有官网文档,社区也不怎么活跃。架构+部署结构复杂,出现问题比较难以定位,可以说是fastdfs零件的组装过程,是需要去理解fastDFS的架构设计才能够正确的安装部署
docker容器化部署(体验版~)
docker run -p 9000:9000 \ --name minio_xdclass \ -v /Users/xdclass/Desktop/test:/data \ -e "MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE" \ -e"MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \ minio/minio server /data \ --console-address ":9000" --address ":9090" 注意: 账号:AKIAIOSFODNN7EXAMPLE 密码:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY 记得开放端口9000
上传文件
输入名称,然后创建
默认支持上传、下载、预览、删除