OpenStack网络在Mitaka版本中将有哪些新变化?1月11日到12日,DragonFlow的PTL——Eran Gampel,Kuryr的PTL——Gal Sagie,和他们的老大从以色列来到杭州,参加DragonFlow Meetup。UnitedStack有云的网络组同事苌智和康敬亭参与了这次讨论,并整理出Dragonflow在Mitaka版本中要完成的工作以为未来的Roadmap。

背景介绍
Dragonflow是OpenStack网络组件Neutron的子项目,由华为以色列技术团队提出,在开发者中备受瞩目。项目提出的时间是在2014年,2015年开始提交代码。
Dragonflow可以理解为Neutron的3层的控制器扩展组件。它实现了Neutron的L3 Service API,还为Neutron提供了分布式虚拟路由器功能。从设计理念上讲,Dragonflow使用的是可插入式无状态化轻量级SDN控制器,实现了租户子网间(东-西)流量的完全分布化,避开了网络节点,减小了故障域,避免单点故障。
按照Dragonflow的设计理念,它可以提升OpenStack Neutron L3的可扩展性、弹性、性能和可靠性。它可以支持数千个计算节点,为实现动态增长而保持控制器的无状态化,没有中央瓶颈,通过避免使用iptables和命名空间减少计算节点开销。
本次DragonFlow Meetup,主要讨论了在未来的一个周期内(Mitaka)要完成的工作以及DragonFlow的Roadmap。下面按照优先级的高低依次介绍关于这次讨论的十个方面。

  • 安全组
  • 性能测试
  • 保持数据库的一致性
  • 分布式DNAT
  • 消息队列的发布/订阅
  • 分布式数据库
  • 支持Vlan网络
  • 实现Zookeeper的DB Plugin
  • 实现ML2 Mechanism driver
  • 多层绑定与TOR
  • Dragonflow VS OVN

安全组
在本次Meetup中,关于安全组在DragonFlow的实现,讨论的最为激烈,实现的优先级也最高。在讨论安全组之前,需要指出的是,安全组是有状态的,也就是说,不管outbound traffic( egress )的规则如何限制,只要inbound traffic( ingress )的规则允许了某些流量进入,那么相应的回复流也允许了。对于安全组的实现,在原生的Neutron中默认是通过IPtables来实现的。示意图如下:

如上图所示,虚拟机的TAP设备被桥接在了Linux Bridge上,在这个桥上通过IPtables实现了安全组。这样的实现本身没有什么问题,但是当在一个安全组里创建/更新虚拟网卡的时候,就会向该安全组里所有成员广播该消息,使得消息队列中充斥大量的广播消息,从而拖垮消息队列。

在DragonFlow中,虚拟机的TAP设备直接桥接在了OVS Bridge上,从而通过使用OVS流表实现安全组功能。

核心的思想是,一条流(Flow)对应一个安全组规则。每个虚拟机网卡(Port)绑定一个安全组,匹配条件只限定源安全组ID,目的安全组ID,同时可以增加安全策略(例如限制端口80,8080等)。

具体的技术要点:

1 利用 ovs conntrack实现基于状态的规则。

2 当port有更新时,避免流表的变化。

3 尽量最小化流表的条目数。

4 安全组更新时,影响范围要尽可能小。

性能测试
主要性能测试包括数据平面和控制平面: 数据平面主要测试主要是对比DVR的性能优势,控制平面主要测试分为以下3个方面:

1 测试pub/sub性能,主要测试local controller对neutron资源变化的响应能力。

2 在存在大量port的情况下,主要测试controller的packetout/packetin的性能,这种测试场景主要是reactive模式的性能测试,一般会在arp responser,icmp,router路由首包上送等应用场景。

3 neutron DB和dragonflow DB的一致性压力测试。目前有一个bugfix还在讨论。

保持数据库的一致性
由于DragonFLow采用了分布式数据库,产生了Neutron数据库和DragonFlow本身数据库之间的数据一致性问题。

目前尚未有统一的解决方案。对于数据一致性问题,我认为在OVN中这个问题会显得更为突出。在OVN中,有三类数据库:

NorthBound DB,SouthBound DB和Neutron DB,这样的架构当产生单点故障时,无疑是非常麻烦的。

分布式DNAT
目前,DragonFlow在网络节点上使用Neutron的L3 agent作为集中式的SNAT和DNAT,目前DragonFlow尚不支持分布式SNAT,依然需要L3 agent提供SNAT功能。我们知道,在现在的DragonFlow中,有两个OVS Bridge,br-int作为计算节点的内部网桥,br-ex作为该节点的外部网桥。在外部网桥上会实现分布式DNAT。

分布式DNAT和分布式SNAT有什么不同?对于公网IP绑定在虚拟机上时,也就是1:1的NAT,DNAT和SNAT只起到了地址转换的作用。对于公网IP绑定在路由器上时,也就是1:N的NAT,必然会用端口表示连接,如何保证连接不被复用?在L3 agent中,使用Linux Namespace作为虚拟路由器,在路由器内通过conntrack记录连接状态。

因此分布式DNAT和分布式SNAT才会在实现方式上有不通。目前DragonFlow对于分布式DNAT的优先级比较低,而分布式SNAT目前没有时间规划。

消息队列的发布/订阅
在DragonFlow中,使用ZeroMQ作为默认的消息队列。与其说ZeroMQ是消息队列,倒不如说ZeroMQ是一套基于Socket API之上实现的网络通讯库。

ZeroMQ内置四种消息模型:Request-reply (请求回复模型),Pub-sub(发布/订阅模型),Pipeline(管道模型), Exclusive pair(一对一结对模型)。

DragonFlow使用发布/订阅(pub/sub)模型,目前该feature已经全部实现了,正在review中。

分布式数据库
DragonFlow使用了分布式数据库,示意图如下: 

如图所示,会有一个数据库集群,这个集群可以采用OVSDB,ETCD,Cassandra,RAMCloud等实现。

每个计算节点上会运行相应的DB driver,通过ZeroMQ进行消息的订阅和发布。

支持Vlan网络
目前DragonFlow尚不支持vlan网络,也没有相应的spec,在后续的版本里会支持。

实现Zookeeper的DB Plugin
Zookeeper作为一个高一致性的分布式NoSQL数据库,能够实现集群管理,也可以作为DB使用,目前这个feature正在review中。

实现ML2 Mechanism driver
Neutron Server由Core Plugin和Service Plugins组成。在当前的DragonFlow中,使用DFPlugin作为Core Plugin嵌入到Neutron Server中。

在此次的Meetup中,讨论将DFPlugin作为Mechanism Driver嵌入Neutron Server。目前只有这个计划,还没有开始。

多层绑定与TOR
目前的Neutron代码中已经支持了多层绑定,在以后的版本中,DragonFlow也将考虑支持多层绑定。多层绑定的好处是,在软件架构上适应各种网络方案,软件方案以及硬件offload方案等,在硬件offload方案中,需要TOR Switch提供ovsdb,OpenFlow等,提供高性能的SDN组网方案。

Neutron目前不具备这种功能,dragonflow的local controller可以胜任,同时在对比HW的agile(控制器)方案,dragonflow local controller可以支持各种APP,例如DHCP, DNS也可实现VPN,GW,FW等高级服务,总之就是一个控制器的解决方案。

Dragonflow VS OVN
最后讨论的dragonflow与OVN谁能走的更远,在dragonflow项目开始时,OVN还不存在,后面OVS团队启动了OVN项目,希望接管整个的网络数据平面和控制平面。

他们观点如下:

1 在dragonflow和OVN这种分布式架构下,分布式数据库,以及多级数据库一致性是很头疼的问题,dragonflow需要维护neutron DB和每个local DB的一致性,而OVN需要维护Neutron DB,North DB,South DB的一致性。两个数据库一致性已经很难处理,维持三个数据库一致性的难度可想而知。

2 dragonflow的local controller 可以提供各种APP plugin,提供更灵活,高级的服务,而OVN显然不行。

3 dragonflow和ovn相比而言,一个明显的优势就是dragonflow支持插件式的DB。

4 猜测OVN或许就是vmware NSX的一个虚拟化的解决方案。

5 关于DF对OVN的态度,在午餐尾声,Gal说了一句话:To Destroy OVN

关于作者:
苌智,SDN 工程师,2015年1月加入 UnitedStack有云,专注于虚拟网络和 SDN 方向,OpenStack Neutron 社区活跃贡献者。

https://www.ustack.com/blog/neutron-dragonflow/

