Zuul限流実現
6315 ワード
テキストアドレス
[推荐阅读]微サービスはあとどのくらいですか?>>
一、前言
1、RateLimiter、Spring Cloud Zuul RateLimiterとは何ですか.
RateLimiterはGoogleオープンソースのトークンバケツアルゴリズムを実現したストリーム制限ツール(レート制限器)である.http://ifeve.com/guava-ratelimiter/
Spring Cloud Zuul RateLimiterはZuulと組み合わせてRateLimiterをカプセル化し、ZuulFilterを実現することでサービス制限フロー機能を提供する
限流粒度/タイプ
説明
Authenticated User
要求されたユーザーに対するストリーム制限
Request Origin
要求されたOriginに対するストリーム制限
URL
URL/インタフェースに対する限流
Service
このタイプは、サービスに対してストリーム制限を行い、ストリーム制限タイプが構成されていない場合に有効です.
https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit
2、本編の主な内容サービスストリーム制限構成例及び説明 URLストリーム制限構成例及び説明 Zullクラスタサービス制限フロー説明(+Redis) Spring Cloud Zuul RateLimiterパラメータ紹介 3、本編の環境情報
フレーム
バージョン#バージョン#
Spring Boot
2.0.0.RELEASE
Spring Cloud
Finchley.RELEASE
Zuul
1.3.1
JDK
1.8.x
4、準備
前の記事を参考にしてください.https://ken.io/note/spring-cloud-zuul-quickstartソースベース:https://github.com/ken-io/springcloud-course/tree/master/chapter-08 Eureka Server、サービスプロバイダ の準備
Eureka Serverを起動するには:http://localhost:8800Test Serviceの起動:http://localhost:8602
二、サービス制限フロー(Zuul+RateLimiter)
前編のzulプロジェクトのソースコードに基づいて修正すればいいです.https://github.com/ken-io/springcloud-course/tree/master/chapter-08/zuul spring-cloud-zul-ratelimit を導入
1、デフォルトのサービス制限フローポリシーアプリケーションを修正する.yml構成ストリーム制限ポリシー
以上の構成は、ストリーム制限ポリシーが有効であり、すべてのサービスが3秒以内に1回のみ要求され、すべての要求時間の合計が2秒を超えないことを示しています.限流試験 zulプロジェクトを開始し、アクセスします.http://localhost:8888/testservice?token=ken3秒で2回アクセスするとエラーページが表示されます
エラーメッセージ:type=Too Many Requests、status=429これは、3秒以内の>1回のアクセスがストリーム制限ポリシーによって遮断されたことを示しています.
2、指定されたサービスに対して単独でストリーム制限ポリシーを配置するアプリケーションを修正する.yml構成ストリーム制限ポリシー
以上の構成では、testserviceに対してストリーム制限ポリシーが個別に構成されています.60秒以内のアクセス回数は10回調べてはならず、アクセス時間は50秒を超えてはならない.
デフォルトのストリーム制限ポリシーも同時に構成されており、デフォルトのストリーム制限ポリシーはtestserviceのストリーム制限ポリシーよりも厳格ですが、このストリーム制限は競合しません.サービスに対してストリーム制限ポリシーを個別に構成すると、この個別に構成されたストリーム制限ポリシーのみがサービスに有効になるからです.
3、URLベースのストリーム制限ポリシーアプリケーションを修正する.yml構成ストリーム制限ポリシー
以上の構成はtestserviceのポリシーにtypeパラメータの設定を追加しただけです.(もちろん、デフォルトのポリシーにこのパラメータを追加することもできます).
このポリシーは、Url 60秒当たりのアクセス回数が10回を超えず、合計アクセス時間が50秒を超えてはならないということになります.アクセステスト zulプロジェクトを開始し、次のアクセスを行います.http://localhost:8888/testservice?token=kenストリーム制限のしきい値に達したら、アクセス:http://localhost:8888/testservice/plus?token=ken&numA=1&numB=2
依然として正常にアクセスできます.また、
zul-ratelimiterの限流粒度/方式があなたのニーズを満たすことができない場合は、ZuulFilter統合RateLimiterをカスタマイズして限流を行うことができます.
三、Zuulクラスタサービス制限フロー(Zuul+RateLimiter+Redis)
RateLimiterのストリーム制限データはデフォルトでConcurrentHashMap方式でメモリに格納されており、Zuulクラスタを配備すると、ストリーム制限ポリシーに影響します.ストリーム制限データをRedisに格納することで,各Zuulノードのストリーム制限データを集中的に記録し,ストリーム制限の正確性を保証できる.
1.Reids Serverの配備
参照先:https://ken.io/note/centos7-redis4-setup
2.Spring Data Redisの導入
3、Redis接続の構成
アプリケーションを変更します.yml
4、RateLimiterデータ記憶方式の配置
四、備考
Zuul-RateLimiterパラメータの説明 Zuul-RateLimiter基本構成項 コンフィギュレーション・アイテム
オプション値
説明
enabled
true/false
ストリーム制限を有効にするかどうか
behind-proxy
true/false
ソースコードをめくってみましたが、使用されているのは見つかりませんでした...作者も説明していません...
key-prefix
String
ストリーム制限key接頭辞
repository
CONSUL, REDIS, JPA, BUCKET4J_JCACHE, BUCKET4J_HAZELCAST, BUCKET4J_INFINISPAN, BUCKET4J_IGNITE, IN_MEMORY
ストリーム制限データの格納方法、デフォルト:IN_MEMORY
default-policy
—
デフォルトのポリシー
policies
—
カスタムポリシー
postFilterOrder
—
义齿
preFilterOrder
—
prefilterフィルタ順序 Policy限流策略配置項説明 アイテム
説明
limit
単位時間当たりのリクエスト回数制限
quota
単位時間内積算要求時間制限(秒)、必要でないパラメータ
refresh-interval
単位時間(秒)、デフォルト60秒
type
限流方式:ORIGIN,USER,URL
ふろく本編コード例 https://github.com/ken-io/springcloud-course/tree/master/chapter-09 本編参照 https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit
http://ifeve.com/guava-ratelimiter/
[推荐阅读]微サービスはあとどのくらいですか?>>
一、前言
1、RateLimiter、Spring Cloud Zuul RateLimiterとは何ですか.
RateLimiterはGoogleオープンソースのトークンバケツアルゴリズムを実現したストリーム制限ツール(レート制限器)である.http://ifeve.com/guava-ratelimiter/
Spring Cloud Zuul RateLimiterはZuulと組み合わせてRateLimiterをカプセル化し、ZuulFilterを実現することでサービス制限フロー機能を提供する
限流粒度/タイプ
説明
Authenticated User
要求されたユーザーに対するストリーム制限
Request Origin
要求されたOriginに対するストリーム制限
URL
URL/インタフェースに対する限流
Service
このタイプは、サービスに対してストリーム制限を行い、ストリーム制限タイプが構成されていない場合に有効です.
https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit
2、本編の主な内容
フレーム
バージョン#バージョン#
Spring Boot
2.0.0.RELEASE
Spring Cloud
Finchley.RELEASE
Zuul
1.3.1
JDK
1.8.x
4、準備
前の記事を参考にしてください.https://ken.io/note/spring-cloud-zuul-quickstartソースベース:https://github.com/ken-io/springcloud-course/tree/master/chapter-08
Eureka Serverを起動するには:http://localhost:8800Test Serviceの起動:http://localhost:8602
二、サービス制限フロー(Zuul+RateLimiter)
前編のzulプロジェクトのソースコードに基づいて修正すればいいです.https://github.com/ken-io/springcloud-course/tree/master/chapter-08/zuul
com.marcosbarbero.cloud
spring-cloud-zuul-ratelimit
2.0.4.RELEASE
1、デフォルトのサービス制限フローポリシー
zuul:
ratelimit:
enabled: true
default-policy:
limit: 1
quota: 2
refresh-interval: 3
以上の構成は、ストリーム制限ポリシーが有効であり、すべてのサービスが3秒以内に1回のみ要求され、すべての要求時間の合計が2秒を超えないことを示しています.
エラーメッセージ:type=Too Many Requests、status=429これは、3秒以内の>1回のアクセスがストリーム制限ポリシーによって遮断されたことを示しています.
2、指定されたサービスに対して単独でストリーム制限ポリシーを配置する
zuul:
ratelimit:
enabled: true
default-policy:
limit: 1
quota: 1
refresh-interval: 3
policies:
testservice:
limit: 10
quota: 50
refresh-interval: 60
以上の構成では、testserviceに対してストリーム制限ポリシーが個別に構成されています.60秒以内のアクセス回数は10回調べてはならず、アクセス時間は50秒を超えてはならない.
デフォルトのストリーム制限ポリシーも同時に構成されており、デフォルトのストリーム制限ポリシーはtestserviceのストリーム制限ポリシーよりも厳格ですが、このストリーム制限は競合しません.サービスに対してストリーム制限ポリシーを個別に構成すると、この個別に構成されたストリーム制限ポリシーのみがサービスに有効になるからです.
3、URLベースのストリーム制限ポリシー
zuul:
ratelimit:
enabled: true
default-policy:
limit: 1
quota: 1
refresh-interval: 3
policies:
testservice:
limit: 10
quota: 50
refresh-interval: 60
type: url
以上の構成はtestserviceのポリシーにtypeパラメータの設定を追加しただけです.(もちろん、デフォルトのポリシーにこのパラメータを追加することもできます).
このポリシーは、Url 60秒当たりのアクセス回数が10回を超えず、合計アクセス時間が50秒を超えてはならないということになります.
依然として正常にアクセスできます.また、
?
以降のパラメータは、ストリーム制限のkeyとして使用されないことに留意されたい.http://localhost:8888/testservice?token=ken , http://localhost:8888/testservice?token=ken.io同じurlとしてストリーム制限されますzul-ratelimiterの限流粒度/方式があなたのニーズを満たすことができない場合は、ZuulFilter統合RateLimiterをカスタマイズして限流を行うことができます.
三、Zuulクラスタサービス制限フロー(Zuul+RateLimiter+Redis)
RateLimiterのストリーム制限データはデフォルトでConcurrentHashMap方式でメモリに格納されており、Zuulクラスタを配備すると、ストリーム制限ポリシーに影響します.ストリーム制限データをRedisに格納することで,各Zuulノードのストリーム制限データを集中的に記録し,ストリーム制限の正確性を保証できる.
1.Reids Serverの配備
参照先:https://ken.io/note/centos7-redis4-setup
2.Spring Data Redisの導入
org.springframework.boot
spring-boot-starter-data-redis
2.0.4.RELEASE
3、Redis接続の構成
アプリケーションを変更します.yml
spring:
redis:
host: 192.168.88.11
port: 6379
4、RateLimiterデータ記憶方式の配置
zuul:
ratelimit:
enabled: true
repository: redis
default-policy:
limit: 1
quota: 1
refresh-interval: 3
policies:
testservice:
limit: 10
quota: 50
refresh-interval: 60
type: url
四、備考
Zuul-RateLimiterパラメータの説明
オプション値
説明
enabled
true/false
ストリーム制限を有効にするかどうか
behind-proxy
true/false
ソースコードをめくってみましたが、使用されているのは見つかりませんでした...作者も説明していません...
key-prefix
String
ストリーム制限key接頭辞
repository
CONSUL, REDIS, JPA, BUCKET4J_JCACHE, BUCKET4J_HAZELCAST, BUCKET4J_INFINISPAN, BUCKET4J_IGNITE, IN_MEMORY
ストリーム制限データの格納方法、デフォルト:IN_MEMORY
default-policy
—
デフォルトのポリシー
policies
—
カスタムポリシー
postFilterOrder
—
义齿
preFilterOrder
—
prefilterフィルタ順序
説明
limit
単位時間当たりのリクエスト回数制限
quota
単位時間内積算要求時間制限(秒)、必要でないパラメータ
refresh-interval
単位時間(秒)、デフォルト60秒
type
限流方式:ORIGIN,USER,URL
ふろく
http://ifeve.com/guava-ratelimiter/