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

基本的に、これは同じ画像が3つのサーバーすべてに保存されていることを前提としており、ページが表示されるたびにサーバーを回転させます.

今私の質問は、これがこれを行うための最良の方法ですか、それともより良い方法がありますか?

4

1 に答える 1

0

コード内 - イメージ 1 に対する 2 つのクエリ。多すぎませんか?

データベース\ファイルシステム\メモリ\プロセッサの負荷が何をより多くロードするかを監視する必要があります。このソリューションに応じて、さまざまな方法で提供できます。たとえば、DB が過負荷の場合、last_server_used値をディスク (セッション ストレージなど) に格納しようとすることができます。


PS とにかく、php コードでimages\static(eg) を出力する理由がわかりません。静的コンテンツを出力する仕事です。したがって、他のサーバー構成ファイルに同じバランサーを書き込んでみることを強くお勧めします。nginx

于 2012-09-06T22:42:49.623 に答える