Cache, Concorrência e
Sincronização na Web.
twitter: @thiagorondon - email: thiago@aware.com.br
Cache, Concorrência e
Sincronização na Web.
twitter: @thiagorondon - email: thiago@aware.com.br
Agenda - Programação
     assíncrona
O Jantar dos filósofos.
Semaphoros e Mutex
Supervisor.
Hierarquia
Deadlock e
 Livelock
   Impasse
Starvation
   já era...
Fumantes de cigarro.
Conjunto de
semaphoros.
O documento ‘It’s the
   latency, stupid’.
Criar mais bandwidth é
       trivial.
Com uma latência
ruim, você esta perdido.
Dispositivos para
consumidores são
    péssimos.
Qual a diferença entre
o boing 737 e o 747 ?
1965, 1971 e 1996.
trade-off.
armas ou manteiga.
Limitações
Disponibilidade,
Escalabilidade e
 Estabilidade.
escalabilidade.
horizontal vs vertical ?
perfomance vs
escalabilidade.
Latencia vs Throughput.
disponibilidade
particionamento
fail-over
replicação
estabilidade.
use timeouts.
Use um disjuntor e não
     um fusível.
Qual o problema de um
        crash ?
Estratégia para o
     restart.
Supervisor Hierachies
Falhe rápido.
transações.
Atomicidade.
Consistência.
Isolamento.
Durabilidade.
ACID.
Disponibilidade vs.
  Consistência.
Expectativa : “Most of
 the data, most of the
        time”.
Teorema de CAP.
Consistência,
 Disponibilidade ou
tolerante a falhas de
 particionamento ?
Primeira opção:
 Consistência
Segunda opção:
Disponibilidade
Não há terceira opção
      na web.
Ok, existe. Mas, não é
    trivial, pois ...
O que sacrificar ?
Consistência ou
Disponibilidade ?
ACID vs/e BASE.
Lei de Moore
Uma profecia que virou uma meta
 da industria de processadores.
Nós desenvolvemos
    software.
Lei de Amdahl
  Fração de melhoria ;
  Ganho de execução.

 SpeedUp = T(1) / T(N)
Um projeto novo.
Estabilidade e features.
gerenciamento.
Eventualmente
consistente ou
 disponível ?
Tomando decisões.
Servidores respondem.
Aplicativos geram
    resposta.
Estes dois objetivos são
 ortogonais !
Antes, as
recomendações.
Valores Imutáveis.
Fluxo mental e o fluxo
    implementado.
blocking!
Quando eu tenho um
     estado ?
Estados mutáveis !
Sincronização
Compartilhar estados ?
Concorrência
Você esta perto de um
deadlock ou problemas
   de escalabilidade.
Precisamos de uma
 abstração melhor.
Assíncrona e
não-blocking.
Mensagens
Baseado em eventos
Modelo Actor
MapReduce
STM
AMQP
Mas você ainda precisa
 de objetos mutáveis.
“Eureka, Eureka” por
    Arquimedes.
Sua informação velha,
  pode ser a nova.
Cache
Local temporário.
Diferencie as respostas
      e os dados.
Normalização
/Minifier/
O fluxo das
requisições.
Cache, Concorrência e
Sincronização na   Web.
Protocolo HTTP
Métodos
Stateless
Requisição e Reposta


  [             ]
Requisição e Reposta
        ( Intermediadores )
      Proxy             Tunnel

  [                              ]
              Gateway
Recursos

                        Construção


Aplicações

                        Dados
Requisição e Reposta

GET /workshop                 GET /workshop
Host: sao-paulo.pm.org        Host: sao-paulo.pm.org




  200 OK                        200 OK
  Cache-Control: max-age=60     Cache-Control: max-age=60
Requisição e Reposta
(30 segundos depois)




GET /workshop
Host: sao-paulo.pm.org




   200 OK
   Cache-Control: max-age=30
Requisição e Reposta
(1 minuto)




GET /workshop                  GET /workshop
Host: sao-paulo.pm.org         Host: sao-paulo.pm.org




   200 OK                        200 OK
   Cache-Control: max-age=60     Cache-Control: max-age=60
Arquitetura REST.
Estudo de caso.

Editores Servidor
                                         Recursos
Usuários
            construção   cache   dados
Meus projetos
Referencias
Edsger Dijkstra
Andrew Stuart
 Tanenbaum
Donald Knuth
Roy Fielding
Perl Mongers

• Grupos para discutir sobre tudo o que
  você quiser... Filosofia, Política, Astronomia
  e etc.
• Eventos anuais.YAPC::Brasil, Equinócio,
  workshops, encontros técnicos, ... .
• http://sao-paulo.pm.org/
FIM

• http://twitter.com/thiagorondon
• http://slideshare.net/thiagorondon
• http://github.com/maluco
• http://www.maluco.com.br/

Cache, Concorrência e Sincronização.