云技术:弹性计算ECS

云计算(Cloud Computing)被业界看做继大型计算机、我的计算机、互联网以后的第四次IT产业革命,正日益成为将来互联网与移动技术相结合的一种新兴计算模式。云计算提供了IT基础设施和平台服务的新模式,顺应了当前全球范围内整合计算资源和服务能力的需求,知足了高速处理海量数据的需求,为高效、可扩展与易用的软件开发和使用提供了支持和保障。云计算的核心价值在于提供了新的应用开发和运营模式,是下一代互联网、物联网和移动互联网的基础,全球信息领域的主要厂商都在围绕云计算从新布局,并必将影响到全社会的方方面面。

能够将“云”看做一个易于使用与访问的巨大虚拟资源池(如硬件、开发平台或服务等),这些资源能够根据负载(规模)的变化而动态配置,以最优地利用资源 [1]。云计算主要具备如下一些特色:
大规模:云计算服务一般由运行在多个数据中心的集群系统提供,每一个数据中心节点可达到上万台,为各类不一样的应用提供海量计算和存储资源。
低成本:云计算经过资源虚拟化的方式为用户提供可伸缩的资源,支持各类不一样类型的应用同时在系统中运行,提升总体的资源利用率,从而下降成本。
高可靠:云计算可多份存储用户数据,任意一台物理机的损坏都不丢失用户数据,多数据中心的设计也知足了灾备的需求。

目前,业界云计算最领先的是Amazon和Google,其中,Amazon真正实现了计算的Utility化,而Google真正从技术上实现了大规模的计算。XX云的战略是实现Amazon   Google并有所超越,成为中国拥有最大计算能力的公司。为此,XX云开放了包括弹性计算服务(Elastic Compute Service,ECS) [2]、开放存储服务(Open Storage Service,OSS) [3]、关系型数据库服务(Relational Database Service,RDS) [4]、开放结构化数据服务(Open Table Service,OTS) [5]、开放数据处理服务(Open Data Processing Service,ODPS) [6]、负载均衡(Server Load Balance,SLB) [7]、云盾 [8]、云监控 [9]等在内的一批云计算服务,本文将重点介绍ECS及与之相关的SLB和云盾服务。

ECS以XX云自主研发的飞天分布式计算系统为基础,基于先进的虚拟化、分布式存储等云计算技术,将计算和存储的基础资源整合在一块儿,并以Web方式为用户提供计算能力。ECS的体系结构如图1所示。

在数据中心中,大量的计算节点和存储节点经过飞天分布式计算系统将物理资源整合为一个总体,上层经过XEN虚拟化技术,对外提供弹性计算服务。ECS包含两个重要模块:计算资源模块和存储资源模块。ECS的计算资源指CPU、内存、带宽等资源,主要经过将物理服务器(即宿主机)上的计算资源虚拟化,而后再分配给云服务器使用。一台云服务器的计算资源只能位于一台物理服务器上,当一台物理服务器上资源耗尽时,系统将在其余物理服务器上建立云服务器。云服务器的存储资源采用了飞天的大规模分布式文件系统(盘古),将整个集群中的存储资源虚拟化后对外提供服务。用户数据在盘古集群中存储三份副本,任意一份副本损坏后系统均可以自动恢复到三份副本,使用户数据达到99.9999999%的可靠性。用户可使用SSH (ECS为Linux系统)或者远程桌面(ECS为Windows系统)直接远程登陆并管理云服务器。

在大规模集群中,小几率的硬件故障将成为必然事件。当宿主物理机发生故障时,ECS可以自动迁移云服务器,而且将其数据恢复到最后一刻的状态,既为用户屏蔽了硬件故障,又能保障用户业务的连续性。
ECS支持快照(Snapshot)功能,除第一次快照为全本快照外,以后均为增量快照。用户能够根据业务须要,设置建立快照的策略,系统天天也会自动为用户建立快照。有了快照以后,用户能够方便地将云服务器快速回滚到以前的任一快照版本。经过快照功能,用户能够将某一台云服务器上的当前快照做为自定义镜像,并基于此快速恢复基础环境或者批量部署集群,提升运维效率。

ECS提供了安全组(Security Group)的机制,用来隔离不一样用户的云服务器或同一用户的多个云服务器,能够有效阻止伪造MAC、伪造IP、ARP欺骗等攻击。同一安全组内的云服务器之间的网络是互通的,但不一样安全组的云服务器之间是相隔离的。用户可对某个安全组配置防火墙规则,也可经过自定义防火墙规则容许各安全组之间的流量。一个安全组能够包含多台云服务器,一台云服务器也能够隶属于至多5个安全组。
除了以上特色,云服务器的优点还体如今可与其它云产品与服务(如SLB和云盾)透明无缝的集成上,多种云计算产品与服务的联合使用,远较单一化的虚拟机服务更为安全、可靠、有效和经济。这也是云服务器与VPS的显著不一样之一。

SLB经过设置虚拟IP,将位于同一数据中心的多台云服务器虚拟成一个高性能、高可用的应用服务池,再根据应用特性,未来自客户端的网络请求按策略分发到云服务器池中,从而实现负载均衡。SLB支持四层和七层协议的负载均衡,且采用分布式架构,具备高度的可靠性和冗余性。SLB会检查池中云服务器的健康状态,自动隔离异常状态云服务器,从而解决单台服务器在处理性能、扩展性、稳定性方面的问题。同时,SLB还可加强云服务器池的抗攻击能力,安全隔离应用和云服务器。
云盾为云服务器提供一站式安全增值服务,包括安全体检(网页漏洞检测、网页挂马检测)、安全管家(防DDoS攻击、端口安全检测、网站后门检测、异地登陆提醒、主机密码暴力破解防护)等功能,适用于使用云服务器搭建的社区网站、企业官网、门户网站、电子商务网站、游戏等SaaS应用网站。尤为是云盾能够自动检测DDoS攻击特征,并根据攻击规模和策略设置进行流量清洗或者黑洞处理,这就大大增强了用户应用的安全性和抗攻击能力,是传统IDC服务所远远不能匹及的。
云产品与服务是以云计算基础平台的方式对外开放的,所以除了Web方式的管理控制台,用户可经过ECS RESTful API和多种语言版本的SDK,来配置、管理、升级、监控云服务器,从而大大下降维护成本,提升运维响应速度,使得云计算真正成为一种服务,用户能自由地按需使用、按需付费,在云计算的平台上构建安全可靠、丰富多样、功能强大的应用,为海量用户提供优质的服务。

前不久,Facebook宣布投资10亿美圆收购仅成立15个月的移动照片分享应用Instagram,消息传出时,人们不只惊叹于这笔巨额的交易,更为这支13我的的小团队感到难以想象。Instagram的Android版客户端发布时,24小时内下载量超过100万,高峰期达到每分钟2000次,是下载量最大的Android应用之一。到底是什么缘由让这支团队在很短的时间内一举成名?又是什么技术让他们在巨大的下载量下顶住了压力?
让咱们回顾一下Instagram开发团队奉行的3大原则:
一、Keep it very simple(极简主义);

二、Don't re-invent the wheel (不重复发明轮子);

三、Go with proven and solid technologies when you can (能用就用靠谱的技术);
总而言之,专一于本身的业务和擅长领域,其它事情让更专业的人去作。Instagram选择了美国的亚马逊云计算平台做为基础设施提供商,他们部署了数以百计的云服务器和存储服务,却只有区区3名工程师负责维护,不须要任何现场人员支持。若是依赖于传统的IDC服务,光是把这几百台服务器托管到IDC机房,就须要数天时间和大量的人力成本。每当发布一个新版本时,Instagram所要作的只是在云计算平台上开启更多的服务器,即可稳坐钓鱼台,看着本身应用的下载量节节攀升了。

XX云弹性计算平台(Elastic Compute Service,简称ECS)面向中国互联网开发者和站长,致力于为中国的Instagram提供靠谱的互联网基础服务。它基于底层的飞天分布式计算系统,结合高性能虚拟化技术,实现了计算、存储和网络资源的统一调度和弹性分配。在具体的产品形式上,客户接触的是最简单的云服务器,与物理机无二,没有任何的使用门槛。因为采用了云计算技术,相比传统的IDC托管服务,弹性计算在自助管理、资源组合灵活性、基础环境定制化、数据安全性及硬件资源利用率上都有不小的优点。

在本文中,咱们将和你们分享在云计算平台上构建高可用、可扩展应用的一些进阶技巧。考虑到有些读者还没有接触过ECS,因此在进入正题以前,让咱们简单浏览一下ECS的各项特性。

自助管理

ECS在aliyun.com的控制台中提供了多种用户自助的操做,例如最为常见的建立、启动、关闭云服务器,未来还会陆续推出比较高级的快照、自定义镜像(Image)等功能。回想咱们之前遇到服务器不可访问时,提交工单、电话催促,在经历漫长等待以后,也未必可以获得一个满意的答复。如今,咱们能够在控制台中全程监控和管理每一台服务器的运行状况,从而作出快速的决定--重启或者部署新的服务器。
ECS支持目前主流的Windows和Linux系列操做系统。用户不只可使用这些标准的镜像,还能够在此基础上修改配置、安装软件,建立出本身的镜像,当要快速恢复基础环境或者批量部署集群时,自定义镜像将成为提升运维效率的利器。

下图简单地描述了一个自定义镜像的生产过程:

一、使用标准镜像建立一台云服务器;

二、用户登陆云服务器,安装本身所需的软件,配置好系统参数;

三、安全关机,而后将云服务器当前状态存为一个自定义镜像;

四、随后,用户就可使用刚建立的自定义镜像启动更多的云服务器了;
数据可靠性

对于写入VM磁盘的数据,ECS会实时地在不一样的交换机下同步3份拷贝,当集群中的磁盘损坏时,后台进程也会自动地重建故障磁盘的数据。相比常见的RAID硬件方案,这种分布式存储系统可以提供更高的数据安全保障,由于它不受单台服务器可用性的限制,而且,因为多台服务器能够并发处理,数据恢复的时间更短。
ECS提供的在线快照功能能够完美地替代传统的复制备份,它采用先进的增量数据算法,确保作到备份空间和时间的最优化。当用户数据被误删或者系统被病毒破坏时,只须要一个简单操做就能够瞬间恢复环境。
自动故障恢复

有了分布式存储的支持,ECS能够提供比传统主机或VPS服务更高的可用性指标。当一台物理机损坏时,ECS会自动监测到硬件故障,在第一时间内把云服务器迁移到新的宿主机上,同时硬盘数据保持最后一刻的状态。

从以上介绍能够知道,托管在弹性计算平台上的应用能够得到更多的保障,但咱们是否能够认为,将应用搬到云计算平台以后,它就能跑得欢快、永不宕机,还能自动扩展了?答案是NO!


每时每刻,硬盘、主板、电源或者网络设备均可能忽然损坏,甚至整个数据中心发生停电。云计算技术没有办法解决全部硬件问题,只是下降了某些故障的发生概率,例如:

•普通SATA的年损坏率在2~4%,但使用分布式存储的年损坏率在1‰如下;

•自动故障恢复只是减小了服务器的宕机时间,但不能防止宕机;

若是咱们的应用只能跑在单台服务器上,只能依赖单台设备的硬件升级才能应付日益增加的访问量,那么这种应用的宕机是早晚的事。我 们须要从部署架构和应用架构两个方面来破解这个难题。

部署架构
既然没有什么硬件是永不损坏的,咱们是否能够用多份冗余的硬件来下降故障的几率?若是挨在一块儿的服务器被一把火烧掉的可能性太大,咱们是否能够把它们分散在不一样的集群?若是数据可能被破坏,是否要常常作些备份?… …

把各类故障因素都考虑一遍,咱们就得出了一个大体的部署框架:
一、以集群方式提供服务
Web服务器、缓存服务器都是很是适合部署为集群的,单台服务器损坏不会影响整个网站的访问。数据库服务器稍难一些,但它们也提供了主从复制、读写分离的解决方案。

二、 将云服务器分布在不一样的可用区(Zone)下
不一样的可用区表明数据中内心的不一样物理位置,同一可用区内的服务器可能同时遭遇网络设备、电力等故障,所以,把一个集群内的云服务器分散到不一样的可用区甚至不一样的数据中心(Region)是个明智的选择。

三、 为Web服务集群配置负载均衡与DNS轮询
多台Web服务器能够经过配置负载均衡或者DNS轮询提供对外服务。
相比DNS轮询,负载均衡方式会更加灵活,由于它对外屏蔽了服务器的真实IP,当负载均衡资源池内增长或减小服务器时,对客户是透明的。而DNS存在时延的问题,集群发生调整后,颇有可能形成部分用户在很长一段时间内没法正常访问网站。
另外,负载均衡可以跟踪后端应用服务器的健康状态,自动排除有故障的节点,避免出现服务时断时续的问题。
对于特别大的应用,咱们推荐使用负载均衡 DNS轮询的方式,只是这里的DNS轮询域名指向的是负载均衡的VIP。

四、 实现动态部署
为了应对常常性的业务推广和可能的DDOS网络攻击,实现系统与应用程序的一键部署很重要。系统管理员能够根据应用的当前状态(CPU、内存使用率、HTTP的响应时间等)做出判断,即时增长服务器,而且快速部署应用程序,顶住突增的业务流量。若是实现得更智能一些,能够在应用服务器内部部署一些监控程序,由主控程序判断当前整个集群的负载状况,调用ECS API自动增减服务节点。
用一台主控机去批量操做其它云服务器时,应该尽可能地使用一些便捷工具,例如SSH密钥对,它实现了受权服务器间的免登陆,使得集群管理更加简单。

五、定时备份很重要
前面说到,没有什么技术能够保证100%的数据安全,你的数据始终面临误删文件、病毒破坏、程序写错、硬件损坏等种种可能的风险。若是你的数据很是重要,请按期备份!在弹性计算平台上,这件事情相对简单,快照功能自动完成增量数据备份。然而,单个物理位置的存储始终会面临地震、火灾等灾难的威胁,若是你以为还不够安全,或者有异地使用的须要,且可以承受异地备份带来的存储、带宽等成本,能够自行拷贝数据文件。弹性计算平台也正在考虑跨机房的容灾方案。

六、 将应用程序配置为自恢复的
单台服务器的硬件故障是常见现象,以现有的云计算技术能力,尚没法作到不影响云服务器的运行,但ECS能够快速检测到故障特征,而且将云服务器自动迁移到新的宿主机上。这里存在一个问题,虽然云服务器从新启动了,并且硬盘数据恢复到最后一刻的状态,可是原先正在运行的应用程序停止了。为了让你的服务中断时间尽可能地缩短,避免人工的介入,强烈建议将应用程序及相关服务设置为开机自启动,这样,你就能够高枕无忧地睡大觉,不用半夜起来恢复应用,尽管只是几个点击或者命令操做。

七、加固系统
安全也是高可用的重要前提之一。放在IDC机房中的服务器时时面临各类恶意攻击,下图是咱们偶然截取的一个攻击片断:

图4 端口扫描攻击

这台服务器在循环探测机房中每一台机器的1433端口,有经验的读者很快猜出来了,它是在试探SQLServer服务,一旦SQLServer被攻破,再利用SQLServer管理员的系统权限漏洞,立刻就有一些机器沦为肉鸡。

XX云弹性计算服务在平台层面就屏蔽了一些影响范围很大的恶意攻击,例如篡改MAC、伪造IP、发送ARP欺骗包等,但用户的系统仍是要遵循一些安全最佳实践,才能让本身的系统更加稳固:

一、关闭没必要要的系统服务
越多的服务意味着越多的漏洞,特别是Windows共享文件夹、远程修改注册表项等服务都存在巨大的风险,若是你的工做不须要这些服务,请立刻关闭。

二、及时升级系统补丁
前段时间爆出的微软高危RDP漏洞让不少用户深受其害,经过一个简单的Python脚本,黑客就能够直接获取系统管理员权限或者直接把服务器打至蓝屏。不要忽略操做系统厂商的安全警告,一旦遭遇攻击,将形成不可挽回的损失。

三、开启系统防火墙
采用白名单控制策略,只开放最小集合的端口。对于数据库服务器,更要设置IP白名单,仅容许前端的Web服务器访问;对于Web服务器,只对外开放80端口。

四、修改常见服务的端口
从刚才的攻击示例看出,黑客虽然漫无目的地扫描同一网段的IP,但攻击的目标端口只有一个1433,这是SQLServer的默认配置。为了减小这类攻击,最有效的方式就是修改数据库、FTP这类常见服务的默认端口,增长黑客扫描的难度。

五、加密数据传输
笔者曾经遇到过一个很奇怪的现象,在一台Windows 2003服务器上,应用的负载很低,但CPU利用率达到了99%,从任务管理器中看到,有无数个winlogon.exe进程疯狂消耗CPU,当时百思不得其解。一天以后,这台服务器就沦陷了,我才恍然大悟,必定是攻击者在尝试破解密码。对于这类攻击,即便调整密码长度增长破解难度也收效不大,由于攻击过程会消耗大量的系统资源,正常的业务根本没法进行。况且,如今的服务器计算能力愈来愈强,一个密码的安全性实在过低了。
一些加密传输方式可以有效地抵御这类攻击,也减小传输过程当中的敏感信息泄露问题。Windows能够配置远程桌面服务使用SSL传输,要求客户端必须持有证书登陆。Linux则可使用SSH登陆密钥对。结合修改默认端口的方式,将使你的系统安全性提升一个层次。
友情提醒:若是你开启了防火墙,又修改了默认的远程桌面或者SSH端口,请务必在防火墙中设置这些服务的白名单,不然就悲剧了。

应用架构

要支持上述高可用、可扩展的部署架构,应用程序也要作相应的调整。例如:

•Web应用的无状态设计
Web应用的诸多因素可能形成系统没法扩展:本地存放的上传文件、进程内的Session等。以上传文件为例,假设使用了本地存储,用户第一个请求上传了一个头像文件,存放在Web-A服务器上,接着刷新页面,但这个请求被发送到Web-B服务器上,他惊奇地发现:上传的头像文件不见了!要解决这个问题,必须把上传文件存放到共享的文件夹,Web服务器不能保留任何本身的数据(即无状态)。而对于Session数据,通常的建议是用Cookie代替,或者存放到共享的Session服务器或者数据库中。

•用分布式服务代替单点的服务
单点就意味着故障,不只有可用性的风险也有性能瓶颈的问题。常见的单点通常出如今共享文件服务器、Session服务器、缓存服务器、数据库服务器。阿里云计算平台提供了一系列分布式服务,是这些单点服务的可行替代方案:

•须要无空间和访问频率限制的小文件存储?用开放存储服务(OSS)。

•须要可弹性分配存储空间和IO能力的数据库?用关系型数据库服务(RDS)。

•须要海量结构化数据存储服务?用开放数据表服务(OTS)。
对于平台暂时不提供的分布式缓存服务,业界也提供了一些解决方案,例如Memcached集群技术,但这也对应用程序的设计提出了更高的要求,开发者必须清楚各类服务的HA原理,还须要了解一致性哈希算法等细节的实现。

■应用的安全不容忽视

安全不只是操做系统配置的问题,堡垒更容易从内部被攻破,而这个内鬼颇有可能就是咱们的应用。从几率上说,一个复杂程序会比一个简单程序多不少漏洞,而Web应用涉及数据库、应用服务器、缓存等诸多组件,稍有不慎,攻击的后门就会向黑客敞开。
常见的Web服务漏洞有:

■XSS跨站脚本攻击
这类Web攻击最为广泛,通常发生在容许用户输入内容的页面,尤为是提供富文本编辑的模块。几乎全部的网站都会被XSS攻击光顾,但防护这类攻击也是最为简单的:限制用户输入,而且在页面输出内容时对敏感字符进行编码,相对来讲,后者更为重要一些。PHP语言的htmlspecialchars函数、Java Jakarta commons的StringEscapeUtils类都是实现编码功能的快捷工具。

■SQL注入攻击
只要应用代码中存在这样的SQL:
sql = "select * from User where name='"   name    "' and password='"   password   "'";

那么这个应用距离沦陷也就不远了,攻击者只要输入一个值为 

”’ or 1=1 or name=’”’ or 1=1 or name=’”’ or 1=1 or name=’”’ or 1=1 or name=’
的name就能够轻易进入你的应用系统。杜绝这类问题的方法有2种:

对输入的特殊字符进行转义,例如PHP的mysql_real_escape_string函数;
或者采用参数化的SQL,例如:

[table=100%,,,0]
[tr]
  
[td]sql = "select * from User where name=? and password=?";
  
result = query(sql, name, password);
[/td]
[/tr]
[/table]
后者实现更加优雅,绝对避免了SQL注入的风险,并且在提高数据库的查询性能上也会有所帮助。

■ 上传文件漏洞
这是最为危险的应用级漏洞,特别容易出如今容许用户上传内容的网站中。假设一个tomcat搭建的Web网站容许用户上传附件,却忘了限制上传目录的可执行权限,攻击者就能够上传一个带webshell的jsp文件,经过访问这个上传文件的URL就能够彻底控制网站服务器。
必定要取消上传文件的可执行权限,另外,毫不容许这类文件被看成服务端脚本解析。赶忙为你的网站实施安全策略吧!

■Cookie与传输加密
只要会用HttpWatch、Firebug等开发工具,你们均可以看到各大网站的Cookie数据,而这些Cookie正是网站用于鉴别用户身份的凭证。经过分析Cookie构成,黑客有可能猜想出网站的鉴权策略。要想让你的应用更安全,能够对Cookie等敏感数据进行加密。若是你的网站还包含在线支付功能,部署带受权证书的HTTPS是必不可少的,这也是不少第三方支付平台的强制要求。

综上所述,虽然云计算平台提供了更灵活、更稳定的基础服务保障,但它不足以解决应用的高可用性和可扩展性问题,应用自身必须在架构设计和部署上 充分考虑各类意外状况,才能实现真正意义上的高可用、可扩展 。
相关文章
相关标签/搜索