Sentinel 1.8.6版本NodeSelectorSlot实现方式和解释说明不一样 | Context and DefaultNode

dtcbnfnu  于 23天前  发布在  其他
关注(0)|答案(1)|浏览(19)
* <pre>
 *
 *                  machine-root
 *                  /         \
 *                 /           \
 *         EntranceNode1   EntranceNode2
 *               /               \
 *              /                 \
 *      DefaultNode(nodeA)   DefaultNode(nodeA)
 *             |                    |
 *             +- - - - - - - - - - +- - - - - - -> ClusterNode(nodeA);
 * </pre>

看解释说明是这个结构,同一个资源,每个Context会有一个对应的DefaultNode,但是事实发现并非如此。
DefaultNode 生成方式: DefaultNode node = map.get(context.getName());
然后context名称都是统一写死的,那么DefaultNode 也就是一个资源就会只有一个DefaultNode ,那是不是和ClustorNode一样了?

bpsygsoo

bpsygsoo1#

  1. 默认不使用Context#enter的情况下, Sentinel会默认使用"sentinel_default_context"作为ContextName, 那么此时DefaultNode其实和ClusterNode的数据是一致的.
  2. 如果显式使用了Context#enter并传入了不同的ContextName, 此时DefaultNode就不同于ClusterNode.
    DefaultNode主要是两个维度resourceName+contextName. ClusterNode主要是一个维度resourceName.
    这样设计的原因之一就是可以根据Context#enter传入的不同来源应用(orgin)设置不同的限流阈值

相关问题