这篇文章是发在2018年CSUR上的一篇文章,主要是讲虚拟机上web应用的auto-scaling技术的分类 

近年来许多web 应用服务商将他们的应用迁移到云数据中心,为什么要迁移到云上呢?其中一个重要的原因就是云数据中心的资源的弹性伸缩,这可以让他们根据实时的需求获取或者释放计算资源,降低运营成本。为了更高效地实现弹性伸缩,就引出本文讨论的一种技术:auto-scaling

  那什么是auto-scaling呢?

  Auto-scaling是一种在无需人工干预的情况下,根据实时工作负载自动调整资源供给的技术,它能够实现在满足服务质量(QoS)需求的同时最小化云资源使用成本。

  目前auto-scaling技术主要有四个阶段来完成

因此在分类的时候在这四个阶段的基础上进行分类

Scaling Indicators

Auto-scaler的行为基于监控阶段获得的应用该性能指标

①    Low-level Metrics (physical/hypervisor)

  • 监控CPU利用率、内存、缺页率
  • 仅仅看一些物理上的指标难以精确推断应用程序性能

②    High-Level Metricsapplication

  • 监控平均响应时间、会话创建率、吞吐量、服务时间、请求组合
  • 难以精确推断需要的资源总数

③    Hybrid Metrics

同时监控Low-level Metrics 和High-Level Metrics

Scaling Timing

①    Reactive Scaling

  • 仅依据当前的应用和负载状态进行伸缩
  • 适用于工作负载变化比较小的应用

②    Proactive Scaling

  • 在伸缩时考虑应用未来的资源需求
  • 适用于有规律的工作负载变化较大的应用
  • 除考虑历史工作负载外,还可考虑外部因素,如户外应用需考虑天气情况

如果工作负载没有规律,Proactive无法进行预测,还是要用Reactive,因此auto-scaler无论支持不支持Proactive,都应该能进行Reactive Scaling

 

Scaling Methods

①    Vertical Scaling

  • 以虚拟机内部资源为单位(CPU,存储)
  • 大多数厂商不支持
  • 扩展速度比垂直扩展快
  • 适用于一些不适合垂直扩展的部分

②    Horizontal Scaling

  • 以虚拟机为单位
  • 价格模型
    • On-demand:固定价格
    • Reserved:交一部分定金以获得更便宜的价格
    • Rebated:售卖空闲资源,非常优惠,随时可以回收

③    Hybrid

只有在水平扩展收到限制时才使用垂直扩展

 

Application Architectures

①    Single Tier / Single Service

  • 分层软件栈中最小可部署组件
  • 可管理的最小粒度

实际应用中只有一层或只有一个服务的web应用是很少的,因此Single Tier常被当做是可管理的最小粒度,现今大多数的auto-scaling系统都是分别管理web应用的每一层,而不是以一个整体管理。这就有一个问题,虽然每层是最佳的资源配置,但从整体来看不一定是最佳的资源配置

②    Multitier

  • Front-end
  • Application logic
  • Database( 忽视)

多层应用通常包括以上三层,各层之间顺序连接,可以将总体的SLA划分成每一层的SLA。因为大多数云服务提供商都不支持不支持水平扩展,通常database不会进行auto-scaling

③    Service-Based Architectures

  • Service-Oriented Architecture (SOA)
  • Microservices Architecture

Service-based在大型的web应用中已占据主导地位,各独立的服务通过各自预先定义的接口进行交互。服务之间不是顺序连接的,那它怎么做auto-scaling呢?

它要求每一个服务都要估计一个实例被添加或删除时的响应时间的变化。在此之后,系统会聚合估计,并选择将最小总体响应时间的操作。

Session Stickiness

会话(Session):用户与应用之间的一系列交互行为

在每一次操作之后,用户都要等待应用的应答,然后继续执行。

粘性(Stickiness):如果会话数据存储在服务器中,每次在会话中提交请求时,迫使用户连接到同一台服务器

①    Sticky

②    Non-sticky

粘性会限制auto-scaling系统的能力。因为如果如果有未完成的会话时,它们会限制auto-scaler终止没有充分利用资源的实例

那要怎么解决这个问题呢?一个方法是可以把会话数据存储在用户端,或者存储在一个共享的虚拟机上

Adaptivity

对生产环境、工作负载变化的适应能力

①    Nonadaptive

  • 预先确定控制模型,不允许在生产时自动调整
  • 需要做大量的线下测试才能获取合适的控制模型
  • 要求用户定义一组伸缩的条件和离线操作,并且Nonadaptive它只根据即时的输入进行决策,只有当满足预先设定的条件时,才进行伸缩操作

②    Self-Adaptive

  • 预先确定核心控制模型(线性\非线性),具体操作自动调整
  • 自动调整需要比较长的时间,前期表现较差

③    Self-Adaptive Switching

连接多个Nonadaptive和Self-Adaptive,根据性能选择控制模型

Resource Estimation

①    Rule-Based Approaches

  • 一组包含触发条件和对应行为的预定义规则
  • 难以设置合适阈值和对应行为,无法适应应用的动态变化

例如CPU利用率超过70%,增加两个实例,如果CPU利用率低于40%,减少一个实例

比如说一开始一个应用由四个实例提供资源,那这时候增加一个实例就可以提升25%的能力提升。之后因为工作负载的激增,由十个实例来提供资源,这时增加一个实例只能带来10%的能力提升。

此外固定的阈值也可能会带来低效的资源呢利用,70%和40%的资源利用率可能适合于只有实例较少的云,但是对于实例比较多的云,一个单独的实例的增减可能对整体的资源利用率并不明显,因此在资源利用率低于40%之前就可能要移除比较多的实例

②    Fuzzy Inference

触发条件语义化(高,中,低)

输入首先使用定义的成员函数进行模糊化;然后,模糊化的输入被用来在所有规则中同时触发动作部分;然后将规则的结果组合在一起,最后将其作为控制决策的输出

③    Application Profiling

寻找资源的饱和点

l  Offline :每次应用更新都需要手动重新执行一次

l  Online :禁止细粒度的性能分析,要求尽可能快

从每一应用层中获得资源估计模型。当对一层进行性能分析时,给其他层足够的资源,一个接一个,最后得到模型

④    Analytical Modeling

Analytical Modeling是根据理论和分析建立数学模型的过程

基于排队理论/排队网络

A:到达队列的时间间隔分布  Markov/General

S:处理工作所需要的时间分配  Markov/Deterministic/General

C:服务器的数量

⑤    Machine Learning

  • Reinforcement Learning(Q-learning)
  • Regression(Linear)

学习的时间长,初期表现差,并且收敛的时间难以预测

强化学习目的是让软件系统学习如何在特定的环境中进行自适应的反应,以最大化其收益。学习算法选择一个单独的操作,然后观察结果。如果结果是正的,那么在遇到类似情况时,自动定标器将更有可能采取相同的动作。

回归估计变量之间的关系。它根据观察到的数据生成一个函数然后用它来进行预测,要求用户决定函数类型,

⑥    Hybrid Approaches

  • Machine Learning + Fuzzy rules-based inference
  • Machine Learning + Analytical model
  • 选择不同的指标和不同的机器学习算法

对web应用来说以上的几种都有他的优点和缺点,因此一些工作将多种方式整合在一起用来资源预测Rule在应用发生变化时不灵活,并且需要专业知识来进行设计和测试,如果rules由机器学习算法来动态生成一些分析队列模型需要一些难以直接测量的性能指标请求服务时间,请求组合,在机器学习的收敛前用其他算法代替

Oscillation Mitigation

波动(Oscillation):auto-scaler不断地执行相反的操作,当监控或缩放操作过于频繁时,或者规则配置不当(区间太小)有可能会发生

①    Cooling Time

  • 固定等待时间
  • 延长等待时间

②    Dynamic Parameters

当大多数资源被用来降低目标的使用率时,提高它的下降的阈值

③    Exhaustion

如果可以找到造成波动的设定,那就可以在这些设定上做限制

Environment

①    Single Cloud

上面讲的都是single云的情况

②    Multiple Coluds

①    在每一个数据中心都部署一整个应用

②    在不同的数据中心分别部署应用的某个部分

③    优势:

  • 降低延迟,在距离用户最近的云中心进行服务
  • 提高可靠性,多个云同时备份
  • 在auto-scaling时考虑地区选择和请求路径

未来的发展方向

①    Service-Based Architectures

缺少精确的资源估计模型,实时计算出每一个服务应该被提供的资源

 

②    Monitoring Tools for Hidden Parameters.

计算一些不能直接获得的数据:平均服务时间,请求组合

③    Resource Estimation Models

需要提高现在的资源估计模型的精确度,通用性和易用性。认为将分析模型和机器学习相结合最有前景

④    Provisioning Using Rebated Pricing Models

星云

⑤    Better Vertical Scaling Support

同一个物理机内部延迟比较低,可以对database进行auto-scaliing

⑥    Event-Based Workload Prediction

考虑天气,双十一等事件

⑦    Energy and Carbon-Aware Auto-Scaling

