`
mars914
  • 浏览: 433095 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用最精炼语言介绍OpenStack网络代码演进的前世今生

阅读更多

       在OpenStack世界中,网络组件最初叫nova-network,它混迹于计算节点nova的代码库中。nova-network可以单独部 署在一台机器上,为了高性能HA也可以和nova-compute一样部署在计算节点上(这也就是所谓的multi-host功能)。

nova- network实现简单,bug少,但性能可不弱哦,直接采用基于Linux内核的Linux网桥少了很多层抽象应该算强大的。不足之处是支持的插件少 (只支持Linux网桥),支持的网络拓扑少(只支持flat, vlan)。

 

       为了支持更多的插件,支持更多的网络拓扑,更灵活的与nova交互,于是有了quantum工程。quantum插件不仅支持Linux网桥,也支 持OpenvSwitch,一些SDN的插件以及其他商业公司的插件。在网络拓扑上,除了支持flat,vlan外,还支持gre, vxlan。但quantum不支持关键的multi-host特性。

 

quantum因为和一家公司的名称冲突,于是,改名为neutron。

 

       neutron继续演进,quantum之前的实现存在这么一个问题。我们说道说道。在quantum中,实现一种类型的插件一般包括两个部分,一 部分与数据库db打交道称之为plugin,一部分是调用具体的网络设备真正干活的称之为agent

像plugin就有linux bridge plugin, opevswitch plugin, hyper-v plugin等,这些plugin因为都是与db打交道,变化的字段并不多,所以代码绝大部分是重复的。这样也就出来了一个公共的plugin叫ml2 plugin(具体的代码实现就是TypeDriver)。

 

      但这只是一个表象,ml2还有更大的作用,那就是它里面的MechanismDriver。

      我举个例子讲,之前没有ml2的时候,plugin只能 支持一种,用了linux bridge,就不能用openvswitch了,想要都用那怎么办,那就需要MechanismDriver上场,MechanismDriver的作 用是将agent的类型agent_type和vif_type关联,这样vif_type就可以直接通过扩展api灵活设置了,所以这时候你想用 linux bridge你在vif_type里直接将port绑定成linux bridge就行了,同理,想用openvswitch就将vif_type将port绑定成openvswitch就行。

      除了让openvswitch, linux bridge这些不同的插件共存之外,ml2还能让不同的拓扑如flat, vlan, gre, vxlan其乐融融和谐共存,直接在ml2_conf.ini这个配置文件里都配上即可。这样也就解决了一个问题,以前前端horizon中无法配置是用 flat还是vlan,因为你配了也没有用,那时候后端还不支持flat和vlan同时存在了,现在皆大欢喜了。

      上面的ml2解决的只是网络中L2层的问题,对于L3层的路由功能neturon又单独整出个l3-agent,对于dhcp功能又单独整出个 dhcp-agent,不过它们归根结底仍属于实际真正干功能活的,对于和数据库db打交道的那部分则是通过提供扩展api来实现的。

      那么现在我们想加更 多的网络服务该怎么办呢,如L4-L7层的FwaaS, VPNaaS, DNATaaS, DNSaaS,所以现在neutron又出来一个新的服务框架用于将所有这些除L2层以外的网络服务类似于上述ml2的思想在数据库这块一网打尽。并且这 些网络服务可能是有序的,例如可能需要先过FwaaS防火墙服务再过DNATaaS服务来提供浮动IP,所以也就有了service chain的概念。目前这块代码只进去了firewall, loadbalance, metering, vpn几块,但万变不离其宗,未来neutron就是朝这个思想继续往下做。想用哪些服务可以通过neutron.conf这个配置文件中的 service_provider项指定。

 

最后,需要一提的是,从性能角度讲,我认为目前neutron仍然不能用于大规模的生产环境,理由如下:
1)虽然增加了更多的插件,更多的网络服务,更多的网络拓扑,但它仍然不支持multi-host功能,对性能是极大影响
2)neutron-server不支持workers通过fork实现的利用cpu多核的多进程机制,仍然是单线程实现的,阻塞的话(python解释器是单进程的,使用greenlet保证每个线程在单进程下也是线性的),会延缓接受其他请求对性能产生影响。
3)neutron-server是无状态的服务,理论上讲是可以在多台机器上运行前端再加haproxy实现HA的,但实际代码中存在众多竞争条件的bug。当然这个问题不仅在neturon有,其他组件我看一样存在。
4)在遂道性能方面存在优化的可能,遂道如GRE,VXLAN等将虚拟L2层打通反而扩大了广播风暴的可能,实际上虚拟网桥或者hypervisor都是知道虚机的IP和MAC地址的映射的关系的,根本不需要仍使用传统的ARP广播方式来获得这种映射关系。
5)其他…

成熟的路上漫漫其修远兮,这也正好给各位爱好openstack的童鞋们提供了大显身手的好机会:)

分享到:
评论

相关推荐

    OpenStack源代码学习

    ### OpenStack源代码学习知识点详解 #### 一、OpenStack简介与重要性 OpenStack作为一款开源的云计算管理平台,提供了数据中心级别的基础设施即服务(IaaS)能力。它可以帮助用户管理和控制大量的物理机以及虚拟资源...

    OpenStack代码贡献以及检视规范

    首先,我们要明确OpenStack的开发流程遵循Git版本控制系统,并使用Gerrit作为代码审查工具。开发者通常会在本地进行开发工作,然后将改动推送到个人的Git分支,接着发起一个代码审查请求到Gerrit。这个过程中,代码...

    openstack neutron代码走查分析

    openstack neutron网络模块代码分析,代码调用执行流程分析、使用技术说明

    openstack注册页面 代码解析

    这里的`{% url 'register' %}`是Django模板语言中的语法,用来获取URL反向解析的结果,即通过给定的名称(在这个例子中为`register`)获取对应的URL。这需要在视图文件(如`openstack_dashboard/views.py`)中定义好...

    OpenStack Neutron代码分析1

    OpenStack Neutron是OpenStack平台中的网络服务组件,负责为OpenStack云环境提供灵活的网络功能。本篇文章将深入分析Neutron的代码结构,帮助读者理解其内部工作原理。 **第1章 整体结构** 1.1 **bin**:这个目录...

    openstack网络配置及管理

    ### OpenStack网络配置及管理深度解析 #### 一、OpenStack网络概述 OpenStack作为一款开源的云操作系统,其核心组件之一便是网络管理组件Neutron(原名Quantum)。网络配置与管理在OpenStack中扮演着至关重要的...

    OpenStack Heat代码分析1

    【OpenStack Heat代码分析】 OpenStack Heat 是一个开源的云编排服务,它允许用户通过模板来定义、部署和管理云中的基础设施。Heat 提供了一种声明式的方法来配置和管理资源,如虚拟机、网络、存储等,使得在 ...

    OpenStack源码

    在本压缩包文件中,我们关注的是"nova-master",这是OpenStack Nova项目的主分支源代码。 Nova是OpenStack的核心组件之一,负责处理计算实例生命周期管理,如创建、删除虚拟机以及资源调度。它是一个分布式系统,由...

    openstack quantum网络介绍.pdf

    ### OpenStack Quantum网络模型介绍 #### 一、OpenStack Essex架构回顾 OpenStack Essex作为早期版本之一,在架构设计上相对简单。在Essex版本中,网络功能主要由`nova-network`组件来实现,该组件负责处理虚拟机...

    Openstack 网络深入介绍(经典)

    ### OpenStack网络深入介绍 #### 一、OpenStack Networking概览与挑战 OpenStack作为一款开源的云操作系统,其核心组件之一就是Networking服务,通常称为Neutron。它为虚拟机提供了一个灵活且强大的网络环境,使得...

    FusionSphere OpenStack云计算方案介绍.pdf

    第4页中,作者介绍了FusionSphere OpenStack的技术创新,包括标准OpenStack接口、广泛支持第三方厂商兼容OpenStack社区生态链、基于SOA的松耦合架构计算、存储、网络充分解耦等。 第5页中,作者列出了OpenStack社区...

    openstack设计与实现

    《Open Stack设计与实现》是一本介绍OpenStack设计与实现原理的书。《Open Stack设计与实现》以Juno版本为基础,覆盖了OpenStack的学习方法到设计与实现等各个方面内容,致力于帮助读者形成OpenStack及其各个主要...

    添加删除openstack网络

    添加删除openstack网络,可以删除以后的浮动IP网络配置

    OpenStack官方文档列表[中文版]

    - **语言绑定和Python客户端**:介绍了与OpenStack交互的各种编程语言绑定。 - **OpenStack基础设施项目**:介绍了OpenStack的基础设施项目。 - **OpenStack基础设施用户手册**:为使用OpenStack基础设施项目的...

    I版openstack网络结构图

    I版openstack网络结构图,描述了I版openstack的网络结构,便于调节其网络

    fuel openstack 网络拓扑详解

    fuel 官网给的3张网卡的网络示例有点误导人。实际上可以更加简化一些。只用两张网卡就可以了。 我画了一个详细的拓扑图

    简单使用openstack创建实例

    ### 使用OpenStack创建实例详解 #### 一、前言 OpenStack是一款开源的云计算管理平台项目,它提供了可扩展的云基础设施服务。本篇文章将基于给定文件中的内容,详细介绍如何在OpenStack环境中创建虚拟机实例的过程...

    pycharm远程调试openstack代码

    本文将详细介绍如何使用 PyCharm 进行 OpenStack 代码的远程调试。 #### 二、准备工作 在开始之前,确保已经完成了以下步骤: 1. **安装 PyCharm 专业版**:PyCharm 社区版不支持远程调试功能,因此需要安装 ...

    深入浅出Neutron OpenStack网络技术

    本书是一本介绍 OpenStack网络的专著,本书将会从传统的网络技术开始,让读者在大脑中建立传统网络与 Neutron网络的一一对应关系,然后介绍了深入讲解 Neutron一些重要特性背后的网络背景知识,以及它在 Neutron中是...

Global site tag (gtag.js) - Google Analytics