Escalabilidade de Aplicações Web

5,344 views

Published on

Apresentação feita no

Published in: Technology, Business

Escalabilidade de Aplicações Web

  1. 1. Escalabilidade de Aplicações Web Renato Lucindo
  2. 2. Agenda <ul><ul><li>Aplicações Web </li></ul></ul><ul><ul><li>Escalabilidade </li></ul></ul><ul><ul><ul><li>Vertical </li></ul></ul></ul><ul><ul><ul><li>Horizontal </li></ul></ul></ul><ul><ul><li>Alta Disponibilidade </li></ul></ul><ul><ul><li>Problemas </li></ul></ul><ul><ul><li>BORG </li></ul></ul>
  3. 3. Aplicações Web <ul><li>Aplicação: Front-end + Negócio </li></ul><ul><li>C R UD </li></ul><ul><li>Problemas de Escala: Dados </li></ul>
  4. 4. Escalabilidade <ul><ul><li>Capacidade do sistema de assimilar uma carga crescente </li></ul></ul><ul><ul><ul><li>Conexões </li></ul></ul></ul><ul><ul><ul><li>Processamento </li></ul></ul></ul><ul><ul><li>  Escala vertical </li></ul></ul><ul><ul><ul><li>Adicionar recursos físicos a um nó </li></ul></ul></ul><ul><ul><ul><li>Otimizar o código para assimilar mais carga </li></ul></ul></ul><ul><ul><li>Escala horizontal </li></ul></ul><ul><ul><ul><li>Adicionar mais nós ao sistema  </li></ul></ul></ul>
  5. 5. Escalabilidade Vertical <ul><ul><li>Adicionar: CPU, Memória, Disco, etc... </li></ul></ul><ul><ul><li>Escalabilidade em um único nó </li></ul></ul><ul><ul><ul><li>Número de conexões </li></ul></ul></ul><ul><ul><ul><li>Usuários simultâneos </li></ul></ul></ul><ul><ul><ul><li>Operações por segundo </li></ul></ul></ul><ul><ul><li>Front-end + Negócio </li></ul></ul><ul><ul><li>Otimizar utilização de recursos </li></ul></ul><ul><ul><ul><li>I/O </li></ul></ul></ul><ul><ul><ul><li>Memória </li></ul></ul></ul><ul><ul><ul><li>CPU  </li></ul></ul></ul>
  6. 6. Escalabilidade Vertical <ul><ul><li>Patterns de programação concorrente e tratamento de eventos. </li></ul></ul><ul><ul><li>POSA 2 </li></ul></ul>
  7. 7. Escalabilidade Horizontal <ul><ul><li>Adicionar mais nós para assimilar mais trabalho </li></ul></ul><ul><ul><ul><li>Escalabilidade linear ou melhor </li></ul></ul></ul><ul><ul><li>Front-end + Negócio: Stateless </li></ul></ul><ul><ul><li>Dados </li></ul></ul><ul><ul><ul><li>Cache </li></ul></ul></ul><ul><ul><ul><li>Fila </li></ul></ul></ul><ul><ul><ul><li>Master/Slave </li></ul></ul></ul><ul><ul><ul><li>Particionamento </li></ul></ul></ul>
  8. 8. Escalabilidade Horizontal - Cache
  9. 9. Escalabilidade Horizontal - Cache <ul><ul><li>Benefícios </li></ul></ul><ul><ul><ul><li>Escala nas operações de leitura </li></ul></ul></ul><ul><ul><li>Consequencias  </li></ul></ul><ul><ul><ul><li>Alteração na lógica de negócio para tratar cache </li></ul></ul></ul><ul><ul><ul><li>Dados inconsistentes </li></ul></ul></ul><ul><ul><ul><li>&quot;There are only two hard things in Computer Science: cache invalidation and naming things&quot; - Phil Karlton  </li></ul></ul></ul>
  10. 10. Escalabilidade Horizontal - Fila
  11. 11. Escalabilidade Horizontal - Fila <ul><ul><li>Benefícios </li></ul></ul><ul><ul><ul><li>Escalabilidade na escrita </li></ul></ul></ul><ul><ul><li>Conseqüências </li></ul></ul><ul><ul><ul><li>Alteração na lógica de negócio para tratar a fila </li></ul></ul></ul><ul><ul><ul><li>Dados inconsistentes </li></ul></ul></ul>
  12. 12. Escalabilidade Horizontal - Master/Slave
  13. 13. Escalabilidade Horizontal - Master/Slave <ul><ul><li>Benefícios </li></ul></ul><ul><ul><ul><li>Escalabilidade na leitura </li></ul></ul></ul><ul><ul><li>Consequencias </li></ul></ul><ul><ul><ul><li>Alteração na lógica de negócio para decidir de onde ler e onde escrever </li></ul></ul></ul><ul><ul><ul><li>Dados inconsistentes </li></ul></ul></ul>
  14. 14. Escalabilidade Horizontal - Particionamento
  15. 15. Escalabilidade Horizontal - Particionamento <ul><ul><li>Benefícios </li></ul></ul><ul><ul><ul><li>Escalabilidade de leitura e escrita </li></ul></ul></ul><ul><ul><li>Conseqüências </li></ul></ul><ul><ul><ul><li>Alteração da lógica de negócio para tratar partições </li></ul></ul></ul><ul><ul><ul><li>De-normalização dos dados </li></ul></ul></ul><ul><ul><ul><li>Ausência de joins entre partições </li></ul></ul></ul><ul><ul><ul><ul><li>joins na camada da aplicação </li></ul></ul></ul></ul><ul><ul><ul><li>Dados inconsistentes </li></ul></ul></ul>
  16. 16. Escalabilidade Horizontal
  17. 17. Alta Disponibilidade <ul><ul><li>Tolerância a falhas de hardware e software </li></ul></ul><ul><ul><ul><li>Eliminação de pontos únicos de falha </li></ul></ul></ul><ul><ul><li>Redundância </li></ul></ul><ul><ul><ul><li>Failover </li></ul></ul></ul><ul><ul><li>Réplicas </li></ul></ul><ul><ul><ul><li>Quantidade de cópias </li></ul></ul></ul><ul><ul><ul><li>Granularidade das cópias </li></ul></ul></ul>
  18. 18. Problemas <ul><ul><li>Complexidade </li></ul></ul><ul><ul><li>Consistência dos dados </li></ul></ul><ul><ul><ul><li>(R + W) < N (consistência tardia) </li></ul></ul></ul><ul><ul><li>Dificuldade de manipulação dos dados </li></ul></ul><ul><ul><li>Dados NoSQL </li></ul></ul><ul><ul><ul><li>Contadores </li></ul></ul></ul><ul><ul><ul><li>Listas/Conjuntos </li></ul></ul></ul><ul><ul><ul><li>Árvores/Grafos </li></ul></ul></ul>
  19. 19. BORG
  20. 20. BORG
  21. 21. BORG <ul><ul><li>Banco de dados Chave-Valor </li></ul></ul><ul><ul><li>3 anos de desenvolvimento </li></ul></ul><ul><ul><li>Erlang </li></ul></ul><ul><ul><li>Interface REST </li></ul></ul><ul><ul><ul><li>Memcached </li></ul></ul></ul><ul><ul><ul><li>Subconjunto REDIS </li></ul></ul></ul><ul><ul><li>Múltiplos backends </li></ul></ul><ul><ul><ul><li>Memória (com LRU) </li></ul></ul></ul><ul><ul><ul><li>Mnesia </li></ul></ul></ul><ul><ul><ul><li>MySQL </li></ul></ul></ul><ul><ul><li>Réplicas </li></ul></ul><ul><ul><li>Particionamento </li></ul></ul><ul><ul><li>NoSQL </li></ul></ul><ul><ul><ul><li>Fila, Contadores, Conjuntos, etc </li></ul></ul></ul>
  22. 22. Fim Obrigado! Perguntas? http://uol.com/trabalhe Renato Lucindo - @rlucindo

×