To avoid a single point of failure, you may deploy a minimum of two instances of a
service (for example, deploying two domain controllers into Microsoft Azure or two
SQL servers in an Always On configuration), but you have no guarantee that those two
instances are not running in the same rack. Therefore, a rack failure would affect both
instances. By placing virtual machines in an availability set, you place the virtual
machines into separate fault domains and therefore separate racks, and thus prevent a
single failure from affecting all of the instances in the availability set.
Additionally, VMs in an availability set are distributed over multiple update domains.
For IaaS, the update domains are used when the fabric goes through routine
maintenance such as applying new boot images for the blades that make up the Azure
fabric, ensuring that not all instances of the service are taken down at the same time.
By default, with Azure Resource Manager, an availability set is spread over three fault
domains and five update domains, as shown in Figure 12.10. (You can increase the
update domains to twenty, although three is the maximum for fault domains.) PaaS
utilizes update domains when updating the code deployed to PaaS instances to avoid
taking down the entire service during an update.