SlideShare a Scribd company logo
1 of 67
Arquitetura de Software
       Concorrência


André Faria Gomes   @andrefaria
Concorrência é
um dos aspectos
mais difíceis do
desenvolvimento
de software
 @martinfowler
Threads em servidores
               Transações
                        Arquivos
Leitura Inconsistente
Vamos contar uma estória...
1. China abre o ticket #1456 no Pronto e começa a
atualizar a descrição do ticket.

2. Segundos depois Rodrigo entra no
ticket, e altera.
3.China salva
4. Rodrigo salva
Moral da Estória?
     As alterações de
     China foram perdidas
     para todo o sempre...
Liveness
A quantidade de
atividade concorrente
que pode acontecer
Quando mais
liveness menos
safety
(correctness)
Contextos de Execução
Request
Corresponde a uma única chamada do
mundo externo para onde opcionalmente
uma resposta é enviada.

O servidor processa a resposta e o cliente aguarda.
Alguns protocolos permitem interromper a request.
Clients podem gerar outras request interfiram em anteriores.
Request
Corresponde a uma única chamada do
mundo externo para onde opcionalmente
uma resposta é enviada.

O servidor processa a resposta e o cliente aguarda.
Alguns protocolos permitem interromper a request.
Clients podem gerar outras request interfiram em anteriores.
Session
   É um interação de longa duração entre o
   cliente e o servidor, uma série de requests.

Normalmente associada a login e loguout
Comum na Web, em Bancos de Dados, etc...
Session
   É um interação de longa duração entre o
   cliente e o servidor, uma série de requests.

Normalmente associada a login e loguout
Comum na Web, em Bancos de Dados, etc...
Processo
 Geralmente um contexto de
 execução mais pesado que oferece
 isolamento para os dados que
 estão sendo trabalhados.

Oferece isolamento de memória e dados, por isso, há pouca
preocupação com concorrência nesse nível.
Processo
 Geralmente um contexto de
 execução mais pesado que oferece
 isolamento para os dados que
 estão sendo trabalhados.

Oferece isolamento de memória e dados, por isso, há pouca
preocupação com concorrência nesse nível.
Thread
     Um agente leve, pode haver
     múltiplas threads por processo.

Com threads é possível suportar n requests em por processo.
Melhor utilização de recursos, são mais “baratas” que processos.
Geralmente compartilham memória e dados.
Alguns ambientes oferecem threads com isolamento.
Thread
     Um agente leve, pode haver
     múltiplas threads por processo.

Com threads é possível suportar n requests em por processo.
Melhor utilização de recursos, são mais “baratas” que processos.
Geralmente compartilham memória e dados.
Alguns ambientes oferecem threads com isolamento.
Transação
Transações unem diversas requests que
precisam ser tratadas como uma única


Usuários
Integração
Bancos de Dados
Lindando com a
Concorrência
Problemas
acontecem quando
mais de um agente
ativo tem acesso
aos mesmos
recursos.
Isolamento
  Dividir os dados para que cada parte,
  seja usada apenas por um agente ativo.
Exemplo de Isolamento
O sistema operacional
reservando uma área de
memória exclusiva para cada
processo
Isolamento
A abordagem é também
usada para arquivos. Se
Douglas abre o arquivo X
ele fica bloqueado e
ninguém mais pode editá-
lo (talvez nem abrí-lo).
Imutabilidade
Só há problemas de
concorrência quando os
dados podem ser
alterados.


Por isso é importante que
tudo que possa ser
imutável, seja imutável.
Controle de Concorrência
      Otimista vs Pessimista
Optimistic Lock
Detecção de Conflito


       Todos editam ao mesmo
       tempo, o primeiro salva sem
       problemas, os próximos não
       conseguem porque há conflito
Pessmistic Lock
Prevenção de Conflito
Somente 1 editar por vez
Qual a Melhor abordagem?
Depende! Nenhuma é livre de problemas!
Lock de Leitura
    Shared Lock

evita write lock,
permite mais read
locks
Lock de Escrita
    Exclusive Lock


ninguém mais
pode bloquear
Deadlocks
 Um problema da abordagem pessimista
Deadlocks
Imagine isso com
30 agentes
envolvidos...
Deadlock Detection
Um software que detecta deadlocks e então
escolhe uma vítima para eliminar o deadlock
Deadlock
 Detection

É difícil de detectar


Prejudica vítimas
Timeouts
Mata se demorar mais
do que x segundos
Prevençãõ
Detecção e Timeouts
são formas de lidar
com dead locks, mas
como previnir?
Tudo no início
Fazer todos os seus
locks no ínicio de forma
a não começar o
trabalho caso algo não
esteja disponível.
Transações
 É um trabalho sequencial com pontos bem
 definidos de início e fim, que acontece de
 forma tudo ou nada.
Comprar uma Cerveja
Sacar Dinheiro
Pagamento com Cartão
ACID
Atômicidade
      Tudo ou Nada
Consistência
               Regras de integridade
               dos dados são
               asseguradas, ou seja, as
               transações não podem
               quebrar as regras
Isolamento
O resultado de
uma certa
transação não deve
ser visível para
outras transações
em aberto até estar
completa.
O resultado
comitado deve
ser permanente

 Durabilidade
transações devem ser
  Pequenas
Quanto menores forem melhor!
Quanto ocorrem em multiplas requests

Long Transactions
Request Transactions
     Começa e termina “junto” com a request
Late Transactions
   Começa o mais tarde possível

                            Aumenta o risco de
                            leituras incosistentes
Lock Escalation
 Você pode acabar gerando mais locks do
 pode gerênciar...
Quando o banco de dados tem muitos
locks em linhas, acaba precisando
bloquear a tabela toda

Cuidado com
Layer Supertype
Níveis de Isolamento
Serializável
   O nível mais forte de isolamento
Mike está   Bob está
contando    incluindo 5
arquivos    arquivos
Garante um resultado sempre correto,
embora possa ser anterior ou posterior a
alteração
Não garante que toda vez que você
executar o mesmo cenário terá o mesmo
resultado
Repeatable Read
      permite fantasmas

 Você executa duas vezes a mesma
 consulta e recebe um número
 diferente de registros em cada
 uma delas.



     não gerencia
      range-locks
Read Committed
     permite leituras não repetíveis


A transação lê duas vezes o
mesmo dado, e em cada um
das vezes recebe um resultado
diferente.



 não gerencia range-locks
Read Uncommited
           permite leitura suja

                   Você consegue
                   ler dados de
                   transações que
                   ainda não
                   foram
                   comitadas
Equilíbrio entre
Liveness e Correctness
Dirty      Nonrepeatable   Phantom
Isolamento
                 Read           Read          Read

   Read
                Possível       Possível      Possível
uncommitted

   Read
               Impossível      Possível      Possível
 committed

Repeatable
               Impossível    Impossível      Possível
   read

Serializable   Impossível    Impossível     Impossível
Referências

      http://
      www.thedeveloperday.com/
      domain-model-logic-patterns/


      http://martinfowler.com/
      eaaCatalog/
http://en.wikipedia.org/wiki/
Isolation_(database_systems)
Obrigado
     @andrefaria

More Related Content

Similar to Arquitetura de Software - Concorrência

Programação Paralela - Threads
Programação Paralela - ThreadsProgramação Paralela - Threads
Programação Paralela - ThreadsGlaucio Scheibel
 
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....tdc-globalcode
 
Modelos de Distribuição e Consistência
Modelos de Distribuição e ConsistênciaModelos de Distribuição e Consistência
Modelos de Distribuição e ConsistênciaJoão Farias
 
Forefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamenteForefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamenteUilson Souza
 
Princípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e AlémPrincípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e AlémLocaweb
 
12/03/2010 - Sistemas Operacionais Aula3
12/03/2010 - Sistemas Operacionais Aula312/03/2010 - Sistemas Operacionais Aula3
12/03/2010 - Sistemas Operacionais Aula3Universal.org.mx
 
Fazendo uma manada de elefantes passar por baixo da porta
Fazendo uma manada de elefantes passar por baixo da portaFazendo uma manada de elefantes passar por baixo da porta
Fazendo uma manada de elefantes passar por baixo da portaFabio Telles Rodriguez
 
Programação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaProgramação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaFabio Moura Pereira
 
Arquitetura de Software - Performance, Layers e Domain Layer
Arquitetura de Software - Performance, Layers e Domain LayerArquitetura de Software - Performance, Layers e Domain Layer
Arquitetura de Software - Performance, Layers e Domain LayerAndré Faria Gomes
 
[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows AzureVitor Tomaz
 
Segurança em servidores Linux
Segurança em servidores LinuxSegurança em servidores Linux
Segurança em servidores LinuxImpacta Eventos
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaHenrique Lima
 

Similar to Arquitetura de Software - Concorrência (20)

Programação Paralela - Threads
Programação Paralela - ThreadsProgramação Paralela - Threads
Programação Paralela - Threads
 
Testes - Para que?
Testes - Para que?Testes - Para que?
Testes - Para que?
 
Sistemas operacionais - aula8
Sistemas operacionais - aula8Sistemas operacionais - aula8
Sistemas operacionais - aula8
 
Gerenciamento memoria
Gerenciamento memoriaGerenciamento memoria
Gerenciamento memoria
 
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
 
Modelos de Distribuição e Consistência
Modelos de Distribuição e ConsistênciaModelos de Distribuição e Consistência
Modelos de Distribuição e Consistência
 
Forefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamenteForefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamente
 
Firewall
FirewallFirewall
Firewall
 
Princípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e AlémPrincípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e Além
 
Portifolio
PortifolioPortifolio
Portifolio
 
12/03/2010 - Sistemas Operacionais Aula3
12/03/2010 - Sistemas Operacionais Aula312/03/2010 - Sistemas Operacionais Aula3
12/03/2010 - Sistemas Operacionais Aula3
 
Banco de Dados 2: Controle de Concorrência
Banco de Dados 2: Controle de ConcorrênciaBanco de Dados 2: Controle de Concorrência
Banco de Dados 2: Controle de Concorrência
 
Fazendo uma manada de elefantes passar por baixo da porta
Fazendo uma manada de elefantes passar por baixo da portaFazendo uma manada de elefantes passar por baixo da porta
Fazendo uma manada de elefantes passar por baixo da porta
 
Programação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaProgramação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e Concorrência
 
Arquitetura de Software - Performance, Layers e Domain Layer
Arquitetura de Software - Performance, Layers e Domain LayerArquitetura de Software - Performance, Layers e Domain Layer
Arquitetura de Software - Performance, Layers e Domain Layer
 
[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure
 
Portfolio de serviços
Portfolio de serviçosPortfolio de serviços
Portfolio de serviços
 
Segurança em servidores Linux
Segurança em servidores LinuxSegurança em servidores Linux
Segurança em servidores Linux
 
Curso segurança na internet
Curso segurança na internetCurso segurança na internet
Curso segurança na internet
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinada
 

More from André Faria Gomes

Meetup Escale - Gestão para Equipes de Alta Performance
Meetup Escale - Gestão para Equipes de Alta PerformanceMeetup Escale - Gestão para Equipes de Alta Performance
Meetup Escale - Gestão para Equipes de Alta PerformanceAndré Faria Gomes
 
Protagonistas da inovação - Como criar e gerir os negócios do futuro
Protagonistas da inovação - Como criar e gerir os negócios do futuroProtagonistas da inovação - Como criar e gerir os negócios do futuro
Protagonistas da inovação - Como criar e gerir os negócios do futuroAndré Faria Gomes
 
A Mobilidade como Propulsor da Transformação Digital
A Mobilidade como Propulsor da Transformação DigitalA Mobilidade como Propulsor da Transformação Digital
A Mobilidade como Propulsor da Transformação DigitalAndré Faria Gomes
 
Além da Agilidade 2019 - KickOff Wow
Além da Agilidade 2019 - KickOff WowAlém da Agilidade 2019 - KickOff Wow
Além da Agilidade 2019 - KickOff WowAndré Faria Gomes
 
Modern systems architectures: Uber, Lyft, Cabify
Modern systems architectures: Uber, Lyft, CabifyModern systems architectures: Uber, Lyft, Cabify
Modern systems architectures: Uber, Lyft, CabifyAndré Faria Gomes
 
Principles and Radical Transparency - Lessons Learned from Ray Dalio
Principles and Radical Transparency - Lessons Learned from Ray DalioPrinciples and Radical Transparency - Lessons Learned from Ray Dalio
Principles and Radical Transparency - Lessons Learned from Ray DalioAndré Faria Gomes
 
Bluesoft @ AWS re:Invent 2017 + AWS 101
Bluesoft @ AWS re:Invent 2017 + AWS 101Bluesoft @ AWS re:Invent 2017 + AWS 101
Bluesoft @ AWS re:Invent 2017 + AWS 101André Faria Gomes
 
Boas Práticas da Rede Supermercadista Wegmans
Boas Práticas da Rede Supermercadista WegmansBoas Práticas da Rede Supermercadista Wegmans
Boas Práticas da Rede Supermercadista WegmansAndré Faria Gomes
 
Boas Práticas para Supermercadistas inspiradas no Whole Foods, Sprouts Marke...
Boas Práticas para Supermercadistas inspiradas no Whole Foods, Sprouts Marke...Boas Práticas para Supermercadistas inspiradas no Whole Foods, Sprouts Marke...
Boas Práticas para Supermercadistas inspiradas no Whole Foods, Sprouts Marke...André Faria Gomes
 
Change management - Kotter’s eight-step model
Change management - Kotter’s eight-step model Change management - Kotter’s eight-step model
Change management - Kotter’s eight-step model André Faria Gomes
 
Palestra na Uninove sobre Agilidade
Palestra na Uninove sobre AgilidadePalestra na Uninove sobre Agilidade
Palestra na Uninove sobre AgilidadeAndré Faria Gomes
 
What happened to Google Reader?
What happened to Google Reader?What happened to Google Reader?
What happened to Google Reader?André Faria Gomes
 
Gestão Ágil com Management 3.0
Gestão Ágil com Management 3.0Gestão Ágil com Management 3.0
Gestão Ágil com Management 3.0André Faria Gomes
 
Lições aprendidas em 10 anos de agilidade
Lições aprendidas em 10 anos de agilidadeLições aprendidas em 10 anos de agilidade
Lições aprendidas em 10 anos de agilidadeAndré Faria Gomes
 
Os 7 hábitos das pessoas altamente eficazes
Os 7 hábitos das pessoas altamente eficazesOs 7 hábitos das pessoas altamente eficazes
Os 7 hábitos das pessoas altamente eficazesAndré Faria Gomes
 
Objetividade: A Virtude Esquecida
Objetividade: A Virtude EsquecidaObjetividade: A Virtude Esquecida
Objetividade: A Virtude EsquecidaAndré Faria Gomes
 

More from André Faria Gomes (20)

Meetup Escale - Gestão para Equipes de Alta Performance
Meetup Escale - Gestão para Equipes de Alta PerformanceMeetup Escale - Gestão para Equipes de Alta Performance
Meetup Escale - Gestão para Equipes de Alta Performance
 
Protagonistas da inovação - Como criar e gerir os negócios do futuro
Protagonistas da inovação - Como criar e gerir os negócios do futuroProtagonistas da inovação - Como criar e gerir os negócios do futuro
Protagonistas da inovação - Como criar e gerir os negócios do futuro
 
A Mobilidade como Propulsor da Transformação Digital
A Mobilidade como Propulsor da Transformação DigitalA Mobilidade como Propulsor da Transformação Digital
A Mobilidade como Propulsor da Transformação Digital
 
Além da Agilidade 2019 - KickOff Wow
Além da Agilidade 2019 - KickOff WowAlém da Agilidade 2019 - KickOff Wow
Além da Agilidade 2019 - KickOff Wow
 
Modern systems architectures: Uber, Lyft, Cabify
Modern systems architectures: Uber, Lyft, CabifyModern systems architectures: Uber, Lyft, Cabify
Modern systems architectures: Uber, Lyft, Cabify
 
Breaking the monolith
Breaking the monolithBreaking the monolith
Breaking the monolith
 
Agilidade - APAS
Agilidade - APASAgilidade - APAS
Agilidade - APAS
 
Principles and Radical Transparency - Lessons Learned from Ray Dalio
Principles and Radical Transparency - Lessons Learned from Ray DalioPrinciples and Radical Transparency - Lessons Learned from Ray Dalio
Principles and Radical Transparency - Lessons Learned from Ray Dalio
 
Bluesoft @ AWS re:Invent 2017 + AWS 101
Bluesoft @ AWS re:Invent 2017 + AWS 101Bluesoft @ AWS re:Invent 2017 + AWS 101
Bluesoft @ AWS re:Invent 2017 + AWS 101
 
Boas Práticas da Rede Supermercadista Wegmans
Boas Práticas da Rede Supermercadista WegmansBoas Práticas da Rede Supermercadista Wegmans
Boas Práticas da Rede Supermercadista Wegmans
 
Boas Práticas para Supermercadistas inspiradas no Whole Foods, Sprouts Marke...
Boas Práticas para Supermercadistas inspiradas no Whole Foods, Sprouts Marke...Boas Práticas para Supermercadistas inspiradas no Whole Foods, Sprouts Marke...
Boas Práticas para Supermercadistas inspiradas no Whole Foods, Sprouts Marke...
 
Change management - Kotter’s eight-step model
Change management - Kotter’s eight-step model Change management - Kotter’s eight-step model
Change management - Kotter’s eight-step model
 
Palestra na Uninove sobre Agilidade
Palestra na Uninove sobre AgilidadePalestra na Uninove sobre Agilidade
Palestra na Uninove sobre Agilidade
 
Pensando Rápido e Devagar
Pensando Rápido e DevagarPensando Rápido e Devagar
Pensando Rápido e Devagar
 
What happened to Google Reader?
What happened to Google Reader?What happened to Google Reader?
What happened to Google Reader?
 
Gestão Ágil com Management 3.0
Gestão Ágil com Management 3.0Gestão Ágil com Management 3.0
Gestão Ágil com Management 3.0
 
Lições aprendidas em 10 anos de agilidade
Lições aprendidas em 10 anos de agilidadeLições aprendidas em 10 anos de agilidade
Lições aprendidas em 10 anos de agilidade
 
Os 7 hábitos das pessoas altamente eficazes
Os 7 hábitos das pessoas altamente eficazesOs 7 hábitos das pessoas altamente eficazes
Os 7 hábitos das pessoas altamente eficazes
 
Objetividade: A Virtude Esquecida
Objetividade: A Virtude EsquecidaObjetividade: A Virtude Esquecida
Objetividade: A Virtude Esquecida
 
Bematech IFRS
Bematech IFRSBematech IFRS
Bematech IFRS
 

Arquitetura de Software - Concorrência