为什么带有 COS 镜像的 GCE VM 更快?

Why is GCE VM with COS image faster?

我有两个 GCE 实例:一个在容器中有一个 COS 图像 运行ning CentOS 7。我们称它为 VM1。另一个直接在上面有一个 CentOS 7 图像。我们称它为 VM2。他们都 运行 同一个 PHP 应用程序 (Laravel)。

VM1
 Image: COS container with CentOS 7
 Type: n1-standard-1 (1 vCPUj, 3,75 GB)
 Disk: persistent disk 10 GB

VM2
 Image: CentOS 7
 Type: n1-standard-1 (2 vCPUj, 3,75 GB)
 Disk: persistent disk 20 GB

如您所见,VM2 的规格略好于 VM1。所以它应该表现得更好,对吧?

就是说,当我请求一个特定端点时,VM1 响应时间约为 1.6 秒,而 VM2 响应时间约为 10 秒。它慢了大约 10 倍。端点在两个 VM 上做完全相同的事情,它查询 GCP SQL 实例上的数据库,并 returns 结果。没有异常。

所以,它几乎是相同的硬件,相同的来宾 OS 和相同的应用程序。唯一的区别是 VM1 是 运行 通过 Docker 应用程序。

我搜索并尝试调试了很多东西,但不知道发生了什么。也许我误会了什么。

我最好的猜测是 COS 图像进行了一些优化,使应用程序执行速度更快。但我不知道具体是什么。首先我认为这可能是一些磁盘 IO 问题。但是 VM2 上的磁盘利用率还可以。然后我认为它可能是一些 OS 配置,然后我比较了两个 VM 的 sysctl 设置,也有很多差异。但我不确定优化的关键是什么。

我的问题是:为什么会有这种差异?我可以更改什么以使 VM2VM1 一样快?

首先,Container-Optimized OS是基于开源的ChromiumOS,它不是CentOS,基本上是另一个Linux发行版。

话虽如此,您需要了解此 OS 针对 运行ning Docker 个容器进行了优化。

这意味着 Container-Optimized OS 实例预装了 Docker 运行time 和 cloud-init,基本上就是这个 OS包含,因为它是一个简约的容器优化操作系统。

因此,这个 OS 不会浪费 CentOS 拥有的所有可能消耗额外资源的应用程序、库和包的资源。

我在我自己的项目中安装了两个 OS 以检查每个 OS 的磁盘使用情况,Google 中的 Container-Optimized OS 仅使用 740MB , 而 CentOS 消耗 2.1GB。

$ hostnamectl | grep Operating
Operating System: Container-Optimized OS from Google

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       1.2G  740M  482M  61% /
$ hostnamectl | grep Operating
Operating System: CentOS Linux 7 (Core)

$ df -h
/dev/sda2        20G  2.1G   18G  11% /

我无法使用带有 Cent 的小型永久性磁盘OS,最小为 20 GB。

另一方面,容器让您的应用 运行 对主机虚拟机 (VM) 的依赖更少,并且 运行 独立于您部署到同一 VM 实例的其他容器化应用,并且优化使用的资源。

我对 GCP 的经验不多(只有 Azure 和 AWS),但这个问题可能与延迟有关。所以您需要确认您的所有资产是否都在同一地区。

您可以尝试验证每个虚拟机响应您的 BD 的时间。通过这些信息,您将能够知道这种情况是否与延迟有关。

https://cloud.google.com/compute/docs/regions-zones/