VLCP SDN 控制器

我要开发同款
匿名用户2017年01月24日
157阅读
开发技术Python
所属分类云计算、SDN/OpenFlow
授权协议Apache

作品详情

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两个原语实现了任意的读事务和写事务;组合两者则可以实现任意的事务操作。同时,写入的内容会通过更新消息推送的机制推送到其他节点上,从而实时更新其他节点上的信息和流表。

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

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

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

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

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

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论