bruxarias em python - como desenvolver soluções escaláveis
TRANSCRIPT
Globalcode – Open4education
Bruxarias em Python: Técnicas para deixar suas aplicações escaláveis
Alexandre PratesAnalista de Capacity Planing – Ericsson Inovação
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.
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.
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.
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).
Globalcode – Open4education
Como funciona a execução de threds em Python?
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;
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.
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.
Globalcode – Open4education
Multiprocessamento em Python
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;
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;
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;
Globalcode – Open4education
Exemplos de Uso
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;
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.
Globalcode – Open4education
Funcionamento do Celery
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.
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/
Globalcode – Open4education
Contatos
LInkedIn– https://br.linkedin.com/in/alexandre-prates-3497052
3
Email – [email protected]
GitHub– https://github.com/prates
Globalcode – Open4education
Obrigado