SWE / RE / ML · System Design

Remote Devbox与Cloud IDE:VM生命周期、持久盘与流式日志

控制平面负责分配和回收,工作数据与临时计算实例分开。

题目重点:控制平面负责分配和回收,工作数据与临时计算实例分开。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 按需创建远程开发环境,可能浏览器IDE或SSH,两者入口不同但共享环境控制平面。训练持久workspace、临时VM,任务可在devbox上执行。
  • 用户代码不可信,租户隔离与secret范围必须定义。VM创建失败/取消/长时间空闲都可能发生,不以请求同步等待所有boot阶段为唯一接口。

解题路线

  1. Environment(id,user,image_version,region,state,desired_state,generation,volume_id);POST environment带idempotency key返回creating,控制器按desired state重试provision→attach→boot→ready,不只存一个布尔running。
  2. workspace放持久volume/object snapshot,VM销毁保留workspace按合同回收。同volume不可任意挂多个可写实例,owner lease和storage fencing防两个VM同时写;snapshot一致性需先冻结写或使用文件系统协议。
  3. SSH入口用短期证书/代理授权,browser入口用WebSocket/terminal gateway;连接鉴权与VM生命周期分离。ready前返回进度,断线重连按session/env generation恢复,不能复用已被回收给其他用户的旧host地址。
  4. 执行任务存task/attempt、exit status与日志offset,job在VM内运行但控制平面有持久状态。日志流可实时gateway加持久chunk,restart用offset补读;输入终端需要区分重连和重放,自动重放旧stdin可能执行重复命令。
  5. 容量warm pool降低冷启动但消耗闲置成本,按镜像/区域预测并配tenant quota。idle stop、resume、delete分别影响算力、盘和历史,不把stop当delete;清理孤儿VM/盘需对照generation及最后确认状态。

手动走一遍

create超时重试同key,返回同environment而非第二台收费VM。用户关网页但长测试还在跑:是否idle按任务和连接策略决定,不能只按浏览器连接数回收。控制器创建VM后崩溃,恢复从provider tag/env_id查已有VM并接管,不盲目再创建。

规模与取舍

同时环境E、平均创建延迟L秒、创建率λ,则在途创建约λL;算力按规格×活跃时长,持久盘按workspace数量/大小单计。日志、网络下载及镜像拉取造成独立瓶颈。

易错点与追问

容易失分的边界

  • 工作目录仅在VM临时盘导致回收后数据丢失。
  • API进程保存唯一VM状态,重启后失去资源归属。
  • 旧租户SSH会话在实例重用后仍有效。

继续深挖

  • warm pool与专用VM的安全隔离、启动时间和成本怎样比较?
  • workspace快照用于clone时,权限和secret如何排除或重新绑定?
✓已复制微信号!