要用AWS搭建一个优秀的系统,根据官方资料和一些第三方讲义,我把要义总结为四个需求八个字:
安全可靠,物美价廉。
可以用买房子来类比,四个需求的层级是不一样的。除此之外,还有两朵锦上添花,最后再议。
Shared Responsibility Model #
开始前,先要阐明一个AWS需要与用户达成的重要共识,叫做共同责任模型(Shared Responsibility Model)。
一句话概括:AWS负责云服务设施本身的安全,用户负责云上财产的安全。
这个模型的类比是,云是AWS盖好的精装房,用户是租户。房子的大门、用户自身的房门、窗、煤气管道等,安全质量由AWS保障。但用户可以忘记锁门、不关窗、不关煤气,导致自身财产损失。当然负责的用户不仅会关好门窗,还会加装额外的安全措施。
安全 #
系统在正常运行时,不因缺陷而允许恶意行为损害相关人的利益。
可靠 #
系统不容易故障,故障了也容易快速修复。
可用性 #
系统的可靠程度最终用可用性(Availability)量化,是指系统在指定时段内(比如一年),正常运行时间的百分比。公式是
$$ Availability = \frac{Uptime}{Total Time = (Uptime + Downtime)} $$年可用性 | 可用时间 |
---|---|
99% | 3 天, 15 小时, 39 分钟 |
99.9% | 8 小时, 45 分钟 |
99.95% | 4 小时, 22 分钟 |
99.99% | 52 分钟 |
99.999% | 5 分钟 |
冗余 #
一个EC2的可用性是90%的话,即失败率是10%。那对于可分布式的服务来说,部属三个EC2,可用性将提高到99.9%。因为三个全部失败才能导致服务不可用。
$$ 1 - 0.1^3 = 99.9% $$但如果你还有数据库、ALB,他们有各自的可用性,最终可用性将是各部分的乘积,会更低。例如其他两个的分别是 \(99.8%\),那么整体可用性将是 \(99.5%\),等于一年有将近两天不可用。
$$ 99.9\% * 99.8\% * 99.8\% = 99.5\% $$热知识:Route 53的SLA是100%。
弹性 #
EC2 auto-scaling (自动缩/扩容)根据负载自动增减实例,是保障高可用的重要手段。在真正自动前,你可以通过手动设置 desired capacity 来直接实现立刻增加或减少实例。大规模部署里,更多使用动态扩容。
物美 #
尽量高效迅速满足用户需求。
价廉 #
在满足用户需求的情况下,尽量少花钱。
锦上添花 #
卓越运营 #
让人可以持续高效使用并维护系统。
可持续发展 #
减少系统对环境的负面影响。