阿里云的云计算与openstack平台是不是基于openstack二次开发的

关于OpenStack的争议,最近又起,几天前华为云总裁郑叶来的一条微博更是一石激起千层浪。事实上,关于OpenStack的争议,持续数年,欧美与中国,都存在巨大分歧。

华为云之外,选择OpenStack在国内还有不少企业,包括腾讯云等。阿里是国内最早提出云计算战略,并落地执行的企业,云计算的布局始于2009年,这一年阿里云也有了自主研发的“飞天”Apsara。华为与腾讯的云计算战略,起步较晚,选择OpenStack对它们来说,是捷径,能够冷启动,加快追赶步伐。

OpenStack争议声不断,欧美市场上,它的市场也不断萎缩。应该说,美国国家航空航天局NASA在2012年放弃OpenStack,转而采用亚马逊的云计算服务,就是OpenStack落寞的前兆。

美国国家航空航天局NASA是OpenStack的重要推手,NASA在2009年和Rackspace一起创建了OpenStack,转而采用AWS核心原因就一条:NASA是政府部门,不是商业机构,采用亚马逊的云计算,NASA每年可以节省100万美元的成本。

OpenStack辉煌一时,包括IBM、AMD、英特尔、戴尔、思科、惠普均投入它的怀抱。

美国国家航空航天局NASA在2012年停止OpenStack相关研发工作,揭开了OpenStack的式微序曲,在此之后,越来越多的IT厂商开始放弃OpenStack:2015年,Rackspace宣布将客户的业务迁移到 AWS

应该说,OpenStack并没有“其兴也勃焉、其亡也忽焉”的波澜壮阔,“百足之虫,死而不僵”,OpenStack目前还有不少拥趸,式微与没落也都是渐进的。

OpenStack诞生在美国,但美国前三大云计算厂商,亚马逊AWS、微软Azure、谷歌GCP无一例外都是走自主研发路线。也就是说,OpenStack已经快成为被美国市场抛弃的技术。

OpenStack的软件模块由不同厂商提供,没有总体的规划设计,组件一致性差,就像一个杂乱如麻的电线杆,整个系统不具备可扩展性,很容易碰到天花板。在这背后,国内外已经有大量客户被迫“放弃”,为烂尾工程交了惨痛的学费。

OpenStack也容易造成产品与服务的混乱,容易形成“DIY拼凑”。正是意识到OpenStack的短板所在,华为云才有了“源于开源,强于开源,回馈开源”的理念提出,在OpenStack框架上做自己的,以求“架构统一、服务统一、生态统一”。

曾几何时中关村电子市场火爆异常,许多购买PC的人都会选择DIY组装,不过,现在攒机不再流行,品牌PC或笔记本被市场证明,是服务更好,也是最稳定的选择。将OpenStack比喻成DIY攒机,或许并不准确,OpenStack与阿里云、亚马逊AWS、微软Azure的差异,也类似安卓Android与苹果IOS的差异——与安卓Android相比较,苹果IOS更稳定,与智能手机不同的是,公有云市场服务的是B端客户,安全与稳定性要求更高。

如果仔细梳理选择自主研发与OpenStack两个阵营,美国与中国市场,两种不同路径选择的公司,都有自己的“基因”所决定的:阿里云、亚马逊AWS、微软Azure、谷歌GCP,自主研发的都是互联网公司,而选择OpenStack如IBM、英特尔、华为,包括退出的思科与惠普,都是传统的IT厂家。

自主研发与OpenStack,其实是互联网与传统IT之争——尽管,腾讯也是互联网公司,但腾讯的云计算起步晚,选择OpenStack是“走捷径”的唯一选择。

有人将OpenStack视为传统IT硬件厂商的救命稻草,它们没有云计算的自研能力,于是有了一个集成技术,换个方式继续卖硬件设备。OpenStack最大的短板在于——自诞生以来,OpenStack几乎没有经历过大规模的实战检验,版本分支繁多且相互不兼容,跨厂商无法迁移升级。

互联网与传统IT相比较,它们的优势是,迭代升级上响应迅速。OpenStack从私有云出来,它的基因就并非为大规模业务服务的,传统IT公司还有根深蒂固的硬件思维,如IBM毕竟还是卖服务器的。互联网公司切入云计算,并迅速做大,如亚马逊、微软、谷歌、阿里,更多的是将它们自身积累的理念与经验的外部化。

美国云计算格局,已经证明,OpenStack的没落不可避免,IBM、思科、惠普等终究敌不过亚马逊、微软、谷歌——传统IT硬件厂商在云计算领域,打不过互联网公司,这是宿命,由各自的基因所决定。国内云计算市场,相信也将重复这样的进程。

人生长恨水长东,OpenStack的落寞,值得惋惜,但不可避免。

本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。

}

OpenStack 兼容一部分 AWS 接口,同时为了提供更强大的功能,也提供 OpenStack 风格的接口(RESTFul API)。和其他开源 IaaS 相比,架构上松耦合、高可扩展、分布式、纯 Python 实现,以及友好活跃的社区使其大受欢迎,每半年一次的开发峰会也吸引了来自全世界的开发者、供应商和客户。

Compute(Nova)提供计算虚拟化服务,是 OpenStack 的核心,负责管理和创建虚拟机。它被设计成方便扩展,支持多种虚拟化技术,并且可以部署在标准硬件上。

Object Storage(Swift)提供对象存储服务,是一个分布式,可扩展,多副本的存储系统。

Dashboard 提供了一个图形控制台服务,让用户方便地访问,使用和维护 OpenStack 中的资源。

Image(glance)提供镜像服务,它旨在发现,注册和交付虚拟机磁盘和镜像。支持多种后端。

网易私有云平台概况 图 1.网易私有云架构

网易私有云平台由网易杭州研究院负责研发,主要提供基础设施资源、数据存储处理、应用开发部署、运维管理等功能以满足公司产品测试/上线的需求。

图 1 展示了网易私有云平台的整体架构。整个私有云平台可分为三大类服务:核心基础设施服务(IaaS)、基础平台服务(PaaS)以及运维管理支撑服务,目前 一共包括了:云主机(虚拟机)、云网络、云硬盘、对象存储、对象缓存、关系型数据库、分布式数据库、全文检索、消息队列、视频转码、负载均衡、容器引擎、 云计费、云监控、管理平台等 15 个服务。网易私有云平台充分利用云计算开源的最新成果,我们基于 OpenStack 社区的 keystone、glance、nova、neutron 组件研发部署了云主机和云网络服务。

为了与网易私有云平台其他服务(云硬盘、 云监控、云计费等)深度整合以及满足公司产品使用和运维管理的特定需求,我们团队在社区 OpenStack 版本的基础上独立研发了包括:云主机资源质量保障(计算、存储、网络 QoS)、镜像分块存储、云主机心跳上报、flat-dhcp 模式下租户内网隔离等 20 多个新功能。同时,我们团队在日常运维 OpenStack 以及升级社区新版本中,也总结了一些部署、运维规范以及升级经验。两年多来,网易私有云平台 OpenStack 团队的研发秉承开源、开放的理念,始终遵循"来源社区,回馈社区"的原则。在免费享受 OpenStack 社区不断研发新功能以及修复 bug 的同时,我们团队也积极向社区做自己的贡献,从而帮助 OpenStack 社区的发展壮大。两年来,我们团队一共向社区提交新功能开发/bug 修复的

得益于 OpenStack 的日益稳定成熟,私有云平台目前已经稳定运行了 2 年多时间,为网易公司多达 30 个互联网和游戏产品提供服务。从应用的效果来看,基于 OpenStack 研发的网易私有云平台已经达到了以下目标:

提高了公司基础设施资源利用率,从而降低了硬件成本。以物理服务器 CPU 利用率为例,私有云平台将 CPU 平均利用率从不到 10% 提升到 50%。

提高了基础设施资源管理与运维自动化水平,从而降低了运维成本。借助于 Web 自助式的资源申请和分配方式以及云平台自动部署服务,系统运维人员减少了 50%。

提高了基础设施资源使用弹性,从而增强了产品业务波动的适应能力。利用虚拟化技术将物理基础设施做成虚拟资源池,通过有效的容量规划以及按需使用,私有云平台可以很好适应产品突发业务。

由于网易私有云需要部署在多个机房之中,每个机房之间在地理位置上自然隔离,这对上层的应用来说是天然的容灾方法。另外,为了满足私有云的功能和运维需 求,网易私有云需要同时支持两种网络模式:nova-network 和 neutron。针对这些需求,我们提出了一个面向企业级的多区域部署方案,如图 2 所示。从整体上看,多个区域之间的部署相对独立,但可通过内网实现互通,每个区域中包括了一个完整的 OpenStack 部署,所以可以使用独立的镜像服务和独立的网络模式,例如区域 A 使用 nova-network,区域 B 使用 neutron,互不影响,另外为了实现用户的单点登录,区域之间共享了 keystone,区域的划分依据主要是网络模式和地理位置。

图 2.多区域部署方法

和典型 OpenStack 部署将硬件划分为计算节点和控制节点不同的是,为了充分利用硬件资源,我们努力把部署设计成对称的,即任意一个节点下线对整体服务不会照成影响。因此我们 将硬件分为两类:计算节点,控制计算节点。计算节点部署 nova-network,nova-compute,nova-api-metadata,nova-api-os-compute。控制计算节点除了

图 3.计算节点,控制计算节点

运维上使用网易自主研发的运维平台做监控和报警,功能类似 Nagios,但是更加强大。其中较重要的监控报警包括日志监控和进程监控。日志监控保证服务发生异常时第一时间发现,进程监控保证服务正常运行。另外网易私有云使用 Puppet 做自动部署,以及使用 StackTach 帮助定位 bug。

OpenStack 各组件配置OpenStack Havana 的配置项成百上千,大部分配置项都是可以使用默认值的,否则光是理解这么多的配置项的含义就足以让运维人员崩溃,尤其是对那些并不熟悉源码的运维人员来说 更是如此。下文将列举若干网易私有云中较关键的配置项,并解释它们如何影响到服务的功能,安全性,以及性能等问题。


它另外的用途是虚拟机在 resize、cold migrate 等操作时,与目的端宿主机进行数据通信。该项的默认值为宿主机的外网 IP 地址,建议改为内网地址以避免潜在的安全风险。

此项是 nova-api-metadata 服务监听的 IP 地址,可以从上面的 iptables 规则里面看出它与 my_ip 的配置项有一定的关联,保持一致是最明智的选择。

1)实现 novnc 代理服务的高可用

2)不会暴露云平台相关节点的外网地址

1)虚拟机都监听在其所在的计算节点的内网 IP 地址,一旦虚拟机与宿主机的网络隔离出现问题,会导致所有虚拟机的 VNC 地址接口暴露出去

2)在线迁移时会遇到问题,因为 VNC 监听的内网 IP 在目的端计算节点是不存在的,不过这个问题 nova 社区已经在解决了,相信很快就会合入 J 版本。

在 nova-compute 进程启动时,启动应该处于运行状态的虚拟机,应该处于运行状态的意思是 nova 数据库中的虚拟机记录是运行状态,但在 Hypervisor 上该虚拟机没有运行,在计算节点重启时,该配置项具有很大的用处,它可以让节点上所有虚拟机都自动运行起来,节省运维人员手工处理的时间。

不限制 API 访问频率,打开之后 API 的并发访问数量会受到限制,可以根据云平台的访问量及 API 进程的数量和承受能力来判断是否需要打开,如果关闭该选项,则大并发情况下 API 请求处理时间会比较久。

nova-api-os-compute api 的最大返回数据长度限制,如果设置过短,会导致部分响应数据被截断。

nova-scheduler 可用的过滤器,Retry 是用来跳过已经尝试创建但是失败的计算节点,防止重调度死循环;AvailabilityZone 是过滤那些用户指定的 AZ 的,防止用户的虚拟机创建到未指定的 AZ 里面;Ram 是过滤掉内存不足的计算节点;Core 是过滤掉 VCPU 数量不足的计算节点;Ecu 是我们自己开发的过滤器,配合我们的 CPU QoS 功能开发的,用来过滤掉 ecu 数量不足的计算节点;ImageProperties 是过滤掉不符合镜像要求的计算节点,比如 QEMU 虚拟机所用的镜像不能在 LXC 计算节点上使用;Json 是匹配自定义的节点选择规则,比如不可以创建到某些 AZ,要与那些虚拟机创建到相同 AZ 等。其他还有一些过滤器可以根据需求进行选择。

nova-compute 定时任务发现在数据库中已经删除,但计算节点的 Hypervisor 中还存在的虚拟机(也即野虚拟机审计操作方式)后的处理动作,建议是选择 log 或者 reap。log 方式需要运维人员根据日志记录找到那些野虚拟机并手工执行后续的动作,这种方式比较保险,防止由于 nova 服务出现未知异常或者 bug 时导致用户虚拟机被清理掉等问题,而 reap 方式则可以节省运维人员的人工介入时间。

用户配额与 instances 表中实际使用量的同步阈值,也即用户的配额被修改多少次后强制同步一次使用量到配额量记录

用户配额与实际使用量的同步时间间隔,也即距上次配额记录更新多少秒后,再次更新时会自动与实际使用量同步。

众所周知,开源的 nova 项目目前仍然有很多配额方面的 bug 没有解决,上面两个配置项可以在很大程度上解决用户配额使用情况与实际使用量不匹配的问题,但也会带来一定的数据库性能开销,需要根据实际部署情况进行合理设置。

虚拟机 vCPU 的绑定范围,可以防止虚拟机争抢宿主机进程的 CPU 资源,建议值是预留前几个物理 CPU,把后面的所有 CPU 分配给虚拟机使用,可以配合 cgroup 或者内核启动参数来实现宿主机进程不占用虚拟机使用的那些 CPU 资源。

物理 CPU 超售比例,默认是 16 倍,超线程也算作一个物理 CPU,需要根据具体负载和物理 CPU 能力进行综合判断后确定具体的配置。

内存分配超售比例,默认是 1.5 倍,生产环境不建议开启超售。

内存预留量,这部分内存不能被虚拟机使用

磁盘预留空间,这部分空间不能被虚拟机使用

服务下线时间阈值,如果一个节点上的 nova 服务超过这个时间没有上报心跳到数据库,api 服务会认为该服务已经下线,如果配置过短或过长,都会导致误判。

RPC 调用超时时间,由于 Python 的单进程不能真正的并发,所以 RPC 请求可能不能及时响应,尤其是目标节点在执行耗时较长的定时任务时,所以需要综合考虑超时时间和等待容忍时间。

是否开启 nova-network 的多节点模式,如果需要多节点部署,则该项需要设置为 True。

Keystone配置项较少,主要是要权衡配置什么样的后端驱动,来存储 token,一般是 SQL 数据库,也可以是 memcache。sql 可以持久化存储,而 memcache 则速度更快,尤其是当用户要更新密码的时候,需要删除所有过期的 token,这种情况下 SQL 的速度与 memcache 相差很大很大。

glance-api 处理请求的子进程数量,如果配置成 0,则只有一个主进程,相应的配置成 2,则有一个主进程加 2 个子进程来并发处理请求。建议根据进程所在的物理节点计算能力和云平台请求量来综合确定。

一个响应中最大返回项数,可以在请求参数中指定,默认是 25,如果设置过短,可能导致响应数据被截断。

OpenStack 底层依赖软件版本、配置以及性能调优 虚拟化技术选型在私有云平台的体系架构中, OpenStack 依赖一些底层软件,如虚拟化软件,虚拟化管理软件和 Linux 内核。这些软件的稳定性以及性能关系着整个云平台的稳定性和性能。因此,这些软件的版本选择和配置调优也是网易私有云开发中的一个重要因素。

在网易私有云平台中,我们选用的是 Linux 内核兼容最好的 KVM 虚拟化技术。相对于 Xen 虚拟化技术,KVM 虚拟化技术与 Linux 内核联系更为紧密,更容易维护。选择 KVM 虚拟化技术后,虚拟化管理驱动采用了 OpenStack 社区为 KVM 配置的计算驱动 libvirt,这也是一套使用非常广泛,社区活跃度很高的一套开源虚拟化管理软件,支持 KVM 在内的各种虚拟化管理。


内核选型在内核的选型方面,我们主要考虑如下两方面的因素:

稳定性:在开发私有云平台的一开始,稳定性就是网易私有云开发的一大基本原则。我们采用 Debian Linux 版本,相对来说,Debian 的原生内核无疑更为稳定。这也是我们最开始的一个选择。

功能需求:在网易的定制开发中,为了保证虚拟机的服务性能,我们开发了 CPU QoS 技术和磁盘 QoS,它依赖底层的 CPU 和 blkio cgroup 支持。因此,我们需要打开内核中的 cgroup 配置选项。另一方面,网易私有云综合各方面考虑,将支持 LXC 这种容器级别的虚拟化,除了 cgroup 外,LXC 还依赖 Linux 内核中的 namespace 特性。

底层依赖软件后,网易私有云运行还比较稳定,我们后续还会适时的对这些软件进行更新。

配置优化在网易私有云的稳定性得到了保障之后,我们开始了性能方面的调优工作。这一方面,我们参考了 IBM 公司的一些优秀实践,在 CPU、内存、I/O 等方面做了一些配置方面的优化。整体而言,网易私有云在注重稳定性的基础上,也会积极借鉴业界优秀实践来优化私有云平台的整体性能。

为了保障云主机的计算能力,网易私有云开发了 CPU QoS 技术,具体来说就是采用 cfs 的时间片均匀调度,外加 process pinning 的绑定技术。

参考 IBM 的分析,我们了解到了 process pinning 技术的优缺点,并且经过测试也验证了不同绑定方式的云主机间的性能存在较大的差异。比如,2 个 VCPU 分别绑定到不同 numa 节点的非超线程核上和分配到一对相邻的超线程核上的性能相差有 30%~40%(通过 SPEC CPU2006 工具测试)。另一方面,CPU0 由于处理中断请求,本身负荷就较重,不宜再用于云主机。因此,综合上面的因素考虑以及多轮的测试验证,我们最终决定将 0-3 号 CPU 预留出来,然后让云主机在剩余的 CPU 资源中由宿主机内核去调度。最终的 CPU 配置如下所示(libvirt xml 配置):

内存配置方面,网易私有云的实践是关闭 KVM 内存共享,打开透明大页:

1)磁盘 I/O 的配置优化主要包含如下方面:

disk io scheduler:目前网易私有云的宿主机磁盘调度策略选用的是 cfq。在实际使用过程中,我们发现 cfq 的调度策略,对那些地低配置磁盘很容易出现 I/O 调度队列过长,utils 100% 的问题。后续网易私有云也会借鉴 IBM 的实践,对 cfq 进行参数调优,以及测试 deadline 调度策略。

我们主要是开启了 vhost_net 模式,来减少网络延时和增加吞吐量。

运维经验 使用经验开 源软件 bug 在所难免,但是新版本比旧版本会好用很多,尤其是对于 OpenStack 这种正在迅速成长壮大的开源软件来说更是如此,这一点在我们使用过 Essex、Folsom 和 Havana 版本后深有体会,所以建议各种 OpenStack 用户能及时的跟进社区版本,与社区保持同步。

不要轻易的对社区版本进行各类所谓的功能性能方面的"优化",尤其是 在没有与社区专家交换意见之前,千万不要轻易下手,否则此类"优化"极有可能演变成故障点或者性能瓶颈点,最终可能导致无法与社区同步,毕竟一个公司或团 队(尤其是小公司、小团队)的能力和知识储备,是很难与社区成百上千的各类专家相提并论的。

多参考各类大型公司分享的部署架构方案,尽量不要自己闭门造车,尤其是对于开源软件来说,各类公司、团队的使用场景千差万别,各种周边组件也是应有尽有,多参考业界实践是最好的方式。

一些细节实现可能有很多途径,但每种方式都有优缺点,需要经过充分的论证、分析、测试验证后,才能考虑部署到生产环境使用。

所有的部署方案、功能设计都要考虑到平滑升级问题,即使你得到的信息是升级时可以停服,仍然要尽量避免这种情况,因为停服的影响范围很难界定。

运维准则OpenStack 也是一个后端系统服务,所有系统运维相关的基本准则都适用,这里简单的提几点实际运维过程中根据遇到的问题总结的一些经验:

配置项默认值与实际环境不匹配可能导致各种问题,尤其是网络相关配置与硬件有很强的关联性,生产环境和开发环境硬件异构,导致部分默认值在生产环境不适用。应对准则:每个版本都必须在与线上硬件相同的环境测试过才能上线。

做好容量规划,已分配的配额量要小于云平台总容量,否则会出现各种问题,导致运维开发耗费很多不必要的精力去定位分析问题。

配置项过多容易出错,需要与开发人员一起仔细核对,上线时首先要通过 puppet 的 noop 功能验证改动是否正确后,才能真正上线。

网络规划要提前做好,如固定 IP、浮动 IP、VLAN 数量等,网络扩容难度和风险都比较大,所以提前规划好是最保险的,一个原则是大比小好,多比少好。

网络隔离要做好,否则用户网络安全没办法保证。

信息安全问题要重视,这个是老生常谈的问题了,每个平台都有相同问题,但还是要重视再重视,一旦出现安全漏洞,所有虚拟机都面临严重威胁。

}

这种方案缺点,就是需要重头开始设计表撒的,什么都得重头做。在java后台调用openstack-api。

好处就是:自己的代码,维护方便,易于“扩展”。

在openstack-horizon上开发,它已经有登录、身份验证、虚拟机管理等各种功能。在上面做二次开发即可。

该方案好处:在上面做,好多功能不开发。

缺点:需要学习python,以及读horizon模块有清楚的了解。

不知道大伙怎么考虑的,是否有其他的方案?

}

我要回帖

更多关于 云计算与openstack 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信