RYU多控制器通信

作者简介:满明磊,山东科技大学本科生,研究方向SDN

随着SDN控制平面不断扩展,单一的控制器很难满足需求,这时候部署多个控制器是势在必行的,一旦部署了多控制器,如何使它们协同工作就成了亟待解决的问题。Ryu是基于Python的控制器,不像java类型的控制器一样带有集群功能,不过好在比java方便,本篇文章就介绍一下如何利用C/S架构进行多控制器之间的通信。

设计原理

因为控制器一旦运行,就要占用一个TCP端口,如果跟其他控制器直接通信,需要再占用其他端口,如果控制器数量很多,那么控制器全互联的代价很大,配置也很不方便。为了解决这个问题,我们设置一个第三方服务器,其他的控制器都与服务器建立连接,把信息发送给服务器,这样既能够让控制器专注于控制网络,也使得网络层次更加分明。每个控制器相当于一个客户端,自己持有自己那部分网络的信息,同时为了获得其他网络的信息而不断与服务器进行交互。

为了创建一个高效方便的服务器,我们使用gevent的StreamServer模块。

gevent 是一个基于协同程序的Python网络库,它以greenlet为核心,提供了非常高的并发性能,简单的说就是可以让多线程更加高效,StreamServer是一个通用的TCP服务器,当客户端连接到它的时候可以运行用户提供的处理函数。

StreamServer的定义是这样的:

在Ryu中lib/hub.py中可以找到这个类的定义。

服务器设计

作为服务器,我们需要监听客户端的请求,同时还需要与客户端通信,还要存储客户端传来的数据,那么它的结构是下面这样

服务器框架

每一个控制器连接到服务器时,服务器都会分出一个线程来建立连接,然后再启动用于服务器和控制器通信的线程,当控制器传过来数据时,负责连接控制器的线程会把数据存到服务器中。传输的消息采用json格式,方便读取。

客户端设计

作为客户端的控制器只需要在启动后连接到服务器(要先保证服务器已经启动),然后创建线程接受和发送消息即可。要发送的消息储存再发送队列,由发送线程周期性发送。

实验验证

下面做一个简单的检测全局拓扑的实验

拓扑是这样的:

每个控制器的输出表明,每个控制器只能检测到连接到自己的交换机之间的链路

而服务器的输出则展示了全局拓扑

总结

多控制器的应用越来越广泛,C/S架构是一种简单的多控制器之间通信模式,通过服务器收集所有控制器的信息,可以实现网络模块化,分布式部署以及交换机迁移等功能,对于管理者来说也十分方便,源码已上传Github,希望本文能够对读者有所帮助。

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2018-05-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏linux、Python学习

你不知道Linux的10个最危险的命令

Linux命令行佷有用、很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候。

700
来自专栏Ryan Miao

session机制详解以及session的相关应用

session是web开发里一个重要的概念,在大多数web应用里session都是被当做现成的东西,拿来就直接用,但是一些复杂的web应用里能拿来用的sessi...

3827
来自专栏达摩兵的技术空间

前端文件下载通识篇

前端如何实现下载文件呢?随着前端技术的发展,越来越多的前端需求中会出现下载文件这样的需求。

1222
来自专栏腾讯云数据库(TencentDB)

CynosDB的计算层设计优化揭秘——兼容PostgreSQL版

CynosDB 是腾讯数据库研发团队推出的自研数据库,有PostgreSQL和MySQL两个版本。本文以兼容PostgreSQL版CynosDB为例,介绍我们的...

15.1K4
来自专栏Golang语言社区

【Go 语言社区】如何实现单服务器300万个长连接的?

不是吹牛,理论上完全可以达到。 (以下参考值皆是Linux平台上) 1,Linux单个进程可以维持的连接数(fd)理论值是通过ulimit -a设置,或在se...

57210
来自专栏smartguys

(四):C++分布式实时应用框架——状态中心模块

  版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等行为保留法律追究的权利!

1205
来自专栏轮子工厂

关于操作系统的一些事,这些你应该要知道~

964
来自专栏北京马哥教育

Linux的10个最危险的命令

豌豆贴心提醒,本文阅读时间10分钟 Linux命令行佷有用、很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候。 这篇文章将会向你...

4527
来自专栏数据和云

10分钟搭建MySQL Binlog分析+可视化方案

日志服务最近在原有 30+ 种数据采集渠道 基础上,新增 MySQL Binlog、MySQL select 等数据库方案,仍然主打快捷、实时、稳定、所见即所得...

1463
来自专栏北京马哥教育

Linux的10个最危险的命令

Linux命令行佷有用、很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候。

1072

扫码关注云+社区