IBM Bluemix 即时运行时(基于 Cloud Foundry)通过在一个地区内的多个节点上运行应用程序的多个实例来支持应用程序可用性。但是,要在 Bluemix 上提供真正可靠的云应用程序,应该考虑采用某种利用了 Bluemix 的全球覆盖范围的多地区架构。
目前,在 Bluemix 上交付一个合适的多地区应用程序(能跨地区执行负载平衡的应用程序)需要一个外部路由器或路由服务。但是,即使在您完成该应用程序后,仍会面临保持您的动态内容在不同地区间同步的挑战。如果采用单一数据库方法,您的应用程序可能遇到数据库延迟问题。如果采用分布式数据库方法,您可能发现您的分布式数据库不适合分散到全球。
我将介绍如何通过以下方式配置和运行一个多地区 Bluemix 应用程序:
要使用 Dyn Managed DNS,必须控制一个可以委托给您分配的 Dyn 名称服务器的域。如果已经有一个可以委托的域,请跳到第 2 步。如果没有,那么应该向任何经过认证的域名注册商(比如 Dyn 的域名注册商 )注册一个域。
地区 | 位置 | 控制台 URL | API 端点 |
---|---|---|---|
Sydney | 澳大利亚悉尼 | https://console.au-syd.bluemix.net | https://api.au-syd.bluemix.net |
United Kingdom | 英国伦敦 | https://console.eu-gb.bluemix.net | https://api.eu-gb.bluemix.net |
US South | 德克萨斯州达拉斯 | https://console.ng.bluemix.net | https://api.ng.bluemix.net |
此路由为您提供了在配置您的自定义域的 DNS 之前,访问您在特定地区运行的应用程序版本的后门。但是,如果您希望将应用程序的访问限制到单个 URL,不要忘记在未来删除此路由。
地区 | 用户名 | 密码 |
---|---|---|
US South | -bluemix | |
United Kingdom | -bluemix | |
Sydney | -bluemix |
现在对您希望托管您的应用程序的每个 Bluemix 地区重复第 3-8 步,在每个地区为该应用程序提供相同的名称和域。完成上述操作后,您的 Node.js Cloudant DB Web Starter 应该已在每个 Bluemix 地区运行,并为每个地区打开了一个 Cloudant 仪表板。
这会在每个地区创建一个名为 “_replicator” 的新数据库,并为每个复制任务创建一个文档。
地区 | 域 |
---|---|
US South | mybluemix.net |
United Kingdom | eu-gb.mybluemix.net |
Sydney | au-syd.mybluemix.net |
阅读: 关于 Cloudant 复制的更多信息
Master-to-master 数据复制是 Cloudant/CouchDB 的一个良好功能,但您应该考虑如何处理文档冲突。默认策略是随机挑选冲突优胜者,但应用程序可以自行处理冲突。为此,最轻松的方式是将您的应用程序设计为通过确保唯一的 document _id 和避免文档更新来避免冲突。
阅读: 有关冲突解决的更多信息
从任何 Bluemix 地区导航回应用程序 Overview 页面,单击右上角的 ADD GIT ,然后根据对话框在新 Bluemix DevOps Services 项目中填充样板的内容。
创建存储库后,关闭该对话框并单击 GIT URL ,在 IBM Bluemix DevOps Services 中打开您的项目。接下来,单击 BUILD & DEPLOY 打开您项目的部署管道。该项目已有一个针对创建该项目时所在地区的工作管道,但您可能希望配置 Deploy Stage,将它部署到其他 Bluemix 地区。
您可以通过向 Deploy Stage 添加其他作业将其部署到其他 Bluemix 地区。一定要正确设置每个地区的目标,并保存新的配置。
现在已配置好该管道,让我们尝试稍作更改。单击页面顶部附近的 EDIT CODE ,在内置编辑器中打开 manifest.yml 文件,修改内存阈值和实例数量:
applications: - path: . memory: 256M instances: 2 ...
此代码告诉 Bluemix 平台(在每个地区)运行该应用程序的 2 个实例,而不是 1 个实例。无论是否采用 DNS 故障转移,都强烈建议运行应用程序的多个实例,避免在发生隔离的事故或平台维护时出现意外宕机。
备注:非试用版 Bluemix 用户会收到为期一个月在 512 MB 下运行的免费限额。因为各个地区的使用量会聚合在一起,所以这意味着上述配置将会让您超出此限额。
切换到 GIT 视图,并提交和推送您的更改。
推送您的更改会自动调用交付管道,将您的更新部署到所有已配置的地区。导航回 BUILD & DEPLOY 部分来检查进度。
要通过自定义域访问您的应用程序,必须首先配置域名系统,将您的路由解析到 Bluemix。要使用 Dyn Managed DNS 实现此目的, 注册其 Managed DNS 产品的 7 天免费试用版帐户 。如果想要配置地理负载平衡和故障转移,可以联系 Dyn 了解其企业计划的定价和可用性。
注册后,请登录到 Dyn Managed DNS 门户并为您的自定义域创建一个新区域。
记下 Dyn 分配给您的名称服务器。您需要将它们作为 NS 记录添加到第 1 步的 DNS 注册商中,以便将您的域委托给 Dyn。可以通过以下配置了解委托您的域的更多信息:
为您的域创建一个区域并将该域委托给 Dyn 后,是时候为您的 Bluemix 应用程序配置一个子域了。为此,可以添加一个与您在 Bluemix 中的应用程序的主机名相匹配的新节点。
如果已登记参加了企业计划,请跳到 Traffic Director 部分为您的节点配置负载平衡和故障转移。如果没有登记参加企业计划,则无法在没有额外的路由层的情况下配置负载平衡,但您仍然可以继续从 Dyn 节点编辑器添加单个 CNAME Record:
将 CNAME 字段设置为您首选的 Bluemix 地区的安全端点:
地区 | CNAME |
---|---|
US South | secure.us-south.bluemix.net |
United Kingdom | secure.eu-gb.bluemix.net |
Sydney | secure.au-syd.bluemix.net |
备注: 这些 CNAME 记录被解析为不同于每个地区中的默认 “mybluemix” 域的 IP。如果您希望配置 A Records,必须使用这些安全 CNAME 端点的 IP,才能支持来自您的自定义域的 HTTPS。
Dyn Traffic Director 是一种高度可配置的 DNS 流量管理服务,它通过响应池、规则集和监视器来提供地理位置负载平衡和故障转移。要为您的 Bluemix 应用程序配置 Traffic Director,可从 Dyn 节点编辑器上的 “Add a New Service” 下拉列表中选择它,为它提供一个标签,然后单击 CREATE SERVICE 。
接下来,为每个 Bluemix 地区创建一个单独的响应池:
使用前面的表,添加一个 CNAME Record,其中包含每个响应池的相应 Bluemix 地区的安全端点。
保留大部分字段的默认值,但可以考虑将 “Record Serve Mode” 修改为 “Monitor & Remove”。借助 “Monitor & Obey” 值,在从监视器建立一个成功连接后,故障转移流量会自动还原到响应池。这可能会导致服务反复中断。通过将模式设置为 “Monitor & Remove”,恢复就会变成一种手动干预。
接下来,为每个地区添加一个规则集来配置使用哪个响应池来处理哪些请求。
作为您的规则集的起点,可以复制以下配置:
规则集 | 地理区域 | 响应池故障转移 |
---|---|---|
美洲 | 北美洲、南美洲 | US South > United Kingdom > Sydney |
欧洲/非洲 | 非洲、欧洲和俄罗斯 | United Kingdom > Sydney > US South |
亚太地区 | 南极洲、亚洲和澳大利亚 | Sydney > United Kingdom > US South |
匹配所有 | 可以将此保留为空来匹配未定义的区域 | Sydney > United Kingdom > US South |
除了地区配置之外,Response Pool Failover 字段还允许用户自定义在发生故障时采用哪些响应池。要使用此功能,还必须为您的应用程序配置一个监视器。
要配置监视器的探测位置,可将协议保留为 HTTP,将端口设置为 80 ,并指定您的 Bluemix 应用程序的主机。设置较低的 Probe Interval 来缩短潜在宕机时间,为 Expected Data 字段配置将出现在正常运行的应用程序中的信息。在我们的示例应用程序中,可以使用文本 “Favorites Organizer powered by Cloudant.”。
提示:在真实场景中,您可能希望在您的应用程序中包含一个专门的状态页面,它仅在应用程序的所有服务依赖项都正常运行时才返回预期的文本。
配置一个通知程序,以便在监视器检测到服务中断时收到一封电子邮件,这是一项可选操作。在测试配置时,您可能还希望在一个单独的选项卡中打开 Probe Results 链接,以验证对您的网站的状态检查。
配置响应池、规则集和监视器后,发布您对 Traffic Director 和区域的更改。如果所有设置都正确配置,那么您会看到节点配置编辑器中列出了 Traffic Director 服务(和您的响应池的状态):
nslookup
来查看哪个地区在处理您的请求。 如果使用 Traffic Director 来执行地区负载平衡和故障转移,可继续:
nslookup
来查看 DNS 更改是否已生效。该网站应在为您的 A Records 配置的 TTL(存活时间)内的某个时刻解析到它的新地址。 尽管 Dyn Traffic Director 提供了一种有用的方法来减轻特定于地区的宕机,但值得注意的是 DNS 故障转移有一些重要的限制:
二者相结合,可实现最长 6.5 分钟的窗口(当用户的浏览器在发生故障转移之前锁定一个 PI 时),但平均窗口会短得多。
此外,在一些故障场景中,应用程序可能在事故过程中反复启动停止。为了避免在这些场景中恢复流量,我推荐使用 “Monitor & Remove” 服务模式来处理流量恢复行为。
备注:尽管本教程中没有介绍,但您可以通过 Dyn API 从您自己的自定义监视器调用故障转移功能,进一步缩短 60 秒的监视窗口。这也可以用于实现与自动恢复故障转移流量相关的更复杂规则。
使用 Dyn 的地区负载平衡,您的 URL 的全球访问者将由最靠近其位置的 Bluemix 数据中心处理。通过配置故障转移,您能够明确知道,如果一个 Bluemix 地区开始出现问题,那么您的用户将会定向到一个有效的站点。与 Cloudant master-to-master 同步功能相结合,是在 Bluemix 上运行容错、云原生应用程序的秘诀。
BLUEMIX SERVICES USED IN THIS TUTORIAL: