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

标签: 架构 建设 思考 | 发表时间:2014-08-22 13:53 | 作者:
出处:http://kb.cnblogs.com/

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

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

  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等存储企业,以壮大自己在云领域的影响力。

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

   二、企业需求

  需求是什么,也就是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、人力资源、行政等等)

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

   三、云计算的能力

  云计算能够解决什么,也就是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层面的考虑,当然对于公有云来说还有很多细化的个性化需求,例如:数据分析,业务对接服务等等。

   四、潜在的挑战

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

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

  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. 发展比较迅速

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

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

相关 [架构 建设 思考] 推荐:

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

- - 博客园_知识库
  最近在负责公司内部私有云的建设,一直在思考怎么搞云计算,怎么才能够把云架构设计得好一些. 本文尽量全面的列出了云架构建设和选型的考量因素.   我们主要从五个层面逐步评估云架构的建设和选型,分别是:.   计算机云经过多年的发展,由一开始的概念,慢慢发展成熟并能够推向市场,提供多种多样的服务,市场空间非常之大.

Memcache架构新思考

- - ITeye博客
2011年初Marc Kwiatkowski通过Memecache@Facebook介绍了Facebook的Memcache架构,现在重新审视这个架构,仍有很多方面在业界保持先进性. 作为weibo内部数据处理量最大,对数据延迟最敏感的部门,基于本厂2年多来对mc的使用心得,我在本文总结对MC架构的一些新思考.

对数据库架构的再思考

- - 人月神话的BLOG
前面在谈PaaS的时候曾经谈到过共享数据库,私有数据库的问题,在这里再谈谈在多业务系统建设过程中的数据架构模式问题. 首先来看下传统的数据交换解决方案如下图:. 业务场景为单独构建的四个业务系统,在四个业务系统中SID数据为需要跨四个应用交互和共享的数据. 传统的做法则是对四个应用存在的SID库数据进行数据集成和交换,则后续的每一个业务系统中都有全部的共享基础数据,任何一个应用的SID库数据需要通过数据交换和集成同步四份.

对组件化架构的再思考

- - 人月神话的BLOG
原来架构设计比较多关注的是横向的分层,即数据层,逻辑层和UI层. 而组件化架构必须同时关注纵向的隔离和解耦. 在分层和分模块后,每一个业务组件由三层各自存在的部署包组成,包本身是一个包含了技术组件和服务组件的一个结合体. 由数据层,逻辑层,界面层三层的三个业务包可以构成一个完整的具备独立功能的业务组件.

对CQRS/EventSourcing架构的思考

- -
开始之前想先说一下微服务架构和CQRS架构的区别和联系. 微服务架构现在很热,到处可以看到各大互联网公司的微服务实践的分享总结. 但是,我今天的分享和微服务没有关系,希望可以带给大家一些新的东西. 如果一定要说微服务和CQRS架构的关系,那我觉得微服务是一种边界思维,微服务的目的是为了从业务角度拆分(职责分离)当前业务领域的不同业务模块到不同的服务,每个微服务之间的数据完全独立,它们之间的交互可以通过SOA.

关于IT企业组织架构的一些思考

- - 博客园_首页
渡过生死线:一段恩怨,一段商战》里面讲的是金山网络的一些事情,虽然有软文的嫌疑,但是里面说的有几点我觉得非常认同. 先谈谈一般公司的组织架构把,传统的软件企业的组织架构是水平的,涉及和跨越多个部门,例如下面的一个企业的组织架构(虚拟出来的,说明而已). 首先层级非常多,从CEO到最终的开发人员,中间估计有6级别,比较臃肿.

[服务器架构]微服务的深入思考

- - CSDN博客推荐文章
微服务有且仅有一种非常专项的功能,通过远程API来提供系统其余功能. 举个例子:试想一下仓库的管理系统,这样的系统中微服务可能提供的一些功能有: . 计算新的库存该存到什么地方. 计算在仓库内将库存运往正确放置点的路线. 计算仓库内指定一组订单的拣货路线. 以上这些功能(可能还会有更多)都是由单个微服务实现的.

软件架构设计分层模型和构图思考(201122)

- - 人月神话的BLOG
今天谈下架构设计中的分层思维和分层模型以及基于分层思维下的架构构图逻辑. 对于架构思维本身仍然是类似系统思维,结构化思维,编程思维等诸多思维模式的一个合集. 由于架构的核心作用是在业务现实世界和抽象的IT实现之间建立起一道桥梁,因此架构思维最核心的就是要理解到业务驱动技术,技术为最终的业务服务. 要真正通过架构设计来完成业务和技术,需求和实现,软件和硬件,静态和动态,成本和收益等多方面的平衡.

配用电大数据项目中的架构研究与思考

- - IT瘾-bigdata
智能电网(Smart Grid)是以物理电网为基础,将现代先进的传感测量技术、通信技术、信息技术、计算机技术和控制技术与物理电网高度集成而形成的新型电网. 电力大数据(Power Big Data)是实现智能电网的关键技术之一,它通过挖掘数据之间的关系与规律,提高电网企业在生产、经营、管理等方面的质量与效率.

微服务架构之「 访问安全 」 - 不止思考 - CSDN博客

- -
应用程序的访问安全又是我们每一个研发团队都必须关注的重点问题. 尤其是在我们采用了微服务架构之后,项目的复杂度提升了N个级别,相应的,微服务的安全工作也就更难更复杂了. 并且我们以往擅长的单体应用的安全方案对于微服务来说已经不再适用了. 我们必须有一套新的方案来保障微服务架构的安全. 在探索微服务访问安全之前,我们还是先来回顾一下单体应用的安全是如何实现的.