1

私は Cloud Foundry の初心者です。Predix が提供する参照アプリケーションに従ってください ( https://www.predix.io/resources/tutorials/tutorial-details.html?tutorial_id=1473&tag=1610&journey=Connect%20devices%20using%20the%20Reference%20App&resources=1592,1473 ,1600 )、アプリケーションはいくつかのモジュールで構成され、各モジュールはマイクロ サービスとして実装されます。

私の質問は、これらのマイクロ サービスがどのように相互に通信するのかということです。ある種の REST 呼び出しを使用しているに違いないことは理解していますが、問題は次のとおりです。

  1. サービス レジストリ: サービス A、B、C があるとします。これらのコンポーネントは、他のコンポーネントの REST URL をどのように「検出」しますか? コンポーネントの URL は、サービスがクラウド ファウンドリにプッシュされた後にのみ認識されるためです。

  2. Cloud Foundry は、サービスの起動時とシャットダウン時にコンポーネントの依存関係をどのように制御しますか? Bが開始されるまでAを開始できないとします。A がシャットダウンされている場合は、B をシャットダウンする必要があります。

4

2 に答える 2

3

ref-app の「アプリケーション」は、いくつかの「アプリ」と Predix の「サービス」で構成されています。アプリは、manifest.yml のエントリを介してサービスにバインドされます。したがって、このバインディングを介して、サービス エンドポイントとその他の重要な構成情報を取得します。アプリがサービスにバインドされている場合、「cf env」コマンドは必要な情報を返します。

プロパティ ファイルにはまだサービス エンドポイント情報が含まれている可能性がありますが、これは時間の経過とともにリファクタリングされる予定です。

ref-app アプリケーションの個々のアプリは、他のアプリケーションのコンポーネントとして使用されるため、個別のマイクロサービスに配置されます。したがって、マイクロサービスのアプローチです。アプリ間でスタートアップの依存関係がある場合、アプリをクラウドにプッシュする CI/CD パイプラインは、これらの依存関係を管理する必要があります。ref-app の依存関係は、単純に明らかなものです。

マイクロサービスの結合が設計されていないことは事実ですが。これが発生する可能性があるいくつかの明白な理由があります。言語と機能。NodeJS 上の Javascript で記述された「フロントエンド」UI マイクロサービスによって使用される Java で記述された「バックエンド」マイクロサービスがある場合、これらは 2 つの別個のアプリとしてプッシュされます。理論的には、UI はバックエンドなしではうまく機能しませんが、実際に既定の JSON を使用してそれを実現する計画があります。それでも、そこにはいくつかの論理的な結合があります。

マイクロサービスから得られる素晴らしい点は、異なるスケーリングが必要になる可能性があることです。クラウド ファウンドリでは、「cf scale」コマンドを使用してそれを非常に簡単に行うことができます。それらは他の複数のマイクロサービスで使用される可能性があるため、新しいスケール要件が作成されます。したがって、何をスケーリングする必要があるか、また機能のリリース サイクルを考慮すると、マイクロサービスを構成するものを決定するのに役立ちます。

たとえば、注文に関しては、アプリケーションで Google マップ API が必要になる場合があるため、アプリケーションを最初に起動し、アプリケーションを 2 番目に起動する必要があると言えます。しかし実際には、マップ API がダウンしている可能性があることをアプリケーションで考慮する必要があります。目標は、依存するマイクロサービスが利用できないときにアプリが適切に動作することです。

「アプリケーション」の「アプリ」は、その名前とクラウドが提供する URL により、それぞれについて認識しています。実際には、さまざまなクラウドやスペースで実行されている参照アプリの多くのコピーがあります。Dev、QA、Integration などで始まります。Dev フロントエンドが QA バックエンド マイクロサービスと通信できるようにすることはできますか?確かに、それは単なる URL です。

前述の etcd (まだ試していません) に加えて、CUPS サービスの「定義」を作成することもできます。これもキーと値のペアのセットです。スペース (dev/qa/stage/prod) に関連付けて、マニフェスト経由でバインドできます。このようにして、環境から小道具を取得します。

于 2016-05-26T04:41:34.743 に答える
1

マイクロサービスが相互に通信する必要がある場合、お気づきのように、通常は REST を使用します。ただし、マイクロサービスの純粋主義者は、そのような依存関係に反対する場合があります。それとは別に、利用可能なエンドポイントをサービス レジストリ ( CloudFoundryの場合は etcd) に公開することで、サービス ディスカバリが有効になります。エンドポイントが登録されると、特定のサービスのさまざまなインスタンスが、POST 操作を使用してレジストリに登録できます。クライアントは、個々のサービス インスタンスのエンド ポイントではなく、公開されたエンド ポイントについてのみ知る必要があります。これが自己登録です。クライアントは、サービス レジストリを検索する ELB などのロード バランサーと通信するか、クライアントがサービス レジストリを認識する必要があります。

(2)については、オーケストレーションや同期などの差し迫った問題を示すサービスの結合セットを設計している場合、マイクロサービス定義ごとにマイクロサービス間にそのような強い依存関係があってはなりません。そのような依存関係が発生した場合は、フォールバックのためにサービス レジストリ、ヘルス チェック、およびサーキット ブレーカーに依存することになります。

于 2016-05-25T05:22:15.580 に答える