当前位置: 首页 > 软件库 > 云计算 > SDN/OpenFlow >

VLCP

SDN 控制器
授权协议 Apache
开发语言 Python
所属分类 云计算、 SDN/OpenFlow
软件类型 开源软件
地区 国产
投 递 者 那弘
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

VLCP 是一款为生产集群应用而严格设计开发的 SDN 控制器。它从根本性的设计上改变了以往 SDN 控制器不稳定的印象,使用 ZooKeeper + 专业的事务性技术为控制器集群提供同步性支持,使用先进的异步编程框架实现内部逻辑。

项目已经开发约18个月,目前已经在借贷宝公司小规模投产。在10台物理机组成的集群中进行压测,控制器可以在:每服务器1000+容器;16+Gbps 流量;每分钟、每服务器创建/删除两百个容器的高压力环境下长期稳定运行。VLCP 的最终设计目标是面向数千台物理服务器、数万乃至数十万个虚拟网络端点的巨型 IDC 环境中稳定运行,提供高效、可靠、可控的 SDN 网络。

VLCP 可以通过 vlcp-docker-plugin 与 docker 进行对接,为 docker 提供更多功能、更高稳定性的 SDN 网络,直接为容器提供外部网络连通性,或者子网之间的连通性等。

架构特点

VLCP 使用协程化的架构实现了无锁、高性能的并发逻辑。基于 Pub/Sub 机制的协程同步机制为扩展提供了极大的便利。独特的调度器实现简化了许多异步逻辑,通过统一的中心队列在进程内实现了众多的生产者-消费者模型,使得程序结构稳定、易读、统一排错: 

调度器

VLCP 使用高可扩展性的模块化设计。每个模块都可以单独加载、单独卸载,加载不同模块即可为控制器添加新的功能。模块功能不仅限于 SDN,也包括外围功能如管理、监控、排障等。官方自带的模块就已经有了很丰富的内容:

模块一览

VLCP利用ZooKeeper实现了统一的事务层——ObjectDB,保证了从任意节点的读写都满足事务性,并与其他节点的数据保持同步。事务层的使用简便而有特色,通过WALK与TRANSACT两个原语实现了任意的读事务和写事务;组合两者则可以实现任意的事务操作。同时,写入的内容会通过更新消息推送的机制推送到其他节点上,从而实时更新其他节点上的信息和流表。

ObjectDB

VLCP使用一种通用的方式来解析OpenFlow中的二进制结构,利用了namedstruct库。这种库通过类似于C程序中结构体定义的语法定义出结构体并进行动态的解析或构造。这种写法很容易跟着OpenFlow的版本升级,甚至可以比较容易地保持以往程序的兼容性。同样的技术还用来解析以太网数据包和ZooKeeper协议。

VLCP使用OpenFlow1.3的多流表功能实现了从L2到L3的完整功能,这些功能可以通过独特的流表分配机制由模块系统进行扩展。现有的流表结构大致如下图所示:

流表一览

VLCP支持预推送、OpenvSwitch学习、控制器学习与首包上传等多种不同运行策略。

VLCP甚至包含了内置的HTTP服务器,用于提供WebAPI接口;也可以用来开发简单的管理界面。

VLCP有统一的配置系统,很容易将配置文件映射到具体的类中的属性。

 相关资料
  • 在创建资源类和指定资源格输出式化后, 下一步就是创建控制器操作将资源通过 RESTful APIs 展现给终端用户。 Yii 提供两个控制器基类来简化创建 RESTful 操作的工作:yii\rest\Controller 和 yii\rest\ActiveController, 两个类的差别是后者提供一系列将资源处理成 Active Record 的操作。 因此如果使用 Active Recor

  • 控制器是 MVC 模式中的一部分, 是继承yii\base\Controller类的对象,负责处理请求和生成响应。 具体来说,控制器从应用主体 接管控制后会分析请求数据并传送到模型, 传送模型结果到视图,最后生成输出响应信息。 动作 控制器由 操作 组成,它是执行终端用户请求的最基础的单元, 一个控制器可有一个或多个操作。 如下示例显示包含两个动作view and create 的控制器post:

  • 简介 为了替代把所有的请求处理逻辑都定义在 routes.php 路由文件中,你或许想要使用控制来组织这些行为。控制器可以把相关的请求处理逻辑整合为一个控制器类。控制器类文件被存储在 app/Http/Controllers 目录下。 基础控制器 这里有一个基础控制器的示例。所有 Lumen 的控制器都应该继承 Lumen 安装时内置的默认的控制器基类: <?php namespace App\

  • 简介 为了代替在路由文件中以闭包的形式定义所有的请求处理逻辑,你也许想使用控制类来组织这些行为。控制器能够将相关的请求处理逻辑组成一个单独的类,控制器被存放在 app/Http/Controllers 目录下。 基础控制器 定义控制器 下面是一个基础控制器类的例子。需要注意的是,该控制器继承了一个Laravel内置的基础控制器类。该基础控制器提供了一些编辑的方法,比如 middleware 方法,

  • ThinkCMF目前分为两种控制器,前台和后台控制器; 无论是前台,还是后台控制器都位于应用的Controller目录下. 前台控制器一般继承 Common\Controller\HomebaseController,如果你需要用户登录才访问或操作此控制器,就要继承 Common\Controller\MemberbaseController; 我们来创建一个前台控制器: 在Blog应用Contr

  • 控制器文件默认放在 app/modules/{module}/actions 文件夹。 控制器的文件命名格式为 XxxxAction.class.php, 所有的控制器都必须继承基类控制器 herosphp\core\Controller, 基类控制器是抽象类: abstract class Controller extends Template { /** * 视图模板名称

  • Kubernetes中内建了很多controller(控制器),这些相当于一个状态机,用来控制Pod的具体状态和行为。

  • 控制器 通过执行 sudo mn --controller=remote --ip=[controller IP] --port=[controller listening port] 可以连接到控制器。