Apache-2.2

兩個 Windows Azure 託管服務之間的性能下降

  • July 12, 2012

我們有一個 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.';

?>

當我們從數據庫機器內部訪問這個腳本時(主機 = localhost),那麼這個腳本需要不到一秒鐘的時間來完成(通常是 +-0.7 秒)。

但是,當我們嘗試從我們的Web 應用程序機器訪問這個腳本到我們的數據庫機器(主機 = IPofDataBaseMachine)時,這個腳本需要超過 5 秒才能完成!

當一個服務試圖從另一個服務接收資訊時,Azure 似乎出現了問題(只有當我們從位於 Web 應用程序服務上的 PHP 腳本查詢數據庫時才會出現性能低下的問題)。

我們還沒有找到任何關於它的文件,我想問一下你們中是否有人遇到過類似的問題,知道什麼會導致這種性能問題。

謝謝

如果我們假設虛擬機之間存在網路延遲(例如 1 毫秒),那麼您的 4000 次到數據庫的往返很容易加起來幾秒鐘。這並不罕見。

您可以查看不同的部落格(例如此處),了解其他人在 Azure 延遲方面的體驗。

引用自:https://serverfault.com/questions/407135