Floci(LocalStack 替代)存储模式:为每个服务选择合适的权衡(且永不付费)

发布: (2026年5月4日 GMT+8 03:29)
5 分钟阅读
原文: Dev.to

Source: Dev.to

概述

docker compose down 之后仍然保留的状态是那种你平时不会考虑的东西——直到你的测试套件需要它,你的本地开发需要它,而你的 CI 流水线绝对不需要它。
Floci 提供四种存储模式(全部免费,全部内置),并支持每个服务的覆盖,让你为工作挑选合适的权衡。

存储模式

Mode是否在重启后保留写入行为最佳适用场景
memory纯内存持续集成、单元测试、短暂的集成测试
hybrid异步刷新至磁盘本地开发(最佳选择)
persistent每次更改同步写入“不要丢失我的最后一次写入”工作流
wal仅追加日志 + 合并压缩高吞吐量且需要持久性的工作负载

您可以设置全局默认值,并在需要不同行为的服务中进行覆盖。

配置示例

Memory(默认) – 适用于 CI

# docker-compose.yml
services:
  floci:
    image: floci/floci:latest
    ports:
      - "4566:4566"
    environment:
      FLOCI_STORAGE_MODE: memory

所有数据都保存在 RAM 中。容器重启会清空所有内容。写入速度最快,资源占用最小。

Hybrid – 本地开发

# docker-compose.yml
services:
  floci:
    image: floci/floci:latest
    ports:
      - "4566:4566"
    volumes:
      - ./data:/app/data
    environment:
      FLOCI_STORAGE_MODE: hybrid

读取和写入首先命中内存;后台会每约 5 秒将数据刷新到磁盘。docker‑compose down 不会删除已预置的测试数据。

Persistent – 当丢失最后一次写入会造成损失时

# docker-compose.yml
services:
  floci:
    image: floci/floci:latest
    ports:
      - "4566:4566"
    volumes:
      - ./data:/app/data
    environment:
      FLOCI_STORAGE_MODE: persistent

每一次变更在响应前都会同步到磁盘。写入速度较慢,但确认的数据真正保存在磁盘上——即使 Docker 强制终止容器也不例外。

WAL – 高写入负载且仍需持久性

# docker-compose.yml
services:
  floci:
    image: floci/floci:latest
    ports: ["4566:4566"]
    volumes:
      - ./data:/app/data
    environment:
      FLOCI_STORAGE_MODE: wal
      FLOCI_STORAGE_WAL_COMPACTION_INTERVAL_MS: 30000

变更首先写入追加日志(append‑only log),并定期进行压缩。这样既能获得持久性,又避免了持久模式下随机写入的开销。

全局默认设置与每个服务的覆盖

# docker-compose.yml
services:
  floci:
    image: floci/floci:latest
    ports:
      - "4566:4566"
    volumes:
      - ./data:/app/data
    environment:
      FLOCI_STORAGE_MODE: memory                          # everything is ephemeral by default
      FLOCI_STORAGE_SERVICES_DYNAMODB_MODE: persistent    # keep DynamoDB on disk
      FLOCI_STORAGE_SERVICES_S3_MODE: hybrid               # keep S3 buckets across restarts

整体测试快速,但在重启后仍保留已初始化的 DynamoDB 表和 S3 存储桶。

与 LocalStack (Pro) 的比较

特性LocalStack (Pro)Floci
成本付费版免费,MIT‑许可证
粒度全局开/关四种模式,按服务覆盖
写入策略快照(时间点)同步、异步或 WAL —— 由你选择
快照期间服务被锁定,请求被阻塞无锁定,写入永不暂停
跨版本快照在不同版本之间可能失效纯磁盘格式
实现Python pickle 序列化原生,每个服务各自的格式

锁定机制是大多数人没有预料到的部分。LocalStack 的快照机制会在服务被保存期间阻塞请求——在关机时可以接受,但在测试中途会让人感到意外。Floci 从不暂停写入;持久性来源于所选的存储模式,而不是冻结后转储。

典型设置

CI

services:
  floci:
    image: floci/floci:latest
    ports:
      - "4566:4566"
    environment:
      FLOCI_STORAGE_MODE: memory

本地开发

services:
  floci:
    image: floci/floci:latest
    ports:
      - "4566:4566"
    volumes:
      - ./data:/app/data
    environment:
      FLOCI_STORAGE_MODE: hybrid

没有身份验证令牌,没有专业版,没有意外锁定。持久化是基本的开发者易用性功能,而不是仅限企业的特性。

链接

0 浏览
Back to Blog

相关文章

阅读更多 »

让客户交接轻松的文件夹结构

每家机构都有这样一个版本的故事:团队成员离职、客户升级,或者你在替病假的同事顶班——于是你花了20分钟去搜索……