# dsminio **Repository Path**: shenmidekai/dsminio ## Basic Information - **Project Name**: dsminio - **Description**: 分布式OSS存储系统 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 2 - **Created**: 2020-10-23 - **Last Updated**: 2024-01-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Getting Started ### Reference Documentation For further reference, please consider the following sections: * [Official Apache Maven documentation](https://maven.apache.org/guides/index.html) * [Spring Boot Maven Plugin Reference Guide](https://docs.spring.io/spring-boot/docs/2.3.4.RELEASE/maven-plugin/reference/html/) * [Create an OCI image](https://docs.spring.io/spring-boot/docs/2.3.4.RELEASE/maven-plugin/reference/html/#build-image) * [Spring Web](https://docs.spring.io/spring-boot/docs/2.3.4.RELEASE/reference/htmlsingle/#boot-features-developing-web-applications) * [Spring Boot DevTools](https://docs.spring.io/spring-boot/docs/2.3.4.RELEASE/reference/htmlsingle/#using-boot-devtools) ### Guides The following guides illustrate how to use some features concretely: * [Building a RESTful Web Service](https://spring.io/guides/gs/rest-service/) * [Serving Web Content with Spring MVC](https://spring.io/guides/gs/serving-web-content/) * [Building REST services with Spring](https://spring.io/guides/tutorials/bookmarks/) ##分布式OSS文件存储服务 ### 项目介绍 ##### * 传统Web应用中所有的功能部署在一起,图片、文件也在一台服务器;应用微服务架构后,服务之间的图片共享通过FTP+Nginx静态资源的方式进行访问,文件共享通过nfs磁盘挂载的方式进行访问,无论是单体架构还是微服务架构下的应用都存在大量图片、文件读写操作,但是昂贵的磁盘空间、高性能服务器无疑增加了运营成本。 * 所以我们希望文件服务也能微服务、独立化,这样既能降低运营成本,又能对文件进行统一的管理和维护,所以搭建独立的文件服务是解决文件共享、释放业务系统压力的最优选择。于是便诞生了dsminio分布式文件系统简称OSS(Object Storage Service),提供的海量、安全、低成本、高可靠的云存储服务。它具有与平台无关的RESTful API接口,能够提供数据可靠性和服务可用性。 文件服务的意义 随着互联网图片、视频时代的到来,对文件的处理成为各个业务系统面临的巨大挑战,没有文件服务器之前,系统之间处理图片的方式大相径庭:FTP、NFS、数据库存储等等,虽然都实现了对文件的存储、访问,但是系统之间很难达到文件共享,所以文件服务可以形成一个统一的访问标准,降低各个系统之间的互相依赖,提高开发效率、释放业务系统压力,所以文件服务的意义如下: * 降低WEB服务器压力 * 分担业务服务器的I0、流程负载,将耗费资源的文件访问、读写操作分离到文件服务器,可以提高服务器的性能和稳定性,降低WEB服务器成本。 * 独立服务易扩展 * 文件服务像微服务架构独立化,可以有针对性的进行配置提高性能;独立域名让图片管理、CDN缓存文件更方便,随时扩展文件服务器数量,即不影响业务又能增加文件服务器并发访问。 * 统一访问格式 * 开发者无需关心存储路径、存储介质、文件备份等,丰富的API帮助系统快速存储、共享文件,提高项目开发速度。 * 安全认证 文件服务对资源访问可以增加认证、权限等安全措施,防止服务器资源被盗用,有效的隔离了数据访问。 * 文件服务基本概念 为便于更好的理解对象存储OSS,需要了解对象存储中的几个概念。 * 对象/文件(Object) 对象是OSS存储数据的基本单元,也被称为OSS的文件。对象由元信息(Object Meta),用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的Key来标识。对象元信息是一个键值对,表示了对象的一些属性,比如最后修改时间、大小等信息,同时用户也可以在元信息中存储一些自定义的信息。对象的生命周期是从上传成功到被删除为止。在整个生命周期内,对象信息不可变更。重复上传同名的对象会覆盖之前的对象,因此,OSS 不支持修改文件的部分内容等操作。 * 存储空间(Bucket) 存储空间是用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。可以设置和修改存储空间属性用来控制地域、访问权限、生命周期等,这些属性设置直接作用于该存储空间内所有对象,因此可以通过灵活创建不同的存储空间来完成不同的管理功能。 * 同一个存储空间的内部是扁平的,没有文件系统的目录等概念,所有的对象都直接隶属于其对应的存储空间。 每个用户可以拥有多个存储空间。 * 存储空间的名称在 OSS 范围内必须是全局唯一的,一旦创建之后无法修改名称。 存储空间内部的对象数目没有限制。 * 访问密钥(AppKey & AppSecret) AppKey代表应用身份,AppSecret即应用密钥,用于生成签名认证,请求文件服务时必须要传递appkey和签名生产的token,网关根据请求验证请求的合法性性和时效性。 ###文件服务的功能 * 应用场景|功能描述 #上传文件|创建存储空间后,您可以上传任意文件到该存储空间| |搜索文件|可以在存储空间中搜索文件或文件夹| |查看或下载文件|通过文件 URL 查看或者下载文件| |删除文件或文件夹|删除单个或者多个文件/文件夹,还可以删除分片上传产生的碎片,节省存储空间| |访问权限|可以通过应用授权和桶授权的方式,授予存储空间和对象访问权限的访问策略| |访问信息|自动记录对OSS资源的详细访问信息| |防盗链|防止OSS上的数据被其他人盗用,设置防盗链| |监控服务|预警OSS服务使用情况的实时信息,如基本的系统运行状态和性能| |API和SDK|OSS 提供 RESTful API和SDK进行二次开发 #### dsminio 使用了SpringCloud技术栈,使用一致性HASH算法和虚拟节点原理实现文件的分发存储问题 根据每个文件的MD5等信息绑定服务器标识进行动态文件分发。 #### 注册登录 用户虚拟空间分配 #### 使用Redis实现文件断点续传 大文件分片上传 大文件秒传,work组件会时实的进行文件碎片整理和统计 #### 前端使用百度的UE进行文件切片上传保证速度 每个分片进行并发上传 提升效率 #### 使用Netty实现 存储节点跟节点间的数据互相同步 保证数据可用性 #### 进行文件访问统计,热点文件统计,存储节点文件大小计算 #### 数据鉴权 实现防盗链 分享秘钥,分享文件过期时间限制 #### 单点登录 实现分布式登录中心 一节点登录多节点共享 #### 使用Netty实现静态服务器资源访问 #### oss-work实现文件访问时的 剪切,旋转,压缩,缩放,灰白等基本文件操作、 #### 后台管理可以动态的添加节点 删除节点 实现水平扩容 ####........ ##模块介绍 #### oss-api-service 接口服务模块 #### oss-storage-service核心存储模块 #### oss-work-service 核心访问模块Netty实现 #### oss-common-utils 统用的服务(加密 文件HASH环指纹计算) #### oss-config-infos 分布式文件本地目录 #### oss-config-server 分布式文件配置中心 #### oss-eureka-server 注册中心 #### oss-feign-service 分布式调用服务 #### oss-gateway-service 服务网关 #### oss-monitor-service 监控 #### oss-oauth-service 分布式单点登录 #### oss-spring-admin 服务管理后台 ![avatar](https://systemimgs.oss-cn-hangzhou.aliyuncs.com/other/KL%5B8F5S%7B5%25%7D%5DV0%256ZZ_GDSP.png) ### 基本流程图 ![avatar](https://systemimgs.oss-cn-hangzhou.aliyuncs.com/other/%5DEBO2RRQ%40WCB_BH%5D%5B%40D%60%60SG.png)