准确来说应该叫脱离业务的弹性云或者容器都是伪弹性。之所以标题中有APM一是因为它近来热门,二是因为它在我将要说的这个事情上起到关键性的作用。

不管是亚马逊的弹性云、容器方案或者国内众多云厂商在自动伸缩的时候所依据的关键指标基本都是硬件资源的利用率,当某一硬件资源利用率达到设定的阀值时会自动进行节点的水平扩展,从而达到所谓的业务服务持续可用。这样看上似乎没有什么问题,比以前的运维方式有很大的改进,从而深受众多运维人员的喜爱。

但这样的自动伸缩来保证服务其实隐含两个前置条件:

1.程序部署到这些云上之前经过充分的性能测试,保证没有软件bottleneck

2.workload基本固定,不会有过多的动态改变导致消耗resource的pattern完全不同

想象下,比如有一个应用没有经过充分的性能测试,退一万步说即使经过很多的测试,仍然有可能在线上出现软件性能问题,那么此时很可能硬件资源的resource并不会达到预定阀值,弹性云不会自动创建更多的节点来保持业务的持续性,但此时终端用户的体验已经很差了,比如响应时间长了。

又比如,在进行测试时,通常会提取先前的业务日志来构建workload模型,这样测试下来可能会做出某个决策说该应用是CPU intensive或者其他啥的。 但很多互联网业务总是在进行调整,有时甚至是营销策划活动都有可能完全改变用户的访问路径,造成workload跟预先测试的完全不一样,消耗resouce的pattern也不一样了。这还不用说很多国内test guys会follow dev们所谓的压力测试,完全就没有量化应用的性能,根据应用性能特征所设定的阀值也就是无稽之谈了。

在随着软件复杂性越来越高,软件所覆盖的场景越来越多的今天,还能满足上面这两个前置条件的应用恐怕不占多数。那么怎么样才能做到真正的弹性伸缩,也就是即使不满足这两个前置条件也能正确的自动伸缩。

前几年团购兴起的时候,经常有报道说某饭店进行团购,结果遇到集中消费,短时间内饭店的营业额是上去了,但是在人满为患的餐厅吃饭的体验想必去过的人都不想再去了,因为人多服务能力有限服务的水准自然就下降了。排队没人理,上一个菜要等半小时才上第二道,说不定因为忙菜里面还额外赠送了高蛋白食物。在服务行业领域,有很多跟服务级别水平相关的,比如酒店,从三星到七星;比如去银行办事,办完了还要给柜台服务人员打星评价。这些都是量化服务的,因为只有去量化服务才能知道服务的水平,才知道以后要不要改善服务。

在软件工程中,我们可以借助于APM来量化我们所要提供出去的服务,实时知道当前的服务水平。我很欣赏SAAS的概念,大部分软件跟普通商品和服务并没有本质上的区别,它们都是为人服务的,我们最应该考虑的是进行服务时,我们的服务水平到底怎么样,低于预期的话能不能马上更正过来。所以在能借助自动水平扩展保证服务的应用中,我们应该根据APM中的定义的SLA来进行自动伸缩,使得终端客户感知到的软件服务水平是一致的。

离开APM的弹性云还是真弹性吗的更多相关文章

  1. #化鲲为鹏,我有话说# 鲲鹏弹性云服务器配置 Tomcat

    在鲲鹏弹性云服务器上配置 Tomcat 1 下载 Tomcat 地址 :http://tomcat.apache.org/ 根据需要选择版本,这里使用 Tomcat 9,下载压缩包 2 将文件发送到服 ...

  2. 阿里云专有网络与弹性公网IP

    阿里云服务器经典网络和专有网络究竟有什么区别? 在用户提交订单购买阿里云ECS云服务器时,会面临怎样选择网络类型的烦恼,阿里云服务器定制购买时,网络类型里的经典网络和专有网络(VPC)是什么含义,该怎 ...

  3. 【小技巧解决大问题】使用 frp 突破阿里云主机无弹性公网 IP 不能用作 Web 服务器的限制

    背景 今年 8 月份左右,打折价买了一个阿里云主机,比平常便宜了 2000 多块.买了之后,本想作为一个博客网站的,毕竟国内的服务器访问肯定快一些.满心欢喜的下单之后,却发现 http 服务,外网怎么 ...

  4. 云技术:弹性计算ECS

    云计算(Cloud Computing)被业界看作继大型计算机.个人计算机.互联网之后的第四次IT产业革命,正日益成为未来互联网与移动技术相结合的一种新兴计算模式.云计算提供了IT基础设施和平台服务的 ...

  5. 云原生的弹性 AI 训练系列之一:基于 AllReduce 的弹性分布式训练实践

    引言 随着模型规模和数据量的不断增大,分布式训练已经成为了工业界主流的 AI 模型训练方式.基于 Kubernetes 的 Kubeflow 项目,能够很好地承载分布式训练的工作负载,业已成为了云原生 ...

  6. 云原生的弹性 AI 训练系列之二:PyTorch 1.9.0 弹性分布式训练的设计与实现

    背景 机器学习工作负载与传统的工作负载相比,一个比较显著的特点是对 GPU 的需求旺盛.在之前的文章中介绍过(https://mp.weixin.qq.com/s/Nasm-cXLtJObjLwLQH ...

  7. 云原生的弹性 AI 训练系列之三:借助弹性伸缩的 Jupyter Notebook,大幅提高 GPU 利用率

    Jupyter Notebooks 在 Kubernetes 上部署往往需要绑定一张 GPU,而大多数时候 GPU 并没有被使用,因此利用率低下.为了解决这一问题,我们开源了 elastic-jupy ...

  8. CSS3总结五:弹性盒子(flex)、弹性盒子布局

    弹性盒子容器的属性与应用 display:flex/inline-flex flex-direction flex-wrap justify-content align-items align-con ...

  9. EBS描述性弹性域及键弹性域总结

    一.描述性弹性域 前言介绍: 描述性弹性域的实质就是系统预留自定字段,系统可以使用说明性弹性域来获取业务所特有的重要附加信息.系统可能自定义说明性弹性域,以显示存储更多信息的字段,提供一套完整的“自定 ...

随机推荐

  1. PHP Framework MVC Benchmark 基准测试

    身边有朋友在用yaf框架,讨论的也声音也比较多,今天没事看鸟哥的博客,看到一篇现在PHP主流的几个框架性能对比,比较有意思,给大家分享一下! Yaf是用PHP扩展的形式写的一个PHP框架,也就是以C语 ...

  2. stl里面的空间适配器

    一般而言,如果频繁地向system heap申请和释放空间很小的内存空间块(小于128B的),就会对系统内存资源产生很多内存碎片(fragment)的问题,而C++的::operator new() ...

  3. 安装程序工具 (Installutil.exe)22

    网址:https://msdn.microsoft.com/zh-cn/library/50614e95(VS.80).aspx  安装程序工具 (Installutil.exe) .NET Fram ...

  4. Java 给Thread传递参数

    一开始我想把run()函数写成有参函数来传值,后来发现行不通.经过查找,最终用如下方法传递了参数: 也就是用另外一个有参函数setTar()传递参数. 调用的时候用这4行code传递参数: 上面是用i ...

  5. [SDOI2016] 模式字符串 (BZOJ4598 & VIJOS1995)

    首先直接点分+hash就可以做,每个点用hash判断是否为S重复若干次后的前缀或后缀,每个子树与之前的结果O(m)暴力合并.在子树大小<m时停止分治,则总复杂度为O(nlog(n/m)). 问题 ...

  6. ES6之Object

    对象属性模型的相关方法: 对象自身所有属性名称 Object.getOwnPropertyNames(obj)              //[] 获取某个属性的attribute对象 Object. ...

  7. idea类名下有红色波浪线

    能编译通过说明SDK导入正确,但是为啥我们点击每一个Java文件会出现好多红色的下划线 ,并提示idea cant resolve symbol 原因就是可能没有清除原来的历史缓存,导致一些错误,解决 ...

  8. public void与public static void区别

    我们换个简单易懂的说法,这两句的区别就在于,能不能直接用类名访问. 很好理解的不是吗? 假如,我有一个类,如下图所示: 接下来先实例化一个对象,ca,你会发现它不仅可以访问普通的方法,也可以访问静态的 ...

  9. AndroidStudio中添加依赖的三种方式以及如何引入so文件和arr文件

    AndroidStudio中添加依赖的三个选项,如图:    分别为:库依赖(Library dependency).文件依赖(File dependency)和module依赖(Module dep ...

  10. The Django Book学习笔记 06 admin

    自定义字段标签 自定义一个标签, 你只需在模块中指定 verbose_name=' ' from django.db import models # Create your models here. ...