распределенные транзакции и очереди, ruby, erlang, scala

У меня проблема, связанная с несколькими машинами, очередями сообщений и транзакциями. Так, например, пользователь нажимает на веб-страницу, щелчок отправляет сообщение на другой компьютер, который добавляет платеж в учетную запись пользователя. Может быть много тысяч кликов в секунду. Все аспекты транзакции должны быть отказоустойчивыми.

Мне никогда раньше не приходилось сталкиваться с подобными проблемами, но, прочитав немного, можно предположить, что это хорошо известная проблема.

Итак, к моим вопросам. Правильно ли я предполагаю, что безопасный способ сделать это - двухфазная фиксация, но протокол блокирует, и поэтому я не получу требуемой производительности? Обычно я пишу Ruby, но похоже, что БД, такие как redis и система очередей сообщений, такая как Rescue, RabbitMQ и т. Д., На самом деле мне не очень помогают - даже если я реализую какую-то двухфазную фиксацию, данные будут потеряны, если redis выйдет из строя, потому что по сути, это только память.

Все это побудило меня взглянуть на erlang и scala - но прежде чем я начну изучать новый язык, я действительно хотел бы лучше понять, стоит ли это усилий.В частности, прав ли я, думая, что из-за их возможностей параллельной обработки эти языки являются лучшим выбором для реализации протокола блокировки, такого как двухфазная фиксация, или я запутался? И если да, то есть ли причина выбрать одно, а не другое (особенно в этом контексте - я знаю, что существует множество тем и блогов, в которых сравниваются два в целом)

Извинения за перекрестную публикацию - это было сначала отправлено в стек -exchange, но я добавил к вопросу, и эта версия, вероятно, лучше подходит здесь

5
задан chrispanda 14 October 2011 в 04:02
поделиться