1

我正在考虑为静态内容(即图像)制作一个穷人的应用程序级负载平衡器。我想知道这是否是最好的方法。让我用代码解释一下:

示例 HTML 页面:

<html>
<body>

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

</body>
</html>

PHP中的示例代码:

<?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');
}

基本上,这假设相同的图像存储在所有三个服务器中,并且每次查看页面时它都会旋转服务器。

现在我的问题是,这是最好的方法还是有更好的方法?

4

1 回答 1

0

在您的代码中 - 2 次查询图像一。是不是太多了?

您必须注意负载更多 - 数据库\文件系统\内存\处理器负载?取决于此解决方案可以通过多种方式提供。例如,如果数据库过载,您可以尝试将last_server_used值存储在磁盘上(例如,在会话存储中)。


P.S. Anyway i dont see any reason to output images\static(e.g.) with any php code. It's nginx job to output static content. So i highly recommend you to try write same balancer on other server configuration files.

于 2012-09-06T22:42:49.623 回答