使用线性规划将应用程序分配到云基础设施
malloovia的Python项目详细描述
马卢维亚
使用线性规划将应用程序分配到云基础设施。
- 自由软件:麻省理工学院许可证
- 文档:https://malloovia.readthedocs.io。
简介
malloovia是一个python包,用于从云客户的角度解决基础设施即服务(iaas)云中的虚拟机(vm)分配问题。这是在GECON 2017发表的论文"Cost Minimization of Virtual Machine Allocation in Public Clouds Considering Multiple Applications"中首次提出的。
要解决的问题是:给定一个由不同虚拟机类型组成的云基础设施,每个虚拟机都有自己的硬件特性和价格,其中一些具有不同的定价模式,例如长期预订的折扣,并且给定一组要在该基础设施上运行的应用程序,每个应用程序都有不同的在每种不同的vm类型上的性能,以及随着时间的推移在不同的工作负载下,找到每种类型的vm的数量,以便在每个时间段为每个应用程序激活,从而满足所有应用程序的预期工作负载,不会超过云提供程序限制,并将总成本降至最低。
它分两个阶段工作:首先,它使用长期工作负载预测(ltwp)计算保留vm的数量,然后,它使用短期工作负载预测(stwp)计算每个时隙的按需数量。
malloovia可以直接在python中使用,也可以由CLI interface使用。使用YAML format可以保存问题和解决方案。
这是一个假设问题定义在problems.yaml
中的示例,其中problem1
描述ltwp,而problem2
描述stwp:
$ malloovia solve problems.yaml --phase-i-id=problem1 --phase-ii-id=problem2
Reading problems.yaml...(0.004s)
Solving phase I...(0.020s)
Solving Phase II |███████████████████████████████████| 100.0% - ETA: 0:00:00
(0.101s)
Writing solutions in problems-sol.yaml...(0.006s)
这是python中的一个示例(在Usage section of the documentation中有更详细的解释):
frommallooviaimport*# Infrastructure definitionregion1=LimitingSet("r1",name="us.east",max_vms=20)zone1=LimitingSet("r1_z1",name="us.east_a",max_vms=20)m3large_z1=InstanceClass("m3large_r1_z1",name="reserved m3.large in us.east_a",limiting_sets=(zone1,),is_reserved=True,price=7,max_vms=20)m4xlarge_r1=InstanceClass("m4xlarge_r1",name="ondemand m4.xlarge in us.east",limiting_sets=(region1,),is_reserved=False,price=10,max_vms=10)# Performancesapp0=App("a0","Web server")app1=App("a1","Database")performances=PerformanceSet(id="example_perfs",values=PerformanceValues({m3large_z1:{app0:12,app1:500},m4xlarge_r1:{app0:44,app1:1800}}))# Workload# Long term workload prediction of each app, for Phase Iltwp_app0=Workload("ltwp0",description="rph to the web server",app=app0,values=(201,203,180,220,190,211,199,204,500,200))ltwp_app1=Workload("ltwp1",description="rph to the database",app=app1,values=(2010,2035,1807,2202,1910,2110,1985,2033,5050,1992))# Building the problem for phase I and solvingproblem=Problem(id="example1",name="Example problem",workloads=(ltwp_app0,ltwp_app1),instance_classes=(m3large_z1,m4xlarge_r1),performances=performances)phase_i_solution=PhaseI(problem).solve()# Building the problem for a timeslot in phase II and solvingphase_ii=PhaseII(problem,phase_i_solution)timeslot_solution=phase_ii.solve_timeslot(workloads=(Workload("stwp0",app=app0,description=None,values=(315,)),Workload("stwp1",app=app1,description=None,values=(1950,))))# Showing the cost and the allocationprint("Cost:",timeslot_solution.solving_stats.optimal_cost)print(timeslot_solution.allocation._inspect())
您可以在test data directory和GECON 2017 data repository中找到yaml格式的示例问题和解决方案,在这里您可以找到a notebook,它显示了如何根据问题计算解决方案。
请参阅the documentation和HE论文"Cost Minimization of Virtual Machine Allocation in Public Clouds Considering Multiple Applications"了解更多详细信息。
历史记录
0.1.0(2017-07-24)
- pypi上的第一个版本。
0.2.0(2017-07-27)
from malloovia import *
导入所有相关的类和方法。read_problems_from_github()
已添加。- 与travis ci和readthedocs集成。
- 正在处理文档。
- 修改了解决方案的yaml模式。
0.3.0(2017-07-31)
- 大大改进了文档。包括Windows安装。
- 命令行界面
- 从pyyaml改为ruamel.yaml,速度快得多
- read from yaml现在也接受gzip文件
- 在模式中修复了一些错误
1.0.0(2017-11-01)
- 不兼容的API更改:需要在中指定
time_unit
InstanceClass
、PerformanceSet
和Workload
类,以便 明确价格、性能和工作负载时间段的时间单位。 - 添加了实用程序函数来从yaml文件读取解决方案。
- 修订文件和代码质量。改进了github的自述文件。
- 小错误修复。
1.0.1(2018-01-12)
- 修正了所有malloovia类的可拾取性,允许多处理。
1.1.0(2018-03-16)
- 新类
PhaseIIGuided
,它允许使用 指定要保持运行的最小虚拟机数的给定分配。
2.1.1(2019-06-20)
- malloovia模型类的内部重构,这些类现在基于
在
typing.NamedTuple
而不是``collections.namedtuple```上,它 允许对字段进行适当的类型检查和文档记录。 - 修复了与yaml导出和导入相关的几个类型错误。
- 这个版本引入了向后不兼容,因为它需要 python 3.6+运行。但是api和用法是一样的。