У меня есть простая служба С++ (конечная точка API), которая увеличивает счетчик каждый раз, когда вызывается API. Когда вызывающий абонент отправляет данные в http://10.0.0.1/add, счетчик должен увеличиваться на 1 и возвращать значение счетчика вызывающему.
Все становится сложнее, когда служба получает докеры. Когда два экземпляра одного и того же сервиса запускаются, добавление должно выполняться атомарно, то есть значение счетчика сохраняется в базе данных, и каждый экземпляр докера должен получить блокировку, получить старое значение, добавить один, вернуться к вызывающей стороне и разблокировать.
Когда экземпляры являются процессами на одной машине Linux, мы использовали общую память для эффективной блокировки, чтения, записи и разблокировки общих данных, и производительность была принята. Однако, когда мы используем докеры и базу данных, производительность низкая. Результаты в порядке, однако производительность низкая.
Каков канонический путь между экземплярами докционированных свойств для выполнения операций, подобных описанным выше? Есть ли функция "разделяемой памяти" для контейнерных процессов?