【总结】如何利用云平台构建容错的APP

1. 邱洋总结

  1. 随着云平台的不断发展,利用云的服务来支撑应用变为常态

  2. 在AWS上设计容错架构的APP需要掌握5个设计模式
    • 假定失效的设计 (利用AWS原生容错的服务,如:ELB、EIP、S3等来增强EC2、EBS、RDS等承载业务应用服务的容错能力)
    • 多可用区设计 (跨数据中心的云服务使用方法)
    • 自动扩展设计 (使用弹性组来自动扩展)
    • 自我修复设计 (使用弹性组来自动修复)
    • 松耦合设计 (拆分应用,并使用SQS来传递消息)
  3. AWS还有另外的7大架构设计原则(针对应用设计),可以参考张侠的7大设计原则 参考文章:【总结】初创公司用AWS搭建高扩展性架构 实用性会更强一些,涉及服务会更多

2. 定义

2.1. 容错性的定义

  • 可用性

    • 在应用工作周期中可用时间的百分比
  • 不可用
    • 应用无法访问,服务中断
    • 应用访问非常缓慢
    • 计划中和非计划中
  • 目标
    • 在部分组件失效的情况下,保持系统,应用的可用

2.2. 与容错相关的事情

  • 扩展性

    • 不进行应用设计调整,应用能否满足访问增长?
    • 可能会影响可用性
  • 高可用能力
    • 建立高可用能力,有更多的备份恢复机制
    • 容错能力对高可用很关键
  • 灾备
    • 业务的连续性

3. AWS的基础设施

  • 全球分布式的基础设施

    • 大区(Region,美国东部、美国西部、美国政府、亚太东京……等11个)
    • 可用区(AZ,美国东部–4个、美国西部–2个……)
  • 天然高可用和容错的服务
    • S3
    • DynamoDB
    • SQS
    • Route53
    • ELB
    • ……
  • 可通过适当的架构设计实现高可用
    • EC2
    • EBS
    • RDS
    • VPC
    • ……

4. AWS中应用的设计原则

4.1. 设计原则一:假定失效的设计

  • 避免单点故障(SPoF)
  • 假定任何环节都有可能出问题,然后倒推依次设计
  • 目标是应用能够连续工作(如:EIP,EBS,ELB等)

4.1.1 EIP的例子

架构设计:Router53→EIP→EC2→RDS

如果EC2实例#1出现问题,那么可以启动另一个EC2实例#2,并将实例#1 的IP绑定给实例#2

4.1.2 EBS的例子

架构设计:Router53→EIP→EC2(+EBS)→RDS

如果EC2实例#1出现问题,那么可以启动另一个EC2实例#2,并将实例#1 的EBS卷绑定给实例#2

4.1.3 ELB的例子

架构设计:Router53→ELB→EC2(more then 1)→RDS

ELB后端有N个EC2实例,无论任何实例出现问题,那么ELB的流量将会停止分发流量到其他健康实例

如果配置了弹性组,那么当实例宕机,那么“弹性组”会自动补齐EC2实例的总数量

4.2. 设计原则二:多可用区(AZ)设计

为了避免整个机房都宕掉,AWS设计了可用区AZ

架构设计(高可用设计):

- Router53→ELB→AZ(A)【EC2实例#1→RDS#master(multi-AZ架构)】

- Router53→ELB→AZ(B)【EC2实例#2→RDS#master→RDS#slave】

ELB后端有N个EC2实例,分别部署在AZ(A)和AZ(B),同时RDS采用了multi-AZ部署架构(master和slave也分别部署在AZ(A)和AZ(B)),这种情况下无论任何实例、RDS数据库、还是数据中心AZ(A)或AZ(B)单独出现问题,那么服务也将可以访问

  • RDS的multi-AZ部署

    • 如果AZ(A)的master数据库出现问题,那么AZ(B)中的slave会自动升级为master,同时也会启动一个新的slave

4.3. 设计原则三(自动扩展设计 )、四(自我修复设计)