Neutron新进展|DragonFlow在Mitaka版本中的Roadmap的更多相关文章

  1. OpenStack Mitaka 版本中的 domain 和 admin

    OpenStack 的 Keystone V3 中引入了 Domain 的概念.引入这个概念后,关于 admin 这个role 的定义就变得复杂了起来. 本文测试环境是社区 Mitaka 版本. 1. ...

  2. [译] OpenStack Kilo 版本中 Neutron 的新变化

    OpenStack Kilo 版本,OpenStack 这个开源项目的第11个版本,已经于2015年4月正式发布了.现在是个合适的时间来看看这个版本中Neutron到底发生了哪些变化了,以及引入了哪些 ...

  3. (转)OpenStack Kilo 版本中 Neutron 的新变化

    OpenStack Kilo 版本,OpenStack 这个开源项目的第11个版本,已经于2015年4月正式发布了.现在是个合适的时间来看看这个版本中Neutron到底发生了哪些变化了,以及引入了哪些 ...

  4. [译] OpenStack Ocata 版本中的 53 个新功能盘点

    原文链接:https://www.mirantis.com/blog/53-new-things-to-look-for-in-openstack-ocata/ 原文作者:Nick Chase, Ra ...

  5. [译] OpenStack Liberty 版本中的53个新变化

    一个新的秋季,一个新的OpenStack 版本.OpenStack 的第12个版本,Liberty,在10月15日如期交付,而且目前发行版本已经备好了.那么我们期望能从过去六个月时间的开发中获得些什么 ...

  6. [译] OpenStack Pike 版本中的 53 个新功能盘点

      原文:https://www.mirantis.com/blog/53-things-to-look-for-in-openstack-pike/ 作者:Mirantis Nick Chase 发 ...

  7. CAP 2.5 版本中的新特性

    前言 首先,恭喜 CAP 已经成为 eShopOnContainers 官方推荐的生产环境可用的 EventBus 之一. 自从上次 CAP 2.4 版本发布 以来,已经过去了几个月的时间,关注的朋友 ...

  8. JAVA 8 主要新特性 ----------------(二)版本中数据结构的修改浅析

    一.版本中数据结构的修改浅析1.HashMap.HashSet.ConcurrentHashMap的数据结构发生变化 (1)HashMap简介(结构:哈希表+链表) HashMap存储的数据是无序的, ...

  9. 尝新体验ASP.NET Core 6预览版本中发布的最小Web API(minimal APIS)新特性

    本文首发于<尝新体验ASP.NET Core 6预览版本中发布的最小Web API(minimal APIS)新特性> 概述 .NET开发者们大家好,我是Rector. 几天前(美国时间2 ...

随机推荐

  1. Redis持久化之rdb&aof

    Redis有两种持久化的方式:快照(RDB文件)和追加式文件(AOF文件) RDB持久化方式是在一个特定的间隔保存某个时间点的一个数据快照. AOF(Append only file)持久化方式则会记 ...

  2. POJ 1125 Stockbroker Grapevine【floyd简单应用】

    链接: http://poj.org/problem?id=1125 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...

  3. Python 通过字符串调用函数、接近属性

    需求:传入的是函数名.属性名,想通过字符串调用函数,接近属性. 通过字符串接近.变动属性 变量:model_name, field_name # 获取 model model = AppConfig. ...

  4. solr-6.4.2安装+分词器配置

    一.solr安装 solr下载地址:http://archive.apache.org/dist/lucene/solr/6.4.2/ 1.解压solr软件包:tar xf solr-6.4.2.tg ...

  5. atoi函数的一种实现

    atoi函数的使用实例:[Ubuntu环境] main.c: #include <stdio.h> #include <stdlib.h> extern int factori ...

  6. 爬虫基本库之beautifulsoup

    一.beautifulsoup的简单使用 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyt ...

  7. input propertychange(1)

    input type=“text” 通过js改变输入框的value值是不会出发input propertychange事件

  8. facebook开源了他们的分布式大数据DB

    https://github.com/facebook/presto facebook 3天前开源了他们的 分布式大数据DB Distributed SQL query engine for big ...

  9. C语言中auto,register,static,const,volatile的区别

    1)auto 这个关键字用于声明变量的生存期为自动,即将不在任何类.结构.枚举.联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量.这个关键字不怎么多写,因为所有的变量默认就是aut ...

  10. js怎么将光标移动特定的位置:

    第一种方法: a 标签的锚: 将a标签的herf='#element_id_name'  即可 <a href="#comment_content" class=" ...