Designing Fast & Scalable Python MicroServices with Django
by
Dinesh Joshi
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Designing Fast & Scalable Python MicroServices with Django Dinesh A. Joshi @dineshjoshi Feb 2018
Slide 2
Slide 2 text
About ● Senior Software Engineer ● Distributed Systems @ Georgia Tech, Atlanta ● Python Enthusiast
Slide 3
Slide 3 text
Outline ● Reference App ● Request & Response Pipeline ● Middleware ● ORM ● Measuring Performance ● Caching ● Async Processing ● Questions
Slide 4
Slide 4 text
● Python 2 or 3 ● Packages ○ django (1.9+) ○ django-restframework ○ django-redis ○ psycopg2 ○ celery ● Postgres ● Redis Reference App Database (Postgres) Cache (Redis) Celery Tasks Queue Django App django App
Slide 5
Slide 5 text
Request & Response Pipeline Turn a Request into a Response...
Slide 6
Slide 6 text
Request & Response Pipeline 1 WSGI Handler Middleware (Request) 2 View 3 Request duration Middleware (Response) 4 Don’t Block!
Slide 7
Slide 7 text
Middleware The code that runs in the middle...
Slide 8
Slide 8 text
● Audit & Remove unnecessary middleware ● Use ○ Conditional GET middleware ○ GzipMiddleware ○ Cached Sessions Middleware: Accelerating Responses
Slide 9
Slide 9 text
Middleware
Slide 10
Slide 10 text
ORM Mapping Objects to Database Table, etc...
Slide 11
Slide 11 text
● Add indexes ● Enable persistent connections to database ● Use Connection Pooling ORM (Settings)
Slide 12
Slide 12 text
● prefetch_related() ○ many-to-many, many-to-one relationships ● select_related() ○ Single valued relationships ● Reuse QuerySets ORM (Code)
Slide 13
Slide 13 text
len(cars) cars.count() ORM (Code)
Slide 14
Slide 14 text
ORM (Code) len(cars) cars.count()
Slide 15
Slide 15 text
Measurement Something about premature optimization being root of all evil...
Slide 16
Slide 16 text
django-debug-toolbar
Slide 17
Slide 17 text
django-debug-toolbar
Slide 18
Slide 18 text
django-debug-toolbar
Slide 19
Slide 19 text
Caching When everything else fails...
Slide 20
Slide 20 text
● Read heavy workloads ● Boosts performance many-folds for cached responses ● View Level or custom ● Invalidation is complex Caching
Slide 21
Slide 21 text
Caching
Slide 22
Slide 22 text
Async Processing Why do it now when you can do it later…?
Slide 23
Slide 23 text
Request & Response Pipeline 1 WSGI Handler Middleware (Request) 2 View 3 Request duration Middleware (Response) 4 Don’t Block!
Slide 24
Slide 24 text
Async Processing Database (Postgres) Cache (Redis) Celery Tasks Queue Django App django App 1 2 3 Service X 4
Slide 25
Slide 25 text
Questions?
Slide 26
Slide 26 text
Contact Dinesh Joshi
[email protected]
www.dineshjoshi.com @dineshjoshi