With IPFS this can be avoided by using IPFS pinning. It can be done on any node but usually the use of an IPFS pinning service from providers such as Pinata and/or Infura makes the most sense.
It’s the best of both worlds - IPFS will still do it’s decentralized thing but with a pinning service even when individual IPFS nodes do garbage collection or otherwise expire an object locally they can always go fetch it from the persistent copy stored with the pining service.