SlideShare a Scribd company logo
1 of 40
Download to read offline
Advanced Django
Architecture
Rami Sayar - @ramisayar
Technical Evangelist
Microsoft Canada
Advanced Scalable
Django Architecture
Rami Sayar - @ramisayar
Technical Evangelist
Microsoft Canada
Agenda
•  Advanced Django Techniques & Patterns
•  Structuring Complex Applications
•  Scaling Django Applications
•  Django Applications in Production
CONFOO - @RAMISAYAR
What is a production web app?
•  Django is surrounded by tons
of applications, services and
code in production.
•  Advanced Django architecture
is needed to support Django
in production without failing
hard.
CONFOO - @RAMISAYAR
Load Balancing Django
CONFOO - @RAMISAYAR
Load Balancing
•  Load balancing Django improves the performance and reliability
by distributing traffic.
•  Becomes an interesting problem when you have to consider:
•  SSL Termination
•  Sticky Sessions?
•  WebSockets?
CONFOO - @RAMISAYAR
Load Balancing = Django + HAProxy + SSL
•  HAProxy gained native SSL support in HAProxy 1.5.x => June
2014!
•  SSL Termination:
•  Fairly straightforward to set up HAProxy.
•  Read: How To Implement SSL Termination With HAProxy
CONFOO - @RAMISAYAR
Load Balancing Proxying & Remote Addr
class SetRemoteAddrFromForwardedFor(object):
def process_request(self, request):
try:
real_ip = request.META['HTTP_X_FORWARDED_FOR']
except KeyError:
pass
else:
# HTTP_X_FORWARDED_FOR can be a comma-separated list of IPs.
# Take just the first one.
real_ip = real_ip.split(",")[0]
request.META['REMOTE_ADDR'] = real_ip
CONFOO - @RAMISAYAR
Azure Traffic Manager
•  High Performance Load
Balancer + DNS Support.
•  Sticky Sessions don’t exist.
•  HTTPS Supported.
CONFOO - @RAMISAYAR
Caching Django
CONFOO - @RAMISAYAR
Caching = Django + Varnish
•  Varnish has a tendency to just cache EVERYTHING which can
be frustrating for the User, unless you set it up properly.
•  Varnish does not cache content & cookies.
•  Varnish and Django CSRF protection gotcha.
•  Varnish does not deal with HTTPS (hence the need of HAProxy
in front of Varnish).
CONFOO - @RAMISAYAR
Caching = Django + Varnish
•  Django-Varnish – “It allows you to monitor certain models and
when they are updated, Django Varnish will purge the model's
absolute_url on your frontend(s). This ensures that object detail
pages are served blazingly fast and are always up to date.”
•  https://github.com/justquick/django-varnish
•  Project Idea: Deeper Django/Varnish integration.
CONFOO - @RAMISAYAR
Caching = Django + Varnish
•  https://www.varnish-cache.org/
•  http://www.isvarnishworking.com/
•  http://yml-blog.blogspot.ca/2010/01/esi-using-varnish-and-
django.html
•  http://chase-seibert.github.io/blog/2011/09/23/varnish-caching-
for-unauthenticated-django-views.html
•  http://blog.bigdinosaur.org/adventures-in-varnish/
•  http://www.nedproductions.biz/wiki/a-perfected-varnish-reverse-
caching-proxy-vcl-script
CONFOO - @RAMISAYAR
Serving Django
CONFOO - @RAMISAYAR
Web Server = Django + Apache
•  Forced to use Apache? Your options:
•  mod_python (No)
•  mod_wsgi (Yes)
•  FastCGI (Deprecated since 1.7)
•  Phusion Passenger (Yes)
CONFOO - @RAMISAYAR
Web Server = Django + Apache
•  mod_wsgi
•  Decent performance on the Apache side.
•  You can setup Apache any way you like.
•  You can setup mod_wsgi to use virtualenv.
CONFOO - @RAMISAYAR
Web Server = Django + Apache
import os, sys, site
# Add the site-packages of the chosen virtualenv to work with
site.addsitedir('~/.virtualenvs/myprojectenv/local/lib/python2.7/site-packages')
# Add the app's directory to the PYTHONPATH
sys.path.append('/home/django_projects/MyProject')
sys.path.append('/home/django_projects/MyProject/myproject')
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
# Activate your virtual env
activate_env=os.path.expanduser("~/.virtualenvs/myprojectenv/bin/activate_this.py")
execfile(activate_env, dict(__file__=activate_env))
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
CONFOO - @RAMISAYAR
Web Server = Django + Alternatives (aka. Nginx)
•  Nginx + uWSGI
[uwsgi]
touch-reload = /tmp/newproject
socket = 127.0.0.1:3031
workers = 2
chdir = /srv/newproject
env = DJANGO_SETTINGS_MODULE=newproject.settings
module = django.core.handlers.wsgi:WSGIHander()
CONFOO - @RAMISAYAR
Web Server = Django + Alternatives (aka. Gunicorn)
•  Nginx & Gunicorn
•  In theory, you should use Nginx as a reverse proxy here, to serve static
files if you’re not uploading everything to a CDN or a separate media
server. If you are, you can use HAProxy and Gunicorn as a standalone
webserver, one less dependency to care about.
•  Install Gunicorn directly inside your virtual environment.
•  Use Gaffer to monitor the Gunicorn.
CONFOO - @RAMISAYAR
Web Server - References
•  http://blog.kgriffs.com/2012/12/18/uwsgi-vs-gunicorn-vs-node-
benchmarks.html
CONFOO - @RAMISAYAR
REST APIs & Django
CONFOO - @RAMISAYAR
Use Django REST Framework!
Django REST Framework vs Django Tasty Pie
CONFOO - @RAMISAYAR
Cache & Django
CONFOO - @RAMISAYAR
Caching in Production
•  Caching – Django has multiple options:
•  Redis. Make sure you use Hiredis and django-redis-cache. Use a
hosted Redis Cache (Azure, AWS, etc).
•  Memcached. Make sure you use pylibmc and not python-memcached,
better performance with the C library.
•  SSL still matters.
CONFOO - @RAMISAYAR
Azure Redis Cache
CONFOO - @RAMISAYAR
Logging Django
CONFOO - @RAMISAYAR
Logging in Production
•  Logstash
•  Collect logs, parse them, and store them for later use.
•  Free and open source.
•  Set it up with Redis.
CONFOO - @RAMISAYAR
Logging in Production – Use Python-Logstash
LOGGING = {
'handlers': {
'logstash': {
'level': 'DEBUG',
'class': 'logstash.LogstashHandler',
'host': 'localhost',
'port': 5959, # Default value: 5959
'version': 1, # Version of logstash event schema. Default value: 0 (for backward
compatibility of the library)
'message_type': 'logstash', # 'type' field in logstash message. Default value: 'logstash'.
'tags': ['tag1', 'tag2'], # list of tags. Default: None.
},
},
CONFOO - @RAMISAYAR
Logging in Production – Use Python-Logstash
'loggers': {
'django.request': {
'handlers': ['logstash'],
'level': 'DEBUG',
'propagate': True,
},
},
}
CONFOO - @RAMISAYAR
Logging in Production – Using Sentry
•  Realtime event logging and aggregation platform.
•  Specialize in monitoring exceptions and errors.
•  https://github.com/getsentry/sentry
CONFOO - @RAMISAYAR
PostgreSQL in Production
CONFOO - @RAMISAYAR
PostgreSQL in Production – pgpool & slony
•  PostgreSQL 9+ has streaming replication assuming you’re
running identical databases with identical version on identical
architectures (not really an issue).
•  If not using the Streaming Replication feature (WAL), you’ll want
to use either pgpool or slony to scale your PostgreSQL
database across multiple machines.
•  Use Slony if you want master-slave-peer replication.
•  Use pgpool or pgbouncer for connection pooling. Pgbouncer only does
connection pooling.
CONFOO - @RAMISAYAR
Async Tasks & Django
CONFOO - @RAMISAYAR
Async Tasks – Celery
•  Use Celery for Asynchronous Tasks
•  Use Celery with Redis and store results in Django ORM
•  RQ is an alternative for distributing tasks. (Based on Redis)
Read:
http://www.caktusgroup.com/blog/2014/09/29/celery-production/
CONFOO - @RAMISAYAR
On Redis
•  Redis is extremely popular as an easy and simple publish-
subscribe.
•  Redis is very particular about memory. Running out of memory
in Redis -> CRASH AND BURN!
•  If you don’t have enough memory in your VM to run Redis
Cache -> Change your approach, use Apache Kafka.
CONFOO - @RAMISAYAR
Tips & Techniques
•  Don’t forget:
•  Turn off Debug Mode
•  Turn off Template Debug Mode
•  Use different Django Settings Modules depending on the role
and environment you are in through environment variables by
setting “DJANGO_SETTINGS_MODULE”.
CONFOO - @RAMISAYAR
What did we learn?
•  Scaling Django Architectures
•  Most of the work surrounds Django
•  Minimal changes to your django app for the most part.
CONFOO - @RAMISAYAR
Thank You! Questions?
Follow @ramisayar
CONFOO - @RAMISAYAR
Resources
•  http://blog.disqus.com/post/62187806135/scaling-django-to-8-
billion-page-views
•  http://engineering.hackerearth.com/2013/10/07/scaling-
database-with-django-and-haproxy/
•  http://www.djangobook.com/en/2.0/chapter12.html
•  https://www.digitalocean.com/community/tutorials/how-to-
implement-ssl-termination-with-haproxy-on-ubuntu-14-04
•  https://docs.djangoproject.com/en/1.7/topics/security/
•  https://www.digitalocean.com/community/tutorials/how-to-scale-
django-beyond-the-basics
CONFOO - @RAMISAYAR
©2013	
  Microso-	
  Corpora1on.	
  All	
  rights	
  reserved.	
  Microso-,	
  Windows,	
  Office,	
  Azure,	
  System	
  Center,	
  Dynamics	
  and	
  other	
  product	
  names	
  are	
  or	
  may	
  be	
  registered	
  trademarks	
  and/or	
  trademarks	
  in	
  the	
  
U.S.	
  and/or	
  other	
  countries.	
  The	
  informa1on	
  herein	
  is	
  for	
  informa1onal	
  purposes	
  only	
  and	
  represents	
  the	
  current	
  view	
  of	
  Microso-	
  Corpora1on	
  as	
  of	
  the	
  date	
  of	
  this	
  presenta1on.	
  Because	
  Microso-	
  
must	
  respond	
  to	
  changing	
  market	
  condi1ons,	
  it	
  should	
  not	
  be	
  interpreted	
  to	
  be	
  a	
  commitment	
  on	
  the	
  part	
  of	
  Microso-,	
  and	
  Microso-	
  cannot	
  guarantee	
  the	
  accuracy	
  of	
  any	
  informa1on	
  provided	
  a-er	
  
the	
  date	
  of	
  this	
  presenta1on.	
  MICROSOFT	
  MAKES	
  NO	
  WARRANTIES,	
  EXPRESS,	
  IMPLIED	
  OR	
  STATUTORY,	
  AS	
  TO	
  THE	
  INFORMATION	
  IN	
  THIS	
  PRESENTATION.	
  

More Related Content

What's hot

Scaling Django with gevent
Scaling Django with geventScaling Django with gevent
Scaling Django with geventMahendra M
 
Basic Concept of Node.js & NPM
Basic Concept of Node.js & NPMBasic Concept of Node.js & NPM
Basic Concept of Node.js & NPMBhargav Anadkat
 
Avoiding callback hell in Node js using promises
Avoiding callback hell in Node js using promisesAvoiding callback hell in Node js using promises
Avoiding callback hell in Node js using promisesAnkit Agarwal
 
Spring Framework - Spring Security
Spring Framework - Spring SecuritySpring Framework - Spring Security
Spring Framework - Spring SecurityDzmitry Naskou
 
[Final] ReactJS presentation
[Final] ReactJS presentation[Final] ReactJS presentation
[Final] ReactJS presentation洪 鹏发
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to DjangoKnoldus Inc.
 
Introduction into ES6 JavaScript.
Introduction into ES6 JavaScript.Introduction into ES6 JavaScript.
Introduction into ES6 JavaScript.boyney123
 
Client-side JavaScript
Client-side JavaScriptClient-side JavaScript
Client-side JavaScriptLilia Sfaxi
 
Django Forms: Best Practices, Tips, Tricks
Django Forms: Best Practices, Tips, TricksDjango Forms: Best Practices, Tips, Tricks
Django Forms: Best Practices, Tips, TricksShawn Rider
 
Europython 2011 - Playing tasks with Django & Celery
Europython 2011 - Playing tasks with Django & CeleryEuropython 2011 - Playing tasks with Django & Celery
Europython 2011 - Playing tasks with Django & CeleryMauro Rocco
 
Angular - Chapter 2 - TypeScript Programming
Angular - Chapter 2 - TypeScript Programming  Angular - Chapter 2 - TypeScript Programming
Angular - Chapter 2 - TypeScript Programming WebStackAcademy
 
Json in Postgres - the Roadmap
 Json in Postgres - the Roadmap Json in Postgres - the Roadmap
Json in Postgres - the RoadmapEDB
 

What's hot (20)

Scaling Django with gevent
Scaling Django with geventScaling Django with gevent
Scaling Django with gevent
 
django
djangodjango
django
 
Practical Celery
Practical CeleryPractical Celery
Practical Celery
 
React Server Side Rendering with Next.js
React Server Side Rendering with Next.jsReact Server Side Rendering with Next.js
React Server Side Rendering with Next.js
 
Basic Concept of Node.js & NPM
Basic Concept of Node.js & NPMBasic Concept of Node.js & NPM
Basic Concept of Node.js & NPM
 
Avoiding callback hell in Node js using promises
Avoiding callback hell in Node js using promisesAvoiding callback hell in Node js using promises
Avoiding callback hell in Node js using promises
 
Spring Framework - Spring Security
Spring Framework - Spring SecuritySpring Framework - Spring Security
Spring Framework - Spring Security
 
[Final] ReactJS presentation
[Final] ReactJS presentation[Final] ReactJS presentation
[Final] ReactJS presentation
 
Flask – Python
Flask – PythonFlask – Python
Flask – Python
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to Django
 
Introduction into ES6 JavaScript.
Introduction into ES6 JavaScript.Introduction into ES6 JavaScript.
Introduction into ES6 JavaScript.
 
Client-side JavaScript
Client-side JavaScriptClient-side JavaScript
Client-side JavaScript
 
Django Forms: Best Practices, Tips, Tricks
Django Forms: Best Practices, Tips, TricksDjango Forms: Best Practices, Tips, Tricks
Django Forms: Best Practices, Tips, Tricks
 
Maven Introduction
Maven IntroductionMaven Introduction
Maven Introduction
 
Europython 2011 - Playing tasks with Django & Celery
Europython 2011 - Playing tasks with Django & CeleryEuropython 2011 - Playing tasks with Django & Celery
Europython 2011 - Playing tasks with Django & Celery
 
React Hooks
React HooksReact Hooks
React Hooks
 
Django
DjangoDjango
Django
 
Angular - Chapter 2 - TypeScript Programming
Angular - Chapter 2 - TypeScript Programming  Angular - Chapter 2 - TypeScript Programming
Angular - Chapter 2 - TypeScript Programming
 
jQuery for beginners
jQuery for beginnersjQuery for beginners
jQuery for beginners
 
Json in Postgres - the Roadmap
 Json in Postgres - the Roadmap Json in Postgres - the Roadmap
Json in Postgres - the Roadmap
 

Similar to Scalable Django Architecture

The State of WebSockets in Django
The State of WebSockets in DjangoThe State of WebSockets in Django
The State of WebSockets in DjangoRami Sayar
 
NYC Identity Summit Tech Day: ForgeRock DevOps/Cloud Strategy
NYC Identity Summit Tech Day: ForgeRock DevOps/Cloud StrategyNYC Identity Summit Tech Day: ForgeRock DevOps/Cloud Strategy
NYC Identity Summit Tech Day: ForgeRock DevOps/Cloud StrategyForgeRock
 
Architecture & Workflow of Modern Web Apps
Architecture & Workflow of Modern Web AppsArchitecture & Workflow of Modern Web Apps
Architecture & Workflow of Modern Web AppsRasheed Waraich
 
Containerdays Intro to Habitat
Containerdays Intro to HabitatContainerdays Intro to Habitat
Containerdays Intro to HabitatMandi Walls
 
Exploring pwa for shopware
Exploring pwa for shopwareExploring pwa for shopware
Exploring pwa for shopwareSander Mangel
 
Java EE Arquillian Testing with Docker & The Cloud
Java EE Arquillian Testing with Docker & The CloudJava EE Arquillian Testing with Docker & The Cloud
Java EE Arquillian Testing with Docker & The CloudBruno Borges
 
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...Edward Wilde
 
20 tips for website performance
20 tips for website performance20 tips for website performance
20 tips for website performanceAndrew Siemer
 
12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQL12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQLKonstantin Gredeskoul
 
CQRS and Event Sourcing for Java Developers
CQRS and Event Sourcing for Java DevelopersCQRS and Event Sourcing for Java Developers
CQRS and Event Sourcing for Java DevelopersMarkus Eisele
 
Stay productive while slicing up the monolith
Stay productive while slicing up the monolith Stay productive while slicing up the monolith
Stay productive while slicing up the monolith Markus Eisele
 
Preparing your dockerised application for production deployment
Preparing your dockerised application for production deploymentPreparing your dockerised application for production deployment
Preparing your dockerised application for production deploymentDave Ward
 
The Kitchen Cloud How To: Automating Joyent SmartMachines with Chef
The Kitchen Cloud How To: Automating Joyent SmartMachines with ChefThe Kitchen Cloud How To: Automating Joyent SmartMachines with Chef
The Kitchen Cloud How To: Automating Joyent SmartMachines with ChefChef Software, Inc.
 
Logs aggregation and analysis
Logs aggregation and analysisLogs aggregation and analysis
Logs aggregation and analysisDivante
 
How we realized SOA by Python at PyCon JP 2015
How we realized SOA by Python at PyCon JP 2015How we realized SOA by Python at PyCon JP 2015
How we realized SOA by Python at PyCon JP 2015hirokiky
 
Golang @ Tokopedia
Golang @ TokopediaGolang @ Tokopedia
Golang @ TokopediaQasim Zaidi
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGuillaume Laforge
 
IMC Summit 2016 Breakout - Greg Luck - How to Speed Up Your Application Using...
IMC Summit 2016 Breakout - Greg Luck - How to Speed Up Your Application Using...IMC Summit 2016 Breakout - Greg Luck - How to Speed Up Your Application Using...
IMC Summit 2016 Breakout - Greg Luck - How to Speed Up Your Application Using...In-Memory Computing Summit
 
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na NuvemTecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na NuvemBruno Borges
 

Similar to Scalable Django Architecture (20)

The State of WebSockets in Django
The State of WebSockets in DjangoThe State of WebSockets in Django
The State of WebSockets in Django
 
NYC Identity Summit Tech Day: ForgeRock DevOps/Cloud Strategy
NYC Identity Summit Tech Day: ForgeRock DevOps/Cloud StrategyNYC Identity Summit Tech Day: ForgeRock DevOps/Cloud Strategy
NYC Identity Summit Tech Day: ForgeRock DevOps/Cloud Strategy
 
Architecture & Workflow of Modern Web Apps
Architecture & Workflow of Modern Web AppsArchitecture & Workflow of Modern Web Apps
Architecture & Workflow of Modern Web Apps
 
Containerdays Intro to Habitat
Containerdays Intro to HabitatContainerdays Intro to Habitat
Containerdays Intro to Habitat
 
Exploring pwa for shopware
Exploring pwa for shopwareExploring pwa for shopware
Exploring pwa for shopware
 
Java EE Arquillian Testing with Docker & The Cloud
Java EE Arquillian Testing with Docker & The CloudJava EE Arquillian Testing with Docker & The Cloud
Java EE Arquillian Testing with Docker & The Cloud
 
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...
 
20 tips for website performance
20 tips for website performance20 tips for website performance
20 tips for website performance
 
12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQL12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQL
 
CQRS and Event Sourcing for Java Developers
CQRS and Event Sourcing for Java DevelopersCQRS and Event Sourcing for Java Developers
CQRS and Event Sourcing for Java Developers
 
Stay productive while slicing up the monolith
Stay productive while slicing up the monolith Stay productive while slicing up the monolith
Stay productive while slicing up the monolith
 
performance.ppt
performance.pptperformance.ppt
performance.ppt
 
Preparing your dockerised application for production deployment
Preparing your dockerised application for production deploymentPreparing your dockerised application for production deployment
Preparing your dockerised application for production deployment
 
The Kitchen Cloud How To: Automating Joyent SmartMachines with Chef
The Kitchen Cloud How To: Automating Joyent SmartMachines with ChefThe Kitchen Cloud How To: Automating Joyent SmartMachines with Chef
The Kitchen Cloud How To: Automating Joyent SmartMachines with Chef
 
Logs aggregation and analysis
Logs aggregation and analysisLogs aggregation and analysis
Logs aggregation and analysis
 
How we realized SOA by Python at PyCon JP 2015
How we realized SOA by Python at PyCon JP 2015How we realized SOA by Python at PyCon JP 2015
How we realized SOA by Python at PyCon JP 2015
 
Golang @ Tokopedia
Golang @ TokopediaGolang @ Tokopedia
Golang @ Tokopedia
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and Gaelyk
 
IMC Summit 2016 Breakout - Greg Luck - How to Speed Up Your Application Using...
IMC Summit 2016 Breakout - Greg Luck - How to Speed Up Your Application Using...IMC Summit 2016 Breakout - Greg Luck - How to Speed Up Your Application Using...
IMC Summit 2016 Breakout - Greg Luck - How to Speed Up Your Application Using...
 
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na NuvemTecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
 

More from Rami Sayar

Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React NativeRami Sayar
 
FITC - Exploring Art-Directed Responsive Images
FITC - Exploring Art-Directed Responsive ImagesFITC - Exploring Art-Directed Responsive Images
FITC - Exploring Art-Directed Responsive ImagesRami Sayar
 
Web a Quebec - JS Debugging
Web a Quebec - JS DebuggingWeb a Quebec - JS Debugging
Web a Quebec - JS DebuggingRami Sayar
 
An Intense Overview of the React Ecosystem
An Intense Overview of the React EcosystemAn Intense Overview of the React Ecosystem
An Intense Overview of the React EcosystemRami Sayar
 
Creating Beautiful CSS3 Animations - FITC Amsterdam 2016
Creating Beautiful CSS3 Animations - FITC Amsterdam 2016Creating Beautiful CSS3 Animations - FITC Amsterdam 2016
Creating Beautiful CSS3 Animations - FITC Amsterdam 2016Rami Sayar
 
Here Be Dragons - Debugging WordPress
Here Be Dragons - Debugging WordPressHere Be Dragons - Debugging WordPress
Here Be Dragons - Debugging WordPressRami Sayar
 
FITC - Here Be Dragons: Advanced JavaScript Debugging
FITC - Here Be Dragons: Advanced JavaScript DebuggingFITC - Here Be Dragons: Advanced JavaScript Debugging
FITC - Here Be Dragons: Advanced JavaScript DebuggingRami Sayar
 
What's New in ES6 for Web Devs
What's New in ES6 for Web DevsWhat's New in ES6 for Web Devs
What's New in ES6 for Web DevsRami Sayar
 
FITC - Bootstrap Unleashed
FITC - Bootstrap UnleashedFITC - Bootstrap Unleashed
FITC - Bootstrap UnleashedRami Sayar
 
FITC - Node.js 101
FITC - Node.js 101FITC - Node.js 101
FITC - Node.js 101Rami Sayar
 
FITC - Data Visualization in Practice
FITC - Data Visualization in PracticeFITC - Data Visualization in Practice
FITC - Data Visualization in PracticeRami Sayar
 

More from Rami Sayar (11)

Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React Native
 
FITC - Exploring Art-Directed Responsive Images
FITC - Exploring Art-Directed Responsive ImagesFITC - Exploring Art-Directed Responsive Images
FITC - Exploring Art-Directed Responsive Images
 
Web a Quebec - JS Debugging
Web a Quebec - JS DebuggingWeb a Quebec - JS Debugging
Web a Quebec - JS Debugging
 
An Intense Overview of the React Ecosystem
An Intense Overview of the React EcosystemAn Intense Overview of the React Ecosystem
An Intense Overview of the React Ecosystem
 
Creating Beautiful CSS3 Animations - FITC Amsterdam 2016
Creating Beautiful CSS3 Animations - FITC Amsterdam 2016Creating Beautiful CSS3 Animations - FITC Amsterdam 2016
Creating Beautiful CSS3 Animations - FITC Amsterdam 2016
 
Here Be Dragons - Debugging WordPress
Here Be Dragons - Debugging WordPressHere Be Dragons - Debugging WordPress
Here Be Dragons - Debugging WordPress
 
FITC - Here Be Dragons: Advanced JavaScript Debugging
FITC - Here Be Dragons: Advanced JavaScript DebuggingFITC - Here Be Dragons: Advanced JavaScript Debugging
FITC - Here Be Dragons: Advanced JavaScript Debugging
 
What's New in ES6 for Web Devs
What's New in ES6 for Web DevsWhat's New in ES6 for Web Devs
What's New in ES6 for Web Devs
 
FITC - Bootstrap Unleashed
FITC - Bootstrap UnleashedFITC - Bootstrap Unleashed
FITC - Bootstrap Unleashed
 
FITC - Node.js 101
FITC - Node.js 101FITC - Node.js 101
FITC - Node.js 101
 
FITC - Data Visualization in Practice
FITC - Data Visualization in PracticeFITC - Data Visualization in Practice
FITC - Data Visualization in Practice
 

Recently uploaded

DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024APNIC
 
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...SUHANI PANDEY
 
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...singhpriety023
 
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxAWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxellan12
 
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...tanu pandey
 
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls DubaiDubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubaikojalkojal131
 
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...Neha Pandey
 
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableCall Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableSeo
 
Call Now ☎ 8264348440 !! Call Girls in Rani Bagh Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Rani Bagh Escort Service Delhi N.C.R.Call Now ☎ 8264348440 !! Call Girls in Rani Bagh Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Rani Bagh Escort Service Delhi N.C.R.soniya singh
 
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)Delhi Call girls
 
On Starlink, presented by Geoff Huston at NZNOG 2024
On Starlink, presented by Geoff Huston at NZNOG 2024On Starlink, presented by Geoff Huston at NZNOG 2024
On Starlink, presented by Geoff Huston at NZNOG 2024APNIC
 
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
2nd Solid Symposium: Solid Pods vs Personal Knowledge GraphsEleniIlkou
 
Al Barsha Night Partner +0567686026 Call Girls Dubai
Al Barsha Night Partner +0567686026 Call Girls  DubaiAl Barsha Night Partner +0567686026 Call Girls  Dubai
Al Barsha Night Partner +0567686026 Call Girls DubaiEscorts Call Girls
 
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...SUHANI PANDEY
 
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.soniya singh
 

Recently uploaded (20)

DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
 
Call Girls in Prashant Vihar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Prashant Vihar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Prashant Vihar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Prashant Vihar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
 
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
 
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
 
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
 
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxAWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
 
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
 
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls DubaiDubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
 
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
 
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableCall Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
 
Call Now ☎ 8264348440 !! Call Girls in Rani Bagh Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Rani Bagh Escort Service Delhi N.C.R.Call Now ☎ 8264348440 !! Call Girls in Rani Bagh Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Rani Bagh Escort Service Delhi N.C.R.
 
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
 
On Starlink, presented by Geoff Huston at NZNOG 2024
On Starlink, presented by Geoff Huston at NZNOG 2024On Starlink, presented by Geoff Huston at NZNOG 2024
On Starlink, presented by Geoff Huston at NZNOG 2024
 
VVVIP Call Girls In Connaught Place ➡️ Delhi ➡️ 9999965857 🚀 No Advance 24HRS...
VVVIP Call Girls In Connaught Place ➡️ Delhi ➡️ 9999965857 🚀 No Advance 24HRS...VVVIP Call Girls In Connaught Place ➡️ Delhi ➡️ 9999965857 🚀 No Advance 24HRS...
VVVIP Call Girls In Connaught Place ➡️ Delhi ➡️ 9999965857 🚀 No Advance 24HRS...
 
Low Sexy Call Girls In Mohali 9053900678 🥵Have Save And Good Place 🥵
Low Sexy Call Girls In Mohali 9053900678 🥵Have Save And Good Place 🥵Low Sexy Call Girls In Mohali 9053900678 🥵Have Save And Good Place 🥵
Low Sexy Call Girls In Mohali 9053900678 🥵Have Save And Good Place 🥵
 
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
 
Al Barsha Night Partner +0567686026 Call Girls Dubai
Al Barsha Night Partner +0567686026 Call Girls  DubaiAl Barsha Night Partner +0567686026 Call Girls  Dubai
Al Barsha Night Partner +0567686026 Call Girls Dubai
 
Russian Call Girls in %(+971524965298 )# Call Girls in Dubai
Russian Call Girls in %(+971524965298  )#  Call Girls in DubaiRussian Call Girls in %(+971524965298  )#  Call Girls in Dubai
Russian Call Girls in %(+971524965298 )# Call Girls in Dubai
 
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
 
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
 

Scalable Django Architecture

  • 1. Advanced Django Architecture Rami Sayar - @ramisayar Technical Evangelist Microsoft Canada
  • 2. Advanced Scalable Django Architecture Rami Sayar - @ramisayar Technical Evangelist Microsoft Canada
  • 3. Agenda •  Advanced Django Techniques & Patterns •  Structuring Complex Applications •  Scaling Django Applications •  Django Applications in Production CONFOO - @RAMISAYAR
  • 4. What is a production web app? •  Django is surrounded by tons of applications, services and code in production. •  Advanced Django architecture is needed to support Django in production without failing hard. CONFOO - @RAMISAYAR
  • 6. Load Balancing •  Load balancing Django improves the performance and reliability by distributing traffic. •  Becomes an interesting problem when you have to consider: •  SSL Termination •  Sticky Sessions? •  WebSockets? CONFOO - @RAMISAYAR
  • 7. Load Balancing = Django + HAProxy + SSL •  HAProxy gained native SSL support in HAProxy 1.5.x => June 2014! •  SSL Termination: •  Fairly straightforward to set up HAProxy. •  Read: How To Implement SSL Termination With HAProxy CONFOO - @RAMISAYAR
  • 8. Load Balancing Proxying & Remote Addr class SetRemoteAddrFromForwardedFor(object): def process_request(self, request): try: real_ip = request.META['HTTP_X_FORWARDED_FOR'] except KeyError: pass else: # HTTP_X_FORWARDED_FOR can be a comma-separated list of IPs. # Take just the first one. real_ip = real_ip.split(",")[0] request.META['REMOTE_ADDR'] = real_ip CONFOO - @RAMISAYAR
  • 9. Azure Traffic Manager •  High Performance Load Balancer + DNS Support. •  Sticky Sessions don’t exist. •  HTTPS Supported. CONFOO - @RAMISAYAR
  • 11. Caching = Django + Varnish •  Varnish has a tendency to just cache EVERYTHING which can be frustrating for the User, unless you set it up properly. •  Varnish does not cache content & cookies. •  Varnish and Django CSRF protection gotcha. •  Varnish does not deal with HTTPS (hence the need of HAProxy in front of Varnish). CONFOO - @RAMISAYAR
  • 12. Caching = Django + Varnish •  Django-Varnish – “It allows you to monitor certain models and when they are updated, Django Varnish will purge the model's absolute_url on your frontend(s). This ensures that object detail pages are served blazingly fast and are always up to date.” •  https://github.com/justquick/django-varnish •  Project Idea: Deeper Django/Varnish integration. CONFOO - @RAMISAYAR
  • 13. Caching = Django + Varnish •  https://www.varnish-cache.org/ •  http://www.isvarnishworking.com/ •  http://yml-blog.blogspot.ca/2010/01/esi-using-varnish-and- django.html •  http://chase-seibert.github.io/blog/2011/09/23/varnish-caching- for-unauthenticated-django-views.html •  http://blog.bigdinosaur.org/adventures-in-varnish/ •  http://www.nedproductions.biz/wiki/a-perfected-varnish-reverse- caching-proxy-vcl-script CONFOO - @RAMISAYAR
  • 15. Web Server = Django + Apache •  Forced to use Apache? Your options: •  mod_python (No) •  mod_wsgi (Yes) •  FastCGI (Deprecated since 1.7) •  Phusion Passenger (Yes) CONFOO - @RAMISAYAR
  • 16. Web Server = Django + Apache •  mod_wsgi •  Decent performance on the Apache side. •  You can setup Apache any way you like. •  You can setup mod_wsgi to use virtualenv. CONFOO - @RAMISAYAR
  • 17. Web Server = Django + Apache import os, sys, site # Add the site-packages of the chosen virtualenv to work with site.addsitedir('~/.virtualenvs/myprojectenv/local/lib/python2.7/site-packages') # Add the app's directory to the PYTHONPATH sys.path.append('/home/django_projects/MyProject') sys.path.append('/home/django_projects/MyProject/myproject') os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings' # Activate your virtual env activate_env=os.path.expanduser("~/.virtualenvs/myprojectenv/bin/activate_this.py") execfile(activate_env, dict(__file__=activate_env)) import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() CONFOO - @RAMISAYAR
  • 18. Web Server = Django + Alternatives (aka. Nginx) •  Nginx + uWSGI [uwsgi] touch-reload = /tmp/newproject socket = 127.0.0.1:3031 workers = 2 chdir = /srv/newproject env = DJANGO_SETTINGS_MODULE=newproject.settings module = django.core.handlers.wsgi:WSGIHander() CONFOO - @RAMISAYAR
  • 19. Web Server = Django + Alternatives (aka. Gunicorn) •  Nginx & Gunicorn •  In theory, you should use Nginx as a reverse proxy here, to serve static files if you’re not uploading everything to a CDN or a separate media server. If you are, you can use HAProxy and Gunicorn as a standalone webserver, one less dependency to care about. •  Install Gunicorn directly inside your virtual environment. •  Use Gaffer to monitor the Gunicorn. CONFOO - @RAMISAYAR
  • 20. Web Server - References •  http://blog.kgriffs.com/2012/12/18/uwsgi-vs-gunicorn-vs-node- benchmarks.html CONFOO - @RAMISAYAR
  • 21. REST APIs & Django CONFOO - @RAMISAYAR
  • 22. Use Django REST Framework! Django REST Framework vs Django Tasty Pie CONFOO - @RAMISAYAR
  • 23. Cache & Django CONFOO - @RAMISAYAR
  • 24. Caching in Production •  Caching – Django has multiple options: •  Redis. Make sure you use Hiredis and django-redis-cache. Use a hosted Redis Cache (Azure, AWS, etc). •  Memcached. Make sure you use pylibmc and not python-memcached, better performance with the C library. •  SSL still matters. CONFOO - @RAMISAYAR
  • 25. Azure Redis Cache CONFOO - @RAMISAYAR
  • 27. Logging in Production •  Logstash •  Collect logs, parse them, and store them for later use. •  Free and open source. •  Set it up with Redis. CONFOO - @RAMISAYAR
  • 28. Logging in Production – Use Python-Logstash LOGGING = { 'handlers': { 'logstash': { 'level': 'DEBUG', 'class': 'logstash.LogstashHandler', 'host': 'localhost', 'port': 5959, # Default value: 5959 'version': 1, # Version of logstash event schema. Default value: 0 (for backward compatibility of the library) 'message_type': 'logstash', # 'type' field in logstash message. Default value: 'logstash'. 'tags': ['tag1', 'tag2'], # list of tags. Default: None. }, }, CONFOO - @RAMISAYAR
  • 29. Logging in Production – Use Python-Logstash 'loggers': { 'django.request': { 'handlers': ['logstash'], 'level': 'DEBUG', 'propagate': True, }, }, } CONFOO - @RAMISAYAR
  • 30. Logging in Production – Using Sentry •  Realtime event logging and aggregation platform. •  Specialize in monitoring exceptions and errors. •  https://github.com/getsentry/sentry CONFOO - @RAMISAYAR
  • 32. PostgreSQL in Production – pgpool & slony •  PostgreSQL 9+ has streaming replication assuming you’re running identical databases with identical version on identical architectures (not really an issue). •  If not using the Streaming Replication feature (WAL), you’ll want to use either pgpool or slony to scale your PostgreSQL database across multiple machines. •  Use Slony if you want master-slave-peer replication. •  Use pgpool or pgbouncer for connection pooling. Pgbouncer only does connection pooling. CONFOO - @RAMISAYAR
  • 33. Async Tasks & Django CONFOO - @RAMISAYAR
  • 34. Async Tasks – Celery •  Use Celery for Asynchronous Tasks •  Use Celery with Redis and store results in Django ORM •  RQ is an alternative for distributing tasks. (Based on Redis) Read: http://www.caktusgroup.com/blog/2014/09/29/celery-production/ CONFOO - @RAMISAYAR
  • 35. On Redis •  Redis is extremely popular as an easy and simple publish- subscribe. •  Redis is very particular about memory. Running out of memory in Redis -> CRASH AND BURN! •  If you don’t have enough memory in your VM to run Redis Cache -> Change your approach, use Apache Kafka. CONFOO - @RAMISAYAR
  • 36. Tips & Techniques •  Don’t forget: •  Turn off Debug Mode •  Turn off Template Debug Mode •  Use different Django Settings Modules depending on the role and environment you are in through environment variables by setting “DJANGO_SETTINGS_MODULE”. CONFOO - @RAMISAYAR
  • 37. What did we learn? •  Scaling Django Architectures •  Most of the work surrounds Django •  Minimal changes to your django app for the most part. CONFOO - @RAMISAYAR
  • 38. Thank You! Questions? Follow @ramisayar CONFOO - @RAMISAYAR
  • 39. Resources •  http://blog.disqus.com/post/62187806135/scaling-django-to-8- billion-page-views •  http://engineering.hackerearth.com/2013/10/07/scaling- database-with-django-and-haproxy/ •  http://www.djangobook.com/en/2.0/chapter12.html •  https://www.digitalocean.com/community/tutorials/how-to- implement-ssl-termination-with-haproxy-on-ubuntu-14-04 •  https://docs.djangoproject.com/en/1.7/topics/security/ •  https://www.digitalocean.com/community/tutorials/how-to-scale- django-beyond-the-basics CONFOO - @RAMISAYAR
  • 40. ©2013  Microso-  Corpora1on.  All  rights  reserved.  Microso-,  Windows,  Office,  Azure,  System  Center,  Dynamics  and  other  product  names  are  or  may  be  registered  trademarks  and/or  trademarks  in  the   U.S.  and/or  other  countries.  The  informa1on  herein  is  for  informa1onal  purposes  only  and  represents  the  current  view  of  Microso-  Corpora1on  as  of  the  date  of  this  presenta1on.  Because  Microso-   must  respond  to  changing  market  condi1ons,  it  should  not  be  interpreted  to  be  a  commitment  on  the  part  of  Microso-,  and  Microso-  cannot  guarantee  the  accuracy  of  any  informa1on  provided  a-er   the  date  of  this  presenta1on.  MICROSOFT  MAKES  NO  WARRANTIES,  EXPRESS,  IMPLIED  OR  STATUTORY,  AS  TO  THE  INFORMATION  IN  THIS  PRESENTATION.  

Editor's Notes

  1. What does a web application look like in production?
  2. A few small complications, one of which is that every request’s remote IP (request.META["REMOTE_IP"]) will be that of the load balancer, not the actual IP making the request. Load balancers deal with this by setting a special header, X-Forwarded-For, to the actual requesting IP address. Use Middleware.
  3. A few small complications, one of which is that every request’s remote IP (request.META["REMOTE_IP"]) will be that of the load balancer, not the actual IP making the request. Load balancers deal with this by setting a special header, X-Forwarded-For, to the actual requesting IP address. Use Middleware.