Aquarium: Internal Processes - adobe/aquarium-fish GitHub Wiki

The Aquarium cluster have a hidden gem - it's the internal processes which are executed on the background and hidden from eyes.

Overall allocation/deallocation process

Let's check how Jenkins server requesting the Resource from cluster to execute workload on it and destroy afterwards:

img/Aquarium-jenkins_build_process.svg

  • xcode12.2 - is the created label that uses macos1015-xcode122-ci image from Aquarium Bait packer specification packer/macos1015/xcode122/ci.yml.
  • Application - request to the cluster to allocate a resource with specifications stored in required label. It also contains additional metadata that can be used by the Resource.
  • Driver - specified in Label and could implement any way to get the required Resource - for example can be a VM, Docker container, Cloud VM or even the hardware machine itself (to run the UI tests for example).

Worker election process

The election process is a part of the distributed Aquarium Fish system, which provides resilient method to choose the workload executor:

img/Aquarium_Fish-distributed_election_process.svg

Cluster sync process

Overall the cluster was designed to be as simple as possible - and thanks to database architecture it's way simpler then the analogues. The main complexity is hidden in p2p mechanisms, but overall it could be understood from one read.

img/Aquarium_Fish-how_cluster_sync_works.svg