使用Auto-Scaling服务在Bluemix平台构建可自动伸缩的应用

Auto-Scaling简介

      Bluemix Auto-Scaling是由CDL team发起并开发的一个能够对Bluemix平台的应用自动扩展的服务,致力于为开发者营造更友好和稳定的开发环境。

          通过Bluemix平台,用户可以非常方便的开发并部署自己的应用。一个应用的性能可能会随着访问量的增加而急剧下降。在不对应用本身进行代码优化的前提下,若要提高访问此应用的用户体验,对此应用进行扩展是最好的办法。

    在Bluemix上,存在两种扩展方式,垂直扩展和水平扩展。

          垂直扩展被称为向上 (scale up) 扩展。垂直扩展通过向运行应用的容器添加容量来增加可供应用程序使用的资源,比如增加CPU数目或者增加内存的容量。

          水平扩展又被称为向外扩展 (scale out)。通过增加应用的实例数目增加总体应用程序资源容量。比如以前是一个实例,现在扩展到5个应用实例。而在Bluemix上,这对应用的访问者来说是透明的,即访问者访问应用只有一个入口,其并不知道这个应用具体有多少个实例。

    Bluemix上的Auto-Scaling就是基于水平扩展来使应用具有可伸缩性的。

Auto-Scaling现在支持两种途径的缩放,第一种是基于应用的性能参数(如内存,Liberty的应用还支持heap,throughout等)的自动缩放,第二种是基于应用作者指定的时间段的缩放。

准备工作

        在Bluemix上创建一个应用并且绑定到Auto-Scaling服务

        注册一个Bluemix ID并登录。

        在Bluemix上创建一个应用,在Bluemix的dashboard点击CREATE APP。


 

 

   

     这里我们选择创建一个WEB APP作为示例。


 

 

 

     选择Liberty for Java类型。


 

 

    输入应用的名字。



     给应用添加Auto-Scaling服务。选择ADD A SERVICE OR API。


 

    找到Auto-Scaling并选择。


 

    创建一个Auto-Scaling服务的实例。


 

     完成后会提示应用要Restage,点击确定。

使用Auto-Scaling服务

    到此我们就完成了准备工作,下面就可以开始定义自己的规则来实现应用的自动伸缩了。

基于性能参数的缩放

    下面我们先来看第一种类型的缩放规则:根据应用的性能参数缩放。

    点击创建的Auto-Scaling服务的实例到创建规则的页面,点击CREATE AUTO-SCALING POLICY。


 

     在此页面添加如下图的规则,


 

    这里我们定义参数如下:

    最大的实例数Allowable maximum instance count为5

    默认的实例数Default minimum instance count 为1

    性能参数的类型选择Memory,为了使应用能够更容易缩放,我们将扩展的上限设置为50%,这样只要应用实例的Memory使用超过50%,就会增加一个实例。

同时将收缩的下限设置为30%,这样当应用实例的Memory使用少于30%就会减少一个实例。

           对于 Statistic Window 和 Breach Duration:指定 120 秒(最小值),以便对是否扩展应用程序的决策应用最高的灵敏度级别。 

    对于扩展和精减的 Cooldown period:指定 120 秒。

 

           一些设置规则的技巧:

          如果应用程序的工作负载在短期内的增长非常快,那么可以将 Breach Duration 设置为一个较小的值,让您的应用程序能够提前扩展,避免超出 CPU 或内存容量和应用程序崩溃。如果您选择的 Metric TypeCPUMemory 或 Heap)在短期内增高并降低,可以为 Statistic Window 指定一个更高的值。为了确定您的应用程序的 CPU 利用率是否超出了上限或下限,Auto-Scaling 会考虑一个时间范围(在 Statistic Window 参数上指定的值)内的指标数据并计算平均值。为 Statistic Window 指定的值越高,它选择用来计算应用程序是否达到上限或下限的数据范围就越宽。

        第一次扩展完成后,第二次扩展在 Cooldown 期限过去后才能触发。此做法提供了足够的时间让应用程序状态变得稳定。出于演示用途,我们为 Cooldown 指定一个较短的期限,对于生产环境,可以使用较长的期限。 

 

    下面我们来提高应用的内存用量来使其进行自动扩展。

    在Eclipse中建立一个web project,名称为helloWorld。然后创建一个servlet。在此servlet中定义一个List<String>的实例。然后添加两个方法add和delete。当调用add时,每次为list添加指定书目的字符串,当调用delete时,把list置为null,即之前所有添加的元素都删除。

    代码片段如下所示:

