2012-09-05 34 views
0

我正在考慮爲靜態內容(即圖像)製作一個窮人的應用程序級負載均衡器。我想知道這是否是最好的方式。讓我在代碼解釋:靜態內容的應用程序級負載均衡

樣本HTML頁面:在PHP

<html> 
<body> 

<?=load_image('filename.jpg'); 

</body> 
</html> 

示例代碼:

<?php 

function load_image ($file) 
{ 
    $server = get_current_server(); 
    update_next_server($server);   

    return '<img src="'.$server.$file.'" />'; 
} 

function update_next_server ($server) 
{ 
    $a[1] = 'server1.com'; 
    $a[2] = 'server2.com'; 
    $a[3] = 'server3.com'; 

    $server_id = array_search($server, $a); // example: if $server = 'server2.com' then this will return 2; 

    // increment next server id 
    $server_id = $server_id + 1; 

    // prevent going beyond valid server ids 
    if ($server_id >= 3) 
     $server_id = 1; 

    $db->query('UPDATE tbl_next_server SET server_id = "'.$server_id.'" '); 
} 

function get_current_server() 
{ 
    return $db->query('SELECT server_id FROM tbl_next_server'); 
} 

這基本上呈現相同的圖像存儲在所有三個服務器,它只是旋轉服務器每次查看頁面。

現在我的問題是,這是做到這一點的最好方法還是有更好的方法?

+0

您目前是否有加載問題? – 2012-09-05 10:03:41

+0

@dagon是的,我也希望通過獲取低端的盒子來存儲靜態內容,而不是一個大的昂貴的服務器來節省帶寬資金。 – IMB

回答

0

在你的代碼 - 2查詢圖像之一。這不是太多嗎?

你必須觀察什麼會加載更多 - 數據庫\文件系統\內存\處理器負載?取決於這個解決方案可以通過許多方式提供。例如,如果數據庫過載,您可以嘗試在磁盤上存儲last_server_used值(例如,在會話存儲中)。


P.S.無論如何我看不到任何理由輸出圖像\靜態(例如)與任何PHP代碼。這是nginx工作來輸出靜態內容。所以我強烈建議您嘗試在其他服務器配置文件上寫入相同的平衡器。