读了微软 Azure 总结的云计算设计模式系列文章,觉得很受启发,遂将这个系列翻译出来如下。
云计算模型
这些设计模式对于在云上构建高可用性,伸缩性,安全的应用程序很有用。
每个模式都描述了该模式试图解决的问题,在使用该模式时应考虑的问题,以及一个基于微软 Azure 云的例子。大多数的模式中包含了代码实例或代码片段来展示如何在 Azure 上部署使用这种模式。然而,大多数的模式同样适用于 Azure 以外的任何分布式系统。
在云端部署的挑战
指标 | 描述 |
---|---|
可用性 | 可用性指的是系统正常工作的时间,通常通过测量服务正常工作的时间百分比来得到。它受系统故障,基础设施问题,恶意攻击,系统负载等方面的影响。云端应用通常为用户提供“服务等级协议”(SLA),因此应用必须尽可能高地保证其可用性。 |
数据管理 | 数据管理时云端应用的关键,它影响着应用的大多数质量属性。出于性能,伸缩性,可用性等多方面的考虑,数据通常会被存到多个区域的多台服务器上。而这带来一系列的挑战,诸如需要维护数据一致性,以及需要在多个不同区域间同步数据。 |
设计和实现 | 好的设计包含诸如组件设计和部署的一致性与内聚性,运维与开发的可维护性,组件与子系统的重用性。在设计和实现阶段的决策对整个应用的质量和云计算服务提供方的总花费有巨大的影响。 |
消息传递 | 云端应用的天然的分布属性使之需要一个消息传递设施来连接各个组件和服务。异步消息模式被广泛应用,它提供了很多好处,但也带来了很多挑战:消息到达顺序,缺失消息管理,幂等性等等。 |
管理与监控 | 云端应用运行在远程的数据中心,应用拥有者没有管理基础设施和操作系统的全部权限。这使得它比本地部署的应用更难管理和监控。应用必须暴露给管理员和运维人员足够的运行时信息来使其能够管理和监控系统,同时也应该支持在不中断或重新部署服务的情况下,改变商业需求和定制化服务。 |
性能和伸缩性 | 性能是在给定的时间范围内执行任何命令的响应能力的指标;伸缩性是指系统在不影响其性能的前提下,能够处理增加的负载,随时增加可用资源。在实际应用中,云端应用经常遇到变化非常大的负载和负载峰值。提前去预测这些,尤其是在多租户的场景下,几乎是不可能的。取而代之,我们应该让我们的应用具备无限按需伸缩的能力。伸缩性不应单单关注于计算实例(虚拟机),也包括数据存储,消息传递等很多方面。 |
故障恢复能力 | 故障恢复能力指的是系统优雅地从故障中恢复的能力。在云端部署的应用,通常是以多租户的模式,使用共享平台的服务,与其他租户竞争带宽和资源,通过互联网通信。并且他们运行在联合的多种硬件层之上。这意味着持续性的和偶发性的异常发生的可能性都会增加。检测到故障,并且高效地从故障中恢复,对于提高系统的故障恢复能力来说,是必须的。 |
安全 | 安全性指的是系统阻止恶意攻击或将应用使用于产品设计以外的场景,同时阻止信息泄露的能力。云端应用通常会接入互联网,暴露给大众,并且可能会为非受信任的用户提供服务。应用必须以一种可靠的方式来设计和部署,来防止恶意攻击,并对用户进行权限控制,保护隐私数据。 |
目录
模式 | 概述 |
---|---|
信使 | 创建辅助服务来发送有关消费者服务或应用信息的网络请求 |
反堕落层 | 在现代应用和既存系统之间实现一个适配层。 |
前端的后端 | 为特定的前端应用或接口创建单独的后端服务供其消费。 |
隔离舱 | 将应用中的所有元素隔离开放到池中,即便其中某个元素失败了,其他的能够继续正常工作。 |
缓存 | 按需将数据从数据仓库载入到缓存。 |
断路器 | 处理远程服务或资源导致的不能立即修复的故障。 |
读写分离(CQRS) | 通过使读数据的操作和更新数据的操作使用不同的接口达到读写分离。 |
补偿性事物 | 撤销一系列任务构成的工作,来实现一个最终一致性的操作。 |
竞争消费者 | 激活多个并发的消费者来处理从同一频道接收的消息。 |
计算资源合并 | 将多个任务或操作合并到一个计算单元。 |
事件溯源 | 使用一个只增的数据仓库来记录某一域中对数据进行的所有操作。 |
外部配置存储 | 将配置信息从应用的部署包中抽离出来放到一个统一的中心化管理的存储中心。 |
联合认证 | 将认证服务托管给外部认证服务提供方。 |
看门者模式 | 通过使用一个专用的主机实例作为客户端和应用间的代理来保护应用和服务。通过该代理来检验,净化请求,并传递请求来达到此目的。 |
网管合并 | 使用网管来将多个独立的请求合并成一个请求。 |
网关压力卸载模式 | 将一个共享的或专有的服务交给网关执行。 |
基于网关的路由 | 通过一个网管将请求路由到多个不同的服务。 |
健康端点监控 | 为应用实现功能性检查服务,使外部攻击能够通过这个暴露给外部的服务进行定期检查。 |
索引表 | 为数据仓库中被频繁查询的字段建立索引。 |
指挥者选举 | 为一系列分布式部署的相互合作的任务实例选举一个指挥者来负责管理其他实例。 |
物化视图 | 当数据格式不符合查询所需的格式时,为一个或几个数据仓库中的数据生成预处理的视图。 |
P管道与过滤器模式 | 将一个处理复杂流程的任务分解成一系列能够重用的独立的元素。 |
带优先级的队列 | 为发给服务的请求标示出优先级,从而使高优先级的请求能够在接受到后比低优先级的任务更快的处理。 |
基于队列的负载均衡 | 使用队列来充当任务和它所调用的服务之间的缓冲区,来平滑地处理突发的高负载。 |
重试 | 当应用在连接服务或网络资源过程中遇到错误时,通过显式地重试之前失败的操作来使它具备处理预期的,临时性的错误的能力。 |
调度代理监管模式 | 在一系列分布的服务和远程资源间调度一些操作。 |
分片 | 将数据存储水平分割存到多个分区或分片中。 |
挎斗模式 | 将应用的部分组件部署到单独的进程或容器中来进行隔离和封装。 |
静态内容托管 | 将静态内容部署到云端的存储服务将内容直接提供给客户端。 |
扼杀者模式 | 渐进式地将既存系统中的部分功能一步步用新应用或服务替换。 |
限流 | 控制某一应用实例,租户或整个服务对资源的消耗量。 |
代客密钥 | 使用一个标识或密钥来为客户端提供指定资源或服务的受限制的直接连接。 |
原文链接在 这里
翻译好累啊
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。