Как избежать блокировок БД, когда несколько сообщений Kafka создаются для одного и того же элемента? - PullRequest
0 голосов
/ 27 апреля 2020

У нас есть 2 веб-приложения. позволяет именовать их A и B. Когда пользователь изменяет анализ элемента в приложении A, приложение A выполняет вещи и создает сообщение kafka.

API остальных в приложении B получает сообщение через коннектор приемника http Confluent. Вызов API оставшегося в приложении B SQL Хранимая процедура, которая обновляет записи с транзакцией.

Когда (часто случается) пользователь, постоянно меняющий анализ одного и того же элемента в приложении A, вызывает тупик, вызванный в БД. потому что SP все еще работает с записями, когда другой вызов для того же элемента достигает.

, что является лучшим методом для решения этой проблемы? управлять каким-то глобальным списком с текущими элементами (идентификаторами), входить в SP и удалять их, когда SP завершен sh? справиться с этим на БД? другое предложение?

некоторая соответствующая информация: приложения ASP. Net Core. хранится в среде балансировки нагрузки (AWS).

Любой соответствующий ответ приветствуется.

Спасибо!

1 Ответ

0 голосов
/ 28 апреля 2020

Убедитесь, что один и тот же элемент всегда публикуется с одним и тем же ключом (например, используйте хэш-код элемента). Это гарантирует, что все запросы из приложения A будут go в одном и том же разделе topi c.

В приложении B убедитесь, что вызов процедуры выполняется в потоке пользовательских опросов (не создавайте новый поток ) так что все вызовы процедур для одного и того же элемента будут гарантированно выполняться последовательно.

Это разрешит взаимоблокировки за счет производительности. Для нескольких предметов вы можете масштабировать по горизонтали с несколькими потребителями (при условии, что у вас много разделов). Если производительность при повторных запросах для одного и того же элемента слишком низкая, значит, у вас есть более сложная проблема проектирования.

...