架构

image-20240410011658451

组成

  1. 蓝色部分
    • WebIDE 客户端的核心
    • Run VS Code on any machine anywhere and access it in the browser
  2. 绿色部分
    • 将 WebIDE 与 FaaS 结合的核心
  3. 橘色部分
    • Serverless 形态下的必备支撑服务

过程

  1. 用户在 VS Code 的前端页面向后端发出函数在线编辑的请求
    • 服务端,即 FaaSController 在接收到请求并验证权限后,再转给 VS Code Server 容器实例
  2. VS Code Server 容器实例会获取用户代码,然后再加载 FaaS 的资源调度系统
    • 根据目前 Container Pool 中的资源现状,动态扩缩容 WebIDE Pod 资源
  3. VS Code Server 根据用户请求,会调用 Serverless Extension BE
    • 基于此时语言的环境,执行操作,并将执行结果返回给 Client 端

注意

  1. 可以将 Serverless Extension 插件提前集成在 VS Code Server 的镜像中
  2. FaaS Runtime 依据原来函数计算执行的架构来部署即可
    • 可以将各语言运行时打包成一个镜像,然后以动态挂载的方式加载
    • 也可以集成在一个大镜像
  3. 健康检测主要是监听 VS Code Server 的状态
    • 网页版的服务都在服务端运行
    • 界面 Client 和后台 Server 是有心跳关联
    • 心跳检测:按照一定的逻辑判断页面是否不再使用,以便于通知资源调度服务,释放后端的容器实例

功能

  1. 基于一个可视化在线编辑软件的基础
  2. 增加了 FaaS 的插件功能
  3. 通过集成运行时环境依赖弹性伸缩的能力
  4. 提供用户在线编辑调试部署运行函数的能力

Serverless Extension

  1. 云厂商基于 WebIDE,并通过开发插件 Extension 的方式集成了函数平台的常用功能
  2. 云厂商的 VS Code 插件底层实现都集成了自身的 CLISDK
  3. 云厂商的插件放在了 Visual Studio Marketplace
  4. 插件只是一个客户端,具体功能由函数计算平台的 CLI 和 SDK 来实现
    • 端的 UI 层逻辑,集成在 VS Code 中
    • CLI 和 SDK 的集成,用于真正执行相关命令,在服务端容器中执行
  5. 可以将 CLI、SDK、Serverless Extension、VS Code Server 打包在一起

image-20240410220943662

环境依赖

根据编程语言的不同特性,FaaS 需要针对不同语言制作不同的 Runtime

image-20240410221159346

弹性伸缩

  1. 可以通过 KEDA、Prometheus、HPA、Metrics 来支撑 WebIDE 在 Kubernetes 环境下的动态扩缩容
  2. KEDA 可以支持 0-1 之间的切换
  3. 健康监测
    • 在 VS Code Server 中存在两个进程
      • Server 进程负责和前端页面进行交互 - 一般采用 WebSocket 协议
      • Status 管理进程负责状态管理上报
    • WebIDE 前端和 Server 超过一定时间没有响应
      • 不会立马回收 VS Code Server 容器实例,而是会重试连接一定次数
      • 当连接成功,则继续使用该容器实例
      • 如果重试连接失败,则将容器实例标记为不可用状态,定期执行清理 - 0