How do you handle distributed transactions across multiple microservices without compromising data integrity?