有关云架构建设和选型的思考

最近在负责公司内部私有云的建设,一直在思考怎么搞云计算,怎么才能够把云架构设计得好一些。本文尽量全面的列出了云架构建设和选型的考量因素。

我们主要从五个层面逐步评估云架构的建设和选型,分别是:

  1. 行业生态
  2. 企业需求
  3. 云计算的能力
  4. 潜在的挑战
  5. 如何建设

一、行业生态

计算机云经过多年的发展,由一开始的概念,慢慢发展成熟并能够推向市场,提供多种多样的服务,市场空间非常之大。

在云的发展过程中,亚马逊经过多年的深耕积累,发展成为了云行业的标杆企业,甚至可以说是建立了云解决方案的标准。之后,Google、IBM、思科、Oracle、HP、Intel、华为等IT巨头先后参与进来,在软件和硬件方面提供专门的面向企业的解决方案,纷纷打着云计算、大数据、智能等概念来吸引客户,拓展市场。

另外一方面,基于大数据、存储、云服务等,市场上也先后出现一些创新企业,如Dropbox、Rackspace,国内的七牛、青云、UnitedStack等。

当前的IT世界有一个常见的现象,就是只要某一个领域有一套成熟的商业软件,就同时也会有一套开源的解决方案,如Windows之于Linux,Google的MapReduce、GFS、大表之于Hadoop等。在云领域也存在相应的开源解决方案,目前最为著名的有Openstack和Cloudstack。开源行业的领导者RedHat此前

在企业操作系统的市场已经做的很好,RHEL的各个版本在企业级系统市场有相当高的市场份额。现在的RedHat特别重视云的发展,并将云操作系统作为未来10年的发展战略重点,在最近两年先后收购了Gluster以及Ceph等存储企业,以壮大自己在云领域的影响力。

随着云领域的发展,市场上也逐渐形成了面向企业提供硬件和软件产品的提供商、面向企业提供服务的提供商、面向市场初创企业提供基础服务的提供商、面向个人提供业务服务的提供商等一系列行业生态。0813002

二、企业需求

需求是什么,也就是what people need这个问题。我们所说的people,即人或者公司实体,该对象的划分并不单纯,可粗浅的从三个角度来进行分类:

从企业角度看:

1)小型企业

小型企业的技术储备不多,人员缺乏,没有独立的IT部门,但是在构建自己的IT系统过程中需要购置各种产品和服务,包括服务器、网络、CDN等等,而要完成这样的工作,需要投入大量的人力和财力。通过购买云服务可以更加方便快捷,简单的完成系统的搭建。

2)中型企业

中型企业有一定的规模,需要在信息化、管理方面有所注重,一般内部都设立IT部门,但是和小型企业一样,IT部门大多数都是为了解决自身需求,很难能够有一个完整的解决方案。这样在服务器、网络、CDN、企业管理软件等等的需求还是比较大的。

3)大型企业

大型企业人数规模在万人以上,特别是高新企业,都有一个实力不错的IT支撑部门,通过部门就可以完善对企业内部信息化建设。

从企业性质范围来看:

1)传统行业企业

传统行业大多数是以服务业、制造业、生产性企业为主,在IT信息化方面相对比较落后,属于重资产行业。

2)互联网企业

互联网行业是基于IT作为解决方案的

3)IT服务企业

以销售软件、硬件、以及技术咨询服务为主的企业。

针对市场中存在的企业、个体等的需求特点,市场上一般对软件服务进行如下分类:

  1. 提供软件的服务,解决企业内部信息化问题,如ERP系统、进销存管理系统、人力资源管理系统、行政系统、财务系统等等。(SaaS)
  2. 提供平台服务,解决行业共性问题,将SaaS迁移到云端,提供平台类的服务。如淘宝的开放平台、Facebook的开放平台、基于Salesforce的销售系统、云笔记、云盘等。(PaaS)
  3. 提供基础设施服务。基础设施包括软件和硬件方面的,包括存储、虚拟机、网络、防火墙、缓存、负载均衡、数据库等等。(IaaS)

从企业内部人员角色来看:

企业内部,尤其是互联网企业内部,一般将角色分为如下几类:

  1. 开发
  2. 测试
  3. 运维
  4. DBA
  5. 产品
  6. 项目管理人员
  7. 客服
  8. 业务人员(销售、市场、BD、人力资源、行政等等)

不同的角色对于软件服务的需求也是不同的,下图大致描绘了互联网行业各个角色对云平台的需求:

0813003

三、云计算的能力

云计算能够解决什么,也就是what cloud offer这个问题。目前的云计算在应用中主要提供了以下八个能力:

  1. 封装:将计算能力和软件放在云端,可以减少重复建设,将通用的服务封装起来,达到重用,减少资源的浪费,提高生产效率,并提供成熟的解决方案。在云端,云提供商可以建立软件的标准,提供发布包的方式,用户可以通过软件包的方式进行购买使用,譬如目前开源领域的Docker。
  2. 安全:云计算将数据和存储,软件逻辑都集中于云端,更能方便的统一构建安全体系,通过Iptables实现网络过滤,并在服务端做安全组件实现安全策略,并能够通过海量集群应对DDOS攻击等。
  3. 灵活:云计算提供灵活的软件和服务端架构,用户不再需要自己构建应用运行环境,对资源的使用能够按需购买,并能够升级,并自由组合。举例来说:用户可以选用不同的存储方式(mysql、oracle,文件系统,kv等等)
  4. 性能:通过集群的能力和云端的集成能够提高集群的性能处理,通过专业的云解决提供商,在云端的性能扩展更加方便,技术上更加专业。譬如服务端可以在用户毫不察觉的情况下完成添加机器、存储扩容等操作。
  5. 伸缩能力:在存储和计算能力方面提供弹性的资源管理,能够按需使用,在使用过程中,可以通过动态的添加和减少物理资源,来提高响应能力或节约成本。
  6. 运维:云计算在IaaS角度来看,重要的是运维,能够将运维更加集中化管理,并完全智能化,大大降低人力成本
  7. 充分利用物理资源:通过云建设,能够将物理资源进行虚拟化处理,屏蔽物理硬件底层,并能够完成物理资源软化进行逻辑管理和分配调度
  8. 大数据:大数据保存于云端,能够提供数据分析和智能处理

当然,云计算还有很多很多好处,给我们带来很多想像空间和IT技术的革命。

公有云与私有云

行业内将云分为“公有云”和“私有云”。在我们之前的需求分析过程中,大致了解了云的需求,“公有云”和“私有云”的差别最大的是需求的差异,因为需求的差异,导致了技术方案和产品决策的差异。

公有云需求上由于用户多种多样,导致需求存在不一样,特别需要更多的定制化,譬如:

  1. 存储个性化云存储方面大概分为块存储和对象存储,块存储适合于vm运行环境,对象存储提供了KV的访问方式提供了海量扩展存储文件的能力,用户可以根据自己的需求选择不同的存储方式,选用不同的容量。在存储物理介质方面来说,因为存在不同的物理介质,对性能和安全的要求,可以采用传统的SATA硬盘,或者SSD存储等。
  2. 内存使用内存方面,需要提供动态扩展内存的方式,用户能够自由扩展
  3. 网络的定制化公有云用户需要能够构建自己的内部网络,并能够自动组网
  4. 数据库使用公有云的用户分属不同的公司团体,各自的技术差异存在,因而有不同的数据库类型,譬如mysql,sqlserver,oracle等等。并能够定义存储大小,内存运行大小等等。并提供数据备份、恢复、高可用服务等
  5. 缓存使用公有云的用户可以选择不同的缓存方式,譬如增加CDN,采用不同的KV缓存方式并选择容量。
  6. 安全问题公有云对于云的安全和私有云差别较大,私有云大多数在安全问题上不需要公有云那么严格,大多数是内部系统之间的交互

以上仅限于IaaS层面的考虑,当然对于公有云来说还有很多细化的个性化需求,例如:数据分析,业务对接服务等等。

四、潜在的挑战

计算机自从诞生以来,一直按照冯.诺伊曼的体系发展在硬件的基础上的操作系统,也分为网络协议体系的实现、内存管理、文件管理体系等等。大致的抽象图如下:

0813004

要建设云,有几个重要的问题需要解决:

  1. 管理问题云计算的实施首先要解决运维的问题,在云环境下后端是大规模数量的物理节点的集群,对于同时维护数以千计算的计算节点,以及部署结构的复杂,需求的变化,光靠增加人力也难以解决复杂的问题。从而需要构建高效的计算资源管理系统,能够灵活简单的管理运系统,并能够及时的发现问题。
  2. 计费问题(公有云)对于公有云而言,因为是面向公众的,必然产生费用的问题,常用的收费方式多种多样,也因为产品的不同而计费方式不同,譬如:网络、存储、cpu、数据库容量等等
  3. 资源隔离问题云计算运行在云端,是通过虚拟化体系建立的,虚拟化是建立在硬件之上,多个虚拟化资源同时运行于同一节点(host)中,存在着资源的共享争用问题,

    这样就存在着资源使用的公平性问题,导致同一Host上的资源使用相互影响。为了使得彼此资源使用相互独立,我们要建立相应的隔离机制。资源的隔离包括:存储、内存、cpu、数据库、网络等,其中网络是最难控制的。

  4. 安全问题在云端的应用和基于客户端的安全,面临的环境不一样,客户端方面大多数是病毒问题引起的,而在云端,也存在一些服务器攻击的问题,以及数据相互独立相互影响的问题,以及一些服务端编程的安全问题等。
  5. 性能问题对于云来说,需要保证云端的性能问题,包括CPU处理性能,IO处理能力,资源的就近访问,资源数据同步的速度,还需要解决系统底层的性能问题,包括文件处理Cache,存储介质的优化,采用SSD等,或者采用SATA+SSD的混合方式节约资源和降低成本。
  6. 存储问题对于云来说,由于云端是将客户端的数据和运算转移到云端,必须要有足够的存储能力以及足够稳定的存储系统,保证用户数据的安全,对于存储来说,有提供VM虚拟机运行环境的block device(块存储),以及提供KV方式的对象访问存储,这些都需要保证数据复制、数据读写访问的性能和数据永久可用的能力
  7. 网络问题对于公有云以及私有云的一些应用场景,需要能够提供网络的逻辑隔离(SDN)或物理隔离,以及对网络的访问灵活问题。构建虚拟化网络,由于物理条件的限制,我们不得不从L2-L4层进行处理,我们常用的方式是:bridge,vlan,gre,sdn(openflow,opendaylight),以及一些厂家的产品等等。
  8. 高可用问题高可用问题是在分布式系统中必须要处理的问题,正因为集群的问题,我们必须要从多方面考虑解决的问题,包括保证云管理系统的高可用性,存储介质的高可用性,网络的高可用性,虚拟机高可用问题等等。
  9. 提高资源利用率问题对于物理资源的虚拟化,我们有很多种解决方法,KVM、Vmware、xen、Hyperv、LXC等等,在HVM的方式下,对于VM本身的启动需要占用大量的内存、cpu和存储资源,导致系统内存和cpu使用有一定的浪费,基于LXC的解决方案因为是机基于Host OS进程,通过namespace的方式进行隔离的,是一种轻量级的实现,能够在资源初始化,资源利用率方面能够最大化,对于各个应用场景来说,我们可以选用合适的解决方案。

五、如何建设

58同城经过多年的发展,探索了一条适合自身发展的技术架构体系。随着业务和技术的发展,团队规模不断壮大,在技术和管理上面临越来越多的挑战。在项目需求管理,开发效率、代码管理和质量建设,测试,线上发布,运维管理等方面需要有一套完整的解决方案,来提升公司的协作能力和整体能效。

58同城目前所有的应用在线上都是跑在物理机器上,采用物理机的方式,一方面会导致服务器资源得不到充分和合理的使用,譬如:有些物理机器cpu使用长期在10%以下,有些内存使用剩余很多;另外一方面,由于互联网的特点,存在着时段内的访问高峰问题,需要解决资源使用的伸缩问题;基于以上问题,架构部对现有的技术体系进行梳理和分析,采用资源虚拟化的方式进行私有云的建设,并在这基础上,完善公司整体技术体系,包括:开发、测试、上线、运维等一系列自动化和智能化方面的建设。

私有云的目标

  1. 提高物理资源的利用率
  2. 一套云管理系统,降低运维的复杂度,提高运维工作效率
  3. 构建灵活的开发、测试集成环境
  4. 提供海量的存储体系
  5. 建立完善的监控体系
  6. 建立基础应用环境、方便测试
  7. 统一架构
  8. 智能资源调度

实施方案:OpenStack

对于云计算来说,也存在着多种解决方案,如CloudStack和OpenStack等。在两种方案的比较之后,我们最终选择了OpenStack的解决方案。主要是出于以下几点原因:

  1. OpenStack的社区成熟度:OpenStack经过几年的发展,社区已经越来越成熟,很多大公司都参与进来帮助完善,红帽公司未来十年也将OpenStack作为发展的战略重点。
  2. 架构设计的选择:OpenStack采用了Python语言编写,并且设计上采用组件化的方式,各个组件独立发展,并相互解耦
  3. OpenStack提供了更加完整成熟的方案,能够满足多样的需求,同时已经有不少公司采用,已经经过生产上的验证
  4. 文档问题:OpenStack文档化做的不错,网上能够找到多种多样的问题处理办法
  5. 人员招聘问题,经过多年的发展和市场的培育,了解OpenStack的人越来越多,对于开发维护的人才建设和招聘相对成熟一些。
  6. 发展比较迅速

下图是我们大致的架构规划

0813005

文章观点仅一家之言,欢迎大家一起交流探讨。我计划在下一篇文章《58同城私有云建设实践》中详细介绍我们私有云建设的思路和过程,中间遇到的问题,希望跟大家一起探讨。

转自: http://www.infoq.com/cn/articles/cloud-structure-thinking

真实的云计算什么样

真实的云计算什么样?

Cloud

云计算对普通用户来说,总是一个云里雾里的话题。本文从最基础的概念开始科普,说明了四个常见的错误理解,和作者的四个猜想。

IaaS(Infrastructure as a Service),指基础设施即服务,消费者通过Internet可以从完善的计算机基础设施获得服务。基于Internet的服务(如存储和数据库)是IaaS的一部分。Internet上其他类型的服务包括平台即服务(Platform as a Service,PaaS)和软件即服务(Software as a Service,SaaS)。PaaS提供了用户可以访问的完整或部分的应用程序开发,SaaS则提供了完整的可直接使用的应用程序,比如通过Internet管理企业资源。

误解一:IaaS就是卖资源

现在流行的一个观点:IaaS就是卖资源,传统IDC是卖带宽和机架,云计算加上服务器,最多就是把这些资源通过虚拟化技术拆成散了零卖。

在我们看来,云计算分为3个层次:

1、 资源层:这是IaaS提供服务的物理基础,主要包括计算资源、存储资源和网络资源,以及必要的电力资源、IP资源等。这一层主要通过规模采购和资源复用的模式来赚钱利润,利润不高。

2、 产品层:这是IaaS的核心,IaaS运营商根据客户的各种不同需求,在资源层的基础上,开发出各种各样的产品。比如存储产品、消息产品、CDN(内容分发网络)产品、监控产品,而每一种产品又会根据场景和需求的不一样,做针对性的改造优化,形成特定类型的产品。产品层是不同IaaS的竞争力体现之处,这些产品在不同角度满足了用户的不同需求。这些产品是IaaS利润的主要来源,也是IaaS的重要黏性。像国内的阿里云就提供了云服务器和负载均衡、云监控等产品,Ucloud提供了块设备存储的UDisk、云数据库的UDB等产品。

3、 服务层:在产品层之上,IaaS运营商还会根据用户的需求提供一些更多的增值服务,这部分从商业角度不一定赚钱,但却是用户使用IaaS的重要条件。比如为用户提供数据快递服务,在中国则必须包含网站备案服务,还有安全服务等等。

误解二:IaaS没有什么技术含量

在各种媒体的宣传把云计算神话了,认为云计算无所不能,把云计算的技术看的很高端,技术含量特别特别高。而不少从事过技术的人呢,则认为云计算没有什么技术含量,已经有类似OpenstackEucalyptuscloudstack等不少开源系统可以直接部署使用,或者基于KVM、XEN等开源虚拟化系统上做一套管理系统。

的确,随着云计算的快速发展,已经涌现出一大批开源的云计算平台,各大公司也都在积极支持开源软件的发展。但是即使发展快如Openstack,目前也没有很成熟的成功案例,因为IaaS的技术复杂度很高。

1、从基础上看,IaaS要实现多租户,弹性,稳定可靠和安全,必须要进行资源的池化管理,也就是把资源通过虚拟化技术形成资源池,然后根据用户的需求弹性分配,同时确保安全和隔离。之前提到资源主要包括计算、存储和网络,因此这里要做计算的虚拟化、存储的虚拟化和网络的虚拟化。

计算的虚拟化目前主要是通过XEN、KVM、Vmware等软件实现,相对比较成熟,但是在性能优化、稳定性方面还有很多工作需要完善。

存储的虚拟化目前还没有一个比较成熟的开源系统,如果文件型存储,则主要根据GFS的思路进行编码实现,必然Openstack的swift,而块设备存储则各显神通了,有nova-volume,国内盛大云、UCloud都各自实现了块设备存储。另外最近国际上非常流行的是SDS(软件定义存储),实际上也是实现了存储的虚拟化。

2、在虚拟化管理之上,是大规模的调度管理,如何能快速找到合适的资源满足用户的需求,如何能根据监测的数据,动态调整资源,如何能动态迁移业务,如何防止雪崩。如果是10台机器,这可能很容易,如果是1000台机器,这是一个问题,如果是10000台以上的机器,那就是个大挑战了。而云计算,要实现解决规模化的能力,就必须解决大规模的调度问题。这里的难度和挑战相当的大。

3、性能和安全问题同样也是IaaS的挑战,如何确保一个用户的高需求不影响其他用户,如何防范一个租户入侵其他租户,如何防止一个用户被攻击不影响其他用户,这里需要我们更加深入的研究。

更多的产品研发,如上所说,IaaS除了资源之外,更关键的是产品,必须根据用户的需求研发出更多满足特定需求的产品。这就会涉及到系统、网络、数据库、应用和安全的方方面面,对IaaS开发和运维的要求都非常高。

综上所述,IaaS的技术门槛是比较高的,并不是没有技术含量。

误解三:IaaS是不安全的

业界都在质疑云计算的安全性,特别是Evernote的安全事故让更多人担心IaaS的安全问题。

以我十多年的安全从业经验来看:

1、 没有绝对的安全,任何系统都有可能会被入侵;

2、 安全是相对的,关键要看IaaS模式下和传统托管模式下哪种更安全。因此假设一个公司规模很大,有专业的安全团队,比如腾讯、阿里、百度等公司,则肯定他们自己部署会安全很多,但是如果假设是一个小的创业公司,不可能有很专业的安全人员,IaaS的服务提供商则可以更专业的提供安全保障。

误解四:公有云只能服务中小企业

由于大企业对稳定性的追求,以及对旧有投资的保护,的确公有云的用户大部分都是从小企业开始的。目前不管是国内还是国外,中小企业还是云计算的主要用户。

但是随着云计算的发展,我们也发现了几个趋势:

1、一些在公有云上成长起来的公司,长成大型企业后也依然在使用公有云,比如Netflex,因为他们发现如果自己要建立基础架构所需要的人力物力依然很大,困难依旧很多,还不如将精力投入在他们自己擅长的领域内。

2、传统的一些大公司,他们也逐步开始尝试将一些非核心业务或者新业务部署在公有云上,甚至将IT部门裁员,全部转移到公有云平台。比如兰博基尼、宝马等汽车公司,他们已经借助云计算来降低成本,借助云计算提高他们的设计渲染能力。

其实从电力发展的情况来看也是这样的,在现代这样的社会,我们很少看到有企业会自己建立发电厂,而不使用电网。相信随着云计算的发展,云计算取代IDC或者取代自己运营也是必然的趋势。

四个猜想:

一、IaaS增长快速

IaaS公共云服务将是增长最快的公共云服务类别。预计全球2013年IaaS的市场规模将达到80亿美元,其中AWS(amazon web services,亚马逊公有云服务)预计能达到25-28亿美元,Rackspace收入16-19亿左右,IaaS占35%,超过6亿美元,而被Verizon收购的Terremark收入将超过4.5亿以上,另外像Joyent,Savvis,GoGrid,Dimension Data等公司都会有一定的收入增长。

相比全球,中国的IaaS市场基数小,但增长速度更快,预计13年中国纯粹IaaS市场规模将会超过1亿美元,并逐步形成3-4家规模比较大的IaaS运营商。

二、大中型企业将开始接受云计算

正如上面所说,大中型企业已经开始尝试将一些非核心业务部署在公有云上。从AWS的客户列表中,我们可以看到财富500强企业或多或少都在使用亚马逊的公有云进行测试或者开发,其中有些公司在上面运行真正的应用,比如纳斯达克,兰博基尼等公司。

这种变化将会对传统的IT厂商,IBM、HP、Oracle产生很大的威胁,因为传统大中型企业是这些IT厂商的大客户。

而从AWS的发展来看,这也必然是云计算公司的发展目标,我相信在未来的3-5年内,云计算将会开始蚕食传统IT厂商的市场,而2013年就是一个开始。

三、SDX技术(软件定义一切)将会快速发展

传统的硬件厂商采用卖盒子的模式,设备是不开放,无法动态管理的,因此造成了很大的浪费和管理成本。

而软件定义的思想(Software Defined Everything)将黑盒子开放出来,使得数据和控制分开,能够更灵活的管理和调度,会成为后续发展的主流。

2013年的开始,我们就看到了软件定义存储(Software Defined Storage),软件定义网络(Software Defined Network),软件定义数据中心(Software Defined Datacenter)等一系列大的投资和收购行为。

我预计在2013年,SDS、SDN的产品和方案将会开始落地,相关的技术将会快速发展。

四、云计算改变相关产业链

随着云计算技术的发展,特别是应用的不断落地,云计算已经在很多行业发生了影响和变革,主要包括:

1、创业者:云计算极大地降低了创业者的基础设施门槛,使得创业者只需要关注他们的核心优势,发挥他们的核心优势。这对于一些原来不从事互联网的团队非常方便利用互联网创业,将会催生很多内容型、O2O型的创业公司。特别是2013年,国家降低注册公司的门槛后,越来越多的创业公司将会成批出现。

2、投资行业:由于云计算降低了一次性的服务器网络投入,使得创业者对天使的资金需求降低,可以很迅速的开发产品试水。如果产品好,则利用云计算可以快速成长,如果产品不好,则可以马上转行。因此投资的模式从传统的天使转向超天使,甚至可能不需要A轮,业务发展好就可以直接进入B轮。

3、服务器产业:传统模式下,服务器通过渠道销售给中小企业,渠道会是其中很重要的一环。在云计算模式下,中小企业将不用采购服务器。因此IaaS运营商将取代中小企业成为服务器的采购者,这对传统的服务器厂商和渠道产生较大的影响。

转自:http://tech.sina.com.cn/it/csj/2013-03-18/10238156116.shtml