-
Notifications
You must be signed in to change notification settings - Fork 24
ec2 4.1 Resource Pools Architectural Analysis
- Description
- Tracking
- Analysis
- Use Cases
- Elements
- Workflows & Coordination
- Interactions
-
Abstractions
- Reservation Manager: Reserved Instances Offering
- Reservation Manager: Instance Reservation
- Resource State Manager: Instance Type Availability
-
Behaviours
- Reservation Manager: Reserved Instances Offering: Create
- Reservation Manager: Reserved Instances Offering: Delete
- Reservation Manager: Reserved Instances Offering: Describe
- Reservation Manager: Reserved Instance Offering: Purchase
- Reservation Manager: Instance Reservation: Describe
- Resource State Manager: Instance Type Availability: Refresh
- Resource State Manager: Instance Type Availability: Query
- References
As a cloud resource administrator, I would like to be able to reserve capacity (cores / memory / disk) on a per account basis, so that specific accounts get a guaranteed minimum capacity (reservation) at any given point in time.
- PRD-199
- ARCH-64
- Status: Step #1, initial draft
The aim is to cover the required functionality via implementation of EC2 reserved instances and placement groups.
It is not meaningful to reserve capacity for (cores / memory / disk) as you do not launch instances by specifying fine grained resources but by specifying an instance type. An instance type may also have additional constraints besides the (cores / memory / disk) resource requirements.
The default limit for reserved instances in AWS/EC2 is "20 instance reservations per Availability Zone, per month", we may need to be able to restrict reserved instances via Quota or other approach.
An instance reservation relates to a product as well as an instance type. We can use the product description to map reservations onto resource pools.
If resource reservations are for particular instance types then this conflicts with instance type modification, as changing the types could mean that additional capacity must be reserved (which may not be available)
Differences between requirements and EC2 reserved instances functionality.
There is no such thing as a running reserved instance. An instance reservation is the option to run an instance, when exercised the result is an instance (like any other instance). It does not make sense to have a pool of resources for reserved instances, as by definition a reserved instance is never running.
When an instance reservation matches the parameters of a run instance request the reservation is automatically utilized, any (matching) on-demand instance can be utilizing the reservation. It does not make sense to run an instance "outside" of the reservation, the reservation is a block of capacity, any instance uses capacity and so uses the reservation.
AWS/EC2 reserved instances specify a utilization level (light, medium, heavy), this concept is not meaningful in the absence of billing.
A cloud infrastructure administrator defines the instances / instance types available for reservation.
A cloud user lists reserved instance offerings and reserves instances of the desired type.
The term for some reserved instances expires. Instances continue to run and the reserved instances are not available as offerings until they terminate.
On-demand instances are launched, utilizing capacity covered by a reserved instance offering. The reserved instance offerings update to reflect the available capacity.
A cloud user checks their running instances against their reservations to determine usage.
A resource administrator limits the number of reserved instances available to an account.
An infrastructure administrator configures particular nodes available capacity for use with windows instances.
A user launches a windows instance, it is provisioned to run on resources that are licensed for such instances.
The reservation manager implements EC2 API actions related to reserved instances and provides access to reservation information for use when allocating resources.
Instance Allocator -> Resource State Manager : Reserves resources for running instances
Resource State Manager -> Reservation Manager : Queries current reservations by instance type and platform
Resource State Manager -> Cluster Controller : Queries for current and maximum availability by instance type and platform
Reservation Manager -> Resource State Manager : Queries availability to ensure capacity for new / modified reservations
EC2 User -> Reservation Manager : Performs EC2 API actions
Administrator -> Reservation Manager : Sets up initial reservations for accounts
An offering of reserved instances (by instance type, platform and availability zone)
Represents a number of reserved instances (as per EC2)
Represents availability of an instance type by platform and availability zone.
A resource administrator creates a reserved instances offering [for an account?]
A resource administrator deletes a reserved instances offering.
A user or administrator describes reserved instance offerings.
A user purchases a reserved instances offering (purchase is the activity, but there is no associated cost)
A user describes their reserved instances.
Instance type availability is refreshed by platform and availability zone (cluster)
Instance type availability is queried to see if instances can be run.
- Reserved instances (docs.aws.amazon.com)
- Utility to check reserved instance usage (github.com/epheph)