@Spi(order=-2000) public class FlowSlot extends AbstractLinkedProcessorSlot<DefaultNode>
Combined the runtime statistics collected from the previous slots (NodeSelectorSlot, ClusterNodeBuilderSlot, and StatisticSlot), FlowSlot will use pre-set rules to decide whether the incoming requests should be blocked.
SphU.entry(resourceName) will throw FlowException if any rule is
triggered. Users can customize their own logic by catching FlowException.
One resource can have multiple flow rules. FlowSlot traverses these rules until one of them is triggered or all rules have been traversed.
Each FlowRule is mainly composed of these factors: grade, strategy, path. We
can combine these factors to achieve different effects.
The grade is defined by the grade field in FlowRule. Here, 0 for thread
isolation and 1 for request count shaping (QPS). Both thread count and request
count are collected in real runtime, and we can view these statistics by
following command:
curl http://localhost:8719/tree idx id thread pass blocked success total aRt 1m-pass 1m-block 1m-all exception 2 abc647 0 460 46 46 1 27 630 276 897 0
thread for the count of threads that is currently processing the resourcepass for the count of incoming request within one secondblocked for the count of requests blocked within one secondsuccess for the count of the requests successfully handled by Sentinel within one secondRT for the average response time of the requests within a secondtotal for the sum of incoming requests and blocked requests within one second1m-pass is for the count of incoming requests within one minute1m-block is for the count of a request blocked within one minute1m-all is the total of incoming and blocked requests within one minuteexception is for the count of business (customized) exceptions in one second
When QPS exceeds the threshold, Sentinel will take actions to control the incoming request,
and is configured by controlBehavior field in flow rules.
RuleConstant.CONTROL_BEHAVIOR_DEFAULT)This is the default behavior. The exceeded request is rejected immediately and the FlowException is thrown
RuleConstant.CONTROL_BEHAVIOR_WARM_UP)
If the load of system has been low for a while, and a large amount of
requests comes, the system might not be able to handle all these requests at
once. However if we steady increase the incoming request, the system can warm
up and finally be able to handle all the requests.
This warmup period can be configured by setting the field warmUpPeriodSec in flow rules.
RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)This strategy strictly controls the interval between requests. In other words, it allows requests to pass at a stable, uniform rate.
This strategy is an implement of leaky bucket. It is used to handle the request at a stable rate and is often used in burst traffic (e.g. message handling). When a large number of requests beyond the system’s capacity arrive at the same time, the system using this strategy will handle requests and its fixed rate until all the requests have been processed or time out.
| Constructor and Description |
|---|
FlowSlot() |
| Modifier and Type | Method and Description |
|---|---|
void |
entry(Context context,
ResourceWrapper resourceWrapper,
DefaultNode node,
int count,
boolean prioritized,
Object... args)
Entrance of this slot.
|
void |
exit(Context context,
ResourceWrapper resourceWrapper,
int count,
Object... args)
Exit of this slot.
|
fireEntry, fireExit, getNext, setNextpublic void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count, boolean prioritized, Object... args) throws Throwable
ProcessorSlotpublic void exit(Context context, ResourceWrapper resourceWrapper, int count, Object... args)
ProcessorSlotcontext - current ContextresourceWrapper - current resourcecount - tokens neededargs - parameters of the original callCopyright © 2021 Alibaba Group. All rights reserved.