Top Banner
High-Availability Django Frankie Dintino The Atlantic
32

High Availability Django - Djangocon 2016

Jan 15, 2017

Download

Technology

Frankie Dintino
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: High Availability Django - Djangocon 2016

High-Availability Django

Frankie Dintino

The Atlantic

Page 2: High Availability Django - Djangocon 2016
Page 3: High Availability Django - Djangocon 2016
Page 4: High Availability Django - Djangocon 2016

Performance woes…

Page 5: High Availability Django - Djangocon 2016

…and crises

Page 6: High Availability Django - Djangocon 2016

Today

Page 7: High Availability Django - Djangocon 2016

First steps

• Monitoring and profiling: understand your bottlenecks

• Tackle the “easy” stuff first: query optimization, caching

• Don’t neglect front-end performance

Page 8: High Availability Django - Djangocon 2016

Profiling

• Hosted services: New Relic, Opbeat

• django-debug-toolbar, django-silk

• cProfile / pyprof2calltree / KCacheGrind for masochists

• WSGI middleware

Page 9: High Availability Django - Djangocon 2016

Monitoring

• Downtime notifications: Alertra, New Relic, Opbeat, Chartbeat

• Nagios and its many forks, Zabbix

Page 10: High Availability Django - Djangocon 2016

Caching• Use a CDN

• Proxy cache (Nginx, Squid, Varnish)

• {% cache %}, @cached_property, CachedStaticFilesStorage, cached template loader

• Page caching frameworks

• ORM caching: a mixed bag

Page 11: High Availability Django - Djangocon 2016

Query optimization

• .prefetch_related(), .select_related()

• prefetch_related_objects() for generic foreign keys

• .values() and .values_list() where it counts, if possible

• Database parameter tuning, judicious indexing

Page 12: High Availability Django - Djangocon 2016

Throwing more hardware at the problem also works.

Page 13: High Availability Django - Djangocon 2016

“Request Queuing?”

Page 14: High Availability Django - Djangocon 2016

“Request Queuing?”

Page 15: High Availability Django - Djangocon 2016

theatlantic :4000 citylab :5000 admin :6000

:80

Page 16: High Availability Django - Djangocon 2016

upstream theatlantic { server apps1:4000;

server apps2:4000; server apps3:4000;

}

upstream citylab { server apps1:5000;

# ... }

Page 17: High Availability Django - Djangocon 2016

upstream theatlantic_stage { server apps1:4500;

server apps2:4500; server apps3:4500;

}

upstream citylab_stage { server apps1:5500;

# ... }

Page 18: High Availability Django - Djangocon 2016

/www/site/ stage/ live/ a/ b/

Page 19: High Availability Django - Djangocon 2016

/www/site/ stage/ live/ a/ b/

Page 20: High Availability Django - Djangocon 2016

Basic principles

• “a” and “b” repositories are always “production-ready.”

• Force as much Django code to load as possible before defining def application() in your WSGI file.

• Before swapping the upstreams, “warm up” the workers with concurrent HTTP requests.

Page 21: High Availability Django - Djangocon 2016

mod_wsgi vs. uWSGI

Page 22: High Availability Django - Djangocon 2016

mod_wsgi

• In general, comparable performance

• Runs on Apache HTTP server

• Mostly the work of a single developer

• Documentation terminally out-of-date

• Important configuration options missing or only discoverable in the release notes

Page 23: High Availability Django - Djangocon 2016
Page 24: High Availability Django - Djangocon 2016

uWSGI

• Broad and active community

• Very thorough documentation (overwhelming, in fact)

• Highly configurable

Page 25: High Availability Django - Djangocon 2016
Page 26: High Availability Django - Djangocon 2016
Page 27: High Availability Django - Djangocon 2016
Page 28: High Availability Django - Djangocon 2016
Page 29: High Availability Django - Djangocon 2016
Page 30: High Availability Django - Djangocon 2016
Page 32: High Availability Django - Djangocon 2016

High-Availability Django