我们有一个 Facebook 应用程序,我们正在尝试迁移到 Azure 云托管。我们已打开两个托管服务,一个用于 MySQL 数据库,另一个用于我们的 Web 应用程序。我们在每项服务上都部署了一个虚拟机。
在 Web 应用程序的机器上,我们使用 PHP 5.3.14 和 Apache 2.4.2;在数据库机器上,我们使用 Apache 2.4.2、PHP 5.3.14 和 MySQL 5.5.25。
两台机器都是Windows Server 2008 R2 SP1。
我们有一个性能问题两个 Azure 托管服务之间。为了进行性能测试,我们运行这个简单的 PHP 脚本,该脚本位于数据库机器和 Web 应用程序机器上。这只是查询并返回当前时间 4000 次:
<?php
$serverInfoArray = array("host" => HOST, "user" => USER, "pass" => PASS);
//Create connection to server//
$connectionFB = mysql_connect($serverInfoArray["host"], $serverInfoArray["user"], $serverInfoArray["pass"]);
//Select database//
mysql_select_db(DBNAME_FB_NEW, $connectionFB);
mysql_query("set names utf8", $connectionFB); //For hebrew support//
$time = microtime();
$time = explode(' ', $time);
$time = $time[1] + $time[0];
$start = $time;
for($i=0; $i < 4000; $i++)
{
$result = mysql_query("SELECT NOW()");
$array = mysql_fetch_assoc($result);
echo $array['NOW()'];
echo "<br>";
}
$time = microtime();
$time = explode(' ', $time);
$time = $time[1] + $time[0];
$finish = $time;
$total_time = round(($finish - $start), 4);
echo 'Page generated in '.$total_time.' seconds.';
?>
当我们访问这个脚本时从数据库机器内部进入其自身(主机 = 本地主机)那么该脚本需要不到一秒的时间才能完成(通常为 +-0.7 秒)。
但是,当我们尝试从我们的Web 应用程序机器到我们的数据库机器(主机 = IPofDataBaseMachine),此脚本需要超过 5 秒才能完成!
当一个服务尝试从另一个服务接收信息时,Azure 似乎出现了问题(仅当我们从位于 Web 应用程序服务上的 PHP 脚本查询数据库时才会出现性能低下的情况)。
我们没有找到有关此问题的任何文档,我想问一下你们中是否有人遇到过类似的问题,知道是什么原因导致了这种性能问题。
谢谢
答案1
如果我们假设虚拟机之间存在网络延迟(例如 1ms),那么您与数据库的 4000 次往返很容易累积到几秒钟。这并不罕见。
你可以看看不同的博客(例如这里) 了解其他人在 Azure 方面遇到的延迟情况。