集群限流流程
2022-09-02 12:51:05 0 举报
sentinel集群限流流程
作者其他创作
大纲/内容
是
DefaultClusterTokenClient#requestToken
FlowRuleChecker#checkFlow
调用canPassCheck验证规则
client把数据写到netty
封装请求参数
判断是client还是serverTokenService clusterService = pickClusterService();
netty
1. 如果当前就是server,则直接内部调用进行处理了。2. 如果当前是client,则会通过netty向server发起请求,由server处理后把结果返回
如果是client
DefaultTokenService#requestToken
private static TokenService pickClusterService() { if (ClusterStateManager.isClient()) { return TokenClientProvider.getClient(); } if (ClusterStateManager.isServer()) { return EmbeddedClusterTokenServerProvider.getServer(); } return null; }
passClusterCheck
NettyTransportClient#sendRequest
TokenServerHandler#channelRead
如果出现异常,则退化为单机限流fallbackToLocalOrPass
FlowRequestProcessor#processRequest
根据资源名称获得限流规则
否
和单机限流不一样的是,集群限流是在这里完成了集群数据记录,然后进行限流判断的。而单机限流的数据统计是在StatisticSlot里进行实现的
得到数据处理器:限流/热点参数RequestProcessorProvider.getProcessor(request.getType());
read
ClusterFlowChecker#acquireClusterToken
write
遍历规则
单机限流的流程passLocalCheck
FlowRuleChecker#canPassCheck
server读取数据
FlowSlot#entry
DefaultEmbeddedTokenServer#requestToken
向server发起请求transportClient.sendRequest(request);
解析响应结果applyTokenResult
如果是server
this.channel.writeAndFlush(request);
是否是集群限流模式?
向server发起请求clusterService.requestToken
0 条评论
下一页