ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
OVX将Switch和Port的互联表示为链路。链路定义为两个端点,Switch/Port的源和目对。 protected T1 srcPort // source Port protected T1 distort // destination Port // endpoint Switches are fetched from the parentSwitch attributes of the Ports public T2 getSrcSwitch() { return (T2) this.srcPort.getParentSwitch(); } public T2 getDstSwitch() { return (T2) this.dstPort.getParentSwitch(); } 链路是具有方向的,所以一对方向不同的具有相同端点的链路构成双向链路。在端口类中由LinkPair结构维护。我们可以通过三种方式拓展链路: (1) `PhysicalLink (extends Link<PhysicalPort, PhysicalSwitch>)`:两个PhysicalSwitches通过PhysicalPorts连接。OVX通过拓扑发现模块找到物理链路(PhysicalLink)。 相关组件: * `Integer linkId` :链路的全局唯一标识; * `AtomicInteger linkIds`: 计数器的全局ID; * `LinkState state`:物理链路FSM状态。 (2)`OVXLink (extends Link<OVXPort, OVXSwitch>) `:在同一租户网络中,由两个OVXPorts连接两个OVXSwitches形成。OVXLink可以映射到一个或多个邻接的PhysicalLinks上,OVXLinks由租户配置生成。 组件: * `Integer linkId` :链路ID,租户网络内的唯一标识; * `Integer tenantId`:该虚拟链路最在租户网络ID; * `Mappable map`:全局map的指针; * `LinkState state`:OVXLinks的FSM状态; * `RoutingAlgorithms alg`:将一条OVXLinks映射到一个或多个邻接的PhysicalLinks上。目前支持静态的方式(人工配置)和动态计算的最短路(SPF)。 (3)`SwitchRoute (extends Link<OVXPort, PhysicalSwitch>)`:位于同一OVXBigSwitch上的两个OVXPorts的互联,定义为一条穿过虚拟交换矩阵的路径。SwitchRoute可以映射为一个或者多个邻接PhysicalLinks,且两种类型的短节点定义为: * BVS ingress/egress port:租户可见的OVXPorts; * SwitchRoute endpoints:位于BVS内部的PhysicalPorts; 组件: * `Integer routeId`:SwitchRoute的ID,对于OVXBigSwitch来说是唯一的; * `OVXSwitch sw`:该SwitchRoute所属的switch; * `RouteState state`:SwitchRoute的FSM状态; * `PhysicalPort inPort`:SwitchRoute 的入端点; * `PhysicalPort outPort`:SwitchRoute 的出端点; SwitchRoutes可以由一个租户指定,或者OVXBigSwitch实例的路由算法(RoutingAlgorithm)产生。图2.3和2.4总结了3种类型的链路的结构和关系。 ![这里写图片描述](http://img.blog.csdn.net/20160429133322452) 图2.3 三种链路的结构 ![这里写图片描述](http://img.blog.csdn.net/20160429133357530) 图2.4 各种链路映射 图的上面是两个租户,底部是OVX的网络视图(也就是物理网络)。实际上只有一个物理网络,这里我们为了清晰表达租户网络而画了两个。右边的图:租户1由两个OVXLinks,vlink1 和 vlink2。其中Vlink1对应路径ps1-ps3-ps2,其穿过物理链路l2和l3。vlink2是1:1映射到l5。右图:租户2包含OVXLinks(红色)和一个SwitchRoute,连接了OVXBigSwitch vs2的端口。后者映射到l3(蓝色)。 ###2.6.1 虚拟链路弹性(Resilience) 虚拟链路(OVXLinks and SwitchRoutes)与一个或多个物理链路(PhysicalLinks)列表(list)关联。我们称这些列表为路径(path)。一条虚拟链路的优先级就是它的原始路径(primary path)的优先级的值。原始路径可能是该虚拟链路的唯一路径集合,也可能是最高优先级的路径。当多条路径绑定到一个虚拟链路上时,未使用的路径可以用来引入组件弹性(component resilience),实现方法如下: * `private byte priority`: 虚拟链路的当前优先级; * `private final TreeMap<Byte, List<PhysicalLink>> backupRoutes`:包含可选路径的容器,其键为优先级; * `private final TreeMap<Byte, List<PhysicalLink>> unusableRoutes`:维护失败路径的容器,其键为优先级。 关于弹性的详细论述我们将在下一篇讨论。