8

spring-cloud-starter-zuul を使用しようとしています。私は Eureka をセットアップし、作成した単純なサービスを Eureka クライアントとして登録しました。2 つの異なるホストに 2 つの異なるアプリケーション名で 2 つのインスタンスを登録するので、これらは Eureka の 2 つの異なるサービスになります。私の目的は、serviceA のパフォーマンスが良く、serviceB のパフォーマンスが悪い場合に、serviceA へのプロキシが serviceB へのプロキシに失敗しても影響を受けないようにすることです。

ロード テスト serviceA を zuul を介して単独で実行すると、400 TPS のスループットを問題なく維持できます。次に、serviceB を投入して完全に過負荷にし、あちこちでタイムアウトさせると、serviceA が 400 で継続し、serviceB が失敗すると予想されますが、代わりに serviceA は 50 TPS 未満の成功率に低下し、次のように一連のエラーが発生します。良い。

RibbonRoutingFilter によって生成されたすべての RibbonCommands が hystrix で同じ回路を共有しているように見えますが、これは私には意味がありません。RibbonCommand を作成する RibbonRoutingFilter を見ると、別のものを使用するように構成する方法がわかりません。

RibbonRoutingFilter で:

    RibbonCommand command = new RibbonCommand(restClient, verb, uri,
            convertHeaders(headers), convertHeaders(params), requestEntity);

restClient が serviceA と serviceB で異なることを確認したので、application.yml ファイルで指定した独自の接続プール構成を使用していますが、serviceA と serviceB の間のサービス品質にはまだ大量の相互汚染があります。サービスB.

「commandKey」を最初のパラメーターとして受け取るRibbonCommandの別のコンストラクターがあるようです。私が参照するコンストラクターは、「デフォルト」のcommandKey値を持つコンストラクターに単純に委任します。RibbonRoutingFilter でそれをオーバーライドするスイッチやオプションはありません。私にとって、これは spring-cloud プロジェクトから使用された場合、Zuul の実行可能性を著しく損なうものです。

各サービスが独自の回路を持つように、すぐに使用できるように構成する方法はありますか?

私のpomの該当部分:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-parent</artifactId>
      <version>1.0.0.RC1</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zuul</artifactId>
  </dependency>

アプリケーション.yml:

ribbon:
  ConnectTimeout: 5000
  ReadTimeout: 5000
  MaxAutoRetries: 0
  MaxAutoRetriesNextServer: 0
  OkToRetryOnAllOperations: false
  MaxHttpConnectionsPerHost: 200
  MaxTotalHttpConnections: 1000
echo1:
  ribbon:
    ActiveConnectionsLimit: 200
echo2:
  ribbon:
    ActiveConnectionsLimit: 400
spring:
  application:
    name: SpringCloudProxywall
server:
  port: 8080
zuul:
  routes:
    echo1:
      path: /echo1/**
      serviceId: echo1
      stripPrefix: false
    echo2:
      path: /echo2/**
      serviceId: echo2
      stripPrefix: false

私のアプリケーションクラス:

@Configuration
@ComponentScan
//@EnableCircuitBreaker  <-- is already included in EnableZuulProxy
@EnableZuulProxy
@EnableTurbine
@EnableHystrixDashboard
@EnableAutoConfiguration
public class SpringCloudProxywallApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudProxywallApplication.class, args);
    }
}
4

1 に答える 1

5

すでにデフォルトになっているスナップショット (バックエンドごとに異なる回路) を使用すると思います: https://github.com/spring-cloud/spring-cloud-netflix/issues/160

于 2015-01-22T09:23:26.907 に答える