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. nexus在linux上搭建

    Maven 仓库的分类:(maven的仓库只有两大类) 1.本地仓库 2.远程仓库,在远程仓库中又分成了3种: 2.1 中央仓库 2.2 私服 2.3 其它公共库 有个maven私服可以很方便地管理我 ...

  2. redis 同步化操作

    异步化操作是很麻烦的的.不好控.下面介绍个同步化的库bluebird.用法很简单.看下你还子就知道了 const redis = require('redis'); const bluebird = ...

  3. Java对象空间分配流程

    对象空间分配流程如下:   针对这个流程,分别解释一下每一个选项的使用场景. 栈上分配: 栈上分配的基础在于逃逸分析,逃逸分析可以得到三种对象的逃逸状态. 全局逃逸:一个对象的引用逃出了方法或者线程. ...

  4. python while 学习

    while True: reply = input('please input:') if reply == 'stop': break else: print (reply.upper())

  5. 【前端学习笔记】arguments相关

    arguments转数组: (function() { console.log(arguments instanceof Array); // --> false console.log(Obj ...

  6. Jmeter介绍+安装

    JMeter介绍 JMeter 是Apache 基金会Jakarta 上的一个纯Java 开源项目,起初用于基于Web 的压力测试(pressure test),后来其应用范围逐渐扩展到对文件传输FT ...

  7. 洛谷 P1987 摇钱树

    题目戳 题目描述 Cpg 正在游览一个梦中之城,在这个城市中有n棵摇钱树...这下,可让Cpg看傻了...可是Cpg只能在这个城市中呆K天,但是现在摇钱树已经成熟了,每天每棵都会掉下不同的金币(不属于 ...

  8. Expect the Expected UVA - 11427(概率dp)

    题意: 每天晚上你都玩纸牌,如果第一次就赢了,就高高兴兴的去睡觉,如果输了就继续玩.假如每盘游戏你获胜的概率都为p,每盘游戏输赢独立.如果当晚你获胜的局数的比例严格大于p时才停止,而且每天晚上最多只能 ...

  9. Mybatis笔记四:nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'id' in 'class java.lang.String'

    错误异常:nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for pr ...

  10. WPA-PSK无线网络破解原理及过程

    原文链接地址:http://www.freebuf.com/articles/wireless/58342.html 本文将主要讲讲WPA-PSK类型的无线网络安全问题,首先我们看下802.11协议相 ...