这段时间为了解决本地开发环境资源和网络的问题尝试了下远程开发(IDE 前端在本地,代码后端再远端服务器的模式),实践了一段时间发现远程开发带来的意外好处是可以通过实时烧钱大幅提升任务的紧迫度和开发效率,这个带来的效率提升甚至比之前预想的能从计算资源和网络里抠出来的还多。分享一下这段时间的经验,希望对考虑远程开发的人有帮助。
为什么要远程开发
最开始考虑远程开发的动机主要有下面几个:
- 我这边的本地开发和测试可能需要启动多个 Kubernetes 集群,对 CPU 和内存消耗都比较大,17 年的 MacBook Pro 启动和运行速度都比较慢。
- 生活工作 App 在一个机器磁盘很容易莫秒奇妙的不够,尝试新项目下镜像经常磁盘不足,需要来回扣空间。
- 网络问题,需要各种切代理,叠加 Docker 环境会变得更复杂。
- Mac 下的 Linux 开发还是存在工具和用法的不兼容,并不是那么平滑,很多时候还要起 Linux VM。
- 换新 Mac 貌似只能解决部分 CPU 性能问题(存疑,因为 Docker 需要虚拟化,ARM 在没有特定加速指令下可能性能会更差),其他问题依然存在,而且新 Mac 实在是在抢钱。
- 看了下 GCP 的 Spot 实例,可以按秒计费,算下来买电脑的钱购买好几年的实例了,而且理论上可以解决上面所有的问题。
选择过程
最早开始调研的是 Github 的 CodeSpaces,因为和 Github 在一块的开发体验还是很流畅的,不过我用了多年 Goland 切 VS Code 不太习惯。而且貌似 CodeSpaces 是起的容器开发环境,而我这边有很多再跑容器的测试需求,有时还需要测 eBPF 需要完整的 Linux 环境就只能作罢。
回到 Goland 其实 JetBrains 自己也有类似 CodeSpaces 的 Space 提供全托管的服务,但问题也是类似的感觉提供的是个容器开发环境。AWS 和 GCP 上也提供了 Jetbrains 的半托管服务,会根据你的需求自动启停 VM 运行 IDE 的 Backend。但是看上去用的不是 Spot 实例,而且默认是两小时无交互才会关机。考虑到我这边如果流畅开发可能需要的资源比较多,这个浪费还是比较严重的。
最后我这边选择的方案是用最基础的 GCP 香港的 Spot 实例,几次调整后配置扩到了 8C16G,配合 EIP 固定公网地址,再通过脚本控制开关机来节省费用。Goland 这边下载个 Gateway 的插件,就可以引导你去通过 SSH(要给这个 SSH 设置代理,不然还是有网络不稳定情况)连接到自己的开发机器并做相应配置。这样就完成了远程开发环境的搭建,并且有个完整的 Linux 环境整体的配置都很灵活,还可以根据自己的需求继续扩充配置。
使用体验
该说不说,用上远程开发后,最初的几个问题都解决了,下载资源网络基本无感知,扩容到 8C16G 后代码的编译,起 kind 集群都飞快。
不过最直接的感受并不是以上那些,当启动机器的脚本启动后我这边就感觉点起了一个烧钱的火炉,由于 GCP 的计算资源是按秒计费的,那种感觉真的就是实时烧钱。所以基本上火炉一开就什么都顾不上了,注意里全部集中到了当前的任务上,根本不想分心。这段时间别人找我就根本不想理;要是有什么操作或者思路的错误导致耽误时间了,就想抽自己;之前懒得弄的一些脚本自动化,和一些工具的高效使用技巧,快捷键什么的也都开始研究了。由于这种被烧着工作的感觉过于刺激,有时候一些不想干又必须干的工作,并不是必须远程开发,比如文档什么的,我也会先把钱烧起来,然后就很刺激的完成了。
现在想起来其实想要提高自己的效率,并不一定要很强的自制力去痛苦的逼自己去做不想做的事情,而是要有不断的反馈让自己能尽快的看到效果。这种烧钱的负反馈效果可能比正反馈效果更好,GCP 这种实时烧钱的实时负反馈会刺激的完全不想别的事情了。
有感兴趣的可以也来试下,分享下体验,看看烧钱工作法是不是能提升你的效率。