There is a few techniques to ensure new changes doesn't break the system, like mentioned above blue-green or canary deployment. Both means applying changes partially (change only part of infrastructure, or run new version in parallel with old one).
However I don't get how to keep data consistency if any major changes comes in data structure (let's say, you made changes for GDPR - pretty possible case, huh?).
Even on NoSQL based solutions it may cause issues (as I imagine it). I've tried to look for solutions, but the problem is only widely mentioned, but rarely addressed.
How is it possible to introduce such techniques and keep data consistency? How does it achieved normally in real life applications?