protected void doGet(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException

  {

  String method = request.getParameter("method");

  if("add".equals(method)){

  int count = Integer.parseInt(request.getParameter("count"));

  this.add(count);

  }

  else

  {

  this.delete();

  }

  response.setContentType("text/html");

    PrintWriter out = response.getWriter();

    out.write("----------"+list.size());

    out.flush();

  }

 

  protected void doPost(HttpServletRequest request, HttpServletResponse responsethrows ServletException, IOException {

    serveRequest(requestresponse);

  }

  private int add(int count){

  if(null == list){

  list = new ArrayList<String>();

  }

  for(int i = 0; icounti++){

  list.add("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");

  }

  return list.size();

  }

  private int delete(){

  list = null;

  return 0;

  }

        这样我们通过带着特定的参数访问应用时,就可以手动的改变应用的内存用量,使其达到扩展的限值。

        此后我们访问此应用并不断提高其内存用量,切换到Metric Statistics标签页可以看到内存的参数如下图所示,已经达到了扩展的上限,


 

 

    此时我们切换到Scaling History标签页,发现应用的实例已经开始扩展了,如下图所示。

 


 

 

 基于指定时间段的调度缩放

    以上基于应用的性能参数的缩放能够满足大多数的应用的要求。但是对于在某个特定时间段内访问量爆炸性上升从而造成性能下降的应用的支持度并不是非常友好。比如一个应用只有在特定的时间段例如晚上7点到11点之间的访问量会急剧上升,而且是在7点短时间内就到达一个非常大的值得话,这样如果还采用第一种方式一步一步的扩展就会带来前期的实例数不能满足其巨大的访问量而性能下降的问题。这时的扩展过程如下图所示,


 

    既然我们已经知道访问量急剧增大的时间段,我们可以在这个时间段开始之前就预先将应用的实例数目扩展到一个可以支撑其访问量的数目,此后在随着应用的性能参数来进行缩放。这样就避免里上述的问题。

    由此,我们引入下一种缩放方式,即用户指定某一个时间段,在此时间段内,应用的实例数会自动上升到一个指定最小的数目,此后会根据第一种缩放方式来根据应用的性能自动增加或减少应用的实例,并且此阶段内,应用的实例数不会小于应用所有者指定的最小数目,也不会大于指定的最大的数目。这时的缩放过程会如下图所示,


 

 

 

 

 

 

    下面我们来实际操作一下这种方式。

    选择时区:

    后面指定的时间都会是这个选取的时区的时间,这里选择东八区的北京时间。

 


 

创建一个可重复调度的规则:


    如上图所示,

    我们指定了这样的一个重复调度的规则:

    每天从东八区的13:40开始,到13:50结束,自动把应用的实例数调整到3个。

    所有的字段中,Start Time和End Time的取值区间是0:00 至 23:59,并且Start Time须早于End Time。

    Repeat On字段可以多选,其包含的值是从Monday至Sunday,如果选择全部,则显示的是Everyday。

    Minimum Instance Count的值须大于0,并且小于之前设定的Allowable maximum instane count

    下面再来创建一个特定时间段调度规则:

    如下图所示,


    从东八区时间的201563日的14:00开始,到20156314:15结束,自动把应用的实例数调整到4个。

所有的字段中,Start Date & Time代表的时间须小于End Date & Time代表的时间。

    Minimum Instance Count的值须大于0,并且小于之前设定的Allowable maximum instane count

在所有的缩放规则中,特定时间段调度规则有最高的优先级,即如果重复调度规则和特定时间段调度规则制定的时间冲突,则以特定时间段调度规则为准。

点击 Save Policy来保存创建的规则。

    此后我们开始观察应用实际的缩放情况。

    点击 Scaling History标签页,现在的时间是13:42,如下图所示,应用的实例数目已经在1:40的时候增加为3个,增加的原因是Recurring schedule Wed 1:40 PM triggered


    过了一段时间后,现在的时间是13:50,点击Metric Statistics标签,如下图所示,现在应用所用的Memory已经小于我们之前设定的总内存的30%

  

    再切回Scaling History标签页,如下图所示,我们看到应用的实例已经逐渐减小为1。

  

    一段时间后,现在的时间是14:02,已经进入了我们之前指定的特定时间段调度规则指定的时间,如下图所示,应用的实例数目已经直接由1增加为4,增加的原因是Schedule Jun 3, 2015, 2:00 PM triggered


    在14:15之后,切换到Metric Statistics标签页,现在应用的内存用量又已经小于30%的阈值,如下图所示,

  

 

    切换到Scaling History标签页,可以看到,应用的实例数目已经逐渐由4减小到1


结束语 

    现在,您已经知道了如何将一个应用程序部署在 Bluemix 上,并为它启用 Auto-Scaling 功能。我们希望您觉得 Auto-Scaling服务确实很容易使用,它可以帮助您改善应用程序的弹性,并会在您在 Bluemix 上工作时为您降低总体成本。

智慧旅游解决方案利用云计算、物联网和移动互联网技术,通过便携终端设备,实现对旅游资源、经济、活动和旅游者信息的智能感知和发布。这种技术的应用旨在提升游客在旅游各个环节的体验,使他们能够轻松获取信息、规划行程、预订票务和安排食宿。智慧旅游平台为旅游管理部门、企业和游客提供服务,包括政策发布、行政管理、景区安全、游客流量统计分析、投诉反馈等。此外,平台还提供广告促销、库存信息、景点介绍、电子门票、社交互动等功能。 智慧旅游的建设规划得到了国家政策的支持,如《国家中长期科技发展规划纲要》和国务院的《关于加快发展旅游业的意见》,这些政策强调了旅游信息服务平台的建设和信息化服务的重要性。随着技术的成熟和政策环境的优化,智慧旅游的时机已经到来。 智慧旅游平台采用SaaS、PaaS和IaaS等云服务模式,提供简化的软件开发、测试和部署环境,实现资源的按需配置和快速部署。这些服务模式支持旅游企业、消费者和管理部门开发高性能、高可扩展的应用服务平台还整合了旅游信息资源,提供了丰富的旅游产品创意平台和统一的旅游综合信息库。 智慧旅游融合应用面向游客和景区景点主管机构,提供无线城市门户、智能导游、智能门票及优惠券、景区综合安防、车辆及停车场管理等服务。这些应用通过物联网和云计算技术,实现了旅游服务的智能化、个性化和协同化,提高了旅游服务的自由度和信息共享的动态性。 智慧旅游的发展标志着旅游信息化建设的智能化和应用多样化趋势,多种技术和应用交叉渗透至旅游行业的各个方面,预示着全面的智慧旅游时代已经到来。智慧旅游不仅提升了游客的旅游体验,也为旅游管理和服务提供了高效的技术支持。
智慧旅游解决方案利用云计算、物联网和移动互联网技术,通过便携终端设备,实现对旅游资源、经济、活动和旅游者信息的智能感知和发布。这种技术的应用旨在提升游客在旅游各个环节的体验,使他们能够轻松获取信息、规划行程、预订票务和安排食宿。智慧旅游平台为旅游管理部门、企业和游客提供服务,包括政策发布、行政管理、景区安全、游客流量统计分析、投诉反馈等。此外,平台还提供广告促销、库存信息、景点介绍、电子门票、社交互动等功能。 智慧旅游的建设规划得到了国家政策的支持,如《国家中长期科技发展规划纲要》和国务院的《关于加快发展旅游业的意见》,这些政策强调了旅游信息服务平台的建设和信息化服务的重要性。随着技术的成熟和政策环境的优化,智慧旅游的时机已经到来。 智慧旅游平台采用SaaS、PaaS和IaaS等云服务模式,提供简化的软件开发、测试和部署环境,实现资源的按需配置和快速部署。这些服务模式支持旅游企业、消费者和管理部门开发高性能、高可扩展的应用服务平台还整合了旅游信息资源,提供了丰富的旅游产品创意平台和统一的旅游综合信息库。 智慧旅游融合应用面向游客和景区景点主管机构,提供无线城市门户、智能导游、智能门票及优惠券、景区综合安防、车辆及停车场管理等服务。这些应用通过物联网和云计算技术,实现了旅游服务的智能化、个性化和协同化,提高了旅游服务的自由度和信息共享的动态性。 智慧旅游的发展标志着旅游信息化建设的智能化和应用多样化趋势,多种技术和应用交叉渗透至旅游行业的各个方面,预示着全面的智慧旅游时代已经到来。智慧旅游不仅提升了游客的旅游体验,也为旅游管理和服务提供了高效的技术支持。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值