BT

Novidades O InfoQ vem desenvolvendo uma série de novas funcionalidades para melhorar sua experiência com o site. Confira!

Armazenamento distribuído e concorrência em sistemas

| por Andrew Morgan Seguir 0 Seguidores , traduzido por Mário Nunes Lima Seguir 1 Seguidores em 21 set 2017. Tempo estimado de leitura: 2 minutos |

No QCon New York 2017, a engenheira de software da Samsara Kavya Joshi, fez uma detalhada apresentação sobre o princípio do happens-before.

Ela explicou como a ferramenta de armazenamento de key-value distribuídos, Riak, utiliza relógios vetoriais para estabelecer causalidade através dos nós. Ela também analisou a concorrência primitiva em Go, explicando como ele e os happens-before das restrições são expressados naturalmente.

Joshi explicou que, em sistemas modernos, a computação geralmente é dividida em diferentes nós ou threads para escalar, o que pode levar às corridas de dados:

"Uma corrida de dados é quando duas threads acessam simultaneamente uma localização de memória compartilhada e pelo menos um acesso é uma gravação."

Como as corridas de dados tendem a ser não-deterministas, ou têm consequências indefinidas, Joshi explicou como elas podem ser particularmente difíceis de depurar. Ela afirmou que a chave para lidar com elas é entender o happens-before.

Essencialmente, happens-before é um meio para determinar a ordem dos eventos em um sistema paralelo, de modo que X <Y se:

  1. X e Y aconteceram no mesmo ator. Isso ocorre porque o pedido em um único nó ou segmento é garantido para ser seqüencial.
  2. Eles são um par de sincronização. Por exemplo, se algo for obtido de um nó e atualizado em outro, ou estiver bloqueado com um mutex.
  3. Implícito a partir da transitividade. Por exemplo, um evento intermediário, como X < Z < Y, pode provar a ordem.

Se nenhum desses critérios forem atendidos, os eventos devem ser simultâneos, o que significa que deve haver algum tipo de resolução de conflito. Joshi então delineou três estratégias para lidar com essa situação:

  1. Última gravação ganha (o evento com timestamp mais alto). Isso é bom se você tiver dados imutáveis ​​como um cache, mas pode levar à perda de dados.
  2. Mesclar automaticamente os dados.
  3. Retornar conflitos para a aplicação para lidar com isso.

Tomando o Riak como exemplo, um armazenamento de key-value distribuídos eventualmente consistente, Joshi mostrou como ela faz uso de um relógio vetorial para estabelecer um happens-before. Este é essencialmente um relógio lógico armazenado em cada nó, que pode ser comparado por meio de um máximo de pares para suas contrapartes para determinar se os eventos são concorrentes ou não. Para poder comparar os relógios, os clientes da Riak passam por um objeto de contexto causal.

Joshi também apresentou sobre a concorrência em Go, focando principalmente em canais em comparação com mutexes como um meio seguro para compartilhar dados entre goroutines. Ela foi capaz de mostrar isso usando canais: o código poderia ser simplificado e ser mais fácil de raciocinar. Ela também destacou que sua semântica de wait-until-empty remove a necessidade de padrões como wait-and-notify, explicando:

"Os canais permitem e forçam o usuário a expressar happens-before das restrições naturalmente " .

Para concluir, Joshi ressalta que, embora um armazenamento de key-value como a Riak e uma linguagem como Go sejam diferentes, ambos tomam abordagens semelhantes para resolver a concorrência, nomeando as corridas de dados e a resolução de conflitos. Ela também aponta que, enquanto happens-before é uma idéia antiga, formulada em 1978, é um princípio importante que ainda é aplicável aos sistemas simultâneos hoje.

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Faça seu login para melhorar sua experiência com o InfoQ e ter acesso a funcionalidades exclusivas


Esqueci minha senha

Follow

Siga seus tópicos e editores favoritos

Acompanhe e seja notificados sobre as mais importantes novidades do mundo do desenvolvimento de software.

Like

Mais interação, mais personalização

Crie seu próprio feed de novidades escolhendo os tópicos e pessoas que você gostaria de acompanhar.

Notifications

Fique por dentro das novidades!

Configure as notificações e acompanhe as novidades relacionada a tópicos, conteúdos e pessoas de seu interesse

BT