1

ジョブを実行するサーバーが複数あるという問題があります。それらはすべて同じAPIからジョブリストを要求し、一意のIDでそれらを識別する必要があります。これにより、どのサーバーがどのジョブを実行していて、ディストリビューションの衝突などが発生していないかがわかります。

私は今、一意のサーバーIDを生成する方法を見つけようとしています。それが永遠に同じままであることが重要ではありません。しかし、それはユニークでなければなりません。

phpinfo()でPHPのビルド時間がわかりましたが、それに関するドキュメントが見つかりませんでした。phpがバイナリパッケージとしてインストールされている場合はどうなりますか?2台のサーバーが同じパッケージを使用している場合はおそらく変更されません。

ある種のマザーボードのシリアル番号か何かがいいと思います。

ええ、そしてそれはポータブルでなければなりません。したがって、shell_execなどを使用してシェルコマンドを呼び出すようなことは避けたいと思います。

外部IPを選択することもできます。しかし、「外部」IPアドレスを確実に判別するにはどうすればよいでしょうか。もっとある場合はどうなりますか?そのnattedの場合はどうなりますか?次に、外部アドレスと内部アドレスの組み合わせが必要になります。

APIを1回リクエストして、外部IPアドレスを指定して組み合わせるように依頼することができます。しかし、これは複雑で大規模なものになります...

これについて何かアドバイスはありますか?

4

3 に答える 3

1

私は彼らにIDを与えると言うでしょう。

サーバーがマスターであり、プロトコルを構築します。サーバーが送信されたクエリで一意のIDを提供していない場合は、この新しいサーバーの新しいレコードを構築し、レコードIDを提供します。次に、ジョブリストクエリのプロトコルは、クライアントサーバーが指定されたIDを再利用する必要があることを示しています。そうしないと、毎回新しいIDを取得します(これは一意です)。

おそらく、Idの数が増えるという問題に直面し、次に各IdにTTLを追加して、クリーンアップを実行します(または、このテーブルをときどき消去します)。プロトコルでは、クライアントサーバーに、指定されたIDが無効になっていることと、新しいIDを指定したことを通知する必要があります。

この「一意のID」管理をクライアントに本当に委任したい場合は、ランダムなuidを生成するようにクライアントに依頼し、衝突しないように捕食します(%は非常に低いですが、発生する可能性がありますが、死ぬ前ではない可能性があります)。あなたはそれをあなたのサイードに保存し、そして増え続けるIdの数も管理しなければならないでしょう。ただし、ワイプアウト後にIDを指定したサーバーを新しいサーバーとして使用するだけで、クライアントに新しいIDを再構築するように依頼する必要はありません。シンプル。

于 2011-02-23T11:47:12.673 に答える
0

uniqid()IDが衝突する可能性は非常にまれな一意のIDを提供します。

于 2011-02-23T11:58:57.427 に答える
0

サーバーの一意のIDとしてMacアドレスを使用できます: https ://stackoverflow.com/a/1420402/318765

于 2011-02-23T12:01:47.410 に答える