azure 最佳实践4 --可水平扩展的设计
来源:互联网 发布:macbook装windows教程 编辑:程序博客网 时间:2024/04/30 17:09
可水平扩展的设计
设计您的应用程序,使其可以水平扩展。
云的主要优点是系统可根据需要可伸缩 - 容量的大小随需求可变,系统随负载的增加可水平扩展,并且在不需要时进行收缩。对应用程序进行设计,使其可以根据需要进行水平伸缩。
推荐做法
避免粘(有状态)实例。粘性或会话关联性是指,当来自同一客户端的请求总是(需要)被路由到相同的服务器。粘性限制了应用程序的扩展能力。例如,大并发的流量不会将压力均发到实例上。粘性的原因包括:将会话状态存储在内存中,并使用机器信息相关的密钥进行加密。确保任何实例随时都可以处理任何请求。
识别系统瓶颈。可扩展性并不是每个性能问题的修复方案。例如,如果数据库是瓶颈,添加再多Web服务器也无济于事。在引入更多实例节点进入系统之前,先找出系统瓶颈的根源。而实例有状态往往是造成瓶颈的主要原因。
根据可扩展性的需求来减少工作负载。应用程序通常由多个工作负载组成,具有不同的伸缩要求。例如,应用程序可能具有面向公众的站点和独立的管理站点。面向公众的站点可能会有大并发场景,而管理类站点的负载相对小,更可预测。
卸载资源密集型任务。需要大量CPU或I/ O资源的任务应尽可能移至后台,以最小化负责处理用户请求的前端负载。
使用系统内置的自动伸缩功能。许多Azure计算服务都内置了自动伸缩功能。如果应用程序的工作负载在常规情况下是可预测的,则可以考虑创建扩展计划来管理系统的伸缩性。例如,在营业时间内伸展系统(非营业时间收缩系统)。否则,如果工作负载是不可预测,可使用性能指标(如CPU或请求队列长度)来定义系统伸缩的触发条件。有关自动伸缩最佳实践,请参阅自动伸缩。
为关键性工作负载考虑使用积极的自动伸缩。对于关键工作负载,总希望保持足够用。最好在负载较大的情况下快速添加新的实例来处理额外的流量,然后逐渐缩小。
系统收缩。在设计系统的伸缩性时,确保应用有段时间是可收缩的,实例节点相应被移除。应用程序必须正确地处理正在被删除的实例。以下是一些完成系统收缩的方法:
监听关机事件(如果可用)并完全地关闭。
服务的客户/消费者应支持短暂的故障处理以及重试。
对于长时间运行的任务,请考虑分解任务,使用检查点或“管道和过滤器”模式。
将工作项放在队列上,以便在任务被处理过程中,当删除一个实例时,另一个实例可以继续工作。
设计您的应用程序,使其可以水平扩展。
云的主要优点是系统可根据需要可伸缩 - 容量的大小随需求可变,系统随负载的增加可水平扩展,并且在不需要时进行收缩。对应用程序进行设计,使其可以根据需要进行水平伸缩。
推荐做法
避免粘(有状态)实例。粘性或会话关联性是指,当来自同一客户端的请求总是(需要)被路由到相同的服务器。粘性限制了应用程序的扩展能力。例如,大并发的流量不会将压力均发到实例上。粘性的原因包括:将会话状态存储在内存中,并使用机器信息相关的密钥进行加密。确保任何实例随时都可以处理任何请求。
识别系统瓶颈。可扩展性并不是每个性能问题的修复方案。例如,如果数据库是瓶颈,添加再多Web服务器也无济于事。在引入更多实例节点进入系统之前,先找出系统瓶颈的根源。而实例有状态往往是造成瓶颈的主要原因。
根据可扩展性的需求来减少工作负载。应用程序通常由多个工作负载组成,具有不同的伸缩要求。例如,应用程序可能具有面向公众的站点和独立的管理站点。面向公众的站点可能会有大并发场景,而管理类站点的负载相对小,更可预测。
卸载资源密集型任务。需要大量CPU或I/ O资源的任务应尽可能移至后台,以最小化负责处理用户请求的前端负载。
使用系统内置的自动伸缩功能。许多Azure计算服务都内置了自动伸缩功能。如果应用程序的工作负载在常规情况下是可预测的,则可以考虑创建扩展计划来管理系统的伸缩性。例如,在营业时间内伸展系统(非营业时间收缩系统)。否则,如果工作负载是不可预测,可使用性能指标(如CPU或请求队列长度)来定义系统伸缩的触发条件。有关自动伸缩最佳实践,请参阅自动伸缩。
为关键性工作负载考虑使用积极的自动伸缩。对于关键工作负载,总希望保持足够用。最好在负载较大的情况下快速添加新的实例来处理额外的流量,然后逐渐缩小。
系统收缩。在设计系统的伸缩性时,确保应用有段时间是可收缩的,实例节点相应被移除。应用程序必须正确地处理正在被删除的实例。以下是一些完成系统收缩的方法:
监听关机事件(如果可用)并完全地关闭。
服务的客户/消费者应支持短暂的故障处理以及重试。
对于长时间运行的任务,请考虑分解任务,使用检查点或“管道和过滤器”模式。
将工作项放在队列上,以便在任务被处理过程中,当删除一个实例时,另一个实例可以继续工作。
阅读全文
1 0
- azure 最佳实践4 --可水平扩展的设计
- azure最佳实践系列1-自我修复的设计
- azure 最佳实践-- 为演化而设计
- Azure最佳实践(一)
- 可伸缩性的最佳实践
- Windows Azure 安全最佳实践 - 第 6 部分:Azure 服务如何扩展应用程序安全性
- Dropbox可伸缩性设计最佳实践分享
- 可扩展的设计
- azure 最佳实践 -- 保持冗余
- Windows Azure 安全最佳实践 - 第 4 部分:需要采取的其他措施
- azure 最佳实践 -- 使用正确的数据存储
- azure 最佳实践 -- 随业务演化的架构
- 设计异常的最佳实践
- 数据库设计的最佳实践
- 数据库设计的最佳实践
- 设计异常的最佳实践
- API 设计的最佳实践
- 在Azure上构建可扩展的移动应用程序
- 各种区别
- 第四章 4.1无向图
- SpringMVC(3)——@PathVariable&@RequestBody
- leetcode 20 parenthesis match
- 通俗易懂的希尔排序
- azure 最佳实践4 --可水平扩展的设计
- 源码编译安装 MySQL 5.5.x 实践
- 第四章 4.2 有向图
- java 数据库 触发器
- 参考资料
- selenium + python 鼠标点击事件
- openresty的初步使用
- dubbo配置timeout
- 几道滴滴笔试智力题思考