• Rocket


     
    简单介绍ProbePicker的实现。
     
     
    1. 基本介绍
     
    用于把多个Cache client合并成一个:
     
    2. diplomacy node
     
    ProbePicker的diplomacy node是一个适配器节点,用于与上下游节点连接,并进行参数传递。
     
    这里下游节点的参数向上游节点传递时不做改变;上游节点的参数向下游节点传递时进行了适配,把可以合并处理的cache client的参数进行了合并,这样下游节点看到的ProbePicker的client参数中就少了一部分被合并掉的client。
     
    1) clientFn
     
    把原clients中的元素从右向左逐个进行combine,合并后的结果作为新的clients参数:
     
    2) combine
     
    这里的假设是连续的client访问的地址集合(visibility)是有序的:
    a. 若head和next有重叠,则不能合并;head的意思是能够合并的元素的头一个,既然不能合并,那么head就失去了其意义,将其加入到output即最终的clients序列中,而下一个元素成为接下来要检查的能够合并的元素的头一个元素,即下一次combine中的head。
    b. redact用于把head和next的sourceId/nodePath和visibility忽略掉进行比较,要求其他的域如name/requireFifo/supportsXXX等都需要相同;
    c. 合并则是将head和next两个的sourceId和visibility进行合并;
     
    3) 合并sourceId
     
    head和next的sourceId具有怎么样的关系?
    a. 重合:部分重合或者全部重合;
    b. 不重合;
     
    3. lazy module
     
    lazy module用于实现ProbePicker的内部逻辑:
     
    因为diplomacy node中可能把上游节点的多个clients合并到一起了,所以下游节点看到的sourceId实际上也是合并之后的,即下游节点发起Probe消息时,使用的是合并之后的source值。需要ProbePicker把这个source值区分成合并前的某一个client再转发给上游节点。
     
    1) 成对的输入边和输出边
     
     
    2) 默认直连
     
     
    3) 区分source
     
    a. edgeIn.client.clients.size是输入边的clients的数量,即ProbePicker看到的上游节点的clients的数量;edgeOut.client.clients.size是输出边的clients的数量,即ProbePicker的下游节点看到的ProbePicker的clients的数量。两者相等,表明没有进行合并;两者不等,则表明进行了合并,则需要对source域进行区分;
     
    b. 判断source属于哪一个client:edgeOut.client.clients.map(_.sourceId contains out.b.bits.source)
     
    c. 如果合并前只有一个client的sourceId被合并后的client包含,则表明这个client没有与其他client进行合并,所以无需区分;
     
    d. 否则需要根据地址确定是属于哪一个合并前的client(这些client的visibility不重叠),而后转换为对应client的sourceId:
     
  • 相关阅读:
    MongoDB Shell
    mongo 日记
    java 堆栈 静态
    面向对象(2)
    面向对象(1)
    mongo 学习笔记
    深入浅出学Spring Data JPA
    java记录
    mongodb 2.6 window 安装启动服务
    CF1012F Passports
  • 原文地址:https://www.cnblogs.com/wjcdx/p/11442950.html
Copyright © 2020-2023  润新知