azure 最佳实践4 --可水平扩展的设计

来源:互联网 发布:macbook装windows教程 编辑:程序博客网 时间:2024/04/30 17:09
可水平扩展的设计

设计您的应用程序,使其可以水平扩展。
云的主要优点是系统可根据需要可伸缩 - 容量的大小随需求可变,系统随负载的增加可水平扩展,并且在不需要时进行收缩。对应用程序进行设计,使其可以根据需要进行水平伸缩。


推荐做法
避免粘(有状态)实例。粘性或会话关联性是指,当来自同一客户端的请求总是(需要)被路由到相同的服务器。粘性限制了应用程序的扩展能力。例如,大并发的流量不会将压力均发到实例上。粘性的原因包括:将会话状态存储在内存中,并使用机器信息相关的密钥进行加密。确保任何实例随时都可以处理任何请求。


识别系统瓶颈。可扩展性并不是每个性能问题的修复方案。例如,如果数据库是瓶颈,添加再多Web服务器也无济于事。在引入更多实例节点进入系统之前,先找出系统瓶颈的根源。而实例有状态往往是造成瓶颈的主要原因。

根据可扩展性的需求来减少工作负载。应用程序通常由多个工作负载组成,具有不同的伸缩要求。例如,应用程序可能具有面向公众的站点和独立的管理站点。面向公众的站点可能会有大并发场景,而管理类站点的负载相对小,更可预测。

卸载资源密集型任务。需要大量CPU或I/ O资源的任务应尽可能移至后台,以最小化负责处理用户请求的前端负载。

使用系统内置的自动伸缩功能。许多Azure计算服务都内置了自动伸缩功能。如果应用程序的工作负载在常规情况下是可预测的,则可以考虑创建扩展计划来管理系统的伸缩性。例如,在营业时间内伸展系统(非营业时间收缩系统)。否则,如果工作负载是不可预测,可使用性能指标(如CPU或请求队列长度)来定义系统伸缩的触发条件。有关自动伸缩最佳实践,请参阅自动伸缩。


为关键性工作负载考虑使用积极的自动伸缩。对于关键工作负载,总希望保持足够用。最好在负载较大的情况下快速添加新的实例来处理额外的流量,然后逐渐缩小。


系统收缩。在设计系统的伸缩性时,确保应用有段时间是可收缩的,实例节点相应被移除。应用程序必须正确地处理正在被删除的实例。以下是一些完成系统收缩的方法:
监听关机事件(如果可用)并完全地关闭。
服务的客户/消费者应支持短暂的故障处理以及重试。
对于长时间运行的任务,请考虑分解任务,使用检查点或“管道和过滤器”模式。
将工作项放在队列上,以便在任务被处理过程中,当删除一个实例时,另一个实例可以继续工作。



























原创粉丝点击