分布式对象存储oss的基本功能(详解oss对象存储作用)

开源推荐:私域流量管理与营销综合解决方案

分布式对象存储oss的基本功能(详解oss对象存储作用)

目录

一、OSS概述

二、OSS相关概念

三、OSS与文件系统的对比

四、常用OSS产品-自建OSS

五、开源推荐

分布式对象存储oss的基本功能(详解oss对象存储作用)

正文

一、概述

对象存储OSS(ObjectStorage Service)

OSS具有与平台无关的RESTfulAPI接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。

二、OSS相关概念

1、存储空间(Bucket)

存储空间是您用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。您可以根据实际需求,创建不同类型的存储空间来存储不同的数据。

2、对象(Object)

对象是OSS存储数据的基本单元,也被称为OSS的文件。对象由元信息(Object Meta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的Key来标识。对象元信息是一组键值对,表示了对象的一些属性,例如最后修改时间、大小等信息,同时您也可以在元信息中存储一些自定义的信息。

3、地域(Region)

4、访问域名(Endpoint)

Endpoint表示OSS对外服务的访问域名。OSS以HTTP RESTful API的形式对外提供服务,当访问不同地域的时候,需要不同的域名。通过内网和外网访问同一个地域所需要的域名也是不同的。

5、访问密钥(AccessKey)

AccessKey简称AK,指的是访问身份验证中用到的AccessKey ID和AccessKey Secret。OSS通过使用AccessKey ID和AccessKeySecret对称加密的方法来验证某个请求的发送者身份。AccessKey ID用于标识用户;AccessKey Secret是用户用于加密签名字符串和OSS用来验证签名字符串的密钥,必须保密。

三、OSS与文件系统的对比

对比项

OSS

文件系统

数据模型

OSS是一个分布式的对象存储服务,提供的是一个Key-Value对形式的对象存储服务。

文件系统是一种典型的树状索引结构。

数据获取

根据Object的名称(Key)唯一的获取该Object的内容。

虽然用户可以使用类似test1/test.jpg的名字,但是这并不表示用户的Object是保存在test1目录下面的。对于OSS来说,test1/test.jpg仅仅只是一个字符串,与example.jpg并没有本质的区别。因此不同名称的Object之间的访问消耗的资源是类似的。

一个名为test1/test.jpg的文件,访问过程需要先访问到test1这个目录,然后再在该目录下查找名为test.jpg的文件。

优势

支持海量的用户并发访问。

支持文件的修改,比如修改指定偏移位置的内容、截断文件尾部等。也支持文件夹的操作,比如重命名目录、删除目录、移动目录等非常容易。

劣势

OSS保存的Object不支持修改(追加写Object需要调用特定的接口,生成的Object也和正常上传的Object类型上有差别)。用户哪怕是仅仅需要修改一个字节也需要重新上传整个Object。

OSS可以通过一些操作来模拟类似文件夹的功能,但是代价非常昂贵。比如重命名目录,希望将test1目录重命名成test2,那么OSS的实际操作是将所有以test1/开头的Object都重新复制成以test2/开头的Object,这是一个非常消耗资源的操作。因此在使用OSS的时候要尽量避免类似的操作。

受限于单个设备的性能。访问越深的目录消耗的资源也越大,操作拥有很多文件的目录也会非常慢。

因此,将OSS映射为文件系统是非常低效的,也是不建议的做法。如果一定要挂载成文件系统的话,建议尽量只做写新文件、删除文件、读取文件这几种操作。使用OSS应该充分发挥其优点,即海量数据处理能力,优先用来存储海量的非结构化数据,比如图片、视频、文档等。

四、常用OSS产品

1、阿里云OSS

https://help.aliyun.com/product/31815.html

2、华为云OBS

https://www.huaweicloud.com/product/obs.html

3、MinIO

http://www.minio.org.cn/

4、自建OSS

MinIO 基于Apache V2 license 100% 开放源代码 。这就意味着 MinIO的客户能够自动的、无限制、自由免费使用和集成MinIO、自由的创新和创造、 自由的去修改、自由的再次发行新的版本和软件。它与Amazon S3云存储服务兼容。使用MinIO构建用于机器学习,分析和应用程序数据工作负载的高性能基础架构。它最适合存储非结构化数据,如照片,视频,日志文件,备份和容器/ VM映像。对象的大小可以从几KB到最大5TB。Minio服务器足够轻,可以与应用程序堆栈捆绑在一起,类似于NodeJS,Redis和MySQL。

1、Docker部署

2、快速部署:docker-compose nginx

docker-compose.yaml

version: ‘3.7’# starts 4 docker containers running minio server instances.# using nginx reverse proxy, load balancing, you can access# it through port 9000.services: minio1: image: minio/minio:RELEASE.2021-06-09T18-51-39Z hostname: minio1 volumes: – data1-1:/data1 – data1-2:/data2 expose: – “9000” environment: MINIO_ROOT_USER: minio MINIO_ROOT_PASSWORD: minio123 command: server http://minio{1…4}/data{1…2} healthcheck: test: [“CMD”, “curl”, “-f”, “http://localhost:9000/minio/health/live”] interval: 30s timeout: 20s retries: 3 minio2: image: minio/minio:RELEASE.2021-06-09T18-51-39Z hostname: minio2 volumes: – data2-1:/data1 – data2-2:/data2 expose: – “9000” environment: MINIO_ROOT_USER: minio MINIO_ROOT_PASSWORD: minio123 command: server http://minio{1…4}/data{1…2} healthcheck: test: [“CMD”, “curl”, “-f”, “http://localhost:9000/minio/health/live”] interval: 30s timeout: 20s retries: 3 minio3: image: minio/minio:RELEASE.2021-06-09T18-51-39Z hostname: minio3 volumes: – data3-1:/data1 – data3-2:/data2 expose: – “9000” environment: MINIO_ROOT_USER: minio MINIO_ROOT_PASSWORD: minio123 command: server http://minio{1…4}/data{1…2} healthcheck: test: [“CMD”, “curl”, “-f”, “http://localhost:9000/minio/health/live”] interval: 30s timeout: 20s retries: 3 minio4: image: minio/minio:RELEASE.2021-06-09T18-51-39Z hostname: minio4 volumes: – data4-1:/data1 – data4-2:/data2 expose: – “9000” environment: MINIO_ROOT_USER: minio MINIO_ROOT_PASSWORD: minio123 command: server http://minio{1…4}/data{1…2} healthcheck: test: [“CMD”, “curl”, “-f”, “http://localhost:9000/minio/health/live”] interval: 30s timeout: 20s retries: 3 nginx: image: nginx:1.19.2-alpine hostname: nginx volumes: – ./nginx.conf:/etc/nginx/nginx.conf:ro ports: – “9000:9000” depends_on: – minio1 – minio2 – minio3 – minio4## By default this config uses default local driver,## For custom volumes replace with volume driver configuration.volumes: data1-1: data1-2: data2-1: data2-2: data3-1: data3-2: data4-1: data4-2:

nginx.conf

user nginx;worker_processes auto;error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;events { worker_connections 4096;}http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘ ‘$status $body_bytes_sent “$http_referer” ‘ ‘”$http_user_agent” “$http_x_forwarded_for”‘; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65;#include/etc/nginx/conf.d/*.conf; upstream minio { server minio1:9000; server minio2:9000; server minio3:9000; server minio4:9000; } server { listen 9000; listen [::]:9000; server_name localhost; # To allow special characters in headers ignore_invalid_headers off; # Allow any size file to be uploaded. # Set to a value such as 1000m; to restrict file size to a specific value client_max_body_size 0; # To disable buffering proxy_buffering off; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 300; # Default is HTTP/1, keepalive is only enabled in HTTP/1.1 proxy_http_version 1.1; proxy_set_header Connection “”;chunked_transfer_encodingoff; proxy_pass http://minio; } }}

五、开源推荐

Spring boot整合Mino客户端实现文件读写

https://gitee.com/shenzhanwang/Spring-minio.git

开源推荐:私域流量管理与营销综合解决方案

发表评论

登录后才能评论