4

複数のサーバー間で Web サイトのユーザー データをシャーディングすることに関心があります。

たとえば、ユーザーは同じ場所からログインします。ただし、ログイン スクリプトは、ユーザー データが存在するサーバーを特定する必要があります。そのため、ログイン スクリプトはマスター レジストリにそのユーザー名を照会し、それがサーバー B にあることを返す場合があります。ログイン スクリプトはサーバー B に接続し、ユーザー名とパスワードを確認します。それは理にかなっていますか?データが存在する場所を解決するために、マスター レジストリのようなものを用意するのは普通ですか?

また、検索しましたが、シャーディングに関するチュートリアル/情報/戦略を見つけることができませんでした。このトピックについて知っているオンライン リソースがある場合は、共有していただければ幸いです。ありがとう!

4

2 に答える 2

8

非常に有益なサイトhttp://highscalability.comを確認してください。読む価値のある投稿:

通常は正しいアプローチに従っていますが、複数のクラスターに対してクエリを実行する必要がある場合、たとえば「友達の最近の投稿」タイプのクエリなど、これは非常に高速になります。

于 2009-06-28T09:09:27.173 に答える
1

考慮すべきオプションの 1 つは、単純なハッシュを使用することです。たとえば、ユーザー名の MD5 ハッシュを取得し、その最後の 8 バイトを long として扱います。その長いモッド(サーバーの数)を取り、それをサーバーにデータを置くようにします。そうすれば、サーバーの順序付きリスト以外の中央レジストリ/構成は必要ありません。

欠点は、サーバーの数を変更すると、すべてのデータを新しい「正しい」場所に移動する必要があることです...

(1 台のマシンがダウンした場合、それらのユーザーがいっぱいになるという問題もあります。何らかの冗長性を考慮する必要があります。)

于 2009-06-28T07:48:18.553 に答える