云平台后端BAM取回思考

#default

背景

当前开发的分析平台,我规划最终文件都储存在S3桶中。为了节省储存费用,我当前的思路是,在整体分析流程,都只采用或者优先采用CRAM,而最终只保留CRAM在桶里。

这样,相对于BAM,预估储存费用约是三分之一。

同时,我计划桶中的CRAM也会在30天后自动销毁或彻底转向冷备。

那么,用户想下载BAM时,有三种方案:

  1. 后台触发CRAM转换BAM任务,转换成功后,再推送S3下载链接,同时该BAM只保留7天
  2. 直接向用户提供下载器,该下载器安装后,会在下载前先检测有没有对应的参考基因组存在,如没有,先下载参考基因组,然后再下载CRAM,最后在用户本地电脑进行转换
  3. 不提供任何的CRAM和BAM文件下载

IGV复核的问题。显然,用户会存在IGV复核这个需求,我们之前给定的30天时间,就是希望用户可以在这30天内完成样本的复核。但是,往往存在超出这个时间的复核需求,我的理解是,这是一个潜在的收费点,即高级订阅可以有更长的CRAM存留时间,而普通用户只能重复分析了。

有另外一个想法,可以在分析完成后,即对SNV、InDel、Fusion等分析结果进行位点提取,然后构建出突变位点前后的一个区域,提取出一个复核用的小型CRAM,这样的一个CRAM文件,甚至可能只有一百多兆,应可永久保存(我觉得不好,因为日积月累,都是成本)。

方案对比分析

方案1:后台转换 + 临时存储

优点:

  • 用户体验最好,无需安装任何工具
  • 技术门槛低,适合所有用户群体
  • 可控性强,转换失败可及时处理

缺点:

  • 需要额外的计算资源(EC2/Lambda)
  • 临时存储 BAM 会产生额外的 S3 费用
  • 高并发时可能需要排队
  • 7天后自动删除,用户需要重新申请

成本估算:

  • 单次转换计算成本:~$0.01-0.05(取决于文件大小)
  • 临时存储成本:30GB BAM × 7天 × 0.023/GB/0.023/GB/月 ≈ 0.16
  • 适合场景:临床诊断为主的客户

方案2:客户端下载器 + 本地转换

优点:

  • 零后端计算成本,转换在用户本地完成
  • 零临时存储成本
  • 用户可随时转换,不受时间限制
  • 参考基因组可复用,只需下载一次

缺点:

  • 需要开发跨平台下载器(Windows/macOS/Linux)
  • 用户需要一定技术能力(安装软件、理解命令行)
  • 用户本地需要足够磁盘空间(参考基因组 3GB + CRAM 10GB)
  • 转换速度取决于用户电脑性能
  • 技术支持成本高(各种环境问题)

实现要点:

# 下载器核心逻辑
1. 检测本地是否有参考基因组(~/.cram_ref/hg38.fa)
2. 若无,从 CDN 下载(一次性,3GB)
3. 下载 CRAM 文件(带断点续传)
4. 调用 samtools view -b -T ref.fa -o output.bam input.cram
5. 清理临时文件

适合场景:

  • 具备 Linux 基础的生信分析师
  • 基础科研用户(需要长期保存数据)
  • 对成本敏感的小型团队

方案3:不提供原始数据下载

优点:

  • 成本最低,无任何转换和存储开销
  • 迫使用户依赖平台分析能力
  • 数据安全性最高

缺点:

  • 用户体验极差,可能导致客户流失
  • 无法满足科研用户的二次分析需求
  • 竞争力下降(其他平台都提供下载)

结论: 不推荐,除非是完全封闭的企业内部系统。

IGV 复核的解决方案

核心矛盾

  • 用户需求:随时可能需要回看原始数据(尤其是科研场景)
  • 平台成本:长期存储全量 CRAM 成本高昂

推荐方案:分层存储 + Micro-CRAM

第一层:热数据(0-30天)

  • 完整 CRAM 存储在 S3 Standard
  • 支持 IGV 直接通过预签名 URL 流式读取
  • 用户可随时复核任意区域

第二层:温数据(31-180天)

  • 自动转入 S3 Glacier Instant Retrieval
  • 存储成本降低 68%(0.004/GBvs0.004/GB vs 0.023/GB)
  • 毫秒级取回,IGV 仍可直接访问
  • 适合高级订阅用户

第三层:冷数据(180天+)

  • 生成 Micro-CRAM(仅保留突变位点 ±500bp 区域)
  • 文件大小:100-200MB(压缩比 99%+)
  • 永久保存成本:$0.004/月
  • 满足 90% 的复核需求

