云原生存储对象存储与分布式文件系统大家好我是欧阳瑞Rich Own。今天想和大家聊聊云原生存储这个重要话题。作为一个全栈开发者存储是应用架构中不可或缺的一部分。今天就来分享一下对象存储和分布式文件系统的实战经验。云原生存储概述存储类型对比类型特点适用场景对象存储海量、低成本、高可用图片、视频、备份分布式文件系统POSIX兼容、高性能大数据、AI训练块存储低延迟、高性能数据库、虚拟机核心特性高可用性 → 多副本、自动故障转移 弹性扩展 → 按需扩容 数据安全 → 加密、权限控制 低成本 → 按需付费对象存储AWS S3const AWS require(aws-sdk); const s3 new AWS.S3({ accessKeyId: process.env.AWS_ACCESS_KEY, secretAccessKey: process.env.AWS_SECRET_KEY }); async function uploadFile(file) { const params { Bucket: my-bucket, Key: file.name, Body: file.data, ContentType: file.type, ACL: public-read }; const result await s3.upload(params).promise(); return result.Location; } async function getFile(key) { const params { Bucket: my-bucket, Key: key }; const result await s3.getObject(params).promise(); return result.Body; }Cloudflare R2const { R2 } require(cloudflare/r2); const r2 new R2({ accountId: process.env.CLOUDFLARE_ACCOUNT_ID, apiToken: process.env.CLOUDFLARE_API_TOKEN }); async function uploadToR2(file) { await r2.put(my-bucket, file.name, { data: file.data, contentType: file.type }); }分布式文件系统MinIO# docker-compose.yml version: 3.7 services: minio: image: minio/minio:latest volumes: - ./data:/data ports: - 9000:9000 - 9001:9001 environment: MINIO_ROOT_USER: admin MINIO_ROOT_PASSWORD: password command: server /data --console-address :9001const Minio require(minio); const minioClient new Minio.Client({ endPoint: localhost, port: 9000, useSSL: false, accessKey: admin, secretKey: password }); async function createBucket(name) { const exists await minioClient.bucketExists(name); if (!exists) { await minioClient.makeBucket(name); } }Ceph# ceph-deploy配置 osd: - host: node1 devices: - /dev/sdb - host: node2 devices: - /dev/sdb - host: node3 devices: - /dev/sdb实战案例媒体存储服务class MediaStorage { constructor() { this.s3 new AWS.S3(); this.cloudfront new AWS.CloudFront(); } async uploadMedia(file, type) { // 生成唯一文件名 const fileName ${Date.now()}-${file.name}; // 上传到S3 await this.s3.upload({ Bucket: media-bucket, Key: ${type}/${fileName}, Body: file.data, ContentType: file.type, ACL: private }).promise(); // 生成预签名URL const url this.s3.getSignedUrl(getObject, { Bucket: media-bucket, Key: ${type}/${fileName}, Expires: 3600 }); return url; } async deleteMedia(type, fileName) { await this.s3.deleteObject({ Bucket: media-bucket, Key: ${type}/${fileName} }).promise(); } }最佳实践1. 数据备份// 跨区域复制 const replicationConfig { Role: arn:aws:iam::123456789012:role/s3-replication-role, Rules: [ { Status: Enabled, Prefix: , Destination: { Bucket: arn:aws:s3:::my-bucket-backup, StorageClass: STANDARD_IA } } ] };2. 生命周期管理// 自动归档 const lifecycleConfig { Rules: [ { ID: Archive after 30 days, Prefix: , Status: Enabled, Transitions: [ { Days: 30, StorageClass: STANDARD_IA }, { Days: 365, StorageClass: GLACIER } ], Expiration: { Days: 730 } } ] };总结云原生存储是现代应用架构的重要组成部分。通过选择合适的存储方案可以满足不同场景的需求。我的鬃狮蜥Hash对存储也有自己的理解——它总是把蟋蟀安全地存储在自己的领地这也许就是自然界的对象存储吧如果你对云原生存储有任何问题欢迎留言交流我是欧阳瑞极客之路永无止境技术栈对象存储 · 分布式文件系统 · 云原生