Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Modelagem de Concorrência em Sistemas Distribuídos

Jessilyneh
October 26, 2023

Modelagem de Concorrência em Sistemas Distribuídos

Vamos explorar os tradeoffs de sistemas distribuídos, estratégias para mitigar race conditions, garantir consistência de dados e a escalabilidade em ambientes distribuídos. Também discutiremos sobre algoritmos de coordenação, sincronização e padrões de design que permitem construir sistemas altamente robustos e resilientes

Jessilyneh

October 26, 2023
Tweet

More Decks by Jessilyneh

Other Decks in Technology

Transcript

  1. Sistemas distribuídos in a nutshell @jessilyneh MODELAGEM DE CONCORRENCIA EM

    SISTEMAS DISTRIBUIDOS São compostos por vários computadores independentes conectados por uma rede e equipados com um sistema de software distribuído. Esses sistemas permitem que os usuários compartilhem recursos, como hardware, software ou dados, e fornecem maior poder de processamento, confiabilidade e disponibilidade do que os computadores independentes. https://www.atlassian.com/br/microservices/microservices-architecture/distributed-architecture Sari, Arif & Akkaya, Murat. (2015). Fault Tolerance Mechanisms in Distributed Systems. International Journal of Communications, Network and System Sciences. 8. 471-482. 10.4236/ijcns.2015.812042.
  2. Empresas com arquiteturas distribuídas @jessilyneh MODELAGEM DE CONCORRENCIA EM SISTEMAS

    DISTRIBUIDOS Netflix: Serviço de streaming de vídeo que utiliza sistemas distribuídos para fornecer conteúdo aos usuários Google: Empresa de tecnologia que utiliza sistemas distribuídos para fornecer serviços de busca, e-mail, armazenamento em nuvem e muito mais Airbnb: Serviço de hospedagem que utiliza sistemas distribuídos para gerenciar reservas e pagamentos Compartilhamento de recursos, Processamento simultâneo, Escalonamento, Detecção de erros e Transparência https://www.atlassian.com/br/microservices/microservices-architecture/distributed-architecture
  3. Sistemas Distribuídos @jessilyneh MODELAGEM DE CONCORRENCIA EM SISTEMAS DISTRIBUIDOS Sistemas

    Operacionais Distribuídos: Exemplo: Linux Cluster O Linux Cluster é uma implementação de sistema operacional distribuído que permite que vários computadores rodando Linux atuem juntos como um único sistema. É amplamente utilizado em clusters de servidores para melhorar a escalabilidade e a disponibilidade. https://www.linux.org/threads/linux-cluster-%E2%80%93-basics.35264/
  4. Sistemas Distribuídos @jessilyneh MODELAGEM DE CONCORRENCIA EM SISTEMAS DISTRIBUIDOS Sistemas

    de Comunicação Distribuída: Exemplo: gRPC gRPC é um framework de código aberto desenvolvido pelo Google que facilita a comunicação entre serviços distribuídos usando RPC (Chamada de Procedimento Remoto). Ele permite que aplicativos clientes e servidores se comuniquem de maneira eficiente e segura. https://grpc.io/docs/what-is-grpc/introduction/
  5. Sistemas Distribuídos @jessilyneh MODELAGEM DE CONCORRENCIA EM SISTEMAS DISTRIBUIDOS Orquestração

    e Gerenciamento de Serviços: Exemplo: Kubernetes Kubernetes é uma plataforma de orquestração de contêineres de código aberto que gerencia a implantação, escalabilidade e operações de contêineres em ambientes distribuídos. Ele permite o gerenciamento eficiente de aplicativos distribuídos em contêineres. https://avinetworks.com/glossary/kubernetes-architecture/
  6. Concorrência @jessilyneh MODELAGEM DE CONCORRENCIA EM SISTEMAS DISTRIBUIDOS Múltiplas partes

    de um sistema (como threads, processos ou componentes) tentam acessar, modificar ou compartilhar recursos compartilhados ao mesmo tempo. https://avinetworks.com/glossary/kubernetes-architecture/ Sari, Arif & Akkaya, Murat. (2015). Fault Tolerance Mechanisms in Distributed Systems. International Journal of Communications, Network and System Sciences. 8. 471-482. 10.4236/ijcns.2015.812042.
  7. Problemas @jessilyneh MODELAGEM DE CONCORRENCIA EM SISTEMAS DISTRIBUIDOS Race Condition

    Deadlock Starvation Anomalias de Consistencia de dados Write Skew Acesso Concorrente a Recursos Compartilhados Problemas de memória Compartilhada https://avinetworks.com/glossary/kubernetes-architecture/ Em resumo, problemas de acesso a recursos e sincronização
  8. Técnicas de Modelagem de Concorrência @jessilyneh MODELAGEM DE CONCORRENCIA EM

    SISTEMAS DISTRIBUIDOS Uso de mecanismos para bloquear ou não o acesso a componentes. Pode ser Controle de concorrência pessimista ou otimista. Uso de protocolos de coordenação para garantir que os componentes se comuniquem e coordenem suas ações de forma adequada Uso de transações distribuídas para garantir que as operações em diferentes componentes sejam executadas de forma atômica e consistente Replicação de dados em diferentes componentes para garantir que os dados estejam disponíveis em caso de falha de um componente
  9. Causas de problemas de concorrências @jessilyneh MODELAGEM DE CONCORRENCIA EM

    SISTEMAS DISTRIBUIDOS Condição de Corrida (Race Condition): Uma condição de corrida ocorre quando duas ou mais partes do sistema tentam acessar ou modificar um recurso compartilhado ao mesmo tempo. https://www.baeldung.com/cs/race-conditions
  10. Deadlocks @jessilyneh MODELAGEM DE CONCORRENCIA EM SISTEMAS DISTRIBUIDOS Ocorre quando

    dois threads bloqueiam uma variável diferente ao mesmo tempo e tentam bloquear a variável que o outro thread já bloqueado. Como resultado, cada thread para de executar e aguarda o outro thread liberar a variável. Como cada thread está segurando a variável que o outro thread deseja, nada ocorre e os threads permanecem com deadlock. Exclusão mútua Hold and Wait No preemption Circular wait Casos de Deadlocks: https://learn.microsoft.com/pt-br/troubleshoot/developer/visualstudio/visual- basic/language-compilers/race-conditions-deadlocks
  11. Controle de concorrência pessimista @jessilyneh MODELAGEM DE CONCORRENCIA EM SISTEMAS

    DISTRIBUIDOS Quando um usuário executa uma ação que provoca um bloqueio, outros usuários não podem realizar ações que entraria em conflito com o bloqueio até que o proprietário de bloqueio finalize-o https://marcobaccaro.wordpress.com/2011/07/21/concorrencia-otimista-e-pessimista/
  12. Controle de concorrência otimista @jessilyneh MODELAGEM DE CONCORRENCIA EM SISTEMAS

    DISTRIBUIDOS Assume que conflitos de concorrência são raros e, portanto, não utiliza bloqueios para controlar o acesso a recursos compartilhados. Em vez disso, essa abordagem permite que vários componentes acessem um recurso compartilhado ao mesmo tempo e, em seguida, verifica se houve conflitos de concorrência após o acesso. Se houver conflitos, a abordagem otimista desfaz as operações e tenta novamente. https://marcobaccaro.wordpress.com/2011/07/21/concorrencia-otimista-e-pessimista/
  13. Otimista Pessimista Abordagem Conflitos sao raros Conflitos sâo comuns Bloqueio

    Não há bloqueio de operações de escrita e leitura Bloqueia recursos durante as operações de leitura e escrita Detecção de conflitos no momento da confirmação ou da atualização de um recurso compartilhado. no momento em que uma transação tenta acessar um recurso bloqueado. Resolução de conflitos Desfazendo as alterações de uma das transações envolvidas ou adiando a confirmação da transação até que o conflito seja resolvido. Os conflitos são resolvidos bloqueando as transações concorrentes até que a transação atual termine. Concorrência otimista e pessimista @jessilyneh MODELAGEM DE CONCORRENCIA EM SISTEMAS DISTRIBUIDOS https://marcobaccaro.wordpress.com/2011/07/21/concorrencia-otimista-e-pessimista/
  14. consistência de dados em ambientes distribuídos @jessilyneh MODELAGEM DE CONCORRENCIA

    EM SISTEMAS DISTRIBUIDOS Garantir que os dados permaneçam em um estado coerente e previsível, mesmo quando várias partes do sistema estão operando de forma concorrente e em diferentes localizações geográficas Consistência Forte (Strong Consistency) Consistência Causal (Causal Consistency) Consistência de Leitura Única (Read Your Writes Consistency) Consistência Eventual (Eventual Consistency) Modelos de Consistência: 1. 2. 3. 4.
  15. Conceito ACID @jessilyneh MODELAGEM DE CONCORRENCIA EM SISTEMAS DISTRIBUIDOS Atomicidade:

    Se uma parte da transação falhar, todas as operações devem ser revertidas. Consistência: Uma transação leve o sistema de um estado consistente para outro estado consistente. Isolamento: Transações sejam isoladas umas das outras e que os efeitos de uma transação não sejam visíveis para outras transações até que seja concluída. Durabilidade: Uma vez que uma transação seja confirmada, seus efeitos permaneçam duradouros e não sejam perdidos, mesmo em caso de falha do sistema. 1. 2. 3. 4.
  16. Escalabilidade em sistemas distribuídos @jessilyneh MODELAGEM DE CONCORRENCIA EM SISTEMAS

    DISTRIBUIDOS Aumentar a capacidade do sistema para atender ao aumento de usuários, dados ou demanda de processamento sem comprometer o desempenho. Desafios: Concorrência, gerenciamento de dados, comunicação distribuida, sincronização Livro: The Art of Scalability: Scalable Web Architecture, Processes, and Organizations for the Modern Enterprise
  17. Algoritmos para sistemas distribuidos @jessilyneh MODELAGEM DE CONCORRENCIA EM SISTEMAS

    DISTRIBUIDOS Relógios de Lamport Relógios Vetoriais Peterson Raft ZooKeeper Bloqueio Distribuído Relógios Lógicos: Algoritmos de Coordenação: Algoritmos de Bloqueio: Três processos, cada um com seu próprio relógio. Os relógios “correm” a taxas diferentes. O algoritmo de Lamport corrige os relógios (relógios lógicos). https://slideplayer.com.br/slide/361971/
  18. Algoritmo de Coordenação @jessilyneh MODELAGEM DE CONCORRENCIA EM SISTEMAS DISTRIBUIDOS

    diferentes partes do sistema cooperem, coordenem e tomem decisões conjuntas de maneira eficiente. Um exemplo clássico de algoritmo de coordenação é o "Algoritmo de Exclusão Mútua de Peterson", que permite que dois processos cooperem para acessar um recurso compartilhado exclusivamente, garantindo que não o acessem simultaneamente. https://pt.wikipedia.org/wiki/Algoritmo_de_Peterson
  19. Consenso distribuido @jessilyneh MODELAGEM DE CONCORRENCIA EM SISTEMAS DISTRIBUIDOS Problema

    fundamental em sistemas distribuídos. Envolve a tarefa de um conjunto de processos chegarem a um acordo com relação a um valor ou decisão em situações em que a comunicação entre eles pode ser assíncrona e sujeita a falhas. O "Paxos" é um algoritmo de consenso distribuído amplamente conhecido, e o "Raft" é outra alternativa popular que é mais fácil de entender e implementar. https://sd.arquiteturadesoftware.online/entendendo-o-protocolo-raft-capitulo-1-v-1-0/ Raft tem três componentes principais: líder, seguidores e candidatos. Quando um nó se torna um candidato, ele inicia uma eleição e solicita votos dos outros nós. Se um candidato recebe votos da maioria dos nós, ele se torna o líder.
  20. Algoritmo de sincronização @jessilyneh MODELAGEM DE CONCORRENCIA EM SISTEMAS DISTRIBUIDOS

    Protocolo Two-Phase Commit (2PC) Protocolo Three-Phase Commit (3PC) Network Time Protocol (NTP) Replicação de Dados Protocolos de Comunicação: Sincronização de Relógio: Algoritmos de Replicação: O NTP é usado para sincronizar relógios em sistemas distribuídos, garantindo que todos os nós tenham uma noção comum do tempo. https://slideplayer.com.br/slide/361971/
  21. Trade-offs de Modelagem de Concorrência @jessilyneh MODELAGEM DE CONCORRENCIA EM

    SISTEMAS DISTRIBUIDOS Complexidade: Devido à natureza distribuída do sistema e à necessidade de garantir a consistência dos dados compartilhados Desempenho: Especialmente se o controle pessimista for usado, pois pode levar a bloqueios desnecessários Consistência: Especialmente se o controle otimista for usado, pois pode levar a conflitos de dados Escalabilidade: Pode limitar a capacidade do sistema de lidar com um grande número de usuários simultâneos Tolerância a falhas: Pode tornar mais difícil detectar e corrigir falhas
  22. padrões de design para construir sistemas robustos e resilientes @jessilyneh

    MODELAGEM DE CONCORRENCIA EM SISTEMAS DISTRIBUIDOS Alguns exemplos de padrões de design incluem Singleton, Fábrica Abstrata, Observador, Injeção de Dependência e OCP (Princípio Aberto/Fechado), que ajudam a melhorar a estrutura do sistema e promover a coesão e a baixa acoplamento entre os componentes https://dev.to/indiamaraenes/principios-de-arquitetura-de-software- design-de-sistemas-escalaveis-e-flexiveis-885
  23. Eu sou a Jess Sou desenvolvedora de Software há 8

    anos. Trabalho na área faz 6 anos. I .T. Architect II na F1rst (Grupo Santander) Tech Lead na ONG Lacrei Saúde Instrutora de Javascript na Linux Tips Organizadora na comunidade Nerdzão Co-organizadora da conferencia CityJS no Brasil MODELAGEM DE CONCORRENCIA EM SISTEMAS DISTRIBUIDOS @jessilyneh