Documentation ¶
Overview ¶
Microscaling is a package that monitors demand for resource in a system and then scales and repurposes containers, based on agreed "quality of service" contracts, to best handle that demand within the constraints of your existing VM or physical infrastructure (for v1).
Microscaling is defined to optimize the use of existing physical and VM resources instantly. VMs cannot be scaled in real time (it takes several minutes) and new physical machines take even longer. However, containers can be started or stopped at sub-second speeds, allowing your infrastructure to adapt itself in real time to meet system demands.
Microscaling is aimed at effectively using the resources you have right now - your existing VMs or physical servers - by using them as optimally as possible.
The microscaling approach is analogous to the way that a router dynamically optimises the use of a physical network. A router is limited by the capacity of the lines physically connected to it. Adding additional capacity is a physical process and takes time. Routers therefore make decisions in real time about which packets will be prioritized on a particular line based on the packet's priority (defined by a "quality of service" contract).
For example, at times of high bandwidth usage a router might prioritize VOIP traffic over web browsing in real time.
Containers allow microscaling to make similar "instant" judgements on service prioritisation within your existing infrastructure. Routers make very simplistic judgments because they have limited time and cpu and they act at a per packet level. Microscaling has the capability of making far more sophisticated judgements, although even fairly simple ones will still provide a significant new service.
Directories ¶
Path | Synopsis |
---|---|
Package api defines API between Microscaling agent and server
|
Package api defines API between Microscaling agent and server |
Package demand defines Tasks
|
Package demand defines Tasks |
Package engine defines engines that calculate (or retrieve) what the demand for each task is
|
Package engine defines engines that calculate (or retrieve) what the demand for each task is |
Package metric defines things that we measure to determine how well a task is performing Package metric implements the queue metric for NSQ (http://nsq.io/).
|
Package metric defines things that we measure to determine how well a task is performing Package metric implements the queue metric for NSQ (http://nsq.io/). |
Package monitor defines monitors, where we send updates about tasks and performance
|
Package monitor defines monitors, where we send updates about tasks and performance |
Package scheduler defines the interface with schedulers & orchestration systems
|
Package scheduler defines the interface with schedulers & orchestration systems |
docker
Package docker integrates with the Docker Remote API https://docs.docker.com/reference/api/docker_remote_api_v1.20/
|
Package docker integrates with the Docker Remote API https://docs.docker.com/reference/api/docker_remote_api_v1.20/ |
kubernetes
Package kubernetes provides a scheduler using the Kubernetes API.
|
Package kubernetes provides a scheduler using the Kubernetes API. |
marathon
Package marathon provides a scheduler using the Marathon REST API.
|
Package marathon provides a scheduler using the Marathon REST API. |
toy
Package toy is a mock scheduling output that simply reflects back whatever we tell it
|
Package toy is a mock scheduling output that simply reflects back whatever we tell it |
Package utils contains common shared code.
|
Package utils contains common shared code. |