It's a very wide topic but let's consider the following scenario:
Salesforce is a system of record and it is sending all new leads to some marketing tool (in other words synchronizes some eligible Leads from SFDC to Marketing Tool). Let's assume we're using custom synchronization that is orchestrated by SFDC. There are avg 10 leads per 24h.
Assume not having leads for three days (around 30 leads) it's not a big deal. We can have a manual "fail-over" by simply loading them manually to the Marketing Tool.
Problems to consider:
Probably, there's a batch that is calling out the external service then setting the flag 'synchronized' on every lead that was successfully in sync w the Marketing Tool. This batch will be constantly trying to call the service even if it's down for three days. If you're ok with manual "fail-over", then just tear it down and wait until the external system is fixed.
An alternative solutions,
A fully automated solution that needs no middleware:
Use the combination of the two followings: retry pattern and circuit breaker patern. please refer https://docs.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker
Use queue as described by @sfdcfox. In SFDC you can simply start using platform events that is actually a queue.
Use middleware: mulesoft, boomi etc. that will handle fail-over logic. But it brings a lot of complexity. Please refer to the following links:
https://blogs.mulesoft.com/dev-guides/how-to-tutorials/error-handling-integration-patterns/
https://wso2.com/library/articles/2016/03/article-design-for-failure-integration-error-handling-part-1/
https://wso2.com/library/articles/2016/05/article-design-for-failure-integration-error-handling-part-2/
Also, I recommend looking in the following book "Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions".