OpenDaylight OpenFlow Plugin 过载保护

过载保护

OF Plugin中的过载保护按如下流程工作:

ConnectionConductor将消息送入队列,是最靠近OFJava的部分,其中的on*Message方法监听协议栈入消息。ConnectionConductor实现类(ConnectionConductorImpl)将消息送入QueueKeeper,每个ConnectionConductor拥有一个本地的QueueKeeper实例。

QueueKeeper拥有两条队列,均为有限大小及阻塞式:

  • Unordered (用于packetIn消息)
  • Ordered (用于除packetIn以外的消息)

当某条queue充满后,继续送往该队列的消息将被丢弃。一旦队列能够重新送入消息,harverster将从休眠中被唤醒

QueueZipper包装了2条队列,提供poll方法定期轮询队列,当轮询的队列为空时,则轮询下一队列。(详见QueueKeeperFairImpl)

每个QueueKeeper在QueueKeeperHarvester中注册。Harvester运行一个线程,轮询所有注册的QueueKeeper。轮询消息排队送往QueueProcessor。当所有注册的QueueKeeper为空,Harvester进入休眠

QueueProcessor中多个线程负责将OFJava-API消息转译为MD-SAL消息(保序)。QueueProcessor使用2个线程池:

  • 一个线程池处理队列事务
  • 另一个线程池将消息发布到MD-SAL

队列充满可能有如下原因:

  • MD-SAL过载
  • 节点发生泛洪,或其他原因造成处理流程减速

如QueueProcessor中的队列充满,将阻塞Harvester。一旦Harvester阻塞,则QueueKeeper中的队列将无法排空。

Note: The current implementation of the feature offers no checking of the memory or cpu load to actively throttle messages.

过载保护效果

  • 当某个节点发生泛洪,来自其他节点的消息不会被阻塞
  • 平等消息处理,发生泛洪节点的消息不会优先处理
  • 内存不会耗尽,因为消息无法送入本地的队列,一旦失败就会丢弃
  • 此功能不会对netty层产生压力

Openflow Plugin学习笔记2的更多相关文章

  1. Openflow Plugin学习笔记3

    MDController.java 中的start方法,创建了SwitchConnectionHandlerImpl实例 SwitchConnectionHandlerImpl switchConne ...

  2. Openflow Plugin学习笔记1

    主入口 ConfigurableOpenFlowProviderModule是OpenFlowPlugin中启动加载的入口,如下: @Override public java.lang.AutoClo ...

  3. OpenFlow Switch学习笔记(五)——Group Table、Meter Table及Counters

    本文主要详述OpenFlow Switch的另外两个主要组件——Group Table和Meter Table,它们在整个OpenFlow Swtich Processing中也起到了重要作用. 1. ...

  4. OpenFlow Switch学习笔记(四)——Matching

    这次我们着重详述来自于网络中的数据包在OpenFlow Switch中与Flow Entries的具体匹配过程,以及当出现Table Miss时的处理方式,下面就将从这两方面说起. 1.Matchin ...

  5. OpenFlow Switch学习笔记(一)——基础概念

    OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...

  6. OpenFlow Switch学习笔记(七)——Matching Fields

    Matching Fields in_port=port Matches OpenFlow port port dl_vlan=vlan Matches IEEE 802.1q Virtual LAN ...

  7. OpenFlow Switch学习笔记(六)——Instructions和Actions

    本文主要重点讨论OpenFlow Switch规范的指令集,它们深刻影响着数据包在Switch中的处理行为,下面开始从以下几个部分谈起. 1.Instructions 每一个Flow Entry里都包 ...

  8. OpenFlow Switch学习笔记(三)——Flow Tables

    这次我们主要讨论下OpenFlow Switch的核心组件之一——Flow Tables,以了解其内部的 matching 以及 action handling 机制.下文将会分为几个部分来逐步详述O ...

  9. OpenFlow Switch学习笔记(二)——OpenFlow Ports

    OpenFlow Ports是OpenFlow Switch与剩余网络之间传递Packet的网络接口.OpenFlow Switches之间通过OpenFlow Ports彼此相互逻辑连接.一个Ope ...

随机推荐

  1. 因为NLS_LANG 造成 Oracle数据库丢失 中文字符集兼容问题的处理.

    接着上一封blog. 因为sqlplus的 乱码问题 我修改了 注册表里面 NLS_LANG 的 value值.主要改动为: NLS_LANG source: SIMPLIFIED CHINESE_C ...

  2. Linux输入子系统:多点触控协议 -- multi-touch-protocol.txt768

    转自:http://blog.csdn.net/droidphone/article/details/8434768 Multi-touch (MT) Protocol --------------- ...

  3. 小程序 坐标算距离 (copy)

      var EARTH_RADIUS = 6378137.0;    //单位M    var PI = Math.PI;        function getRad(d){        retu ...

  4. 反向代理负载均衡-----nginx

    一:集群 1.1:集群的概念    集群是一组相互独立的.通过高速网络互联的计算机,他们构成了一个组,并以单一系统的模式加以管理.一个客户与集群相互作用时,集群像是一个独立的服务器.集群配置是用于提高 ...

  5. Deepin系统又损坏了!

    1.首先,去Deepin官方下载镜像(记得MD5检验一下).2.提取ISO里的安装程序到桌面,执行之&写入.(提醒:勾选下面的支持BIOS启动的选项,自测深度的UEFI很不稳定,建议不使用UE ...

  6. Spring异步事件

    1.发布事件 @Data public class CustomEvent extends ApplicationEvent implements Serializable { private Boo ...

  7. 洛谷 P2647 最大收益

    我是题面 恩,贪心,鉴定完毕. 一个物品是否放进来,取决于它是否能对答案做出贡献. 那物品i的贡献就是\(w[i]-r[i]\) 可是收益的减少是会叠加的 那就是\(w[i]-j*r[i]\),j表示 ...

  8. C++解析-外传篇(3):动态内存申请的结果

    0.目录 1.动态内存申请一定成功吗? 2.new_handler() 函数 3.小结 1.动态内存申请一定成功吗? 问题: 动态内存申请一定成功吗? 常见的动态内存分配代码: C代码: C++代码: ...

  9. linux 修改 elf 文件的dynamic linker 和 rpath

    linux 修改 elf 文件的dynamic linker 和 rpath https://nixos.org/patchelf.html 下载地址 https://nixos.org/releas ...

  10. 【刷题】BZOJ 4025 二分图

    Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考考你. Input ...