サービスの発見及び方法の基本原理?

まず、サービスの発見は何ですか?

サービスの発見は、その原則は簡単なことではありませんどのように不可解な、ではありません。市場にはあまりにも多くの記事がサービス検出を悪魔化することはより困難になります、読者が巻かれた霧で、私のために、独自の低IQれていない感じ。

サービスプロバイダ、簡単に言えばされているものは、それは、HTTPサーバでAPIサービス、サービスポートとしてIPアドレスを提供します。サービス消費者、それが何であるかは、それは簡単なプロセスである、あなたはいくつかのことを行うために、サービスプロバイダが提供するサービスにアクセスするためにしたいです。HTTPサーバがサービスを提供するサービスプロバイダの両方することができ、消費者はまた、あなたなしで私は自分自身ではないでしょう、サービスに依存している、他のサービスプロバイダーが提供するサービスを必要とすることができます。サービスに一層依存する複雑なサービス。

3つの役割は、サービス発見、サービスプロバイダ、サービスコンシューマとサービスの代理店がありますサービスブローカーは、サービスプロバイダとブリッジのサービス消費者に連絡することです。サービスプロバイダは、このサービスを享受、サービスの消費者は、彼らがそこにサービスブローカーから必要なサービスのアドレスを見つけ、サービスブローカに登録され、独自のサービスアドレスを提供します。サービスブローカは、それぞれが複数のサービスプロバイダに対応し、複数のサービスを提供しています。

ファイル

サービスブローカは辞書で、辞書には、多くのキー/値のキーと値のペアがあり、キーの値は、サービス・プロバイダ・リストのアドレスで、サービス名です。サービス登録辞書の方法は、プラグのものを入れて呼び出して、サービスのルックスは何かを得るために辞書を取得呼び出すことです。

サービスプロバイダノードがハングアップするとき、彼らは消費者がサービスアドレスを取り戻す通知よりも、必要な登録サービスは、時間内に解除することができます。

新しいサービスプロバイダを追加する場合、仲介サービスの要件は、速やかにサービスを消費者に知らせることができ、あなたが新しいサービスを試してみたいのです。

二、Redisのサービス仲介者として

ストアサービス辞書適切に使用されるデータ構造の富があるのRedis。ポート列:各サービス名のために、我々は、IPサービスを格納するためのセットの構造を使用しています。サービスプロバイダーが参加する場合は、サービスがハングアップすると、サービスのアドレスを削除するには、コールSREMコマンドを、サービスアドレスに参加するSADD順序を呼び出します。使用smembersサービスの消費者はすべての命令を取得し、ランダムにランダムサービスアドレスsrandmemember、消費プロセスに指示直接へのアクセスまたは使用をサービスアドレスを選択します。

今度は、懐疑的であるかもしれない、サービスの発見は本当にとても簡単?答えは、このソリューションのトップいくつかの問題を抱えている上、まだ少し恥ずかしがり屋です。

最初の問題は、プロセスがどのように行うには、コールSREMコマンドへのイニシアチブを取ることができない、殺す-9暴力を殺すことであれば、サービスプロバイダのですか?

今回は、存在しないサービスと消費者が知らないアドレスに対して複数の黒色点におけるサービスのリストは、この時間は、サービス機関は黒の仲介となりました。次に、どのようにそれを行うには?

私たちは、紹介サービスがキープアライブ検査機構、およびデータ構造を交換してください。サービスプロバイダは、仲介サービス、サービスブローカーとレポート時間データに記録されているサービスのアドレス値を生き残るためには、ZSET構造を獲得するために5秒ごとに報告する必要があります。仲介サービスZSETデータ構造、サービスのアドレスエントリの後ろに蹴ったレポート深刻な時間を確認するために、10秒ごとに必要です。これは、サービスサービスのアドレスのリストの妥当性を確保するために、リアルタイムに近いことができます。

第二の問題は、サービスリストが変化したときに、消費者に通知する方法です。2つのソリューションがあります。

最初は世論調査、消費者は変更があるごとに数秒かのサービスの一覧を照会する必要があります。サービス多く、素晴らしいサービスの一覧、多くの消費者は、Redisの場合は、いくつかの圧力があるでしょう。今回はそうメカニズムのバージョン番号は、サービスのリストの中に導入し、サービスのリストは、バージョン番号をインクリメントし、変化させながら、各サービスに/サービスのバージョン番号を設定するためのキー値を提供することができます。消費者は、サービスリストの変更が発生するかどうかを知るために、この投票のバージョン番号を変更する必要があります。サービスのリストは比較的安定しているので、頻繁に変更はそうほとんどの圧力をRedisの、厳しいネットワークジッタの場合にのみ発生します。