架构设计(弹性设计):

- Router53→ELB→弹性组→AZ(A)【EC2实例#1→RDS#master(multi-AZ架构)】

- Router53→ELB→弹性组→ AZ(B)【EC2实例#2→RDS#master→RDS#slave】

相比于“高可用设计”例子,在这里ELB后端采用了弹性组(Auto Scaling Group —支持跨AZ扩展),这样实例数量增加就可以自动化【这里说的就是自动扩展设计】,且如果有实例出现问题,ASG也会自动补齐【这里说的就是自我修复设计】。

同时到达低谷期时也会自动缩减EC2实例的数量

4.4. 设计原则五:松耦合设计

耦合度与灵活性相反

- 举例:动车载客的设计,如果有1000人,怎么设计车厢?A和B两种设计

- A:把车做的足够大,1000人都在里面,耦合大(坏掉一个都不可用了),管理不灵活

- B:每节车厢100人,要做10个车厢。耦合小(坏掉一个还有其余可用),但是足够灵活

媒体数据处理的场景:

架构设计#1(数据处理):Router53→ELB→弹性组【数据接收的EC2实例】→视频数据存入S3 AND 元数据存入DynamoDB→弹性组【转码的EC2实例】

架构设计#2(消息通知):数据接收服务(SQS)→转码服务(SQS)→发布&通知

架构设计#3(弹性设计):

- 未来在增加用户访问量的情况下,弹性组会增加EC2实例的数量,来处理数据接收

- 未来在SQS中处理的消息越来越多的时候(说明转码数量增加),弹性组也会增加EC2实例数量,来处理转码工作

- 如果某台EC2实例宕机,那么弹性组也会补齐数量

5. 总结

容错应用的设计原则

- 假定失效的设计

- 多可用区设计

- 自动扩展设计

- 自我修复设计

- 松耦合设计

更多参考资料

- AWS参考架构:http://aws.amazon.com/architecture/

- AWS白皮书:http://aws.amzon.com/whitepapers/

用工具测试一下高可用&容错架构

使用开源的工具CHAOS Money

它会随机将服务中的某个环节宕机,从而测试应用是否能够保证健壮性

时间: 2024-08-01 15:50:35

【总结】如何利用云平台构建容错的APP的相关文章

亚马逊AWS在线系列讲座——如何在AWS云平台上构建千万级用户应用

用户选择云计算平台来构建应用的一个重要原因是云平台的高弹性和高扩展性.面向互联网的应用往往需要支撑大量用户的使用,但是构建一个高扩展性的.高可用的应用具有一一定的挑战,不过基于AWS云平台来构建应用可以相对简化这个事情.这个在线讲座将讨论如何如何充分利用云平台的特性和AWS的相关服务来构建一个可以支撑千万级用户的应用.通过讨论不同用户数量级别的应用需求和架构特点,然后结合不同的AWS的服务来满足用户访问,并最终逐渐把架构优化成为可以支持千万级用户的设计.这个演讲的目的是帮助对AWS服务有一定基础

基于 Arduino 和 IoT 云平台搭建物联网系统

在这篇文章中,我们将介绍如何搭建一款监测土壤水分的物联网系统,用于在土壤干燥时发出警报,提醒用户.本项目使用了IoT 云平台来管理警报系统,同时存储来自传感器的数据.众所周知,物联网是当今热门话题之一,它将改变我们的未来及生活方式.如今我们可以自己动手搭建物联网系统,因为市场上已有一些原型板,这使得我们不用花费太多金钱及精力就可以着手物联网项目. 搭建 IoT 系统项目 构建这个项目,我们需要: Arduino MKR1000: 湿度传感器: IoT 云平台 Carriots 的免费账户(点击这

基于AppCan移动云平台搭建“智慧移动门户”

基于AppCan移动云平台,我们做了很多企业级的移动互联网项目,包括政府层面的双创落地实践,本次将结合实践,分享我们最新的项目经验和技术点.今天要分享的是,我们在智慧城市的项目中很重要的一环,区域智慧移动门户的架构设计和移动前端开发技术. 本次分享共三个重点: 1.AppCan移动云平台架构 2.智慧门户的规划 3.智慧门户的建设策略(技术落地) 智慧门户APP功能框架 智慧门户APP技术框架 1.AppCan移动云平台架构 AppCan在2011年底正式推出,用HTML5+CSS3+JavaS

云平台的微服务架构实践

本文是在云平台构建过程中的一些经验总结,主要说明了PaaS层的微服务架构设计和落地. 目标 降低系统的复杂度,减少系统的不确定性. 方法 量化,标准化,自动化. 架构设计 标准化业务层次 梳理业务体系和服务能力,将PaaS平台分层. 聚合领域服务能力的应用服务层 提供基本数据访问能力的领域服务层 标准化治理方式 统一使用标准化的微服务治理组件,规范微服务工程模板和领域模型. a, 治理组件 Registry: Eureka(服务发现)和Spring Cloud Config(统一配置): UAA

【方案】去哪儿网徐磊:如何利用开源技术构建日处理130亿+的实时日志平台?

转自:http://mp.weixin.qq.com/s?__biz=MzIzMzEzODYwOA==&mid=2665284466&idx=1&sn=2b06a529821734e36e26e642424f24fc&scene=2&srcid=0527p3qISp6dFqGg8iLIYgRF&from=timeline&isappinstalled=0#wechat_redirect [本文系互联网技术联盟(ITA1024)原创首发,转载或节选内容

基于ZStack构建深度学习云平台

前言 深度学习是机器学习和人工智能研究的热门分支,也是当今最流行的科学研究趋势之一.深度学习方法为计算机视觉.机器学习带来了革命性的进步,而新的深度学习技术也正在不断诞生.由于深度学习正快速发展,新的研究者很难对这一技术实时跟进.国内各大公有云厂商都提供了相应的深度学习相关产品,但对于初学者并不那么实用.本文将介绍基于产品化云平台--ZStack,来构建对初学者友好.易运维.易使用的深度学习云平台. 由于ZStack的轻量性,我们仅通过一台普通PC机就能部署云平台,进而实现深度学习平台构建.读者

微服务分布式云架构构建电子商务平台

大型企业分布式微服务云架构服务组件 实现模块化.微服务化.原子化.灰度发布.持续集成 commonservice eurekaNetflix 云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移. commonservice configSpring 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储.Git以及Subversion. Spring Cloud BusSpring 事件.消息总线,用于在集群(例如,配置变化事件

新一代免费云平台Nano: 3分钟构建你的私有云-图文教程

前言 虚拟化是目前很多开发和运维同学的刚需,但是目前的产品要么笨重繁杂,资源消耗高学习困难,要么收费昂贵,于是就有了Nano这个项目,一方面是为了自己用起来舒服,另一方面也是让不满现有产品的同学们有更多选择. Nano完全用GO开发,底层虚拟化使用免费的KVM,基于自己十几年大型分布式系统的开发经验,希望把Nano设计成一个高度自动化,无需人工管理配置,轻巧简便同时兼顾性能与稳定性的IaaS平台. Nano提供了丰富的REST API接口支持,同时也提供了完整的Web管理门户,无论是定制自己产品

SpringCloud微服务云架构构建B2B2C电子商务平台之-企业分布式微服务云架构构建(四)

今天正式给大家介绍了Spring Cloud - 企业分布式微服务云架构构建,我这边结合了当前大部分企业的通用需求,包括技术的选型比较严格.苛刻,不仅要用业界最流行的技术,还要和国际接轨,在未来的5~10年内不能out.作为公司的架构师,也要有一种放眼世界的眼光,不仅要给公司做好的技术选型,而且还要快速响应企业的业务需求,能够为企业快速定制化业务. 以下是我为公司规划的大型互联网分布式企业微服务云架构: 从现在开始,我这边会将近期研发的spring cloud微服务云架构的搭建过程和精髓记录下来