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. UserAgent 设置 php 抓取网页

    转载:http://www.webkaka.com/tutorial/php/2013/111846/ hp抓取网页,可谓轻而易举,几行代码就可以搞定.不过,如果你有所疏忽,程序写得不够严密,就会出现 ...

  2. CentOS卸载系统自带的OpenJDK并安装Sun的JDK的方法

    查看目前系统的jdk: rpm -qa | grep jdk 得到的结果: [root@dc-01 java]#  rpm -qa | grep jdk java-1.6.0-openjdk-1.6. ...

  3. python 内存问题(glibc库的malloc相关)

    题记: 这是工作以来困扰我最久的问题.python 进程内存占用问题. 经过长时间断断续续的研究,终于有了一些结果. 项目(IM服务器)中是以C做底层驱动python代码,主要是用C完成 网络交互部分 ...

  4. String Typing CodeForces - 954B

    题意: 给一个字符串,可以复制某一段字符,问最少需要多少步能将其输出,比如abcabcd,先输入abc然后再赋值abc再输入d就只需要5步. 复制的这段字符 必须是从字符串的0位置开始复制的  而且只 ...

  5. Django之CSS,JS静态文件的配置

    一. 专门创建一个目录放静态文件,即CSS,JS等. 1)先把jquery.min拿过来. 2)新建一个CSS文件放入样式 3)在login.html中引入.css文件 在login.html中引入. ...

  6. 【BZOJ1494】【NOI2007】生成树计数(动态规划,矩阵快速幂)

    [BZOJ1494][NOI2007]生成树计数(动态规划,矩阵快速幂) 题面 Description 最近,小栋在无向连通图的生成树个数计算方面有了惊人的进展,他发现: ·n个结点的环的生成树个数为 ...

  7. K Closest Numbers In Sorted Array

    Given a target number, a non-negative integer k and an integer array A sorted in ascending order, fi ...

  8. 在 Xamarin.Forms 实现页面全屏显示

    NavigationPage.SetHasNavigationBar(this, false); 或者 <ContentPage ... NavigationPage.HasNavigation ...

  9. Lab颜色空间

    原文:http://blog.csdn.net/carson2005/article/details/7200440 同RGB颜色空间相比,Lab是一种不常用的色彩空间.它是在1931年国际照明委员会 ...

  10. Myeclipse下配置SVN报错问题 svn: E175002: java.lang.RuntimeException: Could not generate DH keypair,缺少subclipse插件的javaHL

    在myeclipse10.0下安装svn插件,出现了Could not generate DH keypair,这么一个错误. 看到了一篇博客说是svn接口选择问题,可是我myeclipse没有那个接 ...