云原生存储与数据库选型实战:从传统数据库到云原生数据库的演进

云原生存储与数据库选型实战:从传统数据库到云原生数据库的演进

大家好,我是迪哥。随着业务从传统架构向云原生架构演进,存储和数据库的选型变得越来越重要。从 MySQL 到 TiDB,从 Redis 到 Dragonfly,从本地存储到分布式存储,我们经历了多次技术选型的纠结。今天就和大家聊聊云原生时代的存储和数据库选型策略。

存储架构演进

复制代码
传统存储 → 分布式存储 → 云原生存储
  SAN/NAS      Ceph/Gluster     CSI/Cloud Storage

云原生存储方案对比

方案 适用场景 特点
Local PV 单节点状态应用 高性能,低延迟
HostPath 开发测试环境 简单,不推荐生产
NFS 多节点共享 兼容性好,性能一般
Ceph 大规模分布式存储 高可用,弹性伸缩
CSI Volume 云厂商存储 托管服务,省心

CSI 配置示例

yaml 复制代码
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: csi-disk

数据库选型策略

关系型数据库

数据库 适用场景 特点
MySQL 通用场景 成熟稳定,生态完善
PostgreSQL 复杂查询 功能强大,支持JSON
TiDB 分布式事务 水平扩展,强一致
CockroachDB 全球分布式 多活,强一致

NoSQL 数据库

数据库 适用场景 特点
Redis 缓存/会话 高性能,支持多种数据结构
Dragonfly 替代Redis 更高性能,兼容Redis协议
MongoDB 文档存储 灵活schema,水平扩展
Cassandra 时序/日志 高写入,分布式

选型决策树

复制代码
                    ┌─────────────────┐
                    │   需要事务吗?   │
                    └────────┬────────┘
                             │
               ┌─────────────┴─────────────┐
               │                           │
           Yes │                           │ No
               ▼                           ▼
    ┌─────────────────┐          ┌─────────────────┐
    │  需要水平扩展?   │          │  数据结构?      │
    └────────┬────────┘          └────────┬────────┘
             │                           │
      ┌──────┴──────┐          ┌─────────┴─────────┐
      │             │          │                   │
  Yes │             │ No   Key-Value           Document
      ▼             ▼          ▼                   ▼
  TiDB/CRDB    MySQL     Redis/Dragonfly      MongoDB

TiDB 实战配置

yaml 复制代码
apiVersion: pingcap.com/v1alpha1
kind: TidbCluster
metadata:
  name: basic
spec:
  version: v6.5.0
  timezone: UTC
  pvReclaimPolicy: Retain
  discovery: {}
  tikv:
    baseImage: pingcap/tikv
    replicas: 3
    storageClaims:
      - resources:
          requests:
            storage: 100Gi
  tidb:
    baseImage: pingcap/tidb
    replicas: 2
    service:
      type: NodePort

Dragonfly 替代 Redis

yaml 复制代码
# Dragonfly 配置
apiVersion: v1
kind: Deployment
metadata:
  name: dragonfly
spec:
  replicas: 3
  selector:
    matchLabels:
      app: dragonfly
  template:
    spec:
      containers:
        - name: dragonfly
          image: docker.dragonflydb.io/dragonflydb/dragonfly
          args:
            - --dbfilename=dragonfly
            - --dir=/data
            - --bind=0.0.0.0
            - --port=6379
          ports:
            - containerPort: 6379
          volumeMounts:
            - name: data
              mountPath: /data
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: dragonfly-pvc

数据库高可用配置

MySQL 主从复制

yaml 复制代码
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  selector:
    app: mysql
  ports:
    - name: mysql
      port: 3306
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  replicas: 3
  selector:
    matchLabels:
      app: mysql
  serviceName: mysql
  template:
    spec:
      containers:
        - name: mysql
          image: mysql:8.0
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-secret
                  key: password
          ports:
            - containerPort: 3306
          volumeMounts:
            - name: data
              mountPath: /var/lib/mysql
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 50Gi

备份与恢复

Velero 备份配置

yaml 复制代码
apiVersion: velero.io/v1
kind: Schedule
metadata:
  name: daily-backup
spec:
  schedule: "0 0 * * *"
  template:
    includedNamespaces:
      - default
      - prod
    snapshotVolumes: true
    ttl: 720h

最佳实践清单

维度 最佳实践
存储 使用 CSI Volume,避免 HostPath
数据库 关键业务用 TiDB,缓存用 Dragonfly
高可用 至少 3 副本,跨 AZ 部署
备份 定期备份,测试恢复流程
监控 监控存储使用率、IOPS、延迟

说到存储,我家那只叫 Docker 的哈士奇最近学会了"分布式存储"------把玩具藏到家里各个角落,美其名曰"数据备份",这备份策略比我们的 Velero 还强 😂

我是迪哥,我们下期再见!

相关推荐
凝小飞1 小时前
cucumber JAVA 一键部署指南
java·集成测试·模块测试
java修仙传1 小时前
Java 实习日记:断面状态筛选 Bug 修复与对比案例日期过滤优化
java·bug·实习
长谷深风1111 小时前
Java并发编程:线程安全与多线程实战指南【个人八股】
java·安全·线程·进程·juc·并发与并行·上下文切换(性能影响因素)
basketball6161 小时前
C++ 强制类型转换:从 C 风格到 C++ 四大金刚
java·c语言·c++
Dicky-_-zhang2 小时前
容器网络CNI实战:从零搭建网络插件
java·jvm
Mahir082 小时前
Spring 事务深度解析:核心原理与 12 种事务失效场景全解
java·spring·面试·事务失效
SL_staff2 小时前
从Zoom/腾讯会议迁移到私有化会议系统:数据迁移完整方案
java·架构
笨蛋不要掉眼泪2 小时前
Java并发编程:内存可见性与synchronized同步机制
java·开发语言·并发
用户3959924940062 小时前
Java开发者接入大模型API实战:从0到聊天机器人
java