2016-07-22 12 views
2

Azure VM上にホストされているAPIマイクロサービスインフラストラクチャがあります。各VMはKestrel上で動作する別々のサイトであるいくつかのAPIをホストします。すべての外部トラフィックは、RPを介して(IIS上で実行されます)マイクロサービス用にAzureロードバランシングを設定するにはどうすればよいですか?

私たちには、外部リクエストを受け入れるように設計されたAPIと、内部APIのみがあります。

内部APIはスケールセットでホストされ、各スケールセットVMはすべての内部APIをホストするレプリカです。スケールセットの前に内部ロードバランサ(ILB)/ VIPがあります。根本的な問題は、同じスケールセットでホストされる他の内部APIを呼び出す内部APIがあることです。理想的には、これらのコールはVIPに送られ(内部DNSを使用して)、VIPはスケールセット内のマシンの1つにルーティングされます。しかし、Azureはこれを許可していないようです...ドキュメントごと:

You cannot access the ILB VIP from the same Virtual Machines that are being load-balanced 

これで、マイクロサービスでどのように設定するのですか?私は3つの方法を見ることができますが、いずれも理想的ではありません。

  1. APIを別のスケールセットに分けてください。 サービスは非常に軽量で、Azure VM を3倍にしたくないので理想的ではありません。
  2. 内部LBを外部LBに変換します(公開するには、 IPアドレスを追加します)。次に、そのLBを自分のネットワークセキュリティ グループ/サブネットに置き、AzureのIP範囲からの呼び出しのみを許可します。私は ここでより多くの待ち時間を予想し、外部にエンドポイントを公開するでしょう どんな方法でも、より多くの攻撃表面領域を作成するだけでなく、より多くの構成が複雑になります
  3. ILBを呼び出す必要がある場合、VMをループバックに設定します。つまり、VMから発信されたすべての要求は、同じVMによって処理される になります。これは、VIPの背後にあるマイクロサービス の目的を破っています。何らかの理由で同じ マシンで内部マイクロサービスがダウンしていて、別のマシンで利用できる可能性があります...原因は です。各サービスごとに個別にILBのヘルスプローブを設定します。 が同じマシンに戻った場合、弾力性は失われます。

他の人がこれにどのように近づいてきたかについての指針はありがたいです。

ありがとうございます!

+0

Azure Service Fabricをご覧ください。 VMのエンドポイントスケーリングにもこの動作を使用し、チャームのように機能します。マイナス点は、現在のところARMを介してのみ動作するということです。 – Ben

答えて

0

あなたの問題はサービス発見に関連していると思います。

ロードバランサは、明らかにそのために設計されていません。 Eureka(AWS以外でも使用可能)などの専用ソフトウェアを検討する必要があります。 サービス発見により、マイクロサービスは、発見された後、互いに直接呼び出されます。

クライアント側の負荷分散ツール(など)も参照してください。

0

@Cdelmas答えはサービスディスカバリで素晴らしいです。

あなたのようなサービスについては、NetflixのZUULプロキシでサーバー側とクライアント側の負荷分散を調べることもできます。レイテンシーとフォールトトレランスのためにユーリカの上にHistrixを使用することもできます。 Netflixはこれに先立って試合に臨んでいる。

GO言語を使用する場合は、Consul.io製品を調べて原因を調べることもできます。これは、サービスの管理を改善するためのスクリプト可能な構成を持ち、高度なセキュリティ構成とノンレストエンドポイントの使用を可能にします。ユーレカもこれを行いますが、設定サーバー(Netflix Archaius、Apache Zookeeper、Spring Cloud Config)、ZUUL/Sidecarを使ったコード化されたセキュリティとサポートアクセスを追加する必要があります。

関連する問題