快速 Google Cloud SQL

快速 Google Cloud SQL

我一直将机器设置为典型的 LAMP 设置,最近我一直在测试使用 Google Cloud SQL 设置的外部数据库。不过,它对我的​​性能影响似乎有点不合理。

使用本地数据库时,我的网站的平均加载速度为 0.04 秒。通过 SSL 连接到 Cloud SQL 时,加载速度为 0.4 秒。慢了约 10 倍,因此我调查了这个问题,并了解了连接池以及 PHP 为何不支持它,但 ODBC 支持,我的服务器似乎正在使用它,所以这很好,但慢了约 10 倍仍然很糟糕。

我尝试设置 Cloud SQL Proxy,希望这是一个解决方案,但在今天早些时候设置之后,我的加载速度慢了 5 秒,大约慢了 100 倍,所以绝对不是一个解决方案。

我可以做些什么来使用 Google Cloud Platform 获得接近本地数据库的速度,我是否应该使用其他服务来获得更好的性能,或者我是否只需要承受这种性能损失并忍受它?

编辑:
有关系统的更多信息。Web 服务器是 Google Cloud Compute 上的计算实例。计算实例和 SQL 实例都位于使用 g1-small(1 vCPU、1.7 GB 内存)的同一区域中。

看起来延迟约为 1 毫秒。

查询运行时间比较:左侧为本地数据库,右侧为远程数据库

现在,每个查询都是通过网络单独发送的,因此使用多查询可以节省我很多时间,假设 PHP 实际上在单个网络请求中发送所有查询。

答案1

假设您的堆栈的 Linux/Apache/PHP 部分在本地服务器上运行,并且您与云数据库服务器位于同一半球的某个地方……

但首先,让我们回顾一下发生了什么:

  1. 您的 PHP 程序将查询发送到数据库进行执行。
  2. 数据库解析查询。
  3. 数据库执行查询并定位要返回的行。
  4. 数据库从存储(磁盘)读取行并返回它们。
  5. 这些行被传输到 PHP 程序。
  6. PHP 程序处理这些行。

我们假设 Google Cloud SQL 在执行 2、3 和 4 时与在您的硬件上运行 MySQL 一样高效。如果 Cloud SQL 服务器针对慢速存储进行配置,则可能会有差异,特别是在第 4 步,但我不知道,所以我们暂时忽略这个因素。

因此,要分析的因素是 1(将查询发送到数据库)和 5(将行从数据库发送到 PHP 服务器)。

当您在与 Apache/PHP 服务器相同的机器上运行数据库时,发送查询几乎没有任何延迟。行从数据库传输到 PHP 程序是通过同一主机上的 Linux 套接字进行的,因此速度几乎是即时的。

当您将数据库移动到与 Apache/PHP 服务器不同的服务器上,但在同一数据中心内时,1) 查询到达数据库时会产生一些网络延迟(由于数据库规模非常小,因此延迟可以忽略不计),5) 将结果传输回 PHP 需要一些时间。根据返回的行数,步骤 5 可能比数据库位于同一主机上时花费的时间更长。但是,这个“更长”是相对的 - 在服务器之间具有 Gbps 或更高网络的普通数据中心中,这实际上可以忽略不计。

现在,让我们将数据库服务器移至 Google Cloud。您的互联网连接是什么?我们假设与 ISP 建立的是高质量、低延迟的 100Mbps 光纤连接。

PHP 服务器和数据库之间的网络延迟刚刚从 <1ms 变为 >30ms - 延迟增加了 30 倍。实际上,您会看到延迟增加 30 倍以上,因为您传输了更多信息 - 特别是在第 5 步将数据从数据库返回到服务器时。

图表每个程序员都应该知道的延迟数字,在许多网站、文章和书籍中都可以看到,为您提供了良好的稳定思考点。您可以在一些地方找到它,形式多种多样。


有解决方案吗?在不进一步了解您要做什么、解决什么和生产什么的情况下,我会说解决方案只是将计算(PHP)移动到 Google Cloud Platform,它将靠近数据库。

相关内容