第二は、の使用であるのPubSubポーリングよりも有意に優れてこのタイムリー。欠点は、各消費者のpubsubは、スレッドと余分なRedisの接続を取るということです。スレッドと接続の無駄を削減するために、我々は、グローバルのpubsub放送バージョン番号で単一の変更を使用します。いわゆるグローバルバージョン番号が行われているサービスの変更の任意のリストで、バージョン番号がインクリメントされます。消費者向けバージョンの変更を受信すると、バージョン番号に依存するサービスの彼らのリストを変更するかどうかをチェックしに行きます。そのようなグローバルバージョン番号も第一の実施形態をポーリングするために使用することができます。

第3の問題は、 Redisのある行う方法のハング場合は、単一のポイントとは?

これは大きな問題です。この問題の存在を、人気のサービス発見システムは分散データベースを使用しているので、それはある飼育係/ etcd /領事と、彼らはマルチノードに分散しており、まだきちんとそれは問題ではない、システムができるノードを切ったように、他の仲介サービス作品。

ファイル

クラスタ全体ハングZKはその後どうなるでしょうか?実際には、すべてのサービスの消費者は、ローカルメモリにサービスの最新リストを維持するサービスブローカクラスタがハングアップしても、あなたはまた、正常に動作していたサービスの現在のリストを使用することができます。

サービス機関としてRedisのは本当にまだ飛んでいないということ?実際には、マスタノードは、ノードが自動的にマスターノードからアップグレードする場合のRedis、センチネルがハングすること、のRedis、センチネルはRedisの問題の単一の点を排除することができるあります。だから、Redisのは、それが可能である乾燥取ります。このアプローチは非常に不評であるが、Redisのサービス・ディスカバリとドライは、確かに非常に簡単です。

第三に、サービスプロバイダは、単にHTTPサービスをしません

上記のサービスプロバイダは、単に実際にはHTTPサーバー、さまざまなサービスです。これは、RPCサービスがUDPサービスすることができことができるデータベースサービスすることができます。

データベースは、MySQL、それがサービスブローカに登録どのようにMySQLのサービスである場合には?ネイティブMySQLは、この機能を提供することはできません。エージェントが一般的には、登録するためのプロキシを提供することです。仲介にプロキシサービスアドレス登録サービスに加えて、だけでなく、時間内に、新たなサービスのアドレス際のMySQLのMySQLがダウンに切り替えることができるようにするためには、MySQLの状態を監視する必要があります。資源を節約し、複数のデータベースを監視するために、それは同時に複数のデータベースを監視することができ、あるいは複数のデータベースの順序で一般的なエージェント。

第四に、サービス構成のリロード

サービス発見は、一般的にのみ登録し、サービスなどの比較的単純な関数のリストを見つけるために使用されます。しかし、近代的なサービス発見システムは、サービスの構成管理機能を統合します。これは、リアルタイムリロードサービスの構成が可能になります。また、非常に単純な原理は、各サービス項目のために、仲介サービスは、単一のキー/値は設定情報サービスを格納するために使用されて保存されます。この設定項目は、バックグラウンドで変更された場合、仲介サービスは、直ちにサーバ構成情報の変更を通知します。例えば、データベース・アドレスの変更、改変および他のビジネスパラメータ。

第五に、サービス管理の背景

サービス管理を容易にするために、サービスディスカバリ一般的な管理の背景には、クラスタサービスのステータスを表示するために経営者のためのサービスを提供します。サービス登録および報告、サービス管理の背景がより詳細なサービス情報を提示する場合は冗長構成情報を提供します。サービス管理の背景も美しい、サービスの依存関係ツリーを示し、組織的に依存するすべてのサービスを持つことができます。

第六に、シンプルなサービスの発見を達成するために

Redisのに基づいて、彼女の暇な時間の小さなシリーズは、簡単なサービス発見システムキャプテンを実装しています。読者はgithubの学習に、このプロジェクトをダウンロードすることができます。私は私ではないビジネスシステムラインのために、読者が理解してほしい、開発を行うクライアントSDKも、それが安定しないことが、サービスディスカバリサーバに加えて、書き込みます。

ファイル

キャプテンは、このプロジェクトでは、私はサービスのRedisサーバは、登録やサービスを検索する外部HTTP APIを提供し、パッケージの層を行うためのサービスを提供しますのpubsub機能は、上記の使用しないでくださいました。

どのように一緒に学ぶために、空き情報がありませんか?

ファイル

ブログ記事複数のプラットフォームからこの記事OpenWriteリリース!

おすすめ

転載: juejin.im/post/5de21cbc6fb9a0718c46016c