0

分散システム設計の問題があります。問題集は、

私たちはサービスに多くのクライアントを持っています。サービスはフォールト トレラントである必要があるため、多くのレプリカが必要になります。クライアントがサービスにアクセスできなくなると、レプリカに切り替わり、他のすべてのクライアントが同じレプリカに切り替わることを通知します。(レプリカのデータ値は完全に同じではなく、すべてのクライアントが常に同じデータ値を返さなければならないため、レプリカ間で負荷を分散することはできません。)

私の現在の設計は、クライアントがサービスに到達できなかった場合に、新しいサービス リーダーを依頼することです。新しいサービス リーダーが確立されると、それを使用するようにすべてのクライアントに通知します。

多くの分散調整設計と同様に、分散グループ マネージャーが必要です。ソリューションで JGroups や Apache Zookeeper を使用することを検討しています。

この問題を解決するために調べるべき既存のレシピやレシピはありますか?

4

2 に答える 2

1

サービスを制御している場合は、サービスにリーダー選挙を行わせます。クライアントは選出されたリーダーの変更を監視し、現在のサービス リーダーにリクエストを送信します。

サービスを制御しない場合は、クライアントにリーダーを選出してもらいます。そのクライアントは、現在のリーダー サービスを指す Zookeeper のノードを維持する責任があります。すべてのクライアントは、このノードを監視して、どのノードがマスターであるかの変更が通知されるようにします。リーダー クライアントは、何らかの方法でリーダー サービスの正常性をチェックできる必要があります。

ただし、すべてのクライアントが常に同じデータ値を返す必要があります

これは Zookeeper やほとんどの分散システムでは不可能です。サービス リーダーの変更がすべてのノードに反映されるまでには、ある程度の時間がかかります (通常は数ミリ秒)。

于 2012-07-27T02:48:50.383 に答える
0

これは飼育係のために既製のようです。クライアント全員に、共通のznode(レプリカ情報が含まれる)にウォッチを設定させることができます。クライアントがznodeを変更すると、他のすべてのクライアントは変更に関する1回限りの通知を受け取ります。

http://zookeeper.apache.org/doc/r3.3.3/zookeeperProgrammers.html#ch_zkWatchesをご覧ください

于 2012-08-03T19:22:41.873 に答える