Google最近发布一组 论文 ,提供了一个创建运行在Google云平台上的弹性可伸缩解决方案的架构指南。本文摘自每个组件的详述论文,提取了主要的概念和建议,对这些指南稍作改动即可应用于在其它云平台部署web应用。
下面这张图表展示出一个弹性可伸缩应用的主要组件,图片下方是每个组件的描述:
地区(Region ) – 论文仅讨论了单一地区多区域的方案,尽管应用可以被部署到多个地区。
区域(Zone ) – 地区内部的一个位置。区域之间的网络连接迟延很低,且具有很强的妥善处理节点间通信的能力。
负载均衡器(Load Balancer ) – 对客户端而言相当于请求的入口,可以在不同实例间均衡地分发请求。如果必要的话,一个负载均衡器可以在多个地区间传播请求。
实例(Instance ) – 一个运行在GAE上的特殊虚拟机。
实例组 -在某个区域内部聚合到一起的实例,并且由其中一个实例负责创建和关闭实例的 组管理者 。
自动伸缩器 ( Autoscaler ,未在图示中列出)- 这个组件根据当前负载状况指示组管理者创建或停止实例。自动伸缩器利用一个基于CPU利用率、一个 云监控指标 ,抑或实例每秒接收的请求数的 策略 实现自动伸缩的功能。
云SQL -通过地区级的管理,这个SQL存储解决方案可以自动地在区域之间被复制。
云存储 -这个存储解决方案为所有的实例保留对象(通常是文件),状态数据和上传的文件应该被保存在这里。
以上提及的组件对于一个可伸缩的解决方案来说至关重要。为了保持弹性,有必要提供启动实例以及在一些实例失去响应时进行重启并重新配置它们的方法,你可以利用以下组件来实现:
启动脚本 -启动脚本是一些常驻在实例、云存储中或通过一个指定的URL获得的脚本,在实例启动或重启的时候被执行,负责设置实例并确保所有本地服务成功运行。这些脚本可以安装软件或执行更新操作。
正常运行检查 -这是一个负责在实例上运行检查来查看它们是否正常运行的GAE组件,所有请求只被发往健康运行的实例。
后端服务 -这是一个与正常运行检查和实例组相关的组件,中转来自负载均衡器的请求。
这篇论文提供了设置并部署 Redmine 的指南。Redmine是一个基于Ruby on Rails的项目管理应用,相关内容请访问 Github项目 。
论文也包含了如何基于页面浏览、请求、页面大小以及其它指标的平均值计算运行一个web应用的开销的建议。
查看英文原文: The Architecture of a Scalable and Resilient Google Cloud Solution
感谢邵思华对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流。