Транзакционное программирование в наше время является основой современного развития. Параллельность и отказоустойчивость имеют решающее значение для долговечности приложений, и справедливо, что транзакционная логика стала легко реализуемой. Однако по мере роста приложений кажется, что транзакционный код становится все более обременительным для масштабируемости приложения, и когда вы подключаетесь к распределенным транзакциям и зеркальным наборам данных, проблемы начинают становиться очень сложными. Мне любопытно, в чем заключается смысл, с точки зрения размера данных или сложности приложения, что транзакции часто начинают становиться источником проблем (вызывающих таймауты, взаимные блокировки, проблемы с производительностью в критически важном коде и т. Д.), Которые более утомительно исправлять, устранять неполадки или обходной путь, чем разработка модели данных, которая сама по себе более отказоустойчива, или использование других средств для обеспечения целостности данных. Кроме того, какие шаблоны проектирования служат для минимизации этих воздействий или для того, чтобы сделать стандартную транзакционную логику устаревшей или неиспользованной?
-
РЕДАКТИРОВАТЬ: У нас пока есть несколько ответов приемлемого качества, но я думаю, что я опубликую ответ сам, чтобы рассказать о некоторых вещах, о которых я слышал, чтобы попытаться вдохновить дополнительное творчество; большинство ответов, которые я получаю, представляют собой пессимистические взгляды на проблему.
Еще одно важное замечание: не все тупики являются результатом плохо закодированных процедур; иногда существуют критически важные операции, которые зависят от схожих ресурсов в разных порядках, или сложные объединения в разных запросах, которые накладываются друг на друга; это проблема, которая иногда может показаться неизбежной, но я участвовал в доработке рабочих процессов, чтобы упростить порядок выполнения, который с меньшей вероятностью может его вызвать.