为什么带有 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 设置,也有很多差异。但我不确定优化的关键是什么。
我的问题是:为什么会有这种差异?我可以更改什么以使 VM2
与 VM1
一样快?
首先,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 的时间。通过这些信息,您将能够知道这种情况是否与延迟有关。
我有两个 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 设置,也有很多差异。但我不确定优化的关键是什么。
我的问题是:为什么会有这种差异?我可以更改什么以使 VM2
与 VM1
一样快?
首先,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 的时间。通过这些信息,您将能够知道这种情况是否与延迟有关。