针对 Node.js 运行时的 Auto-scaling 增强

DruForsyth 8年前
   <h2><strong>简介</strong></h2>    <p>在 Auto-Scaling for Bluemix服务的上一个版本中,它仅支持 Node.js 应用程序的 “内存” 指标。通过将内存使用指标合并到当前版本中,我们可以评估应用程序的健康情况,从而确定是否需要所评估应用程序的更多实例。但是,有时我们需要更准确地控制应用程序的实例数量。</p>    <p>Auto-Scaling 服务最近发布了一项针对 Node.js 运行时的增强。它提供了另外两种指标类型:堆和吞吐量。在 Node.js 中,堆、堆栈和代码段构成了主要内存模式。堆存储对象(也是 Node.js 垃圾收集机制中的对象)对评估 Node.js 应用程序的健康至关重要。对于 Web 应用程序,它的健康条件也可以通过应用程序在过去一段时间处理了多少个请求来评估。应用程序处理的请求越多,使用的资源就会越多,它的健康条件也就有可能降低。</p>    <p>本文将演示如何对 Node.js 应用程序应用 Auto-Scaling 服务的新增强。</p>    <h2><strong>构建您的应用程序需要做的准备工作</strong></h2>    <p>您是否知道 developerWorks Premium 不仅提供了 12 个月的 Bluemix 订阅,还提供了 240 美元的贷款用于开发应用程序?您还可以在 Premium 的 Safari Books Online 图书馆中查阅 50 多部有关安全的图书!立即查阅!</p>    <ul>     <li>一个Bluemix® 帐户。</li>     <li>Node.js 编程的基础知识,包括:      <ul>       <li>知道如何使用 Node.js 编写 Web 应用程序</li>       <li>知道如何为 Node.js 应用程序构建 “package.json” 文件</li>      </ul> </li>     <li>HTML 和 JavaScript 的知识。</li>     <li>一个可将 Node.js 应用程序上传到 Bluemix 的开发环境,比如Eclipse。</li>     <li>Apache JMeter™ 的基础知识。</li>    </ul>    <h2><strong>准备应用程序</strong></h2>    <p>要准备您的应用程序,请执行以下步骤:</p>    <ol>     <li>更新应用程序的 package.json。</li>     <li>使用以下命令为 “bluemix-autoscaling-agent” 创建一个依赖条目:<br> "bluemix-autoscaling-agent":"*"</li>     <li>bluemix-autoscaling-agent 是一个可从 npm 安装的 Node.js 模块。在应用程序绑定到一个 Auto-Scaling 服务实例后,该代理可以收集应用程序的指标并发送给 Auto-Scaling 服务的服务器。</li>     <li>依据您在 Bluemix 上为您的应用程序分配的内存,设置 “script” 中的堆限制:<br> "start":"node --max-old-space-size=600 app.js"</li>     <li>如果想触发基于堆使用率的扩展,可以为 “max-old-space-size” 设置一个值。如果在启动应用程序时未设置该值,那么无论您在 Bluemix 中分配了多少内存,都将使用 1.4GB 的默认 Node.js 堆限制,这可能导致制定不正确的自动扩展决策。<br> 以下代码是 package.json 文件在更新后包含的内容。 <pre>  <code class="language-javascript">{   "name": "nodejsdemoapp",   "version": "0.0.1",   "description": "A sample nodejs app for Bluemix",   "scripts": {    "start": "node --max-old-space-size=600 app.js"   },   "dependencies": {    "bluemix-autoscaling-agent": "*”   },   "repository": {},   "engines": {    "node": "0.12.x"   }       }</code></pre> </li>     <li>在您的应用程序中启动 Auto-Scaling Node.js 代理,方法是将下面这行添加到您的入口 JavaScript 中。<br> var agent = require('bluemix_autoscaling-agent');</li>     <li>将应用程序推送到 Bluemix,单击 <strong>创建服务</strong> 将该应用程序绑定到一个Auto-Scaling 服务实例。</li>     <li style="text-align:center"><img src="https://simg.open-open.com/show/d087f8a11ae091e53b9d8f2c793eafba.png"></li>     <li style="text-align:center">单击服务列表中的 <strong>Auto-Scaling</strong> 。 <img src="https://simg.open-open.com/show/f1a78c913929e83340436bdfa8753261.png"></li>     <li>在左侧下拉框“连接到:”里选择您要绑定的应用程序,并单击 <strong>创建</strong> ,您会看到创建的新 Auto-Scaling 服务。它现在已绑定到我们刚创建的应用程序。 <img src="https://simg.open-open.com/show/1b64ad4044bc15e5f413054e46c65db3.png"> <p style="text-align:center"><img src="https://simg.open-open.com/show/9c4a8f660f63540f94f068390ca3fadf.png" alt="针对 Node.js 运行时的 Auto-scaling 增强" width="550" height="241"></p> </li>    </ol>    <h2><strong>创建一个 Auto-Scaling 策略</strong></h2>    <p>要进一步了解分配扩展规则,了解应用 JMeter 的更多细节,请参阅 “ 让您的应用程序在 Bluemix 上富有弹性 ”。</p>    <p>您现在已准备好应用程序,可以开始创建扩展规则了。</p>    <p>请注意,有 3 种指标类型受到支持。在下图中,我们使用 “吞吐量” 作为示例。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/56ecbb887077c65db28d52145dd5a8a7.png"></p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/1bbe1f8255b1784de36b0764251940d1.png" alt="针对 Node.js 运行时的 Auto-scaling 增强" width="550" height="358"></p>    <h2><strong>向应用程序添加工作负载并监视它的资源使用</strong></h2>    <p>在本教程中,我使用 Apache JMeter 向我们的应用程序添加工作负载。JMeter 运行该工作负载后,我打开 Auto-Scaling 仪表板并切换到 Metrics Statistics 选项卡。</p>    <p>在下图中可以注意到,随着工作负载的运行,吞吐量也会增加。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/ad7b4249150a3a482a4783dfd42b7409.png"></p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/f1980d60e867f9d8c00477bd9f631ee7.png" alt="针对 Node.js 运行时的 Auto-scaling 增强" width="550" height="204"></p>    <p>当吞吐量连续 120 秒(保持时间)达到每秒 50 个请求时(达到上限),将创建一个新实例,使实例总数变为 2,如下图所示。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/c775e3e49be5d246a81c408725128542.png"></p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/44cbdb3b4f1e1bb9779cdae432d58eee.png" alt="针对 Node.js 运行时的 Auto-scaling 增强" width="550" height="176"></p>    <h2><strong>结束语</strong></h2>    <p>现在,您已经知道了如何让 Node.js 应用程序利用 Bluemix 上的新 Auto-Scaling 增强。这些新功能很容易掌握,而且有助于提高应用程序的弹性。利用 IBM Auto-Scaling for Bluemix 服务,还可以根据您定义的策略来自动增加或减少应用程序的 CPU 阈值,从而节省总成本、时间和工作量。</p>    <p>下载资源</p>    <ul>     <li>Node.js 代理演示 (nodejsAgentDemo.zip | 1MB)</li>    </ul>    <p> </p>    <p>来自:http://www.ibm.com/developerworks/cn/security/se-auto-scaling-enhancements-node.js-runtime-trs/index.html?ca=drs-</p>    <p> </p>