文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
3.2 云原生设计模式 1 (适用于 SAAS)
表格 云原生设计模式~来自于 windows Azure (共 37 个,在 2015 年版 24 个上新增 13 个)
模式 | 摘要 |
---|---|
【N】 代表 | 创建代表客户服务或应用程序发送网络请求的帮助程序服务。 |
【N】 防损层 | 在现代应用程序与旧系统之间实施外观或适配器层。 |
【N】 异步请求-答复 | 在后端处理需要是异步处理但前端仍需要明确响应的情况下,将后端处理与前端主机分离。 |
【N】 用于前端的后端 | 创建单独的后端服务,供特定的前端应用程序或接口使用。 |
【N】 隔层 | 将应用程序的元素隔离到池中,这样,如果一个元素发生失败,其他元素可继续工作。 |
缓存端 | 将数据按需从数据存储加载到缓存中 |
协调 | 让每项服务都参与决定业务运营的处理时间和处理方式,而不是依赖于一个中心型业务流程协调程序。 |
断路器 | 连接到远程服务或资源时处理故障,此类故障所需修复时间不定。 |
【N】 声明检查 | 将大型消息拆分成声明检查和有效负载,以免消息总线过载。 |
补偿事务 | 撤销一系列会共同定义最终一致操作的工作。 |
竞争性使用者 | 使多个并发使用者能够处理同一消息通道上收到的消息。 |
计算资源合并 | 将多个任务或操作合并到单个计算单元 |
CQRS | 使用独立接口将读取数据的操作与更新数据的操作分离。 |
事件溯源 | 使用只追加存储来记录描述域中数据采取的操作的完整系列事件。 |
外部配置存储 | 将配置信息从应用程序部署包移出,移到一个集中的位置。 |
联合标识 | 将身份验证委托给外部标识提供者。 |
【N】 守护程序 | 通过使用专用的主机实例保护应用程序和服务,该实例用于充当客户端和应用程序或服务之间的中转站、验证和整理请求,并在它们之间传递请求和数据。 |
【N】 网关聚合 | 使用网关可将多个单独请求聚合成一个请求。 |
【N】 网关卸载 | 将共享或专用服务功能卸载到网关代理。 |
【N】 网关路由 | 使用单个终结点将请求路由到多个服务。 |
运行状况终结点监视 | 在应用程序中实施可让外部工具通过公开终结点定期访问的功能检查。 |
索引表 | 基于数据存储中经常由查询引用的字段创建索引。 |
领导选拔 | 通过选拔一个实例作为领导来负责管理其他实例,协调分布式应用程序中协作性任务实例集合所执行的操作。 |
具体化视图 | 当未针对所需的查询操作完美设置数据的格式时,在一个或多个数据存储中基于数据生成预填充的视图。 |
管道和筛选器 | 将一个执行复杂处理的任务分解为一系列可重复使用的单个元素。 |
优先级队列 | 为发送到服务的请求确定优先级,以便高优先级请求能够得到比低优先级请求更快速地接收和处理。 |
发布方/订阅方 | 使应用程序能够以异步方式向多个感兴趣的使用者公布事件,而无需将发送方与接收方耦合。 |
基于队列的负载调控 | 使用队列在任务与所调用的服务之间充当缓冲,从而缓解间歇性负载过大现象。 |
重试 | 当应用程序尝试连接到服务或网络资源时,使应用程序能够通过以透明方式重试先前失败的操作来处理预期的临时故障。 |
计划程序代理监督程序 | 跨一组分布式服务和其他远程资源协调一组操作。 |
分片 | 将数据存储划分为一组水平分区或分片。 |
【N】 Sidecar | 将应用程序的组件部署到单独的进程或容器中,以提供隔离和封装。 |
静态内容托管 | 将静态内容部署到基于云的存储服务,再由后者将它们直接传送给客户端。 |
【N】 Strangler | 通过将特定的功能片断逐渐取代为新的应用程序和服务,逐步迁移旧系统。 |
限制 | 控制应用程序实例、单个租户或整个服务对资源的消耗。 |
附属密钥 | 使用令牌或密钥,向客户端授予对特定资源或服务的受限直接访问权限。 |
备注:【N】表示?
表格 3 云原生设计模式~来自于 windows Azure (24 个,2014)
模式名 | 描述 | 背景和问题 | 解决方案 | 应用场景 |
---|---|---|---|---|
缓存驻留 | 根据需要从数据存储器加载数据。 | 此模式可以用来改进性能,用于维护缓存和后台数据库的数据一致性。 | ||
断路器 | 当连接远程服务或资源时,可能导致不定时间恢复系统的错误。 | 用于改进系统的稳定性和弹性。 | ||
补偿事务 | 如果一个或多个操作失败,就会取消执行的一系列工作。 | 如何处理已经无法挽回的失败步骤 | 遵从最终一致性模型。通常用于实现复杂的业务过程和工作流。 | 针对发生 异常必须撤销的操作。 |
竞争消费者 | 允许多个并发消费者在相同的消息通道上处理接收的消息 | |||
计算资源合并 | ||||
命令和职责分离 | 通过隔离接口来分离更新和读操作。 | 传统 CRUD 方法更麻烦,权限管理不安全 | ||
事件溯源 | 构造领域对象的模式。使用只能追加的存储库来记录领域里数据库的完整操作序列。 | 传统 CRUD 方法只保存当前状态 | 使用一系列事件去处理对数据的操作。 | 避免冲突;审计 |
外部配置存储 | 把配置信息从应用部署包移动到一个中心位置。(应用配置中心) | |||
联合身份 | ||||
门卫 | ||||
健康终结点监控 | 在应用中实现功能检查。 | SLA 协议要求定期检测服务是否正确执行 | 通过向终结点发送请求来实现健康监控。 | 检查可用性 |
索引表 | 云应用 RDS 不提供二级索引 | 经常使用非主键来查询数据。 | ||
领导选举 | 选取一个实例作为领导者承担管理其它实例的责任,并通过这种方式协调一系列协作任务实例的运行。 | 任务实例是平等的。 | 选举机制: | 分布式任务需要协调并且没有天然的领导者。 |
物化视图 | 存储数据和读取数据者分离 | 提前生成一个适合结果集格式的物化视图。 | ||
管道和过滤器 | 可将一个处理复杂问题的任务分解为一系列可重用的离散元素。 | 任务顺序可能变化,期望代码重用 | 将每个管理处理分解成一组离散组件(或过滤器),每个离散组件执行单个任务 | |
优先级队列 | 可为请求确定优先级,使得高优先级请求能够比优先处理。 | 支持消息优先级的队列 | ||
基于队列的负载均衡 | 队列 | |||
重试 | 连接服务或网络资源时,如果发生预期的瞬时故障,可以通过重试操作来处理故障。 | 服务可能因临时故障超时。 | 适用于暂时故障 | |
运行时配置 | 重新配置时无需重新部署或启动的应用程序,有且于保持系统可用性。 | 日志组织或特定功能开关 | 依赖于应用程序托管环境中可用功能。 | |
调度器代理监控 | 协调在分布式服务和其它远程资源上的行为。 | 定义三个角色:调度器、代理和管理者。 | 进程位于分布式环境。 | |
分片 | 存储和访问海量数据时,改进伸缩性。 | 数据存储限制 | 将数据划分为水平分区或分片。分片策略包括 ID、范围、哈希等 | |
静态内容托管 | 将静态文件部署到一个基于云计算的存储服务,可以直接向用户传输这些文件的模式。 | 需要下载静态页面。 | 云计算托管存储比计算实例便宜。分开部署。 | |
限流 | 控制资源消费的模式。 | 自动回收计算资源。 | 给应用程序设置软阀值,达到范围就开始限流。 | 保证 SLA;阻止某租户垄断资源;应对暴流。 |
令牌秘钥 | 用令牌或者秘钥限制客户端对于特定资源或服务的访问。 | 数据存储库无法进行客户端验证和授权控制访问。 | 限制对数据存储库的公开连接访问,提供给客户端一个可以验证的令牌或者秘钥。 |
备注:1. 模式组合:
- 重试+断路器:重试模式适用用于处理瞬时故障,如果故障预计更持久,则要使用断路器模式。二者结合使用,以提供全面处理故障的方法。
- 外部配置存储+运行时重配:外部配置通知更新,应用程序能监测到配置变化。
- 依赖于消息队列:管道过滤器、优先队列、竞争消费者、基于队列的负载均衡
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论