在云的时代,我们已经能够轻松地在阿里云函数计算上,部署一个在线版 VSCode。然而 VSCode 的后端开发体验仍然不如 IntelliJ IDE。虽然市面上已经出现了 Eclipse Che、云效云端开发平台 DevStudio 等支持 IntelliJ 的在线开发平台,但是部署复杂、不够轻量。由此引发思考:能不能把 IntelliJ IDE 也搬上 Serverless?享受 Serverless 即搭即用、按量付费的特性呢?
我是如何使用阿里云的一个或者多个 Serverless 服务实现 Web IDE 服务?
- 通过 projector-server 将 IDE 封装为远程服务。
- IDE 解压后有近 2 GB 的大小,可将 IDE 的依赖(
jbr
、lib
、plugins
)拆到各自的函数层(layer
)中,以降低单次部署需要上传的包大小。 - 编写 Java 程序实现配置同步、代码同步,同步源可选阿里云 OSS。
相比官方给的默认示例,我有什么亮点?
- 不重复造轮子!截至 2022 年 7 月 14 日,Google 搜索 中还未出现成功将 Intellij IDE 部署到 Serverless 函数计算的实践案例。
- IDEA 的 Java 开发体验更好,默认示例使用的 VSCode 难以胜任 Java 等语言开发场景。
- 集成 Serverless Devs CLI 等常用 FC 开发工具,支持快速开发和测试 FC Java runtime 函数。
- 配置同步、代码同步。
我们实现了一个中间件管理浏览器与 Projector Server 之间的连接,用户通过 WebSocket 协议连接中间件,中间件将请求转发给 Projector,中间件可以监控连接,当连接断开时,会触发配置同步、代码同步,此外,每分钟也会定时自动同步,同步过程为打包(tgz)并上传到阿里云 OSS。此外,我们考虑到用户可能需要维护多个项目,所以开发了 workspace,当用户第一次访问时,会自动创建一个 workspace,可以在地址栏看到 workspace id,每个 workspace 都会同步到 OSS 中的一个独立的目录,当用户关闭并重新打开时,会根据地址中的 workspace id 恢复相应的配置和代码,以此来实现多项目管理。
- 多租安全隔离。
在 IDEA 中实现多租隔离非常困难,即使前面我们已经为不同的用户分配了不同的 workspace,也无法阻止用户通过 IDE 中的 "Open Folder"、"Terminal" 功能访问其他租户的文件。好在阿里云函数计算的实例是天然支持安全隔离的,当
instanceConcurrency
设为 1 时,一个运行实例只接收一个连接,多个用户访问时,会自动启动新的实例,就不会冲突了。
接下来还要继续实现什么功能?
- TODO: 首屏加载时间过长。受限于 projector 的启动时间长,可以在 projector 启动过程时先返回一个静态 loading 页,页面风格可以参考云效和 GitHub Codespaces,每秒调 status API 询问启动状态,当启动状态为 true 时,再发起真正的 websocket 连接。
您可以体验 demo 站点 额度已经耗尽了,demo 站点已删除,也可以一键部署到自己的阿里云账号。
部署类型请选择“直接部署”,不要选择“通过代码仓库部署”,否则部署不成功。
通过 Cli 部署
需 Linux 环境,需安装 Node.js,按照 Cli 提示一步步操作。
npm i -g @serverless-devs/s
s init idea-webide
cd idea-webide
s deploy
为了防止因无法使用影响评测,下面我提供了视频演示。
bilibili.com/video/BV1md4y1P7ZA
- 该应用部署在阿里云帐号 1064348262863466 下,杭州区域。
- 该应用主要使用了阿里云如下服务:
- 函数计算服务,服务名包括
idea-server
。 - OSS服务,bucket名称是
imaegoo
。
- 函数计算服务,服务名包括
- 该应用的实现代码在当前项目下。