Bruxarias em Python - Como desenvolver soluções escaláveis

21
Globalcode – Open4education Bruxarias em Python: Técnicas para deixar suas aplicações escaláveis Alexandre Prates Analista de Capacity Planing – Ericsson Inovação

Transcript of Bruxarias em Python - Como desenvolver soluções escaláveis

Page 1: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Bruxarias em Python: Técnicas para deixar suas aplicações escaláveis

Alexandre PratesAnalista de Capacity Planing – Ericsson Inovação

Page 2: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Quem eu sou

Bacharel em Ciências da Computação pela UFABC;

Analista de Capacity Planning pela Ericsson Inovação;

Estudioso de economia, finanças e computação cientifica.

Page 3: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Agenda

Por que pensar em melhorar a performance de sua aplicação?

Tópicos que serão tratados nessa palestra.Porque pensar em performance?

Threads em Python;

Multiprocessamento em Python;

Exemplos de message brokers;

Celery;

Bancos de dados em memória.

Page 4: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Por que pensar em melhorar a performance de sua aplicação?

Porque hardware é caro;

Porque a solução pode ficar extremamente complexa e de difícil manutenção;

Porque a solução pode não escalar na medida em que o negócio necessita.

Page 5: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

O que são Threads

Threads – também conhecidos com processos leves - São trechos de códigos que podem rodar de maneira independente do programa principal;

Esse paralelismo tem um custo, deve ser implementados mecanismos para que 2 threads não acessem o mesmo objeto.

Para evitar esse problemas e manter a consistência dos dados a VM python utiliza o GIL (Global Interpreter Lock).

Page 6: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Como funciona a execução de threds em Python?

Page 7: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Quando usar multi-thread em Python?

Em tarefas com elevado tempo de IO Wait;

Onde não exista risco de concorrência por acesso a objetos;

Page 8: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Quando não é eficiente usar threads?

Quando a tarefas tenha elevado tempo de CPU;

Quando a tarefa tiver objetos compartilhados;

Quando o tempo de chaveamento de contexto é elevado.

Page 9: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Multiprocessamento

Para contornar o problema do GIL, podemos usar multiprocessamento para alcançar o real paralelismo;

Com isso garantimos que cada trecho da aplicação pode acessar mais de um CPU.

Page 10: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Multiprocessamento em Python

Page 11: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Quando usar multiprocessamento?

Quando a aplicação tem elevado tempo de CPU;

Quando temos uma quantidade pequena de forks – recomendado um por núcleo de processador;

Page 12: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Quando não usar multiprocessamento?

Quando temos uma quantidade de processos simultâneos na aplicação acima da quantidade de núcleos da máquina, pois gera concorrência por recurso, degradando a performance da aplicação;

Page 13: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Alguns middlewares

Middlewares são softwares que realizam a interface de comunicação entre duas aplicações. Exemplos:

– Rabbit MQ;– Active MQ;– Redis;

Page 14: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Exemplos de Uso

Page 15: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Brokers

Brokers são middlewares que recebem uma mensagem em um protocolo padrão a a transmite esse protocolo, essas aplicações são usadas em sistemas distribuído para troca de informações entre os modulo.

Alguns exemplos conhecidos são:– Active MQ;– Zero MQ;– Rabbit MQ;

Page 16: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Celery

Celery é um gerenciador e distribuidor de processos, baseado em trocas de mensagens serviços de Message Broker.

Funciona em regime Master-Slave, onde o Master envia a tarefa e o Slave realiza a execução e retorna o resultado.

As tarefas em Celery podem ser síncronas ou assíncronas. Além de permitirem garantia de tempo de processamento.

Page 17: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Funcionamento do Celery

Page 18: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Banco de dados em memória

Alguns bancos de dados SQL suportam armazenar as informações direto em memória, isso torna o acesso ao dados mais rápido.

Também existe a opção de usar um banco de dados noSQL como o redis para armazenamento em memória.

Page 19: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Referencias

Threads em python– https://docs.python.org/2/library/multiprocessing.html

Multiprocesso – https://docs.python.org/2/library/multiprocessing.html

Redis – banco dados noSQL– http://redis.io

Rabbit MQ– https://www.rabbitmq.com/

Celery– http://www.celeryproject.org/

Page 20: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Contatos

LInkedIn– https://br.linkedin.com/in/alexandre-prates-3497052

3

Email – [email protected]

GitHub– https://github.com/prates

Page 21: Bruxarias em Python - Como desenvolver soluções escaláveis

Globalcode – Open4education

Obrigado