-
Design for Failure and Nothing Fails
- 概念:通过Multi-AZ等冗余技术来减少单点故障的发生。
- 设计时可以考虑多个instance组成auto-scaling group,当某个instance挂掉时可以自动scaling。
- 部署应用时尽量选择multi-AZ,如RDS基本上都支持multi-AZ(除了MSSQL的Express和Web版本不支持)。
- 默认情况DynamoDB和S3自动是multi-AZ的。
-
Implement Elasticity
- 概念:弹性设计,使得应用可以自由扩展(scal in or scal out)。
- 垂直扩展:通过增加CPU/内存/存储等扩展应用性能。
- 水平扩展:通过增加结点数量扩展应用性能。
- 有状态应用:需要考虑session共享问题,一般通过session服务器统一管理session,如Dynamo DB,Elastic Cache等,也可以在ELB中选择IP_Hash等策略,使得同一client的请求都路由到到同一server,但这种方法比较低级。
- 无状态应用:不用考虑session共享问题,比较简单。
- 自动扩展:需要支持自动扩展,而不需要人为干预,如Auto Scaling的扩展策略等。
-
Leverage Different Storage Options
- 概念:根据不同的场景选择不同类别的存储服务。
- S3:需要大容量的,高性能的,高可靠性的文件/对象存储服务,并支持备份/归档或容灾等功能。
- Glacier:需要长期存放大量归档数据,这些数据不经常访问,且允许在发出获取请求后隔一段时间才能获取到数据。
- CloudFront:CDN网络,缓存数据,按地理位置服务不同用户,加速资源访问。
- DynamoDB:NoSQL数据库,session共享,大量非结构数据存储。
- EBS:块存储,支持snapshot备份等。
- RDS:关系型数据,存储结构数据。
- Redshift:数据仓库,存储大量数据,用于统计分析,生成报表等。
- ElasticCache:弹性缓存服务,Redis或Memcached类型,缓存数据。
- ElasticFileSystem:弹性文件系统,用于文件共享,如NAS等服务。
-
Build Security in Every Layer
- 概念:在应用程序的各个层面都要考虑安全问题。
- VPC的Security Group,ACL等
- EBS,S3等加密
- API的HTTPS访问
- IAM权限设置
- 永远为用户/实体等分配最低可用权限
- 责任共担模型的责任区分等
- 实时审计用户权限,检查是否存储权限问题
-
Think Parallel
- 概念:并行处理任务,提高系统整体性能。
- 尽量依靠多线程技术并行处理任务以提高系统整体性能。
- 可以采用异步技术,减小网络,存储等IO阻塞以提高系统整体性能。
- 采用集群模式,自动scaling,灵活扩展以提高系统整体性能。
-
Loose Coupling Sets You Free
- 概念:设计系统时需要解耦模块依赖,模块与模块相互独立并采用标准接口或第三方服务通信,也就是常说的高聚合,低耦合。
- 模块间相互通信的方式:
- SQS:消息队列
- RESTful API:RESTful接口
-
Don't Fear Constraints
- 概念:不要害怕限制,勇敢的将on-premise应用迁移到cloud上。
- AWS提供了一系列的服务,可以满足用户的所有需求,所以不要害怕迁移。(有洗脑的嫌疑)
AWS Architecture Best Practices
最新推荐文章于 2022-04-29 12:48:59 发布