-
-
Save bhattisatish/1199782 to your computer and use it in GitHub Desktop.
glpk model for cloud vs colo costs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Colo Server costs | |
set ServerTypes; | |
set InstanceTypes; | |
param CoreDemand; #How many cores do we need for a workload | |
param OurMoney; #The maximum upper-bound of what we're willing to spend | |
param ColoCostPerU; #How much are we paying per U of colocation | |
param Months; # How many months do we know we need this hardware | |
## Owned Servers | |
param ServerCost{b in ServerTypes}; | |
param ServerCores{b in ServerTypes}; | |
param ServerRam{b in ServerTypes}; | |
param ServerUs{b in ServerTypes}; | |
## EC2 Instances | |
param InstanceCost{a in InstanceTypes}; | |
param InstanceCores{b in InstanceTypes}; | |
param InstanceRAM{b in InstanceTypes}; | |
## Variables for how many of each we'll need | |
var ServerQuantity{q in ServerTypes}, integer, >= 0; | |
var InstanceQuantity{q in InstanceTypes}, integer, >= 0; | |
## Our objective: To minimize the number of servers subject to our Core demand | |
# minimize server_count: sum{i in ServerTypes} ServerQuantity[i]; | |
minimize instance_count: sum{i in InstanceTypes} InstanceQuantity[i]; | |
#Initial cost of servers + monthly colo fee must be less than the total budget | |
s.t. total_cost: sum{i in ServerTypes} (ServerQuantity[i] * ServerCost[i] + ServerQuantity[i] * ServerUs[i] * ColoCostPerU * Months) <= OurMoney; | |
#Initial server cost must be less than the total budget | |
# s.t. server_cost: sum{d in ServerTypes} ServerQuantity[d] * ServerCost[d] <= OurMoney; | |
# Every server must incur a colocation cost per month and it must be positive | |
s.t. server_hosting_cost: sum{d in ServerTypes} ServerQuantity[d] * ServerUs[d] * ColoCostPerU >= 0; | |
# The number of servers we have must been our core count requirement | |
s.t. server_cores_needed: sum{i in ServerTypes} ServerQuantity[i] * ServerCores[i] >= CoreDemand; | |
## EC2 Requirements | |
# The number of EC2 instances we have must meet our Core demand | |
s.t. instance_cores_needed: sum{i in InstanceTypes} InstanceCores[i] * InstanceQuantity[i] >= CoreDemand; | |
# Every EC2 instance must incur a monthly cost and it must be greater than zero | |
s.t. instance_cost_per_month: sum{i in InstanceTypes} InstanceQuantity[i] * InstanceCost[i] >= 0; | |
# The total we're willing to spend must be less than our total budget | |
s.t. max_budget_for_instances: sum{i in InstanceTypes} InstanceQuantity[i] * InstanceCost[i] * Months <= OurMoney; | |
solve; | |
display{i in ServerTypes}: ServerQuantity[i]; | |
display{i in ServerTypes}: ServerQuantity[i] * ServerCost[i]; | |
display{i in ServerTypes}: ServerQuantity[i] * ServerCost[i] + ServerQuantity[i] * ServerUs[i] * ColoCostPerU * Months; | |
display{i in InstanceTypes}: InstanceQuantity[i]; | |
display{i in InstanceTypes}: InstanceQuantity[i] * InstanceCost[i] * Months; | |
data; | |
set ServerTypes := DellPowerEdgeR515; | |
param ServerCost := DellPowerEdgeR515 1901; | |
param ServerCores := DellPowerEdgeR515 8; | |
param ServerRam := DellPowerEdgeR515 16; | |
param ServerUs := DellPowerEdgeR515 2; | |
set InstanceTypes := Small Large XLarge HCPULarge HCPUXLarge; | |
param InstanceCost := Small 72 | |
Large 288 | |
XLarge 576 | |
HCPULarge 144 | |
HCPUXLarge 576; | |
param InstanceCores := Small 1 | |
Large 2 | |
XLarge 4 | |
HCPULarge 2 | |
HCPUXLarge 8; | |
param InstanceRAM := Small 1700 | |
Large 7500 | |
XLarge 15000 | |
HCPULarge 1700 | |
HCPUXLarge 7000; | |
param CoreDemand := 432; | |
param OurMoney := 800000; | |
param ColoCostPerU := 50; | |
param Months := 12; | |
end; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment