17

私は Eureka と Zuul を使用して Spring Cloud を使い始めており、Blue/Green と Canary デプロイメントの構造化についていくつか質問がありました。これまでのところ、基本的な作業は完了しており、Eureka、Zuul、および構成サーバーが期待どおりに機能しています。私が達成しようとしているのは、1.0 と 1.1 などの 2 つのバージョンを持つサービスをセットアップすることです。特定のユーザーのサブセットについては、1.1 バージョンにルーティングし、それ以外のユーザーは 1.0 バージョンに移行する必要があります。

Zuul フィルター API はドキュメンテーションがやや浅く、いくつかの概念を理解するのに少し苦労しているので、ここでいくつか質問したいと思います。また、いくつかの基本的なフィルターを実行していますが、プリンシパルの ID とそれらが要求しているサービスを取得する以外には、ほとんど何もしません。私が壁にぶつかっているのは、同じサービスの 2 つの異なるバージョンを Eureka と Zuul に公開する方法を理解することです。私が興味を持っているいくつかのこと:

  • ドキュメント、投稿、およびその他のスタック オーバーフローの間で、「サービス」と「クラスター」という用語は同じ意味で使用されているようです。これは正しいです?
  • そうは言っても、という名前のサービスがある場合、/simpleservice2 つの異なるサービス ID (つまりsimpleservicesimpleservice-1.1) を公開しますか? そうすれば、ターゲット ユーザーの 1 人が をリクエストすると/simpleservice、Zuul に送信してもらうことになります。/simpleservice-1.1
  • または、既存のサービス ID に別のノードを追加し、Zuul がバージョン 1.0 と 1.1 を区別できるように、各ノードに追加のメタデータを追加しますか?
  • 正解は「上記のすべて」ですか?:)
4

1 に答える 1

7

リボンも使用していると仮定すると、サービス ID はそのままにしておきます。com.netflix.loadbalancer代わりに、パッケージを見てみましょう。カナリア デプロイは本質的に、非常に具体的な制約を伴う負荷分散です。AbstractLoadBalancerRuleルーティングの基にしたいプロパティに基づいてサーバーを選択する独自のものを実装できます。次に、そのルールを Zuul インスタンスの構成に追加します。

@Configuration
public class CanaryConfiguration {
    @Bean public IRule canaryDeploymentRule(IClientConfig config) {
      CanaryDeploymentRule rule = new CanaryDeploymentRule ();
      rule.initWithNiwsConfig(config);
      return rule;
    }
}

サービスを Eureka に異なるサービス ID (「simpleservice」と「simpleservice-xy」) で登録させると、必然的に複雑になると思います。Eureka から使用可能なサーバーのリストを取得するときに、バージョン部分 (「-xy」、「foo-service」を引き続き処理できる) を無視するように検出クライアントを拡張し、選択プロセスを実行して、とにかく正しい。そのため、物事はより複雑になると思います。

これはすべて最良の推測に基づいており、実際には実装していません。この質問はほぼ4か月前のものです。そのため、その間に他の解決策を見つけた場合は、それを自分の質問への回答として共有していただければ幸いです。

于 2015-11-26T08:17:07.217 に答える