[第二部分基础知识] OpenStack 新手指南 #Nova? 它是OpenStack提供云计算服务的IaaS的主要架构控制器。在美国国家航空航天局(NASA)进入了初级阶段,并贡献给了OpenSource成为OpenStack的最重要组件。 它由多个组件构成,执行不同的任务,将最终用户的API请求转化为虚拟机服务。所有这些组件都运行在一个非阻塞的基于消息的体系结构中,并且可以从相同或不同的位置运行,只需访问相同的消息队列服务。 #组件? Nova将虚拟机的状态存储在中央数据库中。这对于小型部署来说是最佳选择。Nova正在向多个数据存储方向发展,以满足高规模的需求。
#API风格
接口大多是RESTful。 路由(python重新实现Rails路由系统)包将URI映射到控制器类上的操作方法。
每个计算HTTP请求都需要特定的认证凭证。计算节点可以允许多个认证方案,提供者决定使用哪一个认证方案。
#线程模型
使用 eventlet和 greenlet库实现绿色线程设计。这会导致OS的单进程线程阻塞I / O问题。虽然单线程很大程度上减少了竞争条件,但是使用装饰者 @ lockutils.synchronized('lock_name')方法在可疑场景中进一步消除竞争,从而被保护。
如果任何操作是长时间运行的,则应该具有需求的进程状态位置触发eventlet上下文切换的方法。放置类似下面的代码片段将切换上下文到等待线程,如果有的话。如果没有其他线程在等待,将继续当前没有任何延迟的线程。
从eventlet导入 greenthread greenthread.sleep(0)
MySQL查询使用阻止主进程线程的驱动程序。在“Diablo”发行版中,一个线程池被实现,但是由于缺陷比优势大
而被移除。
#过滤程序
简而言之,它是'nova-scheduler'用来选择有价值的nova-compute主机来生成新的必需虚拟机的机制。它准备一个未经过滤的主机的字典,并衡量其创建所需的虚拟机请求的成本,然后它选择成本最低的主机。
主机根据虚拟机的配置选项加权。
由于每个请求计算权重,所以对于客户来说,更好的做法是一起要求大量的所需实例。
#消息队列用法
Nova组件使用 RPC通过使用PubSub的 Message Broker进行 通信。Nova实现了rpc.call(请求/响应,API作为消费者)和rpc.cast(一种方式,API充当发布者)。
Nova API和Scheduler使用消息队列作为Invoker,而Network和Compute充当工作者。调用者模式通过rpc.call或rpc.cast发送消息。Worker模式从队列中接收消息,并以适当的响应回应rpc.call。
#钩子
使开发人员能够通过向Nova代码中添加命名钩子来扩展Nova功能,作为装饰器将会延迟加载插件代码匹配钩子名称(使用setuptools入口点,这是一个扩展机制)。钩子的类定义应该有前置和后置的方法。
当稳定性是一个可变因素时,不要使用钩子,内部API可能会改变。
#开发引导
开始贡献...详细阅读 (OpenStack维基HowToContribute)。
为了与Nova车轮一起滚动,系统将需要libvirt和其中一个管理程序(Linux主机首选的xen / kvm)。
$ git clone git://github.com/openstack/nova.git $ cd nova $ python ./tools/install_venv.py
这将准备好您的副本nova codebase所需的virtualenv,现在任何命令你想运行在所需的代码库
$ ./tools/with_venv.sh
#运行我的测试
来运行nose测试和pep8 checker,当你完成virtualenv设置(或者这将首先在这里启动)...在'nova'代码库
$ ./run_tests.sh
#术语
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有