⑧    Container-Based Auto-Scalers

Auto-Scaling Web Applications in Clouds: A Taxonomy and Survey读书笔记的更多相关文章

  1. 《web全栈工程师的自我修养》读书笔记

    有幸读了yuguo<web全栈工程师的自我修养>,颇有收获,故在此对读到的内容加以整理,方便指导,同时再回顾一遍书中的内容. 概览 整本书叙述的是作者的成长经历,通过经验的分享,给新人或者 ...

  2. 《Web全栈工程师的自我修养》读书笔记(转载)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/5 ...

  3. System Operations on AWS - Lab 6W - Using Auto Scaling (Windows)

    创建你的一个web server,然后将这个实例制成你的AMI,通过启动配置生成一个Auto Scaling组(包括scale-in/scale-out策略),配置一台Load Balancer指向你 ...

  4. 如何使用 AWS Auto Scaling 按需动态增加和减少实例

    目录 一.背景需求 二.配置步骤 2.1.创建 AMI 2.2.创建负载均衡目标组 2.3.创建 Classic Load Balancer 2.4.创建启动配置 2.5.创建 Auto Scalin ...

  5. Model-View-Controller(MVC) is an architectural pattern that frequently used in web applications. Which of the following statement(s) is(are) correct?

    Model-View-Controller(MVC) is an architectural pattern that frequently used in web applications. Whi ...

  6. Progressive Web Applications

    Progressive Web Applications take advantage of new technologies to bring the best of mobile sites an ...

  7. Developing RIA Web Applications with Oracle ADF

      Developing RIA Web Applications with Oracle ADF Purpose This tutorial shows you how to build a ric ...

  8. Setting up Scatter for Web Applications

    [Setting up Scatter for Web Applications] If you are still using scatter-js please move over to scat ...

  9. [Windows Azure] Developing Multi-Tenant Web Applications with Windows Azure AD

    Developing Multi-Tenant Web Applications with Windows Azure AD 2 out of 3 rated this helpful - Rate ...

随机推荐

  1. js删除最后一个字符

    在最近做一个系统,使用socket来完成后台操作,C#来完成前端操作.但是在定的协议里面,一定要用某个符号来表示传的数据结束.后台进行交互时,获取到的数据必须进行删除最后一个字符的操作. 比如我们协议 ...

  2. 《Head First HTML与CSS》的CSS属性

    关于继承的结论. 1.元素选择器的作用强于继承的作用:用户定义强于浏览器默认(详见(3)<Head First HTML与CSS>学习笔记---CSS入门的2) 2.基于类的选择器> ...

  3. 在git远程仓创建项目之后,提交本地项目的使用方法

    命令介绍 git 用户配置 git config --global user.name "张三" git config --global user.email "zhag ...

  4. Linux上用mvn安装node.js

    Linux上用mvn安装node.js 上一篇blog简略的讲了ubuntu系统的安装,接下来讲讲Ubuntu上的基于node.js的web开发环境的搭建. Node在快速构建网络服务有着极大的优势, ...

  5. C# 移动控件

    最近要做车牌识别的,不同地区收费标准不一,所以想做个可以移动控件来给客户选择停车场收费条件的.   首先因为要自动排序控件选FlowLayoutPanel做容器,加若干Panel和FlowLayout ...

  6. [Python3]Python官方文档-Python Manuals

    简介 一般情况下,初学者都不愿意直接去浏览Python Manuals,即Python自带的官方文档.尤其是只有英文版的情况下,初学者更加不会去使用该官方文档了. 在这里笔者强力推荐初学者经常学会使用 ...

  7. 7-Java-C(搭积木)

    题目描述: 小明最近喜欢搭数字积木, 一共有10块积木,每个积木上有一个数字,0~9. 搭积木规则: 每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小. 最后搭成4层的金字塔形,必须用完 ...

  8. gitlab利用ssh方式拉取代码

    问题1: Bad owner or permissions on .ssh/config的解决 当为本机配一个固定用户名远程登录某主机时,配置了一个config文件,但是在执行ssh免密码登录时报如下 ...

  9. Java中wait()方法为什么要放在同步块中?(lost wake-up 问题)

    问题起源 事情得从一个多线程编程里面臭名昭著的问题"Lost wake-up problem"说起. 这个问题并不是说只在Java语言中会出现,而是会在所有的多线程环境下出现. 假 ...

  10. Piston Pump Manufacturers - Mobile Cartridge Piston Pump: Advantages

    The    Piston Pump Manufacturers   states that the operation of any piston pump is based on the rela ...