Rainbow: architecture-based self-adaptation with reusable infrastructure | Synapse