RabbitMQ очередь сообщений на основе распределенных решений транзакций - MQ распределены сообщений промежуточного боя

1 Скорость понимать MQ

Введение Rabbitmg для решения распределенной транзакции должен освоить пять основных концепций

Распределенные сообщения промежуточное, высокая мощность обработки параллелизма на основе развития языка Erlang, с уровнем языка. И Spring Framework это та же компания.
Поддержка настойчивость, высокая доступность

Пять основных концепций:

  1. Очередь: Локальные данные в реальном магазине
  2. Обмен: прием запроса, дамп данных
  3. Bind: После получения запроса, где хранить
  4. Данные приложения передаются: производитель сообщения
  5. Потребитель сообщения: Удалите обработку данных приложений

2, распределенные проблемы транзакций

Распределенная транзакция является бизнес-вопрос, не может быть оторвана от конкретной сцены.

Некоторые решения 2.1 распределенных транзакций

● базы данных на основе XA / JTA способ соглашения
требует поддержки поставщика базы данных, JAVA компонент имеет atomikos и т.д.
● асинхронные Вычитай как данные
Alipay, микро-канал инициатива оплаты проверить статус платежа в виде векселей;
● решения основаны на надежных источниках (MQ) от
асинхронного сцена, всеобщее сильное, расширение выше
● решений КТС программирования
тщательно отобраны, Али, муравьи золото платье собственный пакет DTX

Эта статья цель: для всех людей, научиться решать проблемы распределенных транзакций , основанных на достоверных источниках.
Решения для распределенной транзакции, высоко целевого бизнеса, это важные идеи вместо копирования

  • архитектура системы комментариев Миссии США

Распределенные вопросы транзакций между несколькими системами 2.2

  • Одиночные генерироваться пользовательские заказы
  • Заказы должны передать данные, тем самым генерируя две транзакционные проблемы непротиворечивости

Неправильный случай

При сбое вызова интерфейса, транзакция откатывается системы обратно заказа, пользователю предлагается операция не выполняется

误以为这样的接口调用写法,就不会有分布式事务问题

Интерфейс успеха вызова или неудач, будет иметь распределенные транзакции:

  1. Вызов интерфейса успешно, транзакция базы данных системы порядка фиксации не удается, система не откатить накладную, генерировать данные
  2. Интерфейс требует тайм-аут, базу данных транзакций Откат системы заказа, накладная интерфейс системы продолжает генерировать данные

В обоих случаях, это может привести к несогласованности данных

3, для достижения распределенной транзакции - пятиступенчатая

Решение распределенных транзакций с помощью MQ 5 шагов, а также распределенной обработки локальной транзакции отметить,

  • Перед заказом системы отправить все HTTP-запрос интерфейс систему накладной, проблему!
  • Поэтому мы считаем сообщение для MQ, асинхронная царапанию!

3,1 общая концепция дизайна


После заказов общественных питания, медленно ждет центра обработки данных генерирующих накладных, не является обязательной одновременностью

  1. Надежное производство: чтобы гарантировать, что сообщение должно быть направлено на Rabitmq службы
  2. Надежное потребление: для того, чтобы сообщение должно вынимает надлежащее потребляется

И, наконец, данные многопартийных для достижения консенсуса.

3.2 Шаг 1 - производить надежные информацию, записанные сообщения

  • Есть скрытые опасности - возможные сообщения не удалось отправить его!

Для того, чтобы обеспечить успех определенных данных направляется в MQ.
В одной и той же операции, увеличение записи в операционном столе, запись 每一条发往MQ的数据以及它的发送状态
поэтому мы добавим локальную таблицу информации в системе заказа

Поэтому на практике код, а не интерфейсами HTTP интерфейс вызова биллинговых систем, но использование MQ

При создании заказов, но и сохранить в локальной информационной таблице


3.3 Шаг 2 - Производство Надежные сообщения (модификация состояние передачи сообщения)

  • Использование RabbitMQ механизм подтверждения транзакций публикации (подтверждение)
    после открытия, MQ точного приема сообщения Вернуться Квитанция

  • Тогда иметь возможность знать, как обновить локальную таблицу информации

- Confirm механизм для обеспечения открытой в SB


  • Если подтверждение не получено, модификация сообщения несостоявшееся государство и другие особые обстоятельства
    兜底方案:定时检查消息表,超时没发送成功,再次重发

3.4 Шаг 3 - надежная обработка сообщений (нормальная обработка)

  • После того, как накладная система получает данные сообщения внезапно выходит из строя, или посетить накладную, когда DB, DB внезапно выходит из строя, данные сообщения не ускользнуло от вас !!!

Таким образом, нам понадобятся следующие характеристики:

Идемпотентное
предотвращение повторных обработок данных сообщения, пользовательская операция, время обработки , соответствующие данные только с

открытым 手动ACK模式
управляющим потребителем сообщением повторной передачи / удаляет / отбрасывает

3.5 Шаг 4 - надежный обмен сообщениями (сообщение повторной передачи)


Потребители обработка терпит неудачу, мы должны повторно MQ снова к потребителю.
Аномалии обычно повторить несколько раз потребителей самих рекордное количество повторных попыток, и количество элементов управления (не всегда повторять!)

Шаг пятый 3,6 - надежный обмен сообщениями (сообщение отбрасывания)

Потребитель обработка сбоя, или выброшено непосредственно передан в мертвую очередь письма (DLQ)
重试次数过多、消息内容格式错误等情况,通过线上预警机制通知运维人员

4 Резюме и расширения

Плюсы и минусы программы 4,1 MQ

преимущество открытия

  1. многосторонность
  2. Разработка и сильный
  3. программа Зрелые

Рот недостатки

  1. Сообщение на основе промежуточного программного обеспечения, только для асинхронных сценариев
  2. Обработка сообщений будет задержана, нужно быть в состоянии терпеть на бизнес

Старайтесь избегать распределенной транзакции,
попытаться сделать асинхронные неосновные операции;

4,2 расширения

Теоретические основы для распределенных решений по сделкам

CAP теории
теории БАЗЫ
2PC Протокол
3PC протокол
Paxos алгоритм.
Протокол Плот когерентности

Освобожденные пять оригинальных статей · вона похвала 0 · Просмотров 245

рекомендация

отblog.csdn.net/weixin_32822759/article/details/105365940