Spring Coud ZuulマイクロサービスゲートウェイのAPI制限ストリーム
2872 ワード
Spring Coud ZuulマイクロサービスゲートウェイのAPI制限ストリーム
もっと多くの乾物分布式実戦(乾燥品) spring cloud実戦(乾燥品) mybatis実戦(乾燥品) spring boot実戦(乾燥品) React入門実戦(乾燥品) 中小型インターネット企業アーキテクチャを構築する . python学習継続更新 ElasticSearchノート kafka storm実戦(乾燥品) API制限ストリーム
マイクロサービス開発においては、APIに対して制限ストリーム保護を行う必要があり、ネットワーク攻撃を防止する.例えば、ショートメッセージ認証コードAPIを行うと、クライアントの要求速度を制限することで、ある程度のショートメール攻撃を防ぎ、損失を低減することができる.
マイクロサービスゲートウェイは、各要求の入口を通る必要があり、いくつかのAPI制限ストリーム、認証などの動作に非常に適しています.ここにはzulマイクロサービスゲートウェイに基づくAPI制限フローライブラリがあります. https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit
使い方
例えば、私達はuserinfo-consumerというサービスに対して制限を行います.各要求源に対して、最大3回までお願いします.まずプロジェクトにzulとratelimitの依存を追加して、次のような構成を追加すればいいです. クライアントをテストします.60 s以内の要求が3回を超えたら、サーバーから異常が出ます.1分後に正常に を要求できます.のあるIPのクライアントは、制限されたストリームによって他のクライアントに影響を与えない、すなわちAPIゲートウェイは、各クライアント制限ストリームに対して相互に独立した である.
原理分析
API制限ストリームはzulフィルタに基づいて行われています.redisを使わないと、制限ストリームデータはメモリに記録されています.一般的に開発環境で直接メモリに記録できます.生産環境ではRedisを使用します.
限流ブロックタイミング
フロー制限フィルタは、転送を要求する前に呼び出します. 限流タイプ
流れ制限タイプは主にurl、orign、userの3種類があります. urlタイプの制限ストリームは、要求経路によって を区別することである.オリジンは、クライアントIPアドレスによって を区別する. userはログインユーザ名によって区別され、匿名ユーザ も含む.は、複数のストリーム制限タイプを組み合わせて を使用してもよい.限流タイプが配置されていない場合、以上の区分は行わない.
ブロックフロー要求
フィルタのrunメソッドで要求残数を判断する
もっと多くの乾物
マイクロサービス開発においては、APIに対して制限ストリーム保護を行う必要があり、ネットワーク攻撃を防止する.例えば、ショートメッセージ認証コードAPIを行うと、クライアントの要求速度を制限することで、ある程度のショートメール攻撃を防ぎ、損失を低減することができる.
マイクロサービスゲートウェイは、各要求の入口を通る必要があり、いくつかのAPI制限ストリーム、認証などの動作に非常に適しています.ここにはzulマイクロサービスゲートウェイに基づくAPI制限フローライブラリがあります. https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit
使い方
例えば、私達はuserinfo-consumerというサービスに対して制限を行います.各要求源に対して、最大3回までお願いします.まずプロジェクトにzulとratelimitの依存を追加して、次のような構成を追加すればいいです.
zuul.routes.userinfo.path=/getuser/**
zuul.routes.userinfo.serviceId=userinfo-consumer
zuul.ratelimit.enabled=true
zuul.ratelimit.policies.userinfo.limit=3
zuul.ratelimit.policies.userinfo.refresh-interval=60
zuul.ratelimit.policies.userinfo.type=origin
原理分析
API制限ストリームはzulフィルタに基づいて行われています.redisを使わないと、制限ストリームデータはメモリに記録されています.一般的に開発環境で直接メモリに記録できます.生産環境ではRedisを使用します.
限流ブロックタイミング
フロー制限フィルタは、転送を要求する前に呼び出します.
@Override
public String filterType() {
return "pre";
}
流れ制限タイプは主にurl、orign、userの3種類があります.
if (types.contains(URL)) {
joiner.add(route.getPath());
}
if (types.contains(ORIGIN)) {
joiner.add(getRemoteAddr(request));
}
if (types.contains(USER)) {
joiner.add(request.getUserPrincipal() != null ? request.getUserPrincipal().getName() : ANONYMOUS);
}
ブロックフロー要求
フィルタのrunメソッドで要求残数を判断する
if (rate.getRemaining() < 0) {
ctx.setResponseStatusCode(TOO_MANY_REQUESTS.value());
ctx.put("rateLimitExceeded", "true");
throw new ZuulRuntimeException(new ZuulException(TOO_MANY_REQUESTS.toString(),
TOO_MANY_REQUESTS.value(), null));
}