Como vocês projetariam um sistema de gerenciamento de inventário?
Esses dias eu fiquei me perguntando como normalmente um sistema de gerenciamento de inventários de um sistema de compras online seria projetado. Um sistema de compras possibilita a venda de diversas unidades de diversos produtos e precisa garantir que somente a quantidade disponível no estoque seja vendida.
No meio dessa reflexão a minha dúvida acabou sendo a seguinte: Como a concorrência do inventário poderia ser gerenciada de forma escalável e eficiente?
De início a solução que me veio a mente, de uma forma ultrasimplificada, seria uma tabela no banco de dados que armazena os dados dos produtos assim como a quantidade disponível para cada produto:
| id_produto | nome_produto | quantidade |
|---|---|---|
| 9381202 | Playstation 5 | 100 |
Eu imaginei que em algum dado momento, a coluna quantidade precisaria ser atualizada para refletir as reservas do produto e o sistema precisaria garantir que nenhuma inconsistência seria gerada durante essa atualização, como transações concorrentes tentando atualizar o mesmo registro ao mesmo tempo.

Para garantir que essa inconsistência não aconteça, eu imaginei que um lock pessimista poderia ser utilizado sempre que a coluna quantidade de uma linha for atualizada, garantindo que as atualizações aconteçam de forma ordenada, isto é, uma após a outra.
Porém, ao utilizar essa abordagem um novo problema surge, sempre que houver transações concorrentes acessando a mesma linha do banco, a segunda transação terá que esperar a primeira transação liberar o lock para seguir em frente, fazendo com que o sistema enfrente alguns gargalos caso multiplas solicitações de compra sejam realizadas para um mesmo produto em um curto intervalo de tempo.
Vocês tem conhecimento de algum padrão / estratégia que poderia ser utilizado para lidar com esse último problema?