借助 VS Code 和 Azure,使用 Surface Go 开发速度提高 10 倍
作为开发者,我们始终追求最高效的开发环境,这通常意味着需要购买高端笔记本电脑。本文将介绍如何结合使用 VS Code 和 Azure 进行远程开发,以更低的成本提供更优质的开发环境。
我相信这对咨询公司和自由职业者来说是一场革命,并且可能会改变我们未来的工作方式。
但让我们从一个故事开始吧!
Surface Go,对于开发人员来说是一款很棒的机器吗?
我目前购买了一台Surface Go供个人使用。这发生在我加入微软之前,实际上与我的工作完全无关。我购买的理由如下:
- 它非常轻巧
- 它非常便宜,亚马逊上总是有折扣,你可以花不到 500 美元买到
- 它搭载 Windows 10 及其应用程序商店,包括 Netflix(对于有孩子的人来说,这是一款必备应用,因为我们都知道离线的“Paw Patrol”剧集在旅行时非常有用)
- 它有一个 UBS-C 端口,所以我可以直接将它插入我用于工作的显示器(Dell UltraSharp 27 - U2719DC),一切开箱即用
非常重要的一点: Surface Go 有两个版本,请使用高端版本。这样不仅拥有双倍的内存和磁盘空间,而且还拥有速度更快的固态硬盘。
当然,作为一名开发人员,我也使用它来编码,所以问题是:它对于编码有多好?
我的开发设置
我使用超棒的Chocolatey包管理器设置了所有内容,包括:
- 采用OpenJDK JDK发行版。
- NodeJS。
- Cmder终端模拟器。
- Visual Studio Code Insiders提供 VS Studio Code 的每日构建,是撰写本文时访问 Visual Studio Code 远程扩展的方式。
初始性能数据
作为JHipster 项目的负责人,我当然会使用 JHipster 应用程序进行这些性能测试,但这里并没有什么真正特定于 JHipster 的内容,因此对于任何 Java 进程,甚至任何使用大量 CPU、RAM 和磁盘的进程,它们都应该是相同的。
我在https://github.com/jdubois/simple-jhipster-app创建了一个简单的项目,您可以在自己的机器上轻松测试它:
- 克隆项目:
git clone git@github.com:jdubois/simple-jhipster-app.git
- 运行 Maven 包装器:
./mvnw
从性能角度来看,这看起来不太好:
- Maven 运行时间较长
- Spring Boot 启动只需 13.5 秒
让我们看看如何改进这一点!
Surface Go 与 Surface Book
值得庆幸的是,我有一台中档(酷睿 i5)Surface Book 来工作,所以配备该硬件应该会更好,不是吗?
我在这台机器上安装了同样的设置:启动 Spring Boot 应用程序现在只需 12 秒,而不是 13.5 秒!我们所做的操作有点依赖于 CPU,但大多数问题可能与 I/O 有关,而且两个硬件都有相同的内存,而且 SSD 可能也差不多。
因此,从成本角度来看,第一个有趣的教训是:购买价值 500 美元的 Surface Go 是一笔非常划算的交易,因为它的价格仅为 Surface Book 的四分之一,而且重量也只有你背包的四分之一!
使用 VS Code 并删除 Maven
让我们使用Visual Studio Code Insiders打开应用程序,当然还要安装来自 Microsoft 的“Java 扩展包”。
由于 Spring Boot 应用程序也是普通的“主” Java 类,因此只需运行main
类中的方法即可运行应用程序SimpleApp
。这比运行 Maven 更简单,速度也更快。而且,您还可以一键调试应用程序!
我们现在正在获得 Maven 启动时间,但应用程序仍然需要 13.5 秒才能启动。
使用 VS Studio Code 远程开发
再次打开Visual Studio Code Insiders,并安装来自 Microsoft 的“远程开发”扩展。
这将允许我们在Azure提供的 SSH 机器上工作。
让我们在 Azure 上创建虚拟机:
- 转到Azure 门户。
- 创建一个新的虚拟机。
- 在撰写本文时,选择默认机器类型 D2Sv3。每小时费用为 0.1120 美元。
- 在第一个屏幕上添加您的公钥,在网络屏幕中,不要忘记在
Select inbound ports
下拉列表中打开 SSH 端口。 - 保留所有其他选项的默认设置,然后创建机器。
创建好机器后,我们来配置一下常用的工作环境。我个人有自己的安装脚本,当然你也可以重复使用:
- 该脚本可在https://github.com/jdubois/jdubois-configuration/blob/master/install.sh上找到。
- 使用 SSH 登录到您的新 Azure 虚拟机:(
ssh username@machine-ip
请注意,您可以在 Azure 门户的“概述”页面上找到您机器的 IP 地址),并成为 root 用户:sudo su
- 登录后,以 root 身份运行我的安装脚本:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/jdubois/jdubois-configuration/master/install.sh)"
恭喜,您的 Azure 机器已准备就绪!
让我们回到 VS Code 并连接到它。由于我们将经常使用这个 SSH 连接,我建议您.ssh/config
在主文件夹中创建一个文件,其设置类似于以下内容:
Host jdubois-azure
HostName 52.232.60.209
User julien
连接到 Azure 虚拟机后:
- 使用扩展管理选项卡再次安装来自 Microsoft 的“Java 扩展包”,但这次是在远程 SSH 主机上。
- 使用命令面板对我们的示例应用程序进行 Git 克隆
https://github.com/jdubois/simple-jhipster-app.git
。 SimpleApp
像以前一样上课。
结果,我们的应用程序现在启动只需 10.3 秒!这比我们的 Surface Go 好一点,但显然默认虚拟机对我们来说不是最佳选择。
请注意,如果您想在http://localhost:8080上本地访问您的应用程序,“远程开发”选项卡为您提供了一个图形实用程序来创建 SSH 隧道。
使用更好的机器进行测试并优化价格
由于我们正在使用虚拟机,因此我们可以做一些非常有趣的事情来优化成本和性能:
- 这些机器应该只在你使用时运行,所以你应该在工作时打开和关闭它们,就像普通电脑一样!请注意,Azure 门户上有一个“自动关机”菜单,最好在晚上或周末自动关闭机器,以防你忘记关机。
- 有一个“大小”菜单,允许您更改正在使用的机器类型,以便根据您期望的成本和性能进行调整。遗憾的是,此功能并不适用于所有机器:它们需要位于同一地区,并且属于同一系列。
让我们再次运行测试,看看我们的应用程序能达到的最佳性能,并计算其每日相关成本(我们假设您每天工作 10 小时,每年工作 240 天)。以下是使用看起来最有希望的机器得出的结果及其相关成本(针对“西欧”地区):
机器类型 | 应用程序启动时间 | 每日费用(10小时) | 每年费用(240天) |
---|---|---|---|
D2S v3(默认) | 10.3秒 | 1.20 | 288 |
F2s v2 | 5.8秒 | 0.97 | 233 |
F4s v2 | 4.0秒 | 1.94 | 466 |
F8s v2 | 3.4秒 | 3.88 | 931 |
H8 | 2.9秒 | 10.32 | 2,467 |
H8促销 | 2.9秒 | 6.20 | 1,488 |
让我们研究一下这些数字:
- 默认机器(D2S v2)不是很有趣:它比 Surface Go 快 30%,所以它真的不值得这个价钱和麻烦。
- “F”系列机器是 Azure 上的“计算优化”机器。从“F4”开始,它们还可以访问高级 SSD 和加速网络,因此升级后获得的不仅仅是 CPU 性能。
- “H”系列机器代表“高性能计算”,因此它们的CPU性能比“F”系列机器更好。然而,它们的价格要高得多,而且正如我们之前所见,我们对CPU的依赖程度并不高。目前部分H系列机器正在推出“促销”活动,这使得它们的价格更具吸引力,因此它们可以成为“F”系列机器的一个不错的替代方案。
因此,“F”系列机器确实最划算。我个人会选择 F4s v2 或 F8s v2,并使用“调整大小”功能根据需要进行切换。由于我订阅了 MSDN,每月有 130 美元的 Azure 积分,所以即使是 H8 促销版也能用!
结论和想法
显然,在“F”类机器上运行我们的应用程序比在 Surface Go 上运行速度快得多,而且价格合理。此外,我们还可以“调整大小”和关闭这些机器,以适应我们所需的成本和性能。
对于咨询公司和自由职业者来说,我相信这里有一个非常有吸引力的替代品,可以替代目前每个人都购买的售价 2,500 美元的 Macbook Pro:
- 前期成本非常便宜(约 500 美元),因此购买一台并不像购买 MacBook Pro 那样是一个重大决定。
- 这是我们对云计算进行的通常的 CAPEX 与 OPEX 计算:作为一名顾问,我宁愿在创业时不花那 2,500 美元,而是根据我的计费工作每天花几美元。
- 我相信每天的那几美元可以向客户收取费用:这并不花费太多(与顾问收取的时间费用相比!),为人员入职赢得了时间,并提供了更好的安全性(代码不会被复制到每个人的笔记本电脑上)。