在线演示制作平台
用户约 20 万 · 作品约 50 万 · 同步 1 秒内 · 协同人数不设上限
背景与结果
在线动画 PPT 制作服务(含桌面独立安装版):思维导图式展示结构 + 电影镜头语言转场 + 海量在线模板。
2020.04 - 2021.07 主开发,之后配合运营维护。7-8 人团队(2 产品 + 1 测试 + 4 前端 + 2 后端)的开发负责人:后端架构设计与主要实现由本人完成(另一名后端配合),同时承担项目管理——制定项目计划、任务拆解、进度把控与每周向上级汇报,保障团队按期交付。
结果数据:用户约 20 万、作品约 50 万;协同同步 1 秒内完成,用户无感;单工程协同人数不设上限。
技术方案
多人在线协同编辑:版本号乐观并发 + Redis 分布式分段锁
- 操作收集:前端收集用户操作记录(编辑行为 + 素材变更)
- 保存时同步:前端携带本地版本号发起同步请求
- 版本校验:版本一致 → 接受提交;不一致 → 前端拉取服务端最新版本覆盖本地,提示用户更新后再编辑(兜底原则:不丢服务端数据)
- 锁优化:工程操作按类型细分,不同类型持不同的 Redis 分布式分段锁——减少同步排队,多实例部署下安全
- 效果:多人编辑不同区域无感同步,同步 1 秒内完成
分段锁的意义:单工程一把大锁时,所有保存请求串行排队;按操作类型分段后,不同类型的操作并行落库,只有同段操作才互斥——协同人数不设上限的前提是锁粒度足够细。
方案定位:这是"保存时同步"的乐观并发模型(非 OT/CRDT 的实时协同模型)——工程数据以服务端为权威版本,版本号挡并发冲突,冲突时以服务端为准更新本地。对演示文档这类非字符级实时编辑的场景,实现复杂度与效果取得了很好的平衡。
素材同步链路
编辑期间服务端为工程开辟临时目录,存放本次新增/修改/删除的文件;同步时仅做 OSS 同桶拷贝——传输成本前置到编辑期,同步动作轻量化,保存接口不做大文件传输。
桌面版与在线版统一接口层
桌面独立安装版与在线版共用同一套后端接口——一套服务支撑双端,鉴权与数据模型对端透明,没有为桌面版单独开发后端。
迭代与取舍
- 分段锁的演进:初版是工程级一把大锁,协同人数一多保存请求排队明显;按操作类型拆分段锁后,锁冲突概率大幅下降——这是整个协同方案里投入产出比最高的一次改进
- 素材同步从"保存时上传"改为"编辑期暂存 + 同桶拷贝":初版保存时才上传素材,大工程保存慢且占带宽;改为编辑期就暂存到服务端临时目录、保存时同桶拷贝(OSS 内部复制不走公网流量),保存耗时与带宽成本都降下来
- 单机部署、分布式实现:部署于阿里云单机,但内部采用 Redis 分布式锁等分布式方案,扩展多机时代码无需改动