Gliffy | ||
---|---|---|
|
...
- Available Capacity, directly, through MultiCloud
- CPU, Mem, Network, Disk, etc
- required for evaluating instantaneous/available capacity check constraints
- provided by MultiCloud through a Query or DMaaP
- Example: available_capacity(cloud_region_id) -> {x: vCPU, y: memory, z: storage}
- If a public cloud does not want to reveal exact numbers, they could return ranges of capacities.
- Which of these metrics (cpu, mem, disk, network) are relevant to vCPE
- [Ethan] MultiCloud could provide an API for OOF to query available resources information. In my mind, there are two ways, first is OOF check every VIM’s available capacity from MultiCloud, MultiCloud return {vCPU, Memory, Storage}, the second one is OOF send out VNF resources requests of {vCPU: xx, Memory: yy, Storage: zz} to MultiCloud, and MultiCloud return a list of VIMs that capable for this resources requests.
- [Shankar] I’d probably go with the former, where OOF queries for the available capacity for a given set of VIM IDs. Eg., getCapacities([cpu,mem],[vim-id-1, vim-id-5, vim-id-7]) To me this appears a much more scalable approach, since OOF would have eliminated many VIMs based on other constraints that make them an infeasible choice for a given problem. Please do let me know what you think.
- [ethanlynnl] About get_capacity API, the input format could be {“vcpu”: int, “men”: int, “vims”: [vim1, vim2, vim3]} then the return data would be [vim1, vim3]. What do you think?
- [Shankar] We should probably call it check_vim_capacity() perhaps. Just to make the semantics of this clear, check_vim_capacity({“vcpu”: int, “men”: int, “vims”: [vim1, vim2, vim3]}) would mean that the vims returned have met *both* constraints on vcpu and mem.
- [Bin] Please make the specification of VIM in the list be possible to be extended. So the input for check_capacity API might looks like: {“vcpu”: int, “men”: int, “vims”: [{"cloud-owner":"vim1 owner", "cloud-region-id":"region id 1"}, {"cloud-owner":"vim2 owner", "cloud-region-id":"region id 2"}, {"cloud-owner":"vim3 owner", "cloud-region-id":"region id 3}]}. With this format, later OOF could add more constraints to those specified VIMs in list, e.g. for the cloud region with multiple available zone, and OOF want to check that if required capacity is available on specified AZ, then the vim list could be [{"cloud-owner":"vim1 owner", "cloud-region-id":"region id 1", "availabe-zone":"az1"}, {"cloud-owner":"vim2 owner", "cloud-region-id":"region id 2","availabe-zone":"az2"}, {"cloud-owner":"vim3 owner", "cloud-region-id":"region id 3, "availabe-zone":"az3"}]
- Bin Hu: A hybrid approach seems more ideal, i.e. a definitive "Yes/No" answer plus a list of available capacity information. The following is an example (and only an example):
- For R2:
- ethanlynnl MultiCloud will provider an API check_vim_capacity for OOF. The input looks like following, and it means ALL the requirements need to be satisfied.
{
"vCPU": int, // number of cores
"Memory": float, // size of memory, GB
"Storage": int, //GB
"VIMs": array of vim_id // VIM IDs that OOF wish to check with
}
- In R2 the combination of HPA and available resources query is not mandatory to support.
- The ouput of this API we still need to discuss more. Could be an array of VIM IDs satisfied with this requirement, or an array of satisfied VIM objects with current capabicities.
Additional Discussion:
...
- Bin Hu "get_vim_capacity
...
- Input of check
- " API is pending further discussion because we ran out of time in the meeting on Jan 31. The proposal at the meeting is to have the following API:
- Signature: object get_vim_capacity
{
"vCPU": int, // number of cores
"Memory": float, // size of memory, GB
"Storage": int, //GB
"VIMs": array of vim_id // VIM IDs that OOF wish to check with
}
- Output of check_vim_capacity will be
{
"VIMs": array of vim_id // subset of requested VIM IDs satisfy with this resource requirement
}
...
- (object vims);
- Input parameter: “vims” is a json object that lists the set of cloud-ids; the format is consistent with the "VIMs" in "check_vim_capacity" API.
- Output: “object” is the data model that will be worked out during R2.
- This API signature is agnostic of any infrastructure data model and ensures the extensibility and backward compatibility, no matter how data model evolves beyond R2.
- 4:30pm Wednesday 02/07/2018: Ramki Krishnan, Sastry Isukapalli, Shankaranarayanan Puzhavakath Narayanan and Bin Hu discussed the MVP to support OOF in MultiVIM. It was concluded that the following 3 components are MVP for R2:
- check_vim_capacity
- capacity information
- capacity information will be used to support flexible placement policy
- minimum resource information include CPU and RAM, and metrics are: average utilization, and peak utilization.
- Aligning with OpenStack terminology for simplicity, the key aggregates of interest (including HPA) for OOF would be cloud region, project and host aggregate
- The method to send capacity information to OOF
- DMaaP is recommended by Architecture Committee and highly preferred for R2
- DMaaP is recommended by Architecture Committee and highly preferred for R2
Additional Discussion:
One form of check_vim_capacity API provided by ethanlynnl
- Input of check_vim_capacity will be
{
"vCPU": int, // number of cores
"Memory": float, // size of memory, GB
"Storage": int, //GB
"VIMs": array of vim_id // VIM IDs that OOF wish to check with
}
- Output of check_vim_capacity will be
{
"VIMs": array of vim_id // subset of requested VIM IDs satisfy with this resource requirement
}
Another response format of check_vim_capacity API by Bin Hu
Step 0: This is pre-condition. OOF is doing global optimization with many constraints, and worked out a shortlist of 3 VIMs { cloud-region-id1, cloud-region-id2, cloud-region-id3 }. Now OOF needs to check those VIMs' capacity.
Step 1: OOF calls MultiVIM's API to check those 3 VIMs' capacity information.
Step 2: MultiVIM checks those 3 VIMs' capacity information (internal implementation of MultiVIM)
Step 3: MultiVIM returns 2 pieces of information of each VIM to OOF:
1. One piece of information is { Yes | No }, which indicates whether this VIM has sufficient capacity ("Yes") or not ("No").
1. If there is no knowledge (either directly or indirectly) of "Yes" or "No", empty data will be returned
2. The other piece of information is the actual capacity data of the VIM.
1. If the actual capacity data is not available, empty data will be returned
Step 3: OOF gets the capacity information of those 3 VIMs, and continue its work.
Request:
check_vim_capacity({“vcpu”: int, “mem”: int, “vims”: [cloud-region-id1, cloud-region-id2, cloud-region-id3]})
...