How do you ensure data consistency across multiple microservices without resorting to two-phase commits?