Controle de Concorrência Distribuído

Bob Gettys:

Estou trabalhando nisso há alguns dias e encontrei várias soluções, mas nenhuma delas incrivelmente simples ou leve. O problema é basicamente o seguinte: temos um cluster de 10 máquinas, cada uma executando o mesmo software em uma plataforma ESB multithread. Posso lidar com problemas de simultaneidade entre threads na mesma máquina com bastante facilidade, mas e quanto à simultaneidade nos mesmos dados em máquinas diferentes?

Essencialmente, o software recebe solicitações para alimentar os dados de um cliente de uma empresa para outra via serviços da web. No entanto, o cliente pode ou não existir ainda no outro sistema. Caso contrário, criamos através de um método de serviço da web. Por isso, requer uma espécie de teste e configuração, mas preciso de um tipo de semáforo para impedir que as outras máquinas causem condições de corrida. Já tive situações em que um cliente remoto foi criado duas vezes para um único cliente local, o que não é realmente desejável.

As soluções com as quais eu brinquei conceitualmente são:

  1. Usando nosso sistema de arquivos compartilhados tolerante a falhas para criar arquivos de "bloqueio" que serão verificados por cada máquina, dependendo do cliente

  2. Usando uma tabela especial em nosso banco de dados e bloqueando a tabela inteira para fazer um "teste e configuração" para um registro de bloqueio.

  3. Usando o Terracotta, um software de servidor de código aberto que auxilia no dimensionamento, mas usa um modelo de hub e spoke.

  4. Usando o EHCache para replicação síncrona dos meus "bloqueios" na memória

Não consigo imaginar que sou a única pessoa que já teve esse tipo de problema. Como você resolveu isso? Você preparou algo internamente ou tem um produto de terceiros favorito?

Talip Ozturk:

convém considerar o uso de bloqueios distribuídos Hazelcast . Super leve e fácil.

java.util.concurrent.locks.Lock lock = Hazelcast.getLock ("mymonitor");
lock.lock ();
try {
// do your stuff
}finally {
   lock.unlock();
}

Hazelcast - Fila distribuída, Mapa, Conjunto, Lista, Bloqueio

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Concorrência de assinatura do Azure Service Bus Topic

AMQPlib nodejs concorrência de tarefas do consumidor

Node.js, coflitos de transação em PostgreSQL, controle de concorrência otimista e novas tentativas de transação

Controle de zoom do folheto +/- Aparência

JPA questão de concorrência "No lançamento do lote ainda continha declarações JDBC"

Como o maxConcurrentOperationCount do NSURLSession delegateQueue afeta a concorrência de tarefas

qual é o significado da palavra "Distribuído" em "Sistema de Controle de Versão Distribuída" como Git?

Concorrência de estresse de soquete Python

Mapas Go falham no teste de concorrência

Go: Concorrência e ordem de prioridade

Go: Concorrência e ordem de prioridade

Mapas Go falham no teste de concorrência

Concorrência de leitura e gravação

Concorrência do ouvinte Spring-kafka

Referência de id xml de controle personalizado do Android

Como executar alguns conjuntos de teste com concorrência e resto sem concorrência usando TestCafe?

Controle a transparência do mais suave e intervalo de confiança

Transparência do controle deslizante da caixa de imagem

Controle de gráfico - aparência do radar ChartType

Visual Basic: controle de rótulo de referência da variável derivada do controle de caixa de seleção

Concorrência de integração de Spring de ServiceActivators

Inscreva-se em qualquer evento roteado de controle filho do WPF sem uma instância de um controle filho

Concorrência Java com objetos armazenados no banco de dados

Concorrência na prática Erro de buffer circular?

Concorrência e estruturas de dados simultâneas

EF CORE Concorrência otimista sem carimbo de data / hora

Javax Transformer falha em ambiente de alta concorrência

Spring Cloud Stream - Solace PubSub + - Concorrência de consumidores

Concorrência CoreData e objetos de liberação