アップロードされたファイルを異なるサーバー間でシャーディングするために、やや軽量のコンシステントハッシュのようなPHP関数を作成することについて少し考えました。
明らかに、rand()はサーバー間でファイルをある程度均等に分散するように機能しますが、ファイルを要求するとき、どのファイルがどのサーバーにあるかは誰にもわかりません...
コンシステントハッシュを作成するための広範なライブラリがいくつかあることは知っていますが、これらがどのように機能し、独自の非常に軽量なライブラリを展開するためにどのようにできるのでしょうか。
注:サーバーが削除されることは考慮していませんが、代わりにさらに多くのサーバーがプールに追加されます。
アップデート:
擬似コードの簡単な行は次のとおりです。
$config['shards'] = array('192.168.1.1, 192.168.1.2');
function shard ($filename) {
$servers = $config['shards'];
// do lookup in some magic way to decide which server to return.
return $appropriateserver;
}
echo shard('filename.jpg'); // returns the appropriate server to distribute the file.