设为首页 收藏本站
查看: 636|回复: 0

[经验分享] how to read openstack code: Neutron architecture

[复制链接]

尚未签到

发表于 2017-7-9 14:44:23 | 显示全部楼层 |阅读模式
  今天这一章节非常重要。我们知道neutron是一个非常复杂的系统,由很多组件构成。研究这样一个复杂的系统,正确的顺序应该是现在宏观上对其整体结构有所了解,然后再由针对性的对其组件进行深入了解。本章要做的事情就是介绍neutron 宏观上的架构。
  首先看一下下图:
  

人 - - >  Neutron Server - - > Plugin - -> message queue - -> Agent  (Extension)
  |
  |
  MySQL database
  

  因为是markdown 编辑,所以没办法把图画的太复杂,不过其实也够了。上面就是Neutron的大致结构。
  首先,是人发起API请求给Neutron Server。这个过程没什么好说的,就是HTTP restful请求
  然后,Neutron Server 接受到请求后,会根据route规则把请求转发给相应的Plugin。这里的route规则,也就是route map是由之前介绍过的route package生成的
  Plugin接受到请求后主要做两件事,在DB中创建对象和调用Agent做响应配置。比如创建一个subnet请求,plugin会现在db创建subnet的数据对象,然后调用agent在openvswitch或者linuxbridge创建具体的配置信息。Plugin和db交互用的是sqlalchemy orm package,跟agent交互是通过message queue。
  由此可见Plugin是Neutron的核心。不过从图中还可以看到一个叫extension的东西,这里的extension跟我们之前在stevedore中提到的extension不是一回事儿,但在neutron中也非常重要,下面我们大概了解一下plugin 和 extension。

Plugin 发展历史
  Neutron是所谓pluggable结构的,就是说它的很多组件应该可以像积木一样随意插拔使用。
  Plugin 和 driver(plugin的底层结构)在neutron社区中被称作third-party code。Kilo版本之前,这些third-party code虽然可以由第三方组织或个人开发,但还是包含在Neutron的代码树中,统一管理在Neutron的代码库中。
  Kilo版本中Plugin 和 driver等代码进入了decomposition阶段。这一阶段大部分Plugin和driver的代码把主要的逻辑剥离出来存入了独立的repository。
  到了Liberty版本,Plugin等代码基本就可以独立存在于Neutron的代码库之外了。
  所以后面的文章我们会尝试编写一个独立的python plugin。所谓独立,即是说该plugin可以由我们自己独立管理,安装和发布。

Core plugin 和 Service Plugin
  Neutron早期的功能很有限,只是支持network/subnet/port/subnet-pool等资源。所以当时的Plugin主要就是管理这些资源(subnet-pool资源是后来引入的),这些Plugin叫做Core Plugin。
  Core Plugin主要涉及的都是二层的技术,比如在linuxbridge/openvswitch上配置一些二层网络。但二层上的具体实现技术有很多种,除了linuxbridge,openvswitch之外还有如cisco自己的交换机,huawei,juniper,edison等。各个厂商为了让neutron能够在自己的产品上配置二层网络开发了很多自己的core plugin,所以就出现了很多不同的core plugin。
  不过你现在去安装部署neutron会发现大部分时候用的core plugin都是一个叫ml2的core plugin。这是因为社区发现,没必要为每种二层技术开发一个plugin。core plugin要做两件事:
  

1.在数据库中创建网络对象。这部分工作不论用哪种二层技术(openvswitch还是linuxbridge)区别都不打,所以单独提炼出来一个type driver来做这件事儿  
2.用具体的二层技术如openvswitch或者linuxbridge来配置二层网络。这部分工作依据二层技术的不同会有较大不同,所以交给mechanism  driver来做
  

  现在不同的二层技术只需要实现具体的mechnisam driver即可。
  再后来随着neutron的发展,它可以支持更丰富的内容,如创建router,firewall,loadbalance等。这部分工作在neutron中叫做service。这些service neutron也和之前的资源一样用plugin来管理。不过这部分plugin不叫core plugin叫做service plugin。代码通常放在neutron/services下面,如l3_router。
  所以,neutron中的plugin主要分为core plugin 和 service plugin。core plugin用来管理核心资源network/subnet/port/subnet-pool,而service plugin用来管理高层的服务如router。
  不过,从neutron的代码中可以发现,其实neutron社区是想把这两种plugin合并成一种的。主要是把core plugin变成 service plugin的一种。neutron/manage.py中有这么一段注释很清楚的阐述了这一发展趋势:
  

    # core plugin as a part of plugin collection simplifies  # checking extensions
  # TODO(enikanorov): make core plugin the same as
  # the rest of service plugins
  

extension
  上面主要再聊plugin,那么什么是extension呢?extension主要用于丰富和扩展现有的API功能,有时新增的功能也用extension来实现,这些新功能不会放入正式的API列表,只有在测试使用过一段时间后,才会放入正是API列表,并且这些extension也会慢慢转为plugin。
  目前有下面三种extension



  • Resources extension introduce a new "entity" to the API. 所谓entity就是neutron中的资源,核心的资源有network/subnet/port/subnet-pool,当你想引入一个新的资源的时候,可以先用extension来实现
  • Action extensions tend to be "verbs" that act on a resource.举个例子,tiger是一种资源,但是eat是动作,neutron中通常的做法是用action extension来处理这个动作
  • Request extensions allow one to add new values to existing requests objects. 比如port本来是个很稳定的资源,API也很稳定。但是现在你想在创建PORT的时候添加一个属性,叫description或者area,那么可以通过extension来实现。
  下一篇文章我们将看一下core plugin以及extension。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-392010-1-1.html 上篇帖子: YC_chen 下篇帖子: 【转】Https内部机制基础知识
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表