Java + Kubernetes + Concorrência

Boa tarde pessoal, já resolveram problemas de concorrência no caso de ter uma aplicação na nuvem pelo kubernetes e essa aplicação ter mais de uma instância? estou tendo quebra de PK por que as duas instancia mesmo com mecanismos pra ser thread-safe continua quebrando a PK

Qual operação você está realizando e como é a composição da sua PK?

Faça o banco de dados gerar o PK.

Ou gere UUID para o PK com essa classe utilitária UUID (Java Platform SE 8 )

É uma PK simples, um POST.

No meu caso não posso gerar dessa forma, tem uma lógica no sequencial desse ID.

Certo, mas onde e como você está gerando essa PK?

Como ela é composta?
Como você está armazenando isso em banco?

O banco de dados não gera em sequência?

A PK ela é criada no Oracle um Number, e incrementamos ela pelo código, queríamos usar a sequence do oracle mas a equipe de AD não quer fazer de jeito nenhum, é um número de protocolo então no caso o número que é gerado para o protocolo faz parte da nossa regra de negócio não é o caso comum (1,2,3,4)…

Sim mas a equipe de AD não quer criar a sequence.

Entendi!

Nesse caso, usando esta abordagem de aplicação distribuída onde você pode ter várias réplicas da aplicação em execução é necessário ter um mecanismo único em comum entre elas para previnir este tipo de erro.

No seu caso o banco de dados é o ponto em comum entre as réplicas!

Uma instância da aplicação não conhece as demais e vice e versa, qualquer tratativa dentro do escopo de código na aplicação não previne e não dá nenhuma garantia de N problemas que podem acontecer, esse de conflito de ID’s é um deles.

Sobre o time AD dizer que “não querem” criar uma sequence no banco, na minha visão é uma necessidade de negócio, simplesmente tem de ser feito, não seria uma questão de “querer”, escale o tema com os superiores se necessário!

Isso se uma sequence no banco tiver a capacidade de gerar os ID’s conforme a regra de negócio de vocês exige.

Do contrário, você teria de criar um ponto em comum entre as réplicas para gerenciar e controlar isso.

Outra possibilidade seria reavaliar junto as pessoas de negócio uma evolução da regra, agregando critérios que minizem a possibilidade de um conflito, algo próximo de um Snowflake ID.

Uma referência sobre: Discord Developer Portal

Olá!

Entendi que a regra de construção desta chave (PK) não esta levando em consideração a concorrência. Se for isso mesmo, tem que revisar o algoritmo e incluir esta condição depois submeter a testes.

[]'s