企业级IaaS架构的深度解析
楼炜 推酷

一、 关于云

1. 云产业分析

根据IDC最新的分析报告, 美国和中国云计算产业发展差异巨大:美国以公有云为主,SaaS最大、PaaS其次、IaaS最小;而中国截然相反,以私有云为主,IaaS占了大约50%的份额。 究其原因,跟中美两国云计算产业发展的阶段、成熟度有很大关系。

(a)公有云:中国的公有云主要消费者以小微、创新企业为主。 我认为 IaaS公有云已经或者将要巨头化,PaaS还有机会,SaaS会是云计算几大分类中的爆发点或者说风口, 但是要看准行业。公有云技术的发展也在影响并部分应用到私有云建设。

(b)私有云:在诸多产业中,中国云计算私有云市场主要的客户来自,通讯、金融、政府。 金融行业受安全、政策、法规的约束,几乎不会选择公有云;大型国有银行私有云的建设步骤也很谨慎、渐进式,会首先考虑迁移非核心用;小金融在私有云建设过程中相对对新技术持比较开放的态度,会实践一些开源的技术,如Openstack、Ceph等。

政府由于“十二五”、“十三五”政策持续推动、对于政务云建设的现实需求、统一纳管基础设施资源、节省成本等考虑,对云计算的投入较大。

(c)混合云: 主要应用于业务备份、弹性(含性能)、业务跨国布局的企业。

2. 国内有私有云需求的四类企业

(a) 政策驱动: 因为政策持续推动、创新补助、领导要求(政绩)等原因,需要上云的企事业单位、行政机关。

(b) 人云亦云 :一窝蜂的跟风上云,不做具体解释 :)。

(c) 新技术跟进: 看见新技术的发展、成熟,希望在其中分一杯羹,也包括idc之类的转型企业。和上一类的区别一个是模糊的、被动的,一个是有自主想法、主动的。

(d) 为业务而云: 因为业务发展规模(含弹性)、统一上收资源、成本等考虑云,此类也是私有云建设的最重要来源。主要也分两类大型互联网企业和传统大型企业。

前者因为业务发展规模需要考虑云计算 。从成本、技术可控性考虑,会采用大量的开源技术;同时会对硬件、软件提出改造要求,大力发展分布式、集群技术以适应其性能、可靠性等需求 。典型的代表是阿里。

而传统大型企业走的是另一条路,私有云建设相对稳健,会选用成熟可靠的商业化解决方案为主,如选择大型云集成商帮助建设、虚拟化软件选择VMWare等 。另一方面,这类企业相对比较谨慎,会以规划咨询、POC、招标、建设、交付、运维相对固定的模式去建设云。典型的代表是大型央企。

3. IaaS、PaaS、SaaS分析

我把顺序放过来,先说SaaS,再说PaaS,IaaS。

SaaS我认为主要应用在以下三种情况:

(a) 行业SaaS: 有行业属性的SaaS,如教育、医疗、培训等。

(b) 工具化SaaS: 比如Workday类似的管理工具、Office365类似的文档工具等。

(c) 大型企业(组织机构)内部SaaS: 有些企业内部,各地/部门业务类型相对一致,使用SaaS软件统一上收权限,节省成本等。如我之前所说,如果找准行业、方向,SaaS可能是创业的大风口。

PaaS的实现我认为有两种 (在此不区分APaaS和IPaaS):

(a) 基于商业化自动编排、部署工具的:大型企业考虑人员技能、维护成本、可靠性等要求,较多选择此类方案。 HP、IBM、BMC等都有类似的框架加软件工具。自行实现的话,可以考虑流程引擎加上脚本执行器再加介质库(含脚本库)。

(b) 基于开源框架和软件的:主要用于轻量级PaaS,在逐步走向成熟过程中。 选择CloudFundry、OpenShift框架,加Docker等技术,目前随着相关技术的成熟,越来越受到关注。上述的几个大外企实际上也有类似的实现。

IaaS的情况比较复杂,我认为难度主要在理清几个头绪:

(a) 业务对于底层资源的要求、约束: 联想的架构师团队正在做一件事情,就是梳理业界存在的十几种主要的企业业务架构(如电商、搜索等等),分析它们对于资源的各方面要求,如计算能力、IO等等,总结各种技术组件对于底层资源的统一承载要求,规划资源池的CPU、内存、存储及网络配置,功能性和非功能性要求等。

(b) 服务的设计、编排: 需要从业务的承载要求、客户消费方式、业务系统架构、部署方式、虚拟化方式、集群、资源类型做统一的规划设计。根据对客户现有情况的分析,尤其是IT系统现状、痛点等,得出客户的期望,进而设计出客户需要的服务。

(c) 服务与资源的关系: 很多人搞不清楚什么是服务,什么是资源,甚至有号称云架构师的人跟我说,他实现了对虚拟化的纳管、资源调度,就是完整的云。资源(Resource):在系统中, 基础设施、Network设备,VM、Host、OS、CPU、Memory、存储、Software、带宽等等都被视作可分配资源。而服务(Service)是云计算的核心特征,根据业务要求等可以编排服务,使之能让客户消费,通常会绑定价格、SLA等一些附带属性。云服务设计是云产品经理的重要工作。

(d) 租户与组织的关系: 要想清楚,根据客户具体现状,组织与租户怎么对应,是1对1,1对多,还是多对多,是否存在多级租户等。

(e) 资源调度的原则:要考虑资源调度策略、资源类型、性能要求,同时要考虑弹性的时候如何伸缩。 经常会有只能Scale Out,不能Scale In,或者频繁scale Out、In的情况出现。那么在考虑弹性判断条件、算法的时候,要综合几种监控告警数据,如单独出现业务、资源告警时不做处理,只在业务和资源同时告警时Scale Qut/In等。

二、 IaaS方案

1. IaaS架构影响因素

如我之前在ArchSummit群(在此,非常感谢崔总建立交流平台)里所说的,个人认为很多因素都会影响企业IaaS架构的选择,主要有以下一些:

  • 企业IT发展规划

  • 企业组织架构

  • 企业管理制度

  • 业务类型

  • 应用层次

  • 遗产系统

  • 周边业务系统的对接方式

  • 人员技能

  • 技术成熟度

  • 成本

  • 周期

  • 运维体制

  • 等。。。

这里边既有所有IT系统建设需要考虑的因素,也有私有IaaS云建设的特殊考虑因素。IaaS系统建设会上承载企业内部大量甚至全部业务系统,衔接整个企业的IT发展战略、组织架构和管理制度,根据现有业务系统和遗产接管要求,如何设计IaaS建设方案及其上的云服务就变的尤为重要。

如果不考虑其中的某个因素,都有可能导致项目的失败。 举例来说,我曾经亲身经历过一个大型PaaS项目,因为管理和客户组织架构原因导致项目失败。 客户在实施云计算建设之前,业务部门是强势部门,IT部门是支撑部门,而在规划和建设中忽略了客户组织架构的影响因素。 IT部门变成了云平台的管理者,业务部门成为相对弱势的云服务消费者,导致客户内部组织架构重组、项目停滞,并导致最终失败。

2. 私有云IaaS平台构成

我这里讲的是广义的云平台,我一般认为分成几大部分: 门户 (管理和自服务)、服务层、统一资源层 (含适配器层)、 基础设施 (含虚拟化) ,紧密相关的有BSS、OSS子系统 ;外部可能交互的系统有ITSM、CMDB、外部监控系统、4A系统和通知系统等。我画了一个主要部件的草图,方便大家理解:

blob.png




















(a) 门户分为管理和自服务,分别给管理员和普通用户提供服务; 用于展示基础设施、平台及软件服务,并控制用户接入方式,对用户的访问范围、界面的展示方式做设定等。以便于管理员和普通用户获取服务的信息,申请并使用各类服务。

(b) 服务层指服务构建与设计的逻辑组件,它负责定义服务的结构、流程等信息,组装原子服务,生成业务服务,发布到服务目录,监控服务运行状况等,形成完整的服务生命周期管理。 业务用户可以通过服务管理层获取云计算服务;管理员可以通过服务管理层监控所有服务实例的整体状况;服务开发人员可以通过服务管理层定义和发布服务。服务管理层将以业务服务的形式对外发布所有的服务操作接口。

(c) 资源层指管理和调度软硬件资源的逻辑组件,它负责构建资源池,生成简单资源供应的技术服务(原子服务),定义资源运维的操作流程。 为了组成资源池,一般将同质的设备集中安装,相互连接,并通过一定的管理软件来监管和配置。 资源池由同质的一组资源组成,用户可以通过资源管理层软件从资源池中申请资源,指定该资源实例的配置,并管理其运行。管理员可以监控每个资源池的资源使用率,健康状况和性能状况。 资源管理层将以技术服务的形式对外发布所有的资源操作接口。这一层要屏蔽掉虚拟化等的差异,使得上层无法感知。

(d) 基础设施包括计算、存储、网络,其中计算含各种异构虚拟化。

(e) BSS和OSS源自电信行业的B和O,BSS负责营销、结算等功能; OSS负责监控、安全等。恕不展开描述。

3. 虚拟化异构

能否支持X86虚拟化异构、异构的支持广度是衡量一个云资源管理平台(区别与云服务管理平台,只做资源统一纳管、不含云服务的编排及供应)的一个重要标准。目前主流的虚拟化软件有几种:

  • Vmware

  • Hyper-v

  • Xen

  • Kvm

  • 在kvm和xen上演化的各种版本

在此不考虑lxc等。主要的实现思路是在资源层做统一纳管,用一套接口整合,也即适配器模式,每种使用一个适配器。在实际开发中,一般接口做二次抽象。

目前最常见的异构是VMWare和KVM (Openstack纳管),其它异构实现方式也类似。目前有几种途径:

(a) 企业级云管理软件: 此一大类涵盖范围较广,通常不是纯粹意义上的云资源管理,而会一并包含云管理平台的功能。典型的如VMWare VCAC,HP CloudSystem等。因不是讨论的重点,从略。

(b) Openstack社区版: Openstack社区本身支持KVM较好,而对于VMWare虚拟化的支持并不完善,开源版本中有两种方式:VMWare提供的VCDriver和Citrix提供的ESXDriver。后者已经基本上被废弃了,前者有很多bug、不完善。

如果有能力、有合适的团队支撑,可以考虑在VCDriver基础上自行完善。

(c) Openstack各企业商业发行版: 如,Mirantis、Hp Hellion os商业版、Racespace等,基本上不尽成熟,或者高级功能有缺陷。我把Intel 多虚拟层环境也归到此类。

(d) VIO(VMWare Intergrated Openstack): 很多人向我推荐VIO,我反对,理由有几点:

  • 遗产系统接管。如果对于已有的VMWare虚拟化,VIO无法做遗产系统接管

  • 性能。VIO部署在虚拟机上,作为Vcenter插件,性能无法保障。

  • VIO本质上还是Openstack的一个实现,没有实现高级功能。

  • 如果需要SDN,要集成NSX,成本等各方面都需要考虑。

(e) 自己实现,调用vCenter或vSphere的接口: 推荐使用这种方式。 本部分内容可以参考之后我的另一篇文章《企业级IaaS中异构资源纳管探讨》。

4. 小机与X86异构

除了X86虚拟化异构,还要考虑小机(主要是IBM Power)、物理机、虚拟机的供应,这时也要考虑小机的纳管需求。 采用的方式也是在资源层统一纳管,但接口会有独特性,一般用流程引擎调HMC解决。本部分内容也可以参考之后我的另一篇文章《企业级IaaS中异构资源纳管探讨》。

5. Openstack及其应用场景

Openstack现在持续火热,各大厂商都在积极参与,本人也参加过Openstack峰会。结合工作中的实际,我认为Openstack长期来讲是个好东西,适合一定场景的应用范围,但并不普适。可以应用在:

  • 开发测试环境

  • 非关键业务

  • 科研实验环境

我认为Openstack需要解决的问题有:

  • 稳定性

  • 可升级。目前部分模块已经可以升级,但并不稳定

  • 高级功能,如HA等,一直在Blueprint,但一直未实现。

  • 遗产接管

此外,我认为Openstack存在贪多求快的问题,面铺的广,不够扎实,主要使用的还是那几个核心模块。

6. SDN不是企业级私有云基本需求,而是未来可能

我曾经设计了一个集成SDN和NFV(部分功能,如SLB、VFW等)的拓扑设计器,但在具体的企业级客户中,并没有太多客户迫切需要SDN 。都会提到、期望设计以后扩展到SDN的实现,而不是眼前立即应用。

我认为SDN目前主要应用在几个场景:

  1. 公有云,租户定义私有网络

  1. 私有云,需要频繁变更网络拓扑的环境,如开发测试、科研等

  1. 电信、IDC等

7. 云管平台部署架构

云管平台的部署和普通的SaaS网站没有什么不同,都是SLB加HA,后端应用集群、数据库集群,一般没有很大的压力。

blob.png




















三、 云未必节省成本

我知道我说在这个可能很多同行要扔板儿砖,可是作为一个驾狗狮,虽千万人吾往矣。。。理由如下:

  1. 规划、设计和建设周期长,时间成本高 。云平台要承载所有准备上云的业务系统,考虑因素较多,如前述。

  2. 前期采购成本高,前期资源池建设采购的设备数量较多,占用大量的机房、电源等资源,投资和运维成本均较高,一定时间内会闲置。 前期规划能力不足,也会造成资源浪费。

  3. 对企业的组织管理结构和制度可能会有调整、单体人员技能会有较高要求,造成行政管理和人员成本升高。

  4. 管理维护成本高、维护力量无法分层 :维护人员要分成不同的团队,分别管理云平台和业务,必须熟悉平台所涉及的所有的软硬件资源,维护效率不高

  5. 人云亦云,这种情况并不少见 ,尤其是资源池较小的情况下,纯属浪费。

四:Q&A

1.问题:Iaas与Paas的区别在哪?

答:IaaS供应的是基础设施资源,PaaS供应的是应用承载平台,PaaS又分APaaS和IPaaS;

2.问题:为什么不考虑容器?

答:其实我在上面提到了Docker。我认为容器技术会应用在两个方面,一是Dockerized  IaaS,也就是用IaaS的方式消费Docker,把Docker作为资源的提供者;二是轻量级的PaaS,承载中间件等,如Tomcat;

3.问题.:OpenStack应该如何找准自己的生存定位?

答:长期看好Openstack,但在目前如我前面所述还有一定的应用场景,处于发展阶段;

4.问题:我是做公有云的,主要在服务一层,想问云服务的架构设计有什么经验或者建议?

答:云服务的编排和设计是个较大的课题。架构没有特别说的,可以拆分出来作为云服务层,也可以和资源层合并。主要用于解决服务的编排问题,云服务的设计、SLA、价格是主要考虑因素;

5.问题:我觉得只要API开放的够多,云服务器提供商用用是否可以呢?

答:没明白后半句,我按照我的理解解答, API多和少要根据提供的服务目的分析,不是数量的问题、是质量的问题;同时要考虑费用、SLA(几个9)、功能完善程度等;

6.问题:企业采用私有云最大的难点在什么地方,如何选择是私有还是公有呢?

答:企业私有云影响因素我已经分析过了,最大的难点是业务分析、遗产接管;选择私有云还是公有云可以参考我之前列的因素分析。我一般认为小微、创新企业可以考虑公有云。另外还有几个要素:价格、能力、安全、政策要求等;

7.问题:云平台底层依赖虚拟化技术,比如Linux内核层的KVM,如果KVM爆出高威胁漏洞或代码执行漏洞,是否会在很大程度上威胁整个云平台的安全?

答:安全是个很大的课题,我们讲安全是一个体系,虚拟化安全只是其中一部分。可以用虚拟化安全加固方案解决。

8.问题:面向公有云的运维体系建设有什么建议?内部使用云服务开发云服务是否可行?

答:公有云的运维体系我没有建立过,一般要考虑运维策略、运维架构、人员层次、技能等;

9.问题:内部使用云服务开发云服务是否可行?

答:基于IaaS、PaaS构建SaaS是常见行为;虽然三者目前都可以单独建设、并不互相依赖由于容器技术的发展,考虑自身的能力(IaaS建设能力不足),PaaS也可以脱离IaaS构建;

10.问题:怎么管理虚拟机和Docker共存的云平台物理资源?

答:目前主流的管理方式是分开管,单独的资源池,三层网络互通;

11.问题:现在主流的几个云服务商的优劣势及各自的侧重点能否分享哈您的个人观点(比如,阿里云、金山云、腾讯云、UCloud等)

答:我其实是私有云架构师,公有云了解较少。 我认为阿里会吃掉大份额,其它只会在细分市场、垂直市场(如网盘、游戏、SDN等,分别对应你说的几个公司)有机会;

12.问题:在虚拟化的过程中单个的VM是否使用SWAP?

答:我们不用;

13.问题:怎么管理Xen和VMware共存的云平台?

答:和KVM的实现类似,调用API;我不推荐通过Openstack统一纳管,推荐分别适配;

14.问题:企业云存储是采用hdfs,ceph还是自己开发呢

答:个人见解, 对象用Swift,块用Ceph,Server-SAN用VSAN(一体机用Nutanix),文件系统HDFS;

15.问题:能否分享一下做应用开发的要避免云平台埋的哪些坑?

答:应用开发是否是指互联网应用? 一、考虑成本、技术能力和运维,我推荐公有云承载;二、看业务类型、负载(计算要求、IO要求等);三、一定要LB+HA;

16.问题: 如何对上层计算系统动态划拨资源,比如VM,YARN,Mesos等技术,目前主流那种方案呢?

答:抛开动态资源调度本身的方案,我想说关键业务系统(银行等,一般没必要)--小机,核心系统、数据库--物理机,重要系统--VMware,开发测试--Openstack(KVM)、国产虚拟化等,PaaS: K8S、Mesos都行;

17.问题:虚拟机和docker适合部署什么类型的应用,怎么解决docker的性能干扰

答:一般这两个放一起说的时候,虚机用于IaaS,Docker部署中间件(应用、MQ…)Docker主要的问题在网络和安全,目前网络用ovs的多,安全自己实现的多;

讲师介绍

楼炜/Jet,联想资深云架构师。历任同方部门副经理、首席架构师,惠普各部门任项目总监、项目集经理、首席架构师等职。熟悉IaaS、SaaS,了解PaaS。主导惠普技术服务部云方案的设计和落地,并主持和参与实施多个大型云计算项目。


CIO之家 www.ciozj.com 公众号:imciow
关联的文档
也许您喜欢