O documento discute técnicas para deixar aplicações em Python escaláveis, abordando tópicos como threads, multiprocessamento, message brokers e bancos de dados em memória. A palestra explica quando cada técnica é apropriada e como funcionam threads, multiprocessamento e o middleware Celery. Exemplos de message brokers como RabbitMQ também são apresentados.
1. Globalcode – Open4education
Bruxarias em Python: Técnicas para deixar
suas aplicações escaláveis
Alexandre Prates
Analista de Capacity Planing – Ericsson Inovação
2. 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.
3. 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.
4. 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.
5. 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).
7. 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;
8. 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.
9. 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.
11. 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;
12. 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;
13. 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;
15. 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;
16. 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.
18. 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.