Chinaunix首页 | 论坛 | 博客
  • 博客访问: 453772
  • 博文数量: 153
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1575
  • 用 户 组: 普通用户
  • 注册时间: 2016-12-20 17:02
文章分类

全部博文(153)

文章存档

2017年(111)

2016年(42)

我的朋友

分类: 架构设计与优化

2016-12-30 14:37:14

为什么弹性架构是重要的

        谈到IT系统架构,我们经常会用建筑架构来做类比,事实上,Architecture这个词也正是来自于传统的建筑行业。系统架构图就像建筑设计图一样,用来指导软件构建。同时,两者之间也存在一个巨大的不同,建筑物追求的是屹立千百年不变,而IT系统追求的是灵活性,以便随时应对真实世界的业务变化。从这个角度来看,IT系统更像一个有机的生命体,需要不停的改变自己去适应外界变化,才能让自身更有生命力。系统压力是一个重要的变化维度,是否能够随着系统压力的增减而动态的调整系统的某一部分体现了架构是否具有足够的弹性。

        水平扩展能力,是互联网架构重要的弹性表现。当系统面对增加的用户和访问量时,是否能够快速进行水平扩展,往往决定了互联网应用的生死。另一方面,当访问量回落后,是否能够释放掉资源以节约成本会变成核心竞争力之一。根据扩展的粒度不同,这种扩展可能是机器或组件粒度的,比如增加或减少云服务器的数量,也可能是整体架构粒度的,比如在线游戏开新服,就需要复制整个系统。

        实现弹性架构有很多方法,重要的问题是,如何更优雅的让系统具备弹性?让IT系统应对变化时能够快速、可靠和自动化?

实现弹性架构的基本原则

数据化运维

        让系统具备弹性的目的是为了应对业务变化,而感知变化是首要的事情。这就需要系统能够具备数据化的运维能力,从收集系统运行数据,到最终根据数据做出是否需要触发弹性变化的判断。

按需获取资源

        系统的弹性变化最终会落到对资源的调整上,可能是流量增加时增加云服务器,流量减少时减少云服务器。这就需要系统能够随时根据需要获取和释放计算资源。

可复制和可维护

        系统的弹性变化是随时都有可能发生的,所以弹出来的部分一定是被内置到系统内部的,是可以无限次被执行的。同时,又能够很好的被开发人员维护,以代码的形式成为系统的一部分,可以被修改、测试、追踪版本等。

自动化

        自动化是减少系统错误的重要手段,所以以上原则都需要能够自动化执行。

在阿里云上实现弹性架构的实践

        基于阿里云提供的运维管理服务,我们可以很容易的实现弹性架构。其中最重要的两个服务是云监控和资源编排。

        云监控(CloudMonitor)可用于收集阿里云资源的监控指标,探测服务可用性,并针对指标设置报警。通过OpenAPI,可以实时获取系统的运行状况,用来作为弹性变化的触发依据。

        资源编排服务(ROS),提供了通过模板管理云资源的能力,用户可以在JSON格式的模板文件中,描述系统的资源和配置,ROS会根据用户的模板,创建和释放资源,并对资源、软件做指定的配置。模板是一种描述性的文本文件,可以像代码一样被编辑、测试和版本控制。通过模板,我们可以把弹性变化的部分进行完整的定义,并且可以被无限次的重复执行。同时,ROS是一种无需人工值守的完全自动化服务。通过ROS提供的OpenAPI和CLI工具,结合云监控的数据,可以把弹性变化整合成自动的机制,让系统拥有完全的弹性能力。

        下面用一个例子来介绍如何基于阿里云提供的服务来构建弹性架构。架构如下图:

        这是一个非常典型的基于阿里云的Web系统。系统通过ECS提供Web服务,通过RDS来做数据持久化存储,通过SLB来做访问负载均衡。我们要解决的问题是,如何才能让系统具有弹性,以应对可能出现的访问量暴增。一个直观可行的思路就是,直接增加ECS服务器的数量。但是这涉及到一些复杂而琐碎的事情。比如创建ECS实例、初始化系统、安装软件、把ECS实例挂在到SLB,当流量回落以后把增加的ECS从SLB摘除并释放实例。


阅读全文请点击:
阅读(1908) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~