Micro-CRAM 生成逻辑

# 从 VCF 提取突变位点,生成 BED 文件
awk '{print $1"\t"$2-500"\t"$2+500}' variants.vcf > hotspots.bed

# 提取指定区域生成 Micro-CRAM
samtools view -T ref.fa -L hotspots.bed -C -o micro.cram full.cram
samtools index micro.cram

# 文件大小对比
# 全量 CRAM: 10GB
# Micro-CRAM: 150MB (仅保留 ~500 个突变位点)

优势:

  • 保留了所有关键位点的原始测序数据
  • IGV 可正常加载和可视化
  • 成本可忽略不计(1000 个样本/年 仅 $48)

局限:

  • 无法查看未标注的区域
  • 不适合需要重新分析全基因组的场景

商业化策略建议

订阅分层设计

基础版(免费/低价)

  • 完整 CRAM 保留 30 天
  • 30 天后自动生成 Micro-CRAM 永久保存
  • 提供客户端下载器(方案2)
  • 适合:个人用户、小型科研团队

专业版

  • 完整 CRAM 保留 180 天(Glacier Instant Retrieval)
  • 后台一键转 BAM 服务(方案1)
  • 优先计算资源
  • 适合:临床诊断机构、中型企业

企业版

  • 完整 CRAM 自定义保留时长(最长 5 年)
  • 专属存储桶 + VPC 直连
  • SLA 保障
  • 适合:大型医院、药企

关键决策因素

客户画像优先:

  1. 临床诊断为主 → 方案1(后台转换)+ 短期存储

    • 特点:报告周期短(7-14天),复核集中在前30天
    • 痛点:不想装软件,要即开即用
  2. 基础科研为主 → 方案2(客户端下载器)+ Micro-CRAM

    • 特点:可能半年后还要重新分析
    • 痛点:预算有限,愿意牺牲便利性换成本
  3. 混合客群 → 分层订阅 + 灵活组合

    • 让用户自己选择适合的方案

技术实现要点

1. S3 生命周期自动化

{
  "Rules": [
    {
      "Id": "CRAM-Lifecycle",
      "Status": "Enabled",
      "Transitions": [
        {
          "Days": 30,
          "StorageClass": "GLACIER_IR"
        }
      ]
    }
  ]
}

2. IGV 流式读取(无需下载)

# 生成预签名 URL(有效期 1 小时)
url = s3_client.generate_presigned_url(
    'get_object',
    Params={'Bucket': 'my-bucket', 'Key': 'sample.cram'},
    ExpiresIn=3600
)
# 用户在 IGV 中直接加载此 URL

3. 后台转换任务(Lambda + ECS)

# 小文件用 Lambda(<10GB)
# 大文件用 ECS Fargate(>10GB)
def convert_cram_to_bam(cram_key):
    subprocess.run([
        'samtools', 'view', '-b',
        '-T', 'ref.fa',
        '-o', 'output.bam',
        cram_key
    ])
    s3.upload_file('output.bam', bucket, f'temp/{bam_key}')
    # 设置 7 天后自动删除

最终建议

推荐组合方案

阶段一(MVP):

  • 采用方案1(后台转换)+ 30天热存储
  • 简单快速,用户体验好
  • 验证客户真实需求

阶段二(优化):

  • 引入 Glacier Instant Retrieval(31-180天)
  • 开发 Micro-CRAM 自动生成流程
  • 降低 70% 长期存储成本

阶段三(差异化):

  • 开发客户端下载器(可选)
  • 推出分层订阅
  • 根据客户反馈调整策略

成本对比(1000 样本/年)

方案 月存储成本 年计算成本 总成本
全 BAM 永久保存 $690 $0 $8,280
全 CRAM 永久保存 $230 $0 $2,760
CRAM 30天 + Micro 23+23 + 4 $120 $444
CRAM 180天 + Micro 46+46 + 4 $120 $720

结论: 采用"30天热存储 + Micro-CRAM"可节省 94.6% 的成本。

用户体验保障

无论选择哪种方案,必须做到:

  1. 透明告知:清楚说明数据保留策略
  2. 提前提醒:数据即将转冷前 7 天邮件通知
  3. 一键恢复:Glacier 数据可付费快速恢复
  4. 文档完善:客户端工具提供图文教程
  5. 技术支持:7×24 小时响应

核心思路: 不是"省钱 vs 体验"的二选一,而是通过技术手段(CRAM + 分层存储 + Micro-CRAM)实现"省钱且体验好"。