最近有点空闲时间,就经常翻看一些国外的技术文章,发现微软Azure的云计算设计模式系列非常经典。顺手翻译过来,就当是练习一下自己的英文翻译能力,顺便温习一下这些经典的设计模式。Azure的云计算设计模式系列非常接地气,比四人帮设计模式更顶层,也更贴近工程实践。如果英文能力足够的话,推荐大家去看原文(https://docs.microsoft.com/en-us/azure/architecture/patterns/)
云计算设计模式
这些设计模式有助于在云上构建可靠的,可伸缩的和安全的应用程序。
每个设计模式都描述了它能解决的问题,应用这个模式时的注意事项,和在Microsoft Azure上的应用案例。大多数模式都包含案例代码或者代码片段,展示了如何在Azure上实现这些模式。而且,大部分模式都可以应用到任何的分布式系统中,无论是Microsoft Azure或者是其他任何的云平台。
云开发面临的挑战:
1)可用性
2)数据管理
3)设计和实现
4)消息机制
5)性能和伸缩性
6)弹性/容错性
7)安全性
设计模式目录
模式名称 | 模式描述 |
Cache Aside | 按需从数据存储中加载数据到缓存中 |
Circuit Breaker | 当连接到远程资源或者服务时,处理那些需要一些时间才能修复的错误 |
CQRS | 使用接口隔离,隔离读写操作(在业务层面,而不仅仅是数据存储层面) |
Event Sourcing | 使用append存储记录那些发生的领域数据上的全部操作事件(可回放) |
Competing Comsumers | 使用多个并发的消费者来处理同一个消息通道上收到的消息 |
Compensation Transaction | 回滚一个步骤序列上的所有步骤,从而维护整体的最终一致性 |
Computing Resource Consolidation | 合并多个任务或者操作到一个单独的计算单元 |
External Configuration Store | 将应用的配置信息从部署包移动到一个中心存储 |
Federated Identity Provider | 使用一个外部的认证服务器来代理应用的认证功能 |
Gate Keeper | 使用一个专用的主机实例,作为客户端和应用程序/服务之间的中间人,验证,清洗请求,并在两者之间传送数据,从而起到保护服务的作用。 |
Health Endpoint Monitor | 应用程序实现了一种功能检查服务,使得外部工具可以周期性的调用这个服务,监控应用程序的状态 |
Index Table | 在数据存储经常被查询引用的字段上,创建索引 |
Leader Election | 在分布式环境中,在很多实例中选举出一个领导者,赋予它管理其他节点的职责,使得这些实例可以协同完成复杂的任务。 |
Materiialized View | 当数据的格式对于查询来说并不是非常理想时,基于一个或者多个数据存储生成预计算视图 |
Priority Queue | 定制发送给服务的请求的优先级,这样,高优先级的请求会比低优先级的请求更快速的被处理 |
Queue Based Load Leveling | 使用队列作为客户端和服务之间的缓冲,使得服务可以顺序处理这些请求,从而可以平滑处理突如其来的峰值负载 |
Pipelines and Filters | 当处理一个复杂任务的时候,将任务拆分成一系列的,可以被重用的处理单元 |
Retry | 当连接到一个远程的服务或者资源的时候,通过透明的重新调用这些服务,使得应用程序能够处理那些预期的临时失败 |
Scheduler Agent Supervisor | 在分布式的服务或者资源集合中,协调完成复杂的任务 |
Runtime Reconfiguration | 设计应用,使得它不需要重启就可以更新配置信息 |
Sharding | 将数据存储水平拆分成多个数据分区或者分片 |
Static Content Hosting | 将静态的内容部署到云服务中,这样他们就可以直接交付给客户 |
Throttling | 控制一个应用,个体租户,或者整个服务对资源的消费 |
Valet Key | 使用令牌或者密码,限制客户端对服务或者资源的直接访问 |