Each client gets its own jobs with up to 250 URLs per job, so a failing CDN doesn't delay the others. Identical purges that are still queued aren't queued again, so a large change of shared content removes all content only once.
If more URLs than limit are purged at once, Cloudflare and Fastly remove all content with a single request instead. This also removes cached images, CSS and JavaScript, which are then fetched from your server again. If shared elements like the footer are used by more pages than the limit, every change does this, so raise the limit or set it to 0 for large sites with frequent shared-content changes. Varnish always purges URL by URL.
Failed purges are retried after 10 seconds, 1, 5 and 15 minutes, including when the CDN API rate-limits requests. After the last retry, Laravel stores them as failed jobs. Jobs contain only the client name and URLs, and credentials are read when the job runs, so changed credentials apply to queued purges too.
With the sync queue, URLs are purged after the response is sent, without delay or retries. Use a real queue in production.