Fazendo milagres com uma
instância
Amazon ec2 T2.MICRO e
uma aplicação DJANGO
Dois problemas em uma Amazon ec2 t2.micro
- CPU Stolen: roubo de processamento
- acontece quando o uso de CPU é maior que ...
Use REDIS para guardar suas sessões
e elimine uma consulta no banco de dados.
e também muitas outras.
Use .iterators(), .exists() e .count()
O queryset cache é um problema se você não precisa de todos os resultados
mais de u...
Use select_related e prefetch_related
class ModelA(models.Model):
nameA = models.CharField(max_length=255)
class ModelB(mo...
Use select_related e prefetch_related
for b in ModelB.objects.all():
print b.modela.nameA # lento aqui
for b in ModelB.obj...
Use select_related e prefetch_related
for c in ModelC.objects.all():
for a in c.mm.all(): # lento aqui (um hit no banco a ...
Separe tudo
Use um servidor de banco de dados separado da aplicação (Amzon RDS por ex)
Use um servidor de mídia separado s...
Faça uma partição SWAP
Use cache sempre
O uso de cache evita processamento pesado na máquina, deixando ela bem
tranquila.
Do próprio django:
- pe...
Próximos SlideShares
Carregando em…5
×

Fazendo milagres com uma instância Amazon ec2 T2.MICRO e uma aplicação DJANGO

53 visualizações

Publicada em

Fazendo milagres com uma instância
Amazon ec2 T2.MICRO e uma aplicação DJANGO

Publicada em: Internet
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
53
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
1
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Fazendo milagres com uma instância Amazon ec2 T2.MICRO e uma aplicação DJANGO

  1. 1. Fazendo milagres com uma instância Amazon ec2 T2.MICRO e uma aplicação DJANGO
  2. 2. Dois problemas em uma Amazon ec2 t2.micro - CPU Stolen: roubo de processamento - acontece quando o uso de CPU é maior que o uso de de CPU contratada. https://www.google.com.br/?ion=1&espv=2#q=cpu%20stolen%20ec2%20micro - Memória
  3. 3. Use REDIS para guardar suas sessões e elimine uma consulta no banco de dados. e também muitas outras.
  4. 4. Use .iterators(), .exists() e .count() O queryset cache é um problema se você não precisa de todos os resultados mais de uma vez. # O `iterator()` method garante que apenas uma linha por vez seja retornada, salvando memória. for p in Produto.objects.all().iterator(): print(p.name) if Produto.objects.all().exists(): # não salva todo retorno em memória print(‘existe’) print Produto.objects.count() # muiiito melhor que len(Produto.objects.all())
  5. 5. Use select_related e prefetch_related class ModelA(models.Model): nameA = models.CharField(max_length=255) class ModelB(models.Model): modela = ForeignKey(ModelA) nameB = models.CharField(max_length=255) class ModelC(models.Model): mm = ManyToManyField(ModelA)
  6. 6. Use select_related e prefetch_related for b in ModelB.objects.all(): print b.modela.nameA # lento aqui for b in ModelB.objects.select_related('modela').all(): # Forward FK relationship print b.modela.nameA # rápido agora (JOINS por trás) # -------------------------------------------------------------------- for a in ModelA.objects.all(): for b in a.modelb_set.all(): # lento aqui (um hit no banco a cada iteração) print b.nameB for in ModelA.objects.prefetch_related('modelb_set').all() # Reverse FK relationship for b in a.modelb_set.all(): # rápido agora (carregado com um SELECT IN por trás) print b.nameB
  7. 7. Use select_related e prefetch_related for c in ModelC.objects.all(): for a in c.mm.all(): # lento aqui (um hit no banco a cada iteração) print a.nameA for in ModelC.objects.prefetch_related(mm).all() # ManyToMany relationship for a in c.mm.all(): # rápido agora (carregado com um SELECT IN por trás) print a.nameA
  8. 8. Separe tudo Use um servidor de banco de dados separado da aplicação (Amzon RDS por ex) Use um servidor de mídia separado separado da aplicação (Amazon S3 por ex) Use um servidor de cache separado separado da aplicação (Amazon ElastiCache) Use um servidor para buscas internas separado da aplicação (Um Elasticsearch rodando em outra VM)
  9. 9. Faça uma partição SWAP
  10. 10. Use cache sempre O uso de cache evita processamento pesado na máquina, deixando ela bem tranquila. Do próprio django: - per-view cache - Template fragment caching Terceiros: Varnish

×