openstack学习之知识准备

洪建茗
2023-12-01
列举一下个人学习openstack过程中涉及到的知识点,供同学们参考。了解这些知识,对学习openstack的代码有很大帮助。

python
openstack使用pthon开发的,所以pthon知识是必不可少的。python是一种脚本(python)语言,对于习惯了使用传统的编译型语言的同学,可以开始有点不适应,需要慢慢习惯。

python的学习:
1) 语法学习
这个是最简单的阶段,网上有很多教程,也有很多书籍可供参考。学习方法也很多,不同经验的人学习起来差别也比较大。如果是编程牛人,可能都不用一个时,就搞定了。

2) 学习标准库和第三方库的使用
python自带了非常多的标准库,基本涵盖了常用的功能。随python安装的手册(python manuals)对标准库有详尽的介绍。除了标准库,openstack中使用了大量的第三方库,为了掌握openstack的代码,也需要了解这些库的使用。每个openstack项目都有一个requirements.txt文件,列出了使用的第三方库。

对这些库的学习,可以边看openstack代码边学习。

3) 编写代码+阅读代码
实践永远是最重要的。阅读代码对提升水平也是大有帮助。推荐阅读标准库的实现代码。个人认为每种语言的标准库实现,都能充分展示该语言的特点,标准库的设计也基本都是大师手笔。最经典的例子当属C++的STL(标准模板库),代表了泛型编程(generic programming)的最高水平。

4) 总结python编程惯例
随着对python代码的逐渐熟悉,经验的逐渐积累,可以慢慢的总结出一些python编程的常用惯例(idioms),编程风格。这个阶段需要不断的总结反思,认识逐步深化。当然对牛人来说,可以略过了。

5)了解python的实现原理
深入学习python语言的工作原理,内部实现。学习cpython的代码。

6)超越python
到了这个阶段,基本上就不受编程语言的束缚了。超越语言,总结思想,以最合适的方式解决问题。难就难在什么是合适,需要经验的积累,系统的反思,才能领悟。当然到达这个水平,不一定要学python,学任何语言都没有问题,殊途同归。

这个学习过程不仅适用于python,任何语言都可以。这个学习过程不是线性的过程,而是反复迭代的过程,认识水平也是循环上升。有一天我们可能也会感受到“众里寻他千百度,默认回首那人就在灯火阑珊处”。大道至简!

虚拟化
虚拟化技术是Iaas的核心技术。虚拟化技术包含了3个方面:服务器虚拟化,网络虚拟化和存储虚拟化。

服务器虚拟化的核心就是hypervisor。hypervisor可以再一台机器上模拟出多台机器,每台机器有自己独立的CPU,内存及IO设备。
hypervisor的实现方式:
模拟方式(emulation):解释方式执行指令。代表项目是bochs.
direct execution: 普通指令直接在宿主CPU上执行,特权指令需要特殊处理。代表项目是qemu(没有kvm加速),早期vmware的产品。
硬件辅助 + direct execution: 普通指令直接在宿主CPU上执行,特权指令会自动陷入到hypervisor中(由硬件来实现)。代表项目qemu + kvm, vmware的各种产品。

网络虚拟化的核心是关键就是虚拟交换机(virtual ethernet bridging or VEB)。在博文《openstack学习之neutron_架构》中有所介绍。

存储虚拟化
主流技术有传统的SAN(使用FibreChannel, iSCSI, FCoE等协议)和各种分布式存储系统。openstack支持SheepDog,GlusterFS等。

libvirt
libvirt是有redhat开发的一个虚拟化管理统一接口。qemu,xen和vmware esxi都支持libvirt管理接口。opensack中对qemu(kvm)和xen的管理都是通过libvirt实现。libvirt主要通过一个xml文件管理虚拟资源。具体请参考http://libvirt.org/

REST
rest是目前主流的web service实现方式,opensack api都是采用rest方式实现。python中针对web应用定义了wsgi规范,openstack中的rest实现都遵照了wsgi规范来实现。在博文《openstack学习之各种API》中对rest api有所介绍。

rpc与amqp
openstack中的大多数服务时间都是通过rpc来通信,rpc在openstack中的作用至关重要。openstack中的rpc是通过消息系统实现的(采用AMQP协议)。关于RPC的实现在博文《openstack学习之RPC》《openstack学习之RPC服务实现分析》有所介绍。

db访问
openstack中db访问使用SQLAlchemy。SQLAlchemy是针对python的OR映射工具(Object Relational Mapping),类似于Java中的JAP(JPA是一个规范,需要实现,如hibernate)


大家可以针对自己感兴趣的点深入学习,网上有很多参考资料。

 类似资料: