使用线性规划将应用程序分配到云基础设施

malloovia的Python项目详细描述


马卢维亚

Documentation Status Build status

使用线性规划将应用程序分配到云基础设施。

简介

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 directoryGECON 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_unitInstanceClassPerformanceSetWorkload类,以便 明确价格、性能和工作负载时间段的时间单位。
  • 添加了实用程序函数来从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和用法是一样的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
junit有没有办法在Java中重新初始化静态类?   在浏览器中点击应用程序时java Play框架挂起   文件Java错误中的NullPointerException   使用Java中的SNMP查找网络中计算机的登录名   java包装服务器引导程序已弃用,有什么替代方案?   当客户在等待理发时,java信号量值是否存在问题?   java如何使用JavaMail仅下载特定类型的附件   如何在java中将十进制转换为十六进制   java Slick2D粒子系统不会生成粒子   java检测更改事件来自何处   将Java集合类型参数类设置为数组   java如何从eclipse导出为可运行JAR文件?   java EntityManager对象未注入Glassfish和Spring   swing从actionPerformed和actionListener Java返回字符串   java在给定另一个等价键对象的情况下获取映射项的当前键   无论输入如何,java网络都会产生相同的输出