33

Azure Service Fabric の BUILD カンファレンス ビデオを見た後、これが現在のマイクロサービス ベースのアーキテクチャにどのように適合するかを想像しました。ただし、解決方法が完全にはわからないことが 1 つあります。それは、API ゲートウェイ/プロキシです。

REST エンドポイントを公開する Azure Service Fabric 内で N 個のサービスが実行されている、それほど重要ではないマイクロサービス アーキテクチャを考えてみましょう。多くの場合、これらのフラグメント化された API エンドポイントを、コンシューマーが使用できる単一エントリ API にパッケージ化して、サービス ファブリック インスタンスに直接接続することを避ける必要があります。Azure Service Fabric ソリューションはあらゆる点で非常に完成度が高いように見えるので、BUILD の説明で言及された機能の範囲内でこれを自明に解決する方法が見当たらない場合、明らかな何かを見落としているのではないかと思うほどです。

Vulcanのようなサービスは、サービスにルーティングしたいパスをetcdに登録させることで、この問題を解決することを目指しています。これを解決する1つの方法は、他のサービスが自分自身を登録できる別のステートフルWebサービスを作成し、サービス名とそれらにルーティングする必要があるパスを提供することだと思います. ステートフル Web サービスは、その状態に基づいてトラフィックを正しいインスタンスにルーティングできます。ただし、アプリケーションが削除されたときにルートを削除したり、通常はクラスター内にデプロイされたサービスと状態を同期させたりするなど、これは完全に理想的ではないようです。誰かがこれについて何か考えたことはありますか、または Azure Service Fabric 内でこれを解決する方法についてアイデアを持っていますか?

4

8 に答える 8

19

この目的のために、HTTP ゲートウェイ サービスも実装しました。任意の内部プロトコルに対して 1 つの HTTP ゲートウェイを使用できるようにするために、ASP.NET 5 ミドルウェアを使用して HTTP ベースの内部サービス (ASP.NET WebAPI など) のゲートウェイを実装しました。たとえば /service からの要求を、 fabric:/myapp/myservice のような Service Fabric の内部アドレスに、ServicePartitionClientおよび の再試行ロジックを使用してルーティングしCommunicationClientFactoryBaseます。

このミドルウェアはオープンソース化されており、 https ://github.com/c3-ls/ServiceFabric-HttpServiceGateway で見つけることができます 。

プロジェクトの wiki には、さらにいくつかのドキュメントもあります。

于 2016-01-04T14:01:23.833 に答える
13

この機能は、Service Fabric のリリース 5.0 以降、http エンドポイント用に組み込まれています。ドキュメントはhttps://azure.microsoft.com/en-us/documentation/articles/service-fabric-reverseproxy/で入手できます。

于 2016-07-26T16:34:30.583 に答える
3

Azure Service Fabric を使用すると、このシナリオの標準アーキテクチャを簡単に実装できます。クライアントが接続するフロントエンドとしてのゲートウェイ サービスと、フロントエンド ゲートウェイと通信する N 個のバックエンド サービスすべてです。Service Fabric の一部として利用できるいくつかの通信 API スタックがあり、クライアントからサービスへ、およびサービス内での通信を容易にします。Service Fabric が提供する通信 API スタックは、接続の検出、接続、および再試行の詳細を隠して、実際の情報交換に集中できるようにします。Service Fabric 通信 API を使用する場合、サービスは、サービス自体を作成する際の通常の手順を除いて、名前とエンドポイントを特定のルーティング サービスに登録するメカニズムを実装する必要はありません。この記事は、Reliable Actors と Reliable Services のどちらを使用しているか、HTTP や WCF などのプロトコルを使用しているか、またはどちらを使用しているかに応じて、特定のケースに最適な通信 API を決定するのに役立つ出発点を提供します。この記事の最後には、さまざまな通信 API の詳細な記事とチュートリアルへのリンクがあります。Web API サービスでの通信に関するチュートリアルについては、こちらを参照してください。

于 2015-05-02T00:18:20.723 に答える
0

サービスが開始されると、そのエンドポイントがファブリック ネーム サービスに登録されます。Fabric クライアント API を使用して、登録済みサービス名に関連付けられた登録済みエンドポイントをファブリックに要求できます。

はい、あなたのケースを説明したように、接続用の着信 URI を受け入れるゲートウェイがあり、そのパス情報をサービス名ルックアップとして使用して、着信要求と実際の内部の間のプロキシ接続を作成します。エンドポイントの場所。

これを行う方法を示すサンプルを投稿したチームのようです: https://github.com/Azure/servicefabric-samples/tree/master/samples/Services/VS2015/WordCount

于 2015-05-02T01:22:18.533 に答える