def calc_min_vms_for_availability(zk_servers, bk_servers, ss_servers, cc_servers):
    """
    This method assumes as input a number of instances per service to tolerate a given number of failures. With this,
    we calculate the number of VMs to respect the same failure tolerance, which translates into the maximum number of
    instances of any type. This is because having fewer VMs yield that a single VM failure would induce multiple
    failures in the Pravega services, making the failure tolerance guarantees ineffective.
    :param zk_servers: Number of Zookeeper instances.
    :param bk_servers: Number of Bookkeeper instances.
    :param ss_servers: Number of Segment Stores.
    :param cc_servers: Number of Controllers.
    :return: Minimum number of VMs to satisfy the failure tolerance requirements.
    """
    return max(zk_servers, bk_servers, ss_servers, cc_servers)