OpenStack与CloudStack
总的来说,不论是构建公有云还是私有云或者混合云,如果处在前期的摸爬滚打阶段,可能cloudstack更适合一些,因为cloudstack产品相对更加成熟,部署起来更简单、快速,能让我们更快速的学习云计算IaaS层的基础公共的知识及积累经验。如果已经具备云计算相关的基础经验,想做更具规模化及定制化的云,OpenStack可能更适合。当然不管选择哪一种工具做定制化,团队开发能力、经济效益都是要考虑进去
目录
一、云计算
如果说1996年至2010年是互联网时代,那么2022年,则处于云计算的时代。何为云计算?首先我们先了解什么是计算资源?
传统计算资源就是我们的计算设备,比如个人电脑,服务器。计算资源包括了CPU、内存、磁盘和网络。广义的计算资源还包括了应用软件和人力服务。由于存储本身也是一个大类,有时我们会把比如SAN、NAS存储、存储阵列等称为存储资源。所以,为了避免概念混淆,下文提到的计算,主要包含服务器、存储、网络三大类,它们构成计算服务。
当我们需要这样的计算服务的时候,我们不再需要购买实体的计算机,为其搭建网络等,而是从某个平台或组织按需申请使用,就可以享受远程的计算服务。而这种位于远方的计算服务,让人感觉它们就像在云端一样,称之为云计算。
随着云计算市场的发展,云计算的概念所包含的内容与实际的产品也在不断的变化和扩充,比如云数据库,云存储、云容器等。归根到底,就是把原来需要用户自己构建和使用的资源,全部交给云端,将资源池化。云服务商或者企业内部提供自助服务,用户只需要通过网络终端
去按需申请、使用,将更多的精力放在自己的业务即可。
图表:2018-2020年全球云计算市场规模情况
如前面所说,计算可以是一个比较广的概念,除了传统的计算资源,它还包括应用软件和人力服务。云计算则主要有三种服务模式:
IaaS(Infrastructure as a Service),PaaS(Platform as a Service),SaaS(Software as a Service)。下面我们主要介绍IaaS相关的内容。
图表:全球云计算市场结构
数据来源:中研普华产业研究院整理
二、IaaS
IaaS服务是基础设施即服务(Infrastructure as a Service),它包含了机房基础设施,计算机网络,磁盘柜,服务器
和虚拟机等。
IaaS是上面提到的云计算最核心的一种服务。早期的云计算,就是将这些基础设施资源池化之后,通过租赁的方式给租户使用。通常我们
从上至下,按层级划分云计算的三种服务模式,从SaaS到PaaS,再到IaaS。而IaaS层最关键的技术就是虚拟化技术。有了虚拟化技术,就能将计算资源划分成更细的粒度,实现资源使用的隔离,满足租户对于资源的使用配额不同的需求。
接下来介绍的OpenStack和CloudStack就是主要负责管理这一层的软件,这里称之为云计算管理工具或者云计算管理平台。拿虚拟机举例,不论我们使用的是KVM、Xen、ESXI等主流虚拟机软件。我们都可以使用这些云计算管理工具很轻松的去创建,删除、启停、迁移、备份这些虚拟机,
划分它们的网络,分配对应的存储。它们都是开源的软件,当然还有其他云计算管理工具,比如ZStack、Eucalyptus等,这里就不再展开介绍。
三、OpenStack与CloudStack
(一)概述
OpenStack与CloudStack其实都是云计算管理的软件。以下为官方的简单介绍:
OpenStack可控制整个数据中心内的大型计算、存储和网络资源池,所有资源都通过具有通用身份验证机制的API进行管理和配置。通过命令或者基于Web的可视化控制面板去管理IaaS层的云端资源。
CloudStack管理和协调存储、网络和计算机资源池,以构建公共或私有IaaS计算云。使用CloudStack,可以设置按需弹性云计算服务,允许最终用户配置资源。
(二)项目历史与运营团队
OpenStack
OpenStack它最先由美国国家航天局(NASA)和Rackspace在2010年合作研发的,旨在为公有云和私有云提供软件的开源项目。OpensStack是一个IaaS层的软件,其目标在于提供可靠的云部署方案及良好的可扩展性,从而实现类似于Amazon 或者阿里云的云基础架构服务。最终目标是
实现一个可以灵活定制的公有云IaaS软件。
2011年Rackspace宣布成立OpenStack基金会,将OpenStack贡献给了该基金会。项目完全由社区开发和维护,开发和发布周期大约6个月。
版本发布历史可以参见https://releases.openstack.org/。
2012年5月NASA宣布退出OpenStack的开发。
CloudStack
CloudStack是由VMOps(后来改名为Cloud.com)在2009年首先推出的软件。Citrix在2011年收购了Cloud.com,后让其开源,并在2012年将CloudStack贡献给Apache软件基金会,成为Apache的孵化项目(项目网站 http://cloudstack.apache.org/),同时将授权协议改为更加宽松开放和商业友好的Apache许可协议,CloudStack在2013年3月份升级为Apache的正式项目。CloudStack的目标是提供高度可用的、高度可扩展的能够进行大规模虚拟机部署和管理的开放云平台。
CloudStack由Apache CloudStack社区维护,发布周期不固定。版本发布历史可以参见 :
Apache CloudStack Release Notes — Apache CloudStack Release Notes 4.12.0.0 documentation
(三)架构
OpenStack
OpenStack采用分布式架构,整个平台按照功能不同分为多个项目,项目之间通过消息队列中间件和RESTful形式的API进行交互通信(其中认证项目为其它项目提供认证和服务注册),因此每个项目都可以单独部署在不同的主机上,架构非常的灵活,OpenStack对外提供丰富和功能强大的API,使得资源可以被用户方便的使用和调度,同时提供和Amazon AWS(Amazon Web Services)兼容的API。
图表:OpenStack 项目架构图
OpenStack的架构核心项目:
- Nova(计算)
- Neutron(网络)
- Swift(对象存储)
- Cinder(块存储)
- Keystone(认证、权限等)
- Glance(镜像)
它们都可以分开独立部署,通过API和消息队列进行通信。
CloudStack
CloudStack采用集中式的单体架构(Monolithic architecture),整个平台只有一个项目构成,不同模块之间通过的本地调用进行交互,在一台主机上就可以完成平台的部署,非常方便,CloudStack同样地对外提供自身API和与Amazon AWS相兼容的API。
CloudStack架构组成:
- Host(主机)部署虚拟化机器的宿主机
- Primary Storage(主存储),用来存放虚拟机
- Cluster (集群)一组主机与相关主存储的集合
- Pod(机架)一组Cluster的集合
- Network(网络)为虚拟机提供网络服务
- Secondary Storage(二级存储),用来存放虚拟机模板、快照、ISO
- Zone(资源域)一组Pod及相关二级存储的集合,通常为我们的某个区域的数据中心机房
- Management Server(管理服务器)统一管理整个CloudStack环境
图表:CloudStack 架构图
OpenStack的分布式架构灵活性好,不同的项目可以单独部署,因此可以很容易的根据实际需要进行功能组合,并且由于不同的项目间耦合性低,项目间功能划分明确,因此针对单独功能进行定制开发也非常方便,适合有一定研发能力的团队。
缺点也很明显,不同项目之间过于低耦合和独立,导致不同项目之间的兼容性难以保证,不同项目可能来自于不同的团队,在项目迭代开发的时候,难以确保不同项目的各个版本之间兼容性能做到最大化。比如可能存在一些商业利益导致一些不兼容的现象,某个特性由某厂开发支持,但是在项目中会用到特殊的协议,必须使用其自家的硬件设备等,最终导致不同项目之间版本的兼容性会变得更差。
CloudStack因为各个模块功能代码是合到一块,作为一个整体,部署起来会相对容易,它产品成熟度更高,由于是集中式一体化的软件,它每次大的版本升级会更简单,不同模块之间的兼容性会更好。当然相对与分布式的架构,它扩展性就要相对弱一些,如果有许多定制化的需求,可能就要在现有的架构花费更大的力气去研究和改造。
部署OpenStack的过程,我认为就像是自己从电脑城去购买配件,然后diy组装个人电脑那样,更利于创造。而CloudStack更像是直接去京东购买一台笔记本那样,当你需要去二次开发,可能会多费些功夫去研究这台笔记本的构造,看其所支持升级的部分,去购买适合的配件,升级笔记本的配置。
(四)计算
OpenStack
OpenStack计算服务的实现为代号Nova的项目,Nova的部署角色又可以分为控制节点和计算节点。控制节点主要负责调度,根据计算资源的申请需求,通过一定的策略,选择合适的计算节点,发送对应的vm操作指令,比如创建、销毁、备份vm等等。最后在宿主机上执行指令。
计算节点通常是部署vm的宿主机,在宿主机需要安装Nove的计算组件。详情查看
OpenStack Compute (nova) — nova 25.0.1.dev22 documentation
CloudStack
OpenStack计算服务由Management Server控制,具体vm资源的创建,销毁等操作由安装在宿主机上的agent去执行。详情查看
What is Apache CloudStack? — Apache CloudStack 4.17.0.0 documentation#cloudstack-terminology
无论是OpenStack还是CloudStack,它们本身不提供具体的虚拟化功能,而是虚拟化技术之上的管理手段或工具。通过编程接口控制传统的虚拟化技术来实现管理功能。
(五)网络
OpenStack
OpenStack 网络服务 (neutron) 提供了一个 API,允许用户在云中设置和定义网络连接和寻址。网络服务的项目代号是 neutron。
OpenStack Networking 处理虚拟网络基础设施的创建和管理,包括OpenStack计算服务(Nova)管理的设备的网络、交换机、子网和路由器。还可以使用防火墙或虚拟专用网络 (VPN) 等高级服务。支持的网络形式主要为VLAN、FLAT、FLATDHCP等。
详情查看 Introduction — Neutron 20.1.1.dev33 documentation
CloudStack
CloudStack 提供了两种类型的网络:基本和高级.基本类型网络适用于AWS风格的网络。提供单一网络,可通过安全组(IP 地址源过滤)等第3层手段提供访客隔离。
高级用于更复杂的网络拓扑。这种网络模型在定义访客网络方面提供了最大的灵活性,但需要比基本网络更多的配置步骤。
每个Zone都有基本或高级网络。一旦在 CloudStack 中选择并配置了Zone的网络模型,就无法更改。一个Zone在其整个生命周期中要么是基本的,要么是高级的。支持的网络形式主要为ISOLATION(VLAN)、SHARE。
详情查看 Basic and Advanced Networking — Apache CloudStack 4.17.0.0 documentation
OpenStack和CloudStack都能满足基本的网络需求,对于复杂的网络环境要求,需要结合具体实际业务配置相关的网络设备去实现。
(六)存储
OpenStack
OpenStack的存储分为对象存储和块存储,它们的项目代号分别是Swift(对象存储)、Cinder(块存储)。
Cinder用于为Nova虚拟机、Ironic裸机主机、容器等提供卷。
Swift是一个高度可用、分布式、最终一致的对象/blob存储。可以使用对象存储API创建、修改和获取对象和元数据,该API被实现为一组具象状态传输(REST)Web 服务。
详情查看
OpenStack Block Storage (Cinder) documentation — cinder 20.0.1.dev11 documentation 块存储
Object Storage API overview — Swift 2.29.2.dev3 documentation 对象存储
CloudStack
CloudStack分为主存储和二级存储。
主存储与集群相关联,它为在该集群中的主机上运行的所有VM存储虚拟磁盘。在KVM或VMware上,可以按区域配置主存储。
可以将多个主存储服务器添加到集群或区域。至少需要一个。它通常位于主机附近以提高性能。CloudStack管理客户虚拟磁盘到特定主存储设备的分配。
二级存储主要存储以下内容:
模板 - 可用于引导VM的操作系统映像,并且可以包含其他配置信息,例如已安装的应用程序
ISO 映像 — 包含操作系统数据或可启动媒体的磁盘映像
磁盘卷快照 — 保存的VM数据副本,可用于数据恢复或创建新模板
二级存储中的项目对二级存储范围内的所有主机都是可用的,二级存储范围可以按zone或region来定义。
详情查看
What is Apache CloudStack? — Apache CloudStack 4.17.0.0 documentation#about-primary-storage 主存储
What is Apache CloudStack? — Apache CloudStack 4.17.0.0 documentation#about-secondary-storage 二级存储
(七)流行性
据Statista称,OpenStack 是最受欢迎的开源云平台,近年来其采用率稳步增长。截至 2020 年,30% 的受访者确认他们在生产中使用 OpenStack。
来源:• Statista - The Statistics Portal for Market Data, Market Research and Market Studies
Google搜索文档结果数 (截止2022-06-23)
- OpenStack : 15,700,000
- CloudStack : 1,090,000
百度搜索文档结果数 (截止2022-06-23)
- OpenStack : 94,800,000
- CloudStack : 3,840,000
github 星数
- OpenStack :4.4k
- CloudStack : 1.2k
(八)整体对比
OpenStack | CloudStack | 备注 | |
---|---|---|---|
授权协议 | Apache 2.0 | Apache 2.0 | Apache 2.0协议,意味着着其为自由的下载和使用Apache软件,无论是软件的整体还是部分, 也无论是出于个人目的,公司内部目的,还是商业目的,都可以使用 |
虚拟化技术 | KVM、LXC、Vmware ESXi 、Hyper-V、XenServer、LXC等 | KVM、XenServer、VMWare(借助Vcenter)ESXi等 | |
最小化部署 | All in One,(Nova、KeyStone、Glance组件必选) | 一台管理节点主机,一台计算节点主机 | |
网络 | VLAN、Flat、FlatDHCP、Quantum虚拟化网络 | VLAN,Flat,OpenFlow | |
存储支持 | Ceph、NFS、LVM、Swift 、iSCSi等 | NFS、LVM、Ceph、Swift | |
用户页面 | 功能完善、页面相对简单 | 功能完善、页面友好 | |
使用的数据库 | PostgreSQL、Mysql、SQLite | Mysql | |
组件 | OpenStack : Nova、Glance、KeyStone、Cinder、Swift、Neutron等 | Management Server 、Host Agent、Console Proxy VM、Second Storage VM,Virtual Router Vm等 | |
开发主导 | OpenStack社区 | Apache CloudStack 社区 | |
版本兼容性 | 存在版本兼容性问题 | 不存在 | |
文档及流行度 | 流行度相对较高,文档丰富 | 流行度相对较低,文档较少 | |
部署 | 部署起来较简单 | 相对复杂 |
四、最后的看法
(一)总的看法
总的来说,不论是构建公有云还是私有云或者混合云,如果处在前期的摸爬滚打阶段,可能cloudstack更适合一些,因为cloudstack产品相对更加成熟,部署起来更简单、快速,能让我们更快速的学习云计算IaaS层的基础公共的知识及积累经验。如果已经具备云计算相关的基础经验,想做更具规模化及定制化的云,OpenStack可能更适合。当然不管选择哪一种工具做定制化,团队开发能力、经济效益都是要考虑进去的。当然,有雄厚实力及雄心壮志的团队,也可以借鉴这些开源软件的架构,尝试自研。
如果我们要建云,需要结合自身的技术实力、未来的发展方向、规模。更重要的是明白建云的目的,它能否解决当下的关键问题,达成最终的目标。
(二)关于产品成熟度的一些看法
我认为成熟度要没有绝对的好与坏。对于软件来说,如果它够成熟,至少在一定范围或者一段时间内,使用起来能规避那些常见的问题,满足基本要求。
但是,也正因为它成熟,在架构或者一些核心模块上已经定型了,可能在应对未知的变化时,没那么的灵活,可能会花更多的功夫。成熟度低,说明其处在发展阶段,有很多需要完善的地方,可能不够稳定(可能上一个版本的特性,在下一版本已经不在了)。从另一方面说,是什么导致它不成熟呢?有没有一种可能,当业务,市场不断发生变化,使得产品本身对成熟度的定义也发生了变化。换句话说,把自己的目标又抬高了。
网上有说OpenStack成熟度不够高,我在想,它从2010年开始到2022年,也有12年了,依然在不断发版本,这应该算好事吧,说明软件一直保持生长的活力。所以,在使用软件成熟度作为决策标准的时候,还得结合场景等其他维度综合考虑。
(三)网上的一些评价说法
1.CloudStack 主要推荐给小型云服务提供商或中小型企业。OpenStack 也可以被中小型公司使用,但它需要一支技术娴熟的开发人员团队,因此对于企业来说,这将是更好的软件。这两种产品都在不断发展。CloudStack 为存储和网络提供了一系列选项。
2.如果公司是偏向于项目集成的,并不想在底层做太多的投入,只希望有一个稳定的底层,自己根据用户的业务场景进行二次开发,那么CloudStack 很适合你。CloudStack的底层功能已经做的很完善了,目前CloudStack的落地项目很多,功能和稳定性上更适合商用。国内的公司只需要做一些界面的开发,结合客户的业务做一些定制即可。相对来说,开发难度低很多。国内的java程序员要比python程序员多很多,招人也方便。
3. OpenStack在市场宣传、影响力方面远胜过CloudStack,支持伙伴、社区开发人数及讨论话题数、活跃程度等也高于CloudStack,但CloudStack的平台成熟度要优于OpenStack,CloudStack的用户体验及安装容易度也都比OpenStack要好,并已在更具生产实际的环境中得到了充分验证,而OpenStack到目前为止则更像是仍处于研发阶段难以称为“成熟的产品化的IT产品”。
4.现在不管国内国外,主流公有云厂商的底座,都可以说是自研的。当然各个厂商自研的程度有区别,有的是从OpenStack某个版本切出来开始自己改,有的是借用了OpenStack某些模块,有的只是借鉴了OpenStack的设计思想,毕竟OpenStack作为开源云计算系统的标杆性项目,架构设计理念虽然不及Kubernetes,但也是云计算领域的佼佼者了。
更多推荐
所有评论(0)