论文部分内容阅读
弹性可伸缩性是云计算的一个重要特征,一方面,意味着用户可以随时按需地获取计算资源,满足了客户个性化定制的需求,总体上避免了计算资源的浪费。另一方面,也面临一些挑战,例如,部署在云上的应用往往面临着波动的负载,这些负载的变化具有很大的随机性并且几乎是不可预测的,这使得用户需要合理地规划自己应用所需的资源,以应对可能的访问请求的高峰,避免因为资源不够而导致的应用响应缓慢从而带来比较差的用户体验。以AWS为代表的云服务提供商通常提供一种自动伸缩的机制来满足用户这种需求。这种机制的特点是能够根据当前负载的情况决定使用相应多少数量的资源,使得既能满足峰值时的性能,又能避免资源的浪费。这种机制称为云计算资源的自动伸缩机制。对云资源的自动伸缩机制引起广泛的研究。成熟的工业界应用往往是通过监控云主机的资源使用率,当其达到一定阈值后自动增加运行实例的数量。但是,这种方法仍然存在一些局限性。另一方面,容器技术在近几年迅速流行,已经成为虚拟机之后主流的虚拟化技术和资源隔离方案。现有的云资源自动伸缩方案大多都是基于虚拟机场景提出的,很少有研究是针对容器场景的。容器相比虚拟机更加轻量,启动速度更快,容器的资源伸缩有更多的可能性。本研究主要是依托实验室承担的混合云关键技术课题,对基于容器场景的资源自动伸缩机制展开研究,并实现面向容器的自动伸缩框架。本文主要研究了现有的基于虚拟机的自动伸缩方案,将他们从伸缩时机伸缩方式上进行了文献综述,分别比较了这些方法的优缺点,并结合容器的特点提出本文的模型。在本文的方法里面,采用了基于时间序列分析的模型对资源使用进行预测,并在必要的时候进行资源的预分配。为了使得该模型可以用于实时的场景,本文利用卡尔曼滤波方法设计了一个迭代算法。另一方面,本文将横向扩展和纵向扩展的方式结合起来,设计了混合扩展的方法。本文基于实验室的私有云集群搭建测试平台,基于Docker和Kubernetes开源的容器技术实现了本文中提出的框架,实验结果表明本文的方法有效地降低了应用程序在变化的负载下的平均响应时间。