Some reading notes about Google’s Borg.
In 2015, Google published a paper introducing their large scale cluster management system Borg
. The paper is available here. It is the ancestor of Kubernetes
, which manages distributed jobs in Google for decades in following 2 types,
Prod
)
Non-Prod
)
In a more fine-grained angle, every job has a priority
. A high-priority task can obtain resources at the expense of a lower-priority one, even if that involves preempting
(killing) the latter. Borg defines non-overlapping priority bands for different uses, including (in decreasing-priority order):
prod
jobs are the ones in the monitoring
and production
bands.
User needs to specify job resource quato along with the priority during the submission, such as
{
"priority" : "producation",
"CPU-quota" : 100,
"Memory-quota" : 20GB
}
Prod quota is limited to actual resources available in the cell, so that a user who submits a production-priority job that fits in their quota can expect it to run, modulo fragmentation and constraints. At the same time, lower-priority jobs have infinite quota at priority zero. A low-priority job may be admitted but remain pending (unscheduled) due to insufficient resources.
Borg supports to specify job constrains
, such as processor architecture, OS version, external IP address, to force jobs running on specific nodes. A constraint can be specified as hard (required) or soft (preferred).