Задать вопрос

Опытом работы с распределенными транзакциями и MySQL?

Строю проект, использующий распределенные транзакции JMS + DB.

В качестве базы данных выступает MySQL Percona (innodb).


Может кто-то поделиться опытом использования MySQL в режиме XA?

Интересуют замеченные на практике баги, глюки, грабли, проседания в производительности, горькие опыты и так далее.
  • Вопрос задан
  • 5072 просмотра
Подписаться 4 Оценить Комментировать
Решения вопроса 1
tonyvelichko
@tonyvelichko
Есть очень неприятная проблема:
Как только 2 разных коннекшена подключены к одной БД, на одном сервере, XA транзакции между ними отваливаются, они просто не поддерживаются.Версия была 5.5 или 5.6.

Псле этой досадной проблемы перевел на PostrgeSQL проблем не обнаружено, пока. Я бы не посоветовал использовать MySQL совместно с JTA (что по сути одно и тоже с вашим случаем)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@bobzer
Java EE Developer
1. Странно, а почему автор не интересуется проблемами с XA у его реализации JMS? Вы ведь хотите объединить в одну транзакцию двух провайдеров: СУБД и JMS. Причем исторически СУБД по части транзакций являются более продвинутыми, это одна из их основных функций, в то время как у сервисов доставки сообщений основной уклон немного в другую сторону. Мне кажется, что возможными проблемами с XA у вашего JMS-провайдера следовало бы озаботиться в первую очередь.

2. Из личного опыта: как-то сталкивался с похожей ситуацией, появилось желание объединить в одну XA-транзакцию JMS (IBM WebSphere MQ) и СУБД (Oracle). Не получилось, лезли какие-то глюки. Это было очень давно, возможно я не разобрался до конца, возможно технологии XA тогда были еще сырые, не важно. Я тогда пошел другим путем. В проекте использовался ORM (Hibernate), соответственно все обращения к СУБД шли через эту прослойку. Так вот, я подумал, что раз и так все делается через Hibernate, то почему бы не посмотреть что там есть по части объединения различных ресурсов в одну транзакцию. И оказалось, что таки есть. У org.hibernate.Transaction есть метод registerSynchronization, который принимает объект, реализующий методы beforeCompletion и afterCompletion. В методе beforeCompletion я и реализовал завершение транзакции JMS. Конечно, такой подход можно считать менее надежным, чем XA-технологии, но абсолютно надежных транзакций не существует. Добавлю лишь, что система высоконагруженная (порядка миллиона транзакций в сутки, из них треть с использованием вышеописанной связки СУБД и JMS, и за 6 лет промышленной эксплуатации вопросов/проблем связанных с именно такой реализацией не было. Так что, на мой взгляд, достойный вариант, не имеющий глюков (по крайней мере в одной системе за 6 лет).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы