AWS Architecture Best Practices

  1. Design for Failure and Nothing Fails

    1. 概念:通过Multi-AZ等冗余技术来减少单点故障的发生。
    2. 设计时可以考虑多个instance组成auto-scaling group,当某个instance挂掉时可以自动scaling。
    3. 部署应用时尽量选择multi-AZ,如RDS基本上都支持multi-AZ(除了MSSQL的Express和Web版本不支持)。
    4. 默认情况DynamoDB和S3自动是multi-AZ的。
  2. Implement Elasticity

    1. 概念:弹性设计,使得应用可以自由扩展(scal in or scal out)。
    2. 垂直扩展:通过增加CPU/内存/存储等扩展应用性能。
    3. 水平扩展:通过增加结点数量扩展应用性能。
    4. 有状态应用:需要考虑session共享问题,一般通过session服务器统一管理session,如Dynamo DB,Elastic Cache等,也可以在ELB中选择IP_Hash等策略,使得同一client的请求都路由到到同一server,但这种方法比较低级。
    5. 无状态应用:不用考虑session共享问题,比较简单。
    6. 自动扩展:需要支持自动扩展,而不需要人为干预,如Auto Scaling的扩展策略等。
  3. Leverage Different Storage Options

    1. 概念:根据不同的场景选择不同类别的存储服务。
    2. S3:需要大容量的,高性能的,高可靠性的文件/对象存储服务,并支持备份/归档或容灾等功能。
    3. Glacier:需要长期存放大量归档数据,这些数据不经常访问,且允许在发出获取请求后隔一段时间才能获取到数据。
    4. CloudFront:CDN网络,缓存数据,按地理位置服务不同用户,加速资源访问。
    5. DynamoDB:NoSQL数据库,session共享,大量非结构数据存储。
    6. EBS:块存储,支持snapshot备份等。
    7. RDS:关系型数据,存储结构数据。
    8. Redshift:数据仓库,存储大量数据,用于统计分析,生成报表等。
    9. ElasticCache:弹性缓存服务,Redis或Memcached类型,缓存数据。
    10. ElasticFileSystem:弹性文件系统,用于文件共享,如NAS等服务。
  4. Build Security in Every Layer

    1. 概念:在应用程序的各个层面都要考虑安全问题。
    2. VPC的Security Group,ACL等
    3. EBS,S3等加密
    4. API的HTTPS访问
    5. IAM权限设置
    6. 永远为用户/实体等分配最低可用权限
    7. 责任共担模型的责任区分等
    8. 实时审计用户权限,检查是否存储权限问题
  5. Think Parallel

    1. 概念:并行处理任务,提高系统整体性能。
    2. 尽量依靠多线程技术并行处理任务以提高系统整体性能。
    3. 可以采用异步技术,减小网络,存储等IO阻塞以提高系统整体性能。
    4. 采用集群模式,自动scaling,灵活扩展以提高系统整体性能。
  6. Loose Coupling Sets You Free

    1. 概念:设计系统时需要解耦模块依赖,模块与模块相互独立并采用标准接口或第三方服务通信,也就是常说的高聚合,低耦合。
    2. 模块间相互通信的方式:
      1. SQS:消息队列
      2. RESTful API:RESTful接口
  7. Don't Fear Constraints

    1. 概念:不要害怕限制,勇敢的将on-premise应用迁移到cloud上。
    2. AWS提供了一系列的服务,可以满足用户的所有需求,所以不要害怕迁移。(有洗脑的嫌疑)

你可能感兴趣的:(AWS)