Research Breakthrough Possible @S-Logix pro@slogix.in

Office Address

Social List

How to Create Multiple Brokers in Single Datacenter using Cloudsim?

Multiple Brokers in Single Datacenter using Cloudsim

Condition for Multiple Brokers in Single Datacenter using Cloudsim

  • Description:
    In CloudSim, creating multiple brokers in a single data center involves setting up several DatacenterBroker instances, each managing its own VMs and cloudlets. After defining the data center with its characteristics, multiple brokers are instantiated to handle the scheduling of tasks. Each broker is assigned a specific set of VMs, and the brokers independently manage task execution. The VMs are submitted to the brokers, enabling parallel execution. When the simulation runs, each broker schedules tasks on its VMs, allowing for efficient workload distribution and resource management within the data center.
Sample Code
  • package multibroker;
    import java.text.DecimalFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.LinkedList;
    import java.util.List;
    import org.cloudbus.cloudsim.Cloudlet;
    import org.cloudbus.cloudsim.CloudletSchedulerTimeShared;
    import org.cloudbus.cloudsim.Datacenter;
    import org.cloudbus.cloudsim.DatacenterBroker;
    import org.cloudbus.cloudsim.DatacenterCharacteristics;
    import org.cloudbus.cloudsim.Host;
    import org.cloudbus.cloudsim.Log;
    import org.cloudbus.cloudsim.Pe;
    import org.cloudbus.cloudsim.Storage;
    import org.cloudbus.cloudsim.UtilizationModel;
    import org.cloudbus.cloudsim.UtilizationModelFull;
    import org.cloudbus.cloudsim.Vm;
    import org.cloudbus.cloudsim.VmAllocationPolicySimple;
    import org.cloudbus.cloudsim.VmSchedulerTimeShared;
    import org.cloudbus.cloudsim.core.CloudSim;
    import org.cloudbus.cloudsim.provisioners.BwProvisionerSimple;
    import org.cloudbus.cloudsim.provisioners.PeProvisionerSimple;
    import org.cloudbus.cloudsim.provisioners.RamProvisionerSimple;
    import java.util.*;
    import org.cloudbus.cloudsim.VmSchedulerSpaceShared;
    import org.cloudbus.cloudsim.examples.NewJFrame;
    public class Multibroker {
    /**
    * The cloudlet list.
    */
    private static List cloudletList;
    static Random t = new Random();
    static DatacenterBroker broker = null;
    /**
    * The vmlist.
    */
    private static List vmlist;
    /**
    * Creates main() to run this example
    * @param args
    */
    public static void main(String[] args) {
    Log.printLine("Starting CloudSimExample2...");
    try {
    // First step: Initialize the CloudSim package. It should be called
    // before creating any entities.
    int num_user = 1; // number of cloud users
    Calendar calendar = Calendar.getInstance();
    boolean trace_flag = false; // mean trace events
    // Initialize the CloudSim library
    CloudSim.init(num_user, calendar, trace_flag);
    // Second step: Create Datacenters
    //Datacenters are the resource providers in CloudSim. We need at list
    one of them to run a CloudSim simulation
    @SuppressWarnings("unused")
    Datacenter datacenter;
    datacenter = createDatacenter("Datacenter_0");
    int brokerId[] = new int[10];
    //Third step: Create Broker
    for (int i = 1; i <= 3; i++) {
    broker = createBroker();
    brokerId[i] = broker.getId();
    System.out.println("broker id :" + brokerId[i]);
    }
    System.out.println("Start");
    //Fourth step: Create one virtual machine
    vmlist = new ArrayList();
    //VM description
    int vmid = 0;
    double mips = 500;//BrokerConfiguration.Vmmips1;
    long size = 1000;//BrokerConfiguration.storagesize1; //image size (MB)
    int ram = 512;//BrokerConfiguration.VMram1; //vm memory (MB)
    long bw = 1000;//BrokerConfiguration.VMBandwidth1;
    int pesNumber = 1; //number of cpus
    String vmm = "Xen"; //VMM name
    int a[] = new int[5];
    Vm vm1 = null, vm2 = null;
    //create two VMs
    // Random t = new Random();
    for (int i = 1; i < 10; i++) {
    // int j = t.nextInt(500);
    vm1 = new Vm(i, brokerId[i], mips, pesNumber, ram, bw, size, vmm,
    new CloudletSchedulerTimeShared());
    vmlist.add(vm1);
    // System.out.println("random values are:" + j);
    }
    // vm2 = new Vm(2, brokerId, a[2], pesNumber, ram, bw, size, vmm, new
    CloudletSchedulerTimeShared());
    //add the VMs to the vmList
    // vmlist.add(vm2);
    //submit vm list to the broker
    //Fifth step: Create two Cloudlets
    cloudletList = new ArrayList();
    //Cloudlet properties
    int id = 0;
    pesNumber = 1;
    long length =100000;// BrokerConfiguration.Cloudletlength1;
    long fileSize = 300;//BrokerConfiguration.Cloudletfilesize1;
    long outputSize = 300;//BrokerConfiguration.Cloudletoutputsize1;
    UtilizationModel utilizationModel = new UtilizationModelFull();
    for (int i = 0,j=0; i < 30&&j<3; i++,j++) {
    Cloudlet cloudlet = new Cloudlet(i, length, pesNumber, fileSize,
    outputSize, utilizationModel, utilizationModel, utilizationModel);
    cloudlet.setUserId(brokerId[j]);
    cloudletList.add(cloudlet);
    }
    //add the cloudlets to the list
    //submit cloudlet list to the broker
    broker.submitVmList(vmlist);
    broker.submitCloudletList(cloudletList);
    //bind the cloudlets to the vms. This way, the broker
    // will submit the bound cloudlets only to the specific VM
    // for(int i=1,j=1;i<=10&&j<=30;i++,j++)
    // {
    // broker.bindCloudletToVm(cloudlet.getCloudletId(), vm1.getId());
    // }
    // broker.bindCloudletToVm(cloudlet2.getCloudletId(), vm2.getId());
    // Sixth step: Starts the simulation
    CloudSim.startSimulation();
    // Final step: Print results when simulation is over
    List newList = broker.getCloudletReceivedList();
    CloudSim.stopSimulation();
    printCloudletList(newList);
    Log.printLine("CloudSimExample2 finished!");
    } catch (Exception e) {
    Log.printLine("The simulation has been terminated due to an unexpected
    error");
    }
    }
    private static Datacenter createDatacenter(String name) {
    // Here are the steps needed to create a PowerDatacenter:
    // 1. We need to create a list to store
    // our machine
    List hostList = new ArrayList();
    // 2. A Machine contains one or more PEs or CPUs/Cores.
    // In this example, it will have only one core.
    List peList = new ArrayList();
    int mips = 30000;
    // for (int i = 1; i < BrokerConfiguration.HostPes1; i++) {
    // int k = t.nextInt(BrokerConfiguration.Hostmips1);
    // System.out.println("host mips random values are" + k);
    peList.add(new Pe(0, new PeProvisionerSimple(mips))); // need to store
    Pe id and MIPS Rating
    // }
    // 3. Create PEs and add these into a list.
    // peList.add(new Pe(0, new PeProvisionerSimple((mips)))); // need to
    store Pe id and MIPS Rating
    //4. Create Host with its id and list of PEs and add them to the list of
    machines
    int hostId = 0;
    int ram = 10000;//BrokerConfiguration.Hostram1; //host memory (MB)
    long storage = 100000;//BrokerConfiguration.Hoststorage1; //host storage
    int bw =20480;// BrokerConfiguration.Hostbandwidth1;
    for (int i = 1; i <= 3; i++) {
    hostList.add(
    new Host(
    i,
    new RamProvisionerSimple(ram),
    new BwProvisionerSimple(bw),
    storage,
    peList,
    new VmSchedulerSpaceShared(peList)
    )
    );
    }
    // System.out.println("*************host
    configuration***************:");
    // System.out.println("host id:" + i);
    // System.out.println("host Mips:" + mips);
    // System.out.println("host ram:" + ram);
    // System.out.println("host bandwidth:" + bw);
    // System.out.println("host storage:" + storage);
    // }
    // 5. Create a DatacenterCharacteristics object that stores the
    // properties of a data center: architecture, OS, list of
    // Machines, allocation policy: time- or space-shared, time zone
    // and its price (G$/Pe time unit).
    String arch = "x86"; // system architecture
    String os = "Linux"; // operating system
    String vmm = "Xen";
    double time_zone = 10.0; // time zone this resource located
    double cost = 3.0; // the cost of using processing in this
    resource
    double costPerMem = 0.05; // the cost of using memory in this
    resource
    double costPerStorage = 0.001; // the cost of using storage in this
    resource
    double costPerBw = 0.0; // the cost of using bw in this
    resource
    LinkedList storageList = new LinkedList<>(); //we are not
    adding SAN devices by now
    DatacenterCharacteristics characteristics = new DatacenterCharacteristics(
    arch, os, vmm, hostList, time_zone, cost, costPerMem,
    costPerStorage, costPerBw);
    // 6. Finally, we need to create a PowerDatacenter object.
    Datacenter datacenter = null;
    try {
    datacenter = new Datacenter(name, characteristics, new
    VmAllocationPolicySimple(hostList), storageList, 0);
    } catch (Exception e) {
    }
    return datacenter;
    }
    //We strongly encourage users to develop their own broker policies, to submit
    vms and cloudlets according
    //to the specific rules of the simulated scenario
    private static DatacenterBroker createBroker() {
    DatacenterBroker broker = null;
    try {
    broker = new DatacenterBroker("Broker");
    } catch (Exception e) {
    return null;
    }
    return broker;
    }
    /**
    * Prints the Cloudlet objects
    *
    * @param list list of Cloudlets
    */
    private static void printCloudletList(List list) {
    int size = list.size();
    Cloudlet cloudlet;
    String indent = " ";
    Log.printLine();
    Log.printLine("========== OUTPUT ==========");
    Log.printLine("Cloudlet ID" + indent + "STATUS" + indent
    + "Data center ID" + indent + "VM ID" + indent + "Time" + indent +
    "Start Time" + indent + "Finish Time");
    DecimalFormat dft = new DecimalFormat("###.##");
    for (int i = 0; i < size; i++) {
    cloudlet = list.get(i);
    Log.print(indent + cloudlet.getCloudletId() + indent + indent);
    if (cloudlet.getCloudletStatus() == Cloudlet.SUCCESS) {
    Log.print("SUCCESS");
    Log.printLine(indent + indent + cloudlet.getResourceId() + indent +
    indent + indent + cloudlet.getVmId()
    + indent + indent + dft.format(cloudlet.getActualCPUTime())
    + indent + indent +
    dft.format(cloudlet.getExecStartTime())
    + indent + indent + dft.format(cloudlet.getFinishTime()));
    }
    }
    }
    }
Step 1
  • To set the environment for multiple broker creation.
  • multi-broker1
Step 2
  • To put the Host, Virtual machine, cloudlet and broker configurations.
  • multi-broker2
Step 3
  • To simulate the broker configurations.
  • multi-broker3
Step 4
  • To set the broker number, number of virtual machines and number of cloudlets.
  • multi-broker4
Step 5
  • To create a datacenter for multiple broker.
  • multi-broker5
Step 6
  • To simulate the result of multiple broker.
  • multi-broker6
Step 7
  • To get the results for Host and virtual machines.
  • multi-broker7
Step 8
  • To get the cloudlet results of creating multiple brokers.
  • multi-broker8