上QQ阅读APP看书,第一时间看更新
4.1.2 被动伸缩
通过使用机器学习算法,可预测伸缩变得越来越准确,但是你仍然需要借助被动伸缩来处理突发的流量高峰。这种意料之外的流量高峰甚至可能是常规流量的10倍,这通常是由于突发的需求引起的,例如,首次进行促销尝试时我们无法对流量进行预估。
举个例子,你在电子商务网站上发起了一次限时抢购活动,你的主页访问量将大幅上升,用户会从主页跳转到限时抢购产品的指定页面,有些用户可能想要进行购买,因此,他们将继续跳转到“添加到购物车”页面。
在这种情况下,每个页面的流量模式各不相同,你需要了解现有的架构和流量模式以及所需流量的估算。你还需要了解网站的导航路径。例如,用户必须先登录才能购买产品,这可能导致登录页面的流量上升。
为了规划用于处理流量的服务器资源伸缩,需要确定以下模式:
□明确哪些Web页面是只读并且可缓存的。
□哪些用户查询只需要读取数据,不需要写入或更新数据库中的内容。
□某个用户查询是否反复地请求相同或重复的数据,例如用户资料。
一旦了解了这些模式,你就可以从架构上减轻负担,使其可以处理更多的过载流量。要减轻Web层的流量负担,可以将静态内容(例如图像和视频)从Web服务器转移到CDN。更多关于缓存分发模式的内容见第6章。
在服务器机群层面,需要使用负载均衡器来分配流量,并且通过自动伸缩机制来进行水平伸缩,自动地增加或缩减服务器。为了降低数据库负载,需要根据需求选择合适的数据库,例如使用NoSQL数据库来存储用户会话和检视意见,使用关系型数据库来存储事务数据,并对频繁的查询进行缓存。
本节介绍了用于处理应用程序伸缩需求的伸缩模式和方法,涵盖了可预测伸缩和被动伸缩两种伸缩模式。第6章将详细介绍不同类型的设计模式,以及如何用它们来扩展架构。