SlideShare a Scribd company logo
Scaling python webapps from 0 to 50 million users - A top-down approachJinalJhaveriSystems Architectjinal@lolapps.com
Social Games!!
AgendaWhy is performance a big issue for social games?ArchitectureBottlenecks and solutionsPerformance strategyQuestions
Why is performance a big issue for social games?

Recommended for you

Php resque
Php resquePhp resque
Php resque

This talk presents php-resque which is a php port of resque which was built by the cool folks @ github.

background jobsphpgithub
Playing with Hadoop (NPW2013)
Playing with Hadoop (NPW2013)Playing with Hadoop (NPW2013)
Playing with Hadoop (NPW2013)

This document is a presentation on Hadoop given by Søren Lund. It begins with disclaimers that the speaker has no production experience with Hadoop. It then provides an overview of Hadoop, how it addresses the problem of scaling to large amounts of data, and its core components. The presentation demonstrates how to install and run Hadoop on a single machine, provides examples of running word count jobs locally and on Hadoop, and discusses related tools like Hive and Pig. It concludes with notes on the Hadoop user interface, joins, running Hadoop in the cloud, and other Hadoop distributions.

map reducehadoopperl
Go Profiling - John Graham-Cumming
Go Profiling - John Graham-Cumming Go Profiling - John Graham-Cumming
Go Profiling - John Graham-Cumming

This document discusses profiling Go programs. It begins by stating the golden rule of premature optimization and emphasizes the importance of measuring before optimizing. Several Go profiling tools are described, including tools for timing, CPU profiling, and memory profiling. An example of a badly implemented LRU cache is provided and profiled to identify inefficiencies. Various improvements are then made to the LRU cache and tested, including using a linked list, random eviction, and eliminating slice operations. The document concludes with a discussion of memory recycling in Go programs.

jgcgocloudflare
Why is performance a big issue for social games? Extremely high viralityinstalls, notifications, emails, feeds, eventsAmount of time spent is highhttp://www.bestfacebookapplications.com
Game Architecture
Bottlenecks and SolutionsLoad BalancerWeb ServerWeb ApplicationBrowser
Load BalancerHAProxyRoundrobinNo gzip / no file servingSupports ipbased / regex based load balancing

Recommended for you

Background Jobs with Resque
Background Jobs with ResqueBackground Jobs with Resque
Background Jobs with Resque

As more and more web applications integrate with third-party APIs and other external data, processing those external resources in the background more and more important. A simple job runner is a great start, however as your load increases, you very quickly outgrew that simplistic queuing system. We will cover where getting started using Resque and Redis, how to test your jobs, when it makes sense to use Resque, implementations of Resque in other languages, and look how I've used Resque.

resquerubyredis
Ansible, Simplicity, and the Zen of Python
Ansible, Simplicity, and the Zen of PythonAnsible, Simplicity, and the Zen of Python
Ansible, Simplicity, and the Zen of Python

Slides from the following talk presented at PyCon Australia 2015: https://www.youtube.com/watch?v=JlrkizEBjXk Ansible is a configuration management tool, written in Python, that has taken the world of IT automation by storm. Its most remarkable quality is simplicity. The Zen of Python is a set of aphorisms which capture the design philosophy of the Python language, one being "Simple is better than complex".

ansiblesimplicitypython
How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...
How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...
How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...

**The slides are not correctly rendered. The HTML/Javascript version is here: http://presentations.pothix.com/rubyconf2013/** This presentation shows what we have done with Ruby to create Locaweb's cloud computing product.

rubycloud computing
Bottlenecks and SolutionsLoad BalancerWeb ServerWeb ApplicationBrowser
WebserverPastern instances (n = no.ofcpu) (10 threads each)Timeout (10 seconds)Disable Nagles optimization
Bottlenecks and SolutionsLoad BalancerWeb ServerWeb ApplicationBrowser
Web ApplicationMemcached to avoid DB tripsORM integrationCompressionCaching non-existenceLists cache

Recommended for you

WP HTTP API
WP HTTP APIWP HTTP API
WP HTTP API

The document discusses the WordPress HTTP API and its helper functions for making HTTP requests. It explains that the WP HTTP API provides a powerful interface for making remote calls using functions like wp_remote_get(), wp_remote_post(), and wp_remote_request(). These functions return responses that can be parsed to retrieve things like the body, headers, response code, and response message. Additional resources for using the API are also provided.

wordpress
Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...
Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...
Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...

Elasticsearch is a distributed, RESTful search and analytics engine built on top of Apache Lucene. After the initial release in 2010 it has become the most widely used full-text search engine, but it is not stopping there. The revolution happened and now it is time for evolution. We dive into current improvements and new features — how to make a great product even better. https://www.bigdataspain.org/2017/talk/elasticsearch-revolution-you-know-for-search Big Data Spain 2017 16th - 17th November Kinépolis Madrid

big databig data spain
CPAN 模組二三事
CPAN 模組二三事CPAN 模組二三事
CPAN 模組二三事

This document provides information about CPAN (Comprehensive Perl Archive Network) including what it is, how to use it, popular modules, authors, and tips. Some key points: - CPAN is a repository for Perl modules with over 12,000 modules and 3,400+ authors. It helps avoid duplicating code. - Popular ways to install modules include using the CPAN shell, CPANPLUS shell, or cpanminus command line tool. - Useful modules cover areas like web development, databases, testing, graphics, and more. Top authors contribute many modules. - Documentation for any module can be found via its perldoc or on search.cpan.org.

perl cpan module
Memcache / ORM integration   def get(self, query, ident, *args, **kwargs):    key = query.mapper.identity_key_from_primary_key(ident)    obj = query.session.identity_map.get(key)    if obj:        	return obj     mkey = gen_cache_key(key[0].__name__, key[1], self.version_string) obj = self.mclient.get(mkey)	if obj is None:obj = query._get(key, ident, **kwargs)        		if obj is not None:       		query.session.expunge(obj)       		self.mclient.set(mkey, obj)    if obj:    return query.session.merge(obj, dont_load=True)    else:    return NoneMike Nelson
Memcached to avoid DB tripsORM integrationCompressionCaching non-existenceLists cacheBest Effort caching
Web ApplicationLocal cachePythonSpeed/PerformanceTips (wiki.python.org)AsynchronousFacebookapi callsLog processingEvent trackingPartial rendering / json / ajax
Bottlenecks and SolutionsLoad BalancerWeb ServerWeb ApplicationBrowser

Recommended for you

OpenERP Performance Benchmark
OpenERP Performance BenchmarkOpenERP Performance Benchmark
OpenERP Performance Benchmark

Benchmark OpenERP : testez les performances et la robustesse d'OpenERP sur vos volumes de données. Le benchmark technique d'OpenERP propose des scripts automatiques pour tester la charge d'OpenERP vis-à-vis de vos données et de votre activité.

openerp monitoringopenerp funkloadopenerp sizing
Background processing with Resque
Background processing with ResqueBackground processing with Resque
Background processing with Resque

Resque is a background processing library for Ruby that allows processing of jobs asynchronously via a queue using Redis. It uses workers that listen for jobs on queues and process them, and includes plugins like resque-lock to prevent duplicate jobs and resque-loner to relaunch failed jobs. The document discusses setting up Resque with God for monitoring workers, handling signals, and restarting workers gracefully on the bookandgolf.com project which synchronizes golf course data from multiple APIs into Redis.

resque redis ruby rails
From zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and ElasticsearchFrom zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and Elasticsearch

Presentation I gave during DevOps Days Warsaw 2014 about combining Elasticsearch, Logstash and Kibana together or use our Logsene solution instead of Elasticsearch.

kibanaelasticsearchspm
Browser – Best practicesGzipCDNLoading images in parallelAjaxificationClient side caching
Gzipfrom paste.gzipper import make_gzip_middlewareapp = make_gzip_middleware(app, global_conf, compress_level=1)
Browser – Best practicesGzipCDNLoading images in parallelAjaxificationClient side caching
Performance strategyProfileImproveProfileImproveProfileImproveMeasure, Measure, Measureload balancer request timeWeb server request timeController request timeRendering time

Recommended for you

Практический опыт профайлинга и оптимизации производительности Ruby-приложений
Практический опыт профайлинга и оптимизации производительности Ruby-приложенийПрактический опыт профайлинга и оптимизации производительности Ruby-приложений
Практический опыт профайлинга и оптимизации производительности Ruby-приложений

Алексей Туля, Senior Software Developer в Sam Solutions «Практический опыт профайлинга и оптимизации производительности Ruby-приложений» В своем докладе Алексей сделает краткий обзор различных реализаций Ruby, попытается найти причины, почему Ruby медленный. Рассмотрит вопрос сборки мусора в Ruby и вызова методов – почему в Ruby это дорого. Расскажет и покажет, что делать, чтобы поднять производительность, проведет обзор утилит для поиска проблемных мест, обзор профайлеров и расскажет, как интерпретировать результаты. Доклад в основном нацелен на практический подход по поиску проблем. Материал предназначен для пользователей Linux, поэтому все практические советы будут для ОС Linux.

ruby
Go-Couchbase Golang Paris 2015/12/17
Go-Couchbase Golang Paris 2015/12/17Go-Couchbase Golang Paris 2015/12/17
Go-Couchbase Golang Paris 2015/12/17

This document summarizes Go-Couchbase, a Go client library for Couchbase. It provides functions for connecting to Couchbase clusters and buckets, and performing CRUD operations on documents. These include set(), get(), update(), delete(), and add() methods. Go-Couchbase is simple and thread-safe to use. It can also replicate data between Couchbase clusters.

nosqlcouchbaseprogramming
fog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloudfog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloud

Learn how to easily get started on cloud computing with fog. If you can control your infrastructure choices, you’ll make better choices in development and get what you need in production. You'll get an overview of fog and concrete examples to give you a head start on your provisioning workflow.

fogrubycloud
Profiling - Middlewareclass TimerMiddleware(object):    """     Simple middleware that logs the time of each request to the provided logger.    @author Brian Rue    """    def __init__(self, app, log, name='outer'):        self.app = app         self.log = log         self.name = name    def __call__(self, environ, start_response):        start_time = time.time()        try:            return self.app(environ, start_response)        finally:            end_time = time.time()            url = environ.get('PATH_INFO', '')             if environ.get('QUERY_STRING'):                url += '?' + environ['QUERY_STRING']            self.log.debug("%f %s-%s" % ((end_time - start_time), self.name, url))
Profiling2010-02-07 13:27:07 0.182282 mission/index /app/20/mission user: 1000002704984422010-02-07 13:27:07 0.105489 outer-/app/20/mission?dummyid=12010-02-07 13:27:07 0.287437 battle/attack /app/19/battle/attack user: 5018791262010-02-07 13:27:07 0.006339 track/record_event /app/21/track/record_event user: 11635112662010-02-07 13:27:07 0.032981 outer-/app/21/track/record_event?file_name=base.js&cache_key=22850012647231752010-02-07 13:27:07 0.006186 track/record_event /app/19/track/record_event user: 10396625362010-02-07 13:27:07 0.072400 outer-/app/19/track/record_event?file_name=base.js&cache_key=2285001265425258
Profiling
Profiling - Repoze # establish the Registry for this application app = registry.RegistryManager(app)from repoze.profile.profiler import AccumulatingProfileMiddlewareapp = AccumulatingProfileMiddleware(app,                                             						log_filename='/tmp/gameprofile.log',                                             				 		cachegrind_filename='/tmp/cachegrind.out.bar',                                             			discard_first_request=True,                                             flush_at_shutdown=True,        		path='/__profile__')

Recommended for you

Jak se ^bonami\.(cz|pl|sk)$ vešlo do kontejneru
Jak se ^bonami\.(cz|pl|sk)$ vešlo do kontejneruJak se ^bonami\.(cz|pl|sk)$ vešlo do kontejneru
Jak se ^bonami\.(cz|pl|sk)$ vešlo do kontejneru

This document discusses how to deploy a web application using Docker containers. It provides an overview of Docker concepts like images, containers, and layers. It then shows the Dockerfile and configuration used to build images for a Bonami web application. It demonstrates deploying the images to servers using Fabric and managing the deployment with configuration files and hooks.

dockerfabricdeploy
Beyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic AnalysisBeyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic Analysis

Despite advances in software design and static analysis techniques, software remains incredibly complicated and difficult to reason about. Understanding highly-concurrent, kernel-level, and intentionally-obfuscated programs are among the problem domains that spawned the field of dynamic program analysis. More than mere debuggers, the challenge of dynamic analysis tools is to be able record, analyze, and replay execution without sacrificing performance. This talk will provide an introduction to the dynamic analysis research space and hopefully inspire you to consider integrating these techniques into your own internal tools.

software testingopen source softwaredynamic content
Design Patterns for Distributed Non-Relational Databases
Design Patterns for Distributed Non-Relational DatabasesDesign Patterns for Distributed Non-Relational Databases
Design Patterns for Distributed Non-Relational Databases

The document discusses design patterns for distributed non-relational databases, including consistent hashing for key placement, eventual consistency models, vector clocks for determining history, log-structured merge trees for storage layout, and gossip protocols for cluster management without a single point of failure. It raises questions to ask presenters about scalability, reliability, performance, consistency models, cluster management, data models, and real-life considerations for using such systems.

nosqlscalabilitydatabases
Profiling - Repozencalls: number of callstottime: time spent in given function and excluding the time spent in sub-functionspercall: tottime / ncallscumtime: total time spent in this and all sub-functions.percall: cumtime / ncallsfilename:lineno(function): function info.
Profiling - Dozerfrom dozer import Dozer, Logviewapp = Logview(app, config)app = Dozer(app)
Database Optimistic vs. Pessimistic lockingversion_idUpdate table set data = xyz where version = 16.SQLAlchemy(echo, echo_pool and logger)Remove/rollbackProcess1DataVal = “abc”Version: 16 Process2DataVal  = “pqr”Version:16Data: Val = xyzVersion: 16
Paster vs. Tornado

Recommended for you

Down the rabbit hole, profiling in Django
Down the rabbit hole, profiling in DjangoDown the rabbit hole, profiling in Django
Down the rabbit hole, profiling in Django

The document discusses various tools for profiling Python code such as cProfile, profile, hotshot, line profiler, and trace to identify inefficient code and bottlenecks. It covers using these tools to profile CPU and I/O bound problems as well as memory profiling issues. The document also demonstrates how to optimize code through caching, removing unnecessary function calls, and memoization.

profileprofessional developmentsoftware development
Learning Pool Webinar: Creating, editing and using images
Learning Pool Webinar: Creating, editing and using imagesLearning Pool Webinar: Creating, editing and using images
Learning Pool Webinar: Creating, editing and using images

This document provides an overview of a webinar on creating, editing, and using images in PowerPoint. The webinar will cover how to build an image from scratch in PowerPoint using drawing tools, create a collage image using an online tool called Picnik, add text and frames to images, change image layouts, and save final images. Resources for further learning are also listed.

learning pool; e-learning; webinar
Slide Share Mw
Slide Share MwSlide Share Mw
Slide Share Mw

SlideShare is a website that allows users to upload, view, and share presentation files. It can be accessed at http://www.slideshare.net, where users can search for presentations by topic, author, or category. To use SlideShare, one creates an account to log in, uploads presentation files, saves them, and then posts them to share. While it provides inspiration and easy viewing and sharing of presentations, SlideShare can also lead to viewing inappropriate content or wasting time browsing without direction.

TornadoUsed over WSGICPU and Memory usage downDidn’t do well for high response sizeAppropriate for asynchronous / realtime
AcknowledgementsLolapps teamBrian Rue, AJ Cantu, Fred Blau, Cory Virok, Justin Rosenthal, Joseph Estrada, Allen Cheung, VivekTatineni, Jason Kim, VikramAdukiaFamily
Questions

More Related Content

What's hot

Developing High Performance Application with Aerospike & Go
Developing High Performance Application with Aerospike & GoDeveloping High Performance Application with Aerospike & Go
Developing High Performance Application with Aerospike & Go
Chris Stivers
 
Fluentd - road to v1 -
Fluentd - road to v1 -Fluentd - road to v1 -
Fluentd - road to v1 -
N Masahiro
 
Dev8d 2011-pipe2 py
Dev8d 2011-pipe2 pyDev8d 2011-pipe2 py
Dev8d 2011-pipe2 py
Tony Hirst
 
Php resque
Php resquePhp resque
Php resque
Chaitanya Kuber
 
Playing with Hadoop (NPW2013)
Playing with Hadoop (NPW2013)Playing with Hadoop (NPW2013)
Playing with Hadoop (NPW2013)
Søren Lund
 
Go Profiling - John Graham-Cumming
Go Profiling - John Graham-Cumming Go Profiling - John Graham-Cumming
Go Profiling - John Graham-Cumming
Cloudflare
 
Background Jobs with Resque
Background Jobs with ResqueBackground Jobs with Resque
Background Jobs with Resque
homanj
 
Ansible, Simplicity, and the Zen of Python
Ansible, Simplicity, and the Zen of PythonAnsible, Simplicity, and the Zen of Python
Ansible, Simplicity, and the Zen of Python
toddmowen
 
How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...
How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...
How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...
Willian Molinari
 
WP HTTP API
WP HTTP APIWP HTTP API
WP HTTP API
Eunus Hosen
 
Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...
Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...
Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...
Big Data Spain
 
CPAN 模組二三事
CPAN 模組二三事CPAN 模組二三事
CPAN 模組二三事
Lin Yo-An
 
OpenERP Performance Benchmark
OpenERP Performance BenchmarkOpenERP Performance Benchmark
OpenERP Performance Benchmark
Audaxis
 
Background processing with Resque
Background processing with ResqueBackground processing with Resque
Background processing with Resque
Nicolas Blanco
 
From zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and ElasticsearchFrom zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and Elasticsearch
Rafał Kuć
 
Практический опыт профайлинга и оптимизации производительности Ruby-приложений
Практический опыт профайлинга и оптимизации производительности Ruby-приложенийПрактический опыт профайлинга и оптимизации производительности Ruby-приложений
Практический опыт профайлинга и оптимизации производительности Ruby-приложений
Olga Lavrentieva
 
Go-Couchbase Golang Paris 2015/12/17
Go-Couchbase Golang Paris 2015/12/17Go-Couchbase Golang Paris 2015/12/17
Go-Couchbase Golang Paris 2015/12/17
Edouard Buschini
 
fog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloudfog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloud
Wesley Beary
 
Jak se ^bonami\.(cz|pl|sk)$ vešlo do kontejneru
Jak se ^bonami\.(cz|pl|sk)$ vešlo do kontejneruJak se ^bonami\.(cz|pl|sk)$ vešlo do kontejneru
Jak se ^bonami\.(cz|pl|sk)$ vešlo do kontejneru
Vašek Boch
 
Beyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic AnalysisBeyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic Analysis
Fastly
 

What's hot (20)

Developing High Performance Application with Aerospike & Go
Developing High Performance Application with Aerospike & GoDeveloping High Performance Application with Aerospike & Go
Developing High Performance Application with Aerospike & Go
 
Fluentd - road to v1 -
Fluentd - road to v1 -Fluentd - road to v1 -
Fluentd - road to v1 -
 
Dev8d 2011-pipe2 py
Dev8d 2011-pipe2 pyDev8d 2011-pipe2 py
Dev8d 2011-pipe2 py
 
Php resque
Php resquePhp resque
Php resque
 
Playing with Hadoop (NPW2013)
Playing with Hadoop (NPW2013)Playing with Hadoop (NPW2013)
Playing with Hadoop (NPW2013)
 
Go Profiling - John Graham-Cumming
Go Profiling - John Graham-Cumming Go Profiling - John Graham-Cumming
Go Profiling - John Graham-Cumming
 
Background Jobs with Resque
Background Jobs with ResqueBackground Jobs with Resque
Background Jobs with Resque
 
Ansible, Simplicity, and the Zen of Python
Ansible, Simplicity, and the Zen of PythonAnsible, Simplicity, and the Zen of Python
Ansible, Simplicity, and the Zen of Python
 
How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...
How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...
How we used ruby to build locaweb's cloud (http://presentations.pothix.com/ru...
 
WP HTTP API
WP HTTP APIWP HTTP API
WP HTTP API
 
Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...
Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...
Elasticsearch (R)Evolution — You Know, for Search… by Philipp Krenn at Big Da...
 
CPAN 模組二三事
CPAN 模組二三事CPAN 模組二三事
CPAN 模組二三事
 
OpenERP Performance Benchmark
OpenERP Performance BenchmarkOpenERP Performance Benchmark
OpenERP Performance Benchmark
 
Background processing with Resque
Background processing with ResqueBackground processing with Resque
Background processing with Resque
 
From zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and ElasticsearchFrom zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and Elasticsearch
 
Практический опыт профайлинга и оптимизации производительности Ruby-приложений
Практический опыт профайлинга и оптимизации производительности Ruby-приложенийПрактический опыт профайлинга и оптимизации производительности Ruby-приложений
Практический опыт профайлинга и оптимизации производительности Ruby-приложений
 
Go-Couchbase Golang Paris 2015/12/17
Go-Couchbase Golang Paris 2015/12/17Go-Couchbase Golang Paris 2015/12/17
Go-Couchbase Golang Paris 2015/12/17
 
fog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloudfog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloud
 
Jak se ^bonami\.(cz|pl|sk)$ vešlo do kontejneru
Jak se ^bonami\.(cz|pl|sk)$ vešlo do kontejneruJak se ^bonami\.(cz|pl|sk)$ vešlo do kontejneru
Jak se ^bonami\.(cz|pl|sk)$ vešlo do kontejneru
 
Beyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic AnalysisBeyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic Analysis
 

Viewers also liked

Design Patterns for Distributed Non-Relational Databases
Design Patterns for Distributed Non-Relational DatabasesDesign Patterns for Distributed Non-Relational Databases
Design Patterns for Distributed Non-Relational Databases
guestdfd1ec
 
Down the rabbit hole, profiling in Django
Down the rabbit hole, profiling in DjangoDown the rabbit hole, profiling in Django
Down the rabbit hole, profiling in Django
Remco Wendt
 
Learning Pool Webinar: Creating, editing and using images
Learning Pool Webinar: Creating, editing and using imagesLearning Pool Webinar: Creating, editing and using images
Learning Pool Webinar: Creating, editing and using images
Paul McElvaney
 
Slide Share Mw
Slide Share MwSlide Share Mw
Slide Share Mw
Lutie
 
Workshop Communitymarketing
Workshop CommunitymarketingWorkshop Communitymarketing
Workshop Communitymarketing
Sjef Kerkhofs
 
Il bambino picchiato presentazione 28 febbraio 2013
Il bambino picchiato presentazione 28 febbraio 2013Il bambino picchiato presentazione 28 febbraio 2013
Il bambino picchiato presentazione 28 febbraio 2013
Umberto Vitrani
 
Social Media In An Eh World
Social Media In An Eh WorldSocial Media In An Eh World
Social Media In An Eh World
Steve Lipton
 
Presentatie avans1
Presentatie avans1Presentatie avans1
Presentatie avans1
Sjef Kerkhofs
 
Pobedite 10 slabosti u poslu koje EU ne trpi
Pobedite 10 slabosti u poslu koje EU ne trpiPobedite 10 slabosti u poslu koje EU ne trpi
Pobedite 10 slabosti u poslu koje EU ne trpi
Maja Vujovic
 
Lecture25
Lecture25Lecture25
Lecture 14
Lecture 14Lecture 14
Lecture 14
Debasish Pratihari
 
Culto Ferias - 05.07.07
Culto Ferias - 05.07.07Culto Ferias - 05.07.07
Culto Ferias - 05.07.07
Jubrac Jacui
 
Divosa v1.3
Divosa v1.3Divosa v1.3
Divosa v1.3
Marcel Seijner
 
La ReconstruccióN Del PaíS
La ReconstruccióN Del PaíSLa ReconstruccióN Del PaíS
La ReconstruccióN Del PaíS
michellchd
 
Db tips & tricks django meetup
Db tips & tricks django meetupDb tips & tricks django meetup
Db tips & tricks django meetup
zeeg
 
Guillems De La Historia
Guillems De La HistoriaGuillems De La Historia
Guillems De La Historia
guestd0403f
 
Systems engineering leidraad se gww door ms
Systems engineering leidraad se gww door msSystems engineering leidraad se gww door ms
Systems engineering leidraad se gww door ms
Marcel Seijner
 
Learning Pool: Work/Life Balance 2: Managing Stress Successfully
Learning Pool: Work/Life Balance 2: Managing Stress SuccessfullyLearning Pool: Work/Life Balance 2: Managing Stress Successfully
Learning Pool: Work/Life Balance 2: Managing Stress Successfully
Paul McElvaney
 
Describing exercise
Describing exerciseDescribing exercise
Describing exercise
Sussan Roo
 

Viewers also liked (20)

Design Patterns for Distributed Non-Relational Databases
Design Patterns for Distributed Non-Relational DatabasesDesign Patterns for Distributed Non-Relational Databases
Design Patterns for Distributed Non-Relational Databases
 
Down the rabbit hole, profiling in Django
Down the rabbit hole, profiling in DjangoDown the rabbit hole, profiling in Django
Down the rabbit hole, profiling in Django
 
Learning Pool Webinar: Creating, editing and using images
Learning Pool Webinar: Creating, editing and using imagesLearning Pool Webinar: Creating, editing and using images
Learning Pool Webinar: Creating, editing and using images
 
Slide Share Mw
Slide Share MwSlide Share Mw
Slide Share Mw
 
Workshop Communitymarketing
Workshop CommunitymarketingWorkshop Communitymarketing
Workshop Communitymarketing
 
Il bambino picchiato presentazione 28 febbraio 2013
Il bambino picchiato presentazione 28 febbraio 2013Il bambino picchiato presentazione 28 febbraio 2013
Il bambino picchiato presentazione 28 febbraio 2013
 
Social Media In An Eh World
Social Media In An Eh WorldSocial Media In An Eh World
Social Media In An Eh World
 
Presentatie avans1
Presentatie avans1Presentatie avans1
Presentatie avans1
 
Pobedite 10 slabosti u poslu koje EU ne trpi
Pobedite 10 slabosti u poslu koje EU ne trpiPobedite 10 slabosti u poslu koje EU ne trpi
Pobedite 10 slabosti u poslu koje EU ne trpi
 
Lecture25
Lecture25Lecture25
Lecture25
 
Lecture 14
Lecture 14Lecture 14
Lecture 14
 
Culto Ferias - 05.07.07
Culto Ferias - 05.07.07Culto Ferias - 05.07.07
Culto Ferias - 05.07.07
 
Divosa v1.3
Divosa v1.3Divosa v1.3
Divosa v1.3
 
La ReconstruccióN Del PaíS
La ReconstruccióN Del PaíSLa ReconstruccióN Del PaíS
La ReconstruccióN Del PaíS
 
Db tips & tricks django meetup
Db tips & tricks django meetupDb tips & tricks django meetup
Db tips & tricks django meetup
 
Guillems De La Historia
Guillems De La HistoriaGuillems De La Historia
Guillems De La Historia
 
Systems engineering leidraad se gww door ms
Systems engineering leidraad se gww door msSystems engineering leidraad se gww door ms
Systems engineering leidraad se gww door ms
 
13.04.08 Batismo
13.04.08   Batismo13.04.08   Batismo
13.04.08 Batismo
 
Learning Pool: Work/Life Balance 2: Managing Stress Successfully
Learning Pool: Work/Life Balance 2: Managing Stress SuccessfullyLearning Pool: Work/Life Balance 2: Managing Stress Successfully
Learning Pool: Work/Life Balance 2: Managing Stress Successfully
 
Describing exercise
Describing exerciseDescribing exercise
Describing exercise
 

Similar to Scaling python webapps from 0 to 50 million users - A top-down approach

Performance and Scalability Testing with Python and Multi-Mechanize
Performance and Scalability Testing with Python and Multi-MechanizePerformance and Scalability Testing with Python and Multi-Mechanize
Performance and Scalability Testing with Python and Multi-Mechanize
coreygoldberg
 
Software Project Management
Software Project ManagementSoftware Project Management
Software Project Management
Widoyo PH
 
Easy Web Project Development & Management with Django & Mercurial
Easy Web Project Development & Management with Django & MercurialEasy Web Project Development & Management with Django & Mercurial
Easy Web Project Development & Management with Django & Mercurial
Widoyo PH
 
Porting Rails Apps to High Availability Systems
Porting Rails Apps to High Availability SystemsPorting Rails Apps to High Availability Systems
Porting Rails Apps to High Availability Systems
Marcelo Pinheiro
 
PyCon AU 2012 - Debugging Live Python Web Applications
PyCon AU 2012 - Debugging Live Python Web ApplicationsPyCon AU 2012 - Debugging Live Python Web Applications
PyCon AU 2012 - Debugging Live Python Web Applications
Graham Dumpleton
 
Pemrograman Python untuk Pemula
Pemrograman Python untuk PemulaPemrograman Python untuk Pemula
Pemrograman Python untuk Pemula
Oon Arfiandwi
 
Web program-peformance-optimization
Web program-peformance-optimizationWeb program-peformance-optimization
Web program-peformance-optimization
xiaojueqq12345
 
PHP & Performance
PHP & PerformancePHP & Performance
PHP & Performance
毅 吕
 
Heavy Web Optimization: Backend
Heavy Web Optimization: BackendHeavy Web Optimization: Backend
Heavy Web Optimization: Backend
Võ Duy Tuấn
 
DevoxxUK: Optimizating Application Performance on Kubernetes
DevoxxUK: Optimizating Application Performance on KubernetesDevoxxUK: Optimizating Application Performance on Kubernetes
DevoxxUK: Optimizating Application Performance on Kubernetes
Dinakar Guniguntala
 
Rapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devicesRapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devices
ciklum_ods
 
Flink Forward SF 2017: Malo Deniélou - No shard left behind: Dynamic work re...
Flink Forward SF 2017: Malo Deniélou -  No shard left behind: Dynamic work re...Flink Forward SF 2017: Malo Deniélou -  No shard left behind: Dynamic work re...
Flink Forward SF 2017: Malo Deniélou - No shard left behind: Dynamic work re...
Flink Forward
 
Profiling PHP with Xdebug / Webgrind
Profiling PHP with Xdebug / WebgrindProfiling PHP with Xdebug / Webgrind
Profiling PHP with Xdebug / Webgrind
Sam Keen
 
Re-Design with Elixir/OTP
Re-Design with Elixir/OTPRe-Design with Elixir/OTP
Re-Design with Elixir/OTP
Mustafa TURAN
 
Google App Engine for Java v0.0.2
Google App Engine for Java v0.0.2Google App Engine for Java v0.0.2
Google App Engine for Java v0.0.2
Matthew McCullough
 
Naive application development
Naive application developmentNaive application development
Naive application development
Shaka Huang
 
Good practices for PrestaShop code security and optimization
Good practices for PrestaShop code security and optimizationGood practices for PrestaShop code security and optimization
Good practices for PrestaShop code security and optimization
PrestaShop
 
Azure Functions @ global azure day 2017
Azure Functions  @ global azure day 2017Azure Functions  @ global azure day 2017
Azure Functions @ global azure day 2017
Sean Feldman
 
Malo Denielou - No shard left behind: Dynamic work rebalancing in Apache Beam
Malo Denielou - No shard left behind: Dynamic work rebalancing in Apache BeamMalo Denielou - No shard left behind: Dynamic work rebalancing in Apache Beam
Malo Denielou - No shard left behind: Dynamic work rebalancing in Apache Beam
Flink Forward
 
Swift profiling middleware and tools
Swift profiling middleware and toolsSwift profiling middleware and tools
Swift profiling middleware and tools
zhang hua
 

Similar to Scaling python webapps from 0 to 50 million users - A top-down approach (20)

Performance and Scalability Testing with Python and Multi-Mechanize
Performance and Scalability Testing with Python and Multi-MechanizePerformance and Scalability Testing with Python and Multi-Mechanize
Performance and Scalability Testing with Python and Multi-Mechanize
 
Software Project Management
Software Project ManagementSoftware Project Management
Software Project Management
 
Easy Web Project Development & Management with Django & Mercurial
Easy Web Project Development & Management with Django & MercurialEasy Web Project Development & Management with Django & Mercurial
Easy Web Project Development & Management with Django & Mercurial
 
Porting Rails Apps to High Availability Systems
Porting Rails Apps to High Availability SystemsPorting Rails Apps to High Availability Systems
Porting Rails Apps to High Availability Systems
 
PyCon AU 2012 - Debugging Live Python Web Applications
PyCon AU 2012 - Debugging Live Python Web ApplicationsPyCon AU 2012 - Debugging Live Python Web Applications
PyCon AU 2012 - Debugging Live Python Web Applications
 
Pemrograman Python untuk Pemula
Pemrograman Python untuk PemulaPemrograman Python untuk Pemula
Pemrograman Python untuk Pemula
 
Web program-peformance-optimization
Web program-peformance-optimizationWeb program-peformance-optimization
Web program-peformance-optimization
 
PHP & Performance
PHP & PerformancePHP & Performance
PHP & Performance
 
Heavy Web Optimization: Backend
Heavy Web Optimization: BackendHeavy Web Optimization: Backend
Heavy Web Optimization: Backend
 
DevoxxUK: Optimizating Application Performance on Kubernetes
DevoxxUK: Optimizating Application Performance on KubernetesDevoxxUK: Optimizating Application Performance on Kubernetes
DevoxxUK: Optimizating Application Performance on Kubernetes
 
Rapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devicesRapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devices
 
Flink Forward SF 2017: Malo Deniélou - No shard left behind: Dynamic work re...
Flink Forward SF 2017: Malo Deniélou -  No shard left behind: Dynamic work re...Flink Forward SF 2017: Malo Deniélou -  No shard left behind: Dynamic work re...
Flink Forward SF 2017: Malo Deniélou - No shard left behind: Dynamic work re...
 
Profiling PHP with Xdebug / Webgrind
Profiling PHP with Xdebug / WebgrindProfiling PHP with Xdebug / Webgrind
Profiling PHP with Xdebug / Webgrind
 
Re-Design with Elixir/OTP
Re-Design with Elixir/OTPRe-Design with Elixir/OTP
Re-Design with Elixir/OTP
 
Google App Engine for Java v0.0.2
Google App Engine for Java v0.0.2Google App Engine for Java v0.0.2
Google App Engine for Java v0.0.2
 
Naive application development
Naive application developmentNaive application development
Naive application development
 
Good practices for PrestaShop code security and optimization
Good practices for PrestaShop code security and optimizationGood practices for PrestaShop code security and optimization
Good practices for PrestaShop code security and optimization
 
Azure Functions @ global azure day 2017
Azure Functions  @ global azure day 2017Azure Functions  @ global azure day 2017
Azure Functions @ global azure day 2017
 
Malo Denielou - No shard left behind: Dynamic work rebalancing in Apache Beam
Malo Denielou - No shard left behind: Dynamic work rebalancing in Apache BeamMalo Denielou - No shard left behind: Dynamic work rebalancing in Apache Beam
Malo Denielou - No shard left behind: Dynamic work rebalancing in Apache Beam
 
Swift profiling middleware and tools
Swift profiling middleware and toolsSwift profiling middleware and tools
Swift profiling middleware and tools
 

Recently uploaded

How Social Media Hackers Help You to See Your Wife's Message.pdf
How Social Media Hackers Help You to See Your Wife's Message.pdfHow Social Media Hackers Help You to See Your Wife's Message.pdf
How Social Media Hackers Help You to See Your Wife's Message.pdf
HackersList
 
find out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challengesfind out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challenges
huseindihon
 
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly DetectionAdvanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
Bert Blevins
 
Cookies program to display the information though cookie creation
Cookies program to display the information though cookie creationCookies program to display the information though cookie creation
Cookies program to display the information though cookie creation
shanthidl1
 
Recent Advancements in the NIST-JARVIS Infrastructure
Recent Advancements in the NIST-JARVIS InfrastructureRecent Advancements in the NIST-JARVIS Infrastructure
Recent Advancements in the NIST-JARVIS Infrastructure
KAMAL CHOUDHARY
 
Comparison Table of DiskWarrior Alternatives.pdf
Comparison Table of DiskWarrior Alternatives.pdfComparison Table of DiskWarrior Alternatives.pdf
Comparison Table of DiskWarrior Alternatives.pdf
Andrey Yasko
 
Research Directions for Cross Reality Interfaces
Research Directions for Cross Reality InterfacesResearch Directions for Cross Reality Interfaces
Research Directions for Cross Reality Interfaces
Mark Billinghurst
 
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - MydbopsScaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Mydbops
 
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-InTrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc
 
Quality Patents: Patents That Stand the Test of Time
Quality Patents: Patents That Stand the Test of TimeQuality Patents: Patents That Stand the Test of Time
Quality Patents: Patents That Stand the Test of Time
Aurora Consulting
 
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
Kief Morris
 
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
Toru Tamaki
 
UiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs ConferenceUiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs Conference
UiPathCommunity
 
Password Rotation in 2024 is still Relevant
Password Rotation in 2024 is still RelevantPassword Rotation in 2024 is still Relevant
Password Rotation in 2024 is still Relevant
Bert Blevins
 
The Rise of Supernetwork Data Intensive Computing
The Rise of Supernetwork Data Intensive ComputingThe Rise of Supernetwork Data Intensive Computing
The Rise of Supernetwork Data Intensive Computing
Larry Smarr
 
Pigging Solutions Sustainability brochure.pdf
Pigging Solutions Sustainability brochure.pdfPigging Solutions Sustainability brochure.pdf
Pigging Solutions Sustainability brochure.pdf
Pigging Solutions
 
INDIAN AIR FORCE FIGHTER PLANES LIST.pdf
INDIAN AIR FORCE FIGHTER PLANES LIST.pdfINDIAN AIR FORCE FIGHTER PLANES LIST.pdf
INDIAN AIR FORCE FIGHTER PLANES LIST.pdf
jackson110191
 
Quantum Communications Q&A with Gemini LLM
Quantum Communications Q&A with Gemini LLMQuantum Communications Q&A with Gemini LLM
Quantum Communications Q&A with Gemini LLM
Vijayananda Mohire
 
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALLBLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
Liveplex
 
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Bert Blevins
 

Recently uploaded (20)

How Social Media Hackers Help You to See Your Wife's Message.pdf
How Social Media Hackers Help You to See Your Wife's Message.pdfHow Social Media Hackers Help You to See Your Wife's Message.pdf
How Social Media Hackers Help You to See Your Wife's Message.pdf
 
find out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challengesfind out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challenges
 
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly DetectionAdvanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
 
Cookies program to display the information though cookie creation
Cookies program to display the information though cookie creationCookies program to display the information though cookie creation
Cookies program to display the information though cookie creation
 
Recent Advancements in the NIST-JARVIS Infrastructure
Recent Advancements in the NIST-JARVIS InfrastructureRecent Advancements in the NIST-JARVIS Infrastructure
Recent Advancements in the NIST-JARVIS Infrastructure
 
Comparison Table of DiskWarrior Alternatives.pdf
Comparison Table of DiskWarrior Alternatives.pdfComparison Table of DiskWarrior Alternatives.pdf
Comparison Table of DiskWarrior Alternatives.pdf
 
Research Directions for Cross Reality Interfaces
Research Directions for Cross Reality InterfacesResearch Directions for Cross Reality Interfaces
Research Directions for Cross Reality Interfaces
 
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - MydbopsScaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
 
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-InTrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
 
Quality Patents: Patents That Stand the Test of Time
Quality Patents: Patents That Stand the Test of TimeQuality Patents: Patents That Stand the Test of Time
Quality Patents: Patents That Stand the Test of Time
 
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
 
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
 
UiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs ConferenceUiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs Conference
 
Password Rotation in 2024 is still Relevant
Password Rotation in 2024 is still RelevantPassword Rotation in 2024 is still Relevant
Password Rotation in 2024 is still Relevant
 
The Rise of Supernetwork Data Intensive Computing
The Rise of Supernetwork Data Intensive ComputingThe Rise of Supernetwork Data Intensive Computing
The Rise of Supernetwork Data Intensive Computing
 
Pigging Solutions Sustainability brochure.pdf
Pigging Solutions Sustainability brochure.pdfPigging Solutions Sustainability brochure.pdf
Pigging Solutions Sustainability brochure.pdf
 
INDIAN AIR FORCE FIGHTER PLANES LIST.pdf
INDIAN AIR FORCE FIGHTER PLANES LIST.pdfINDIAN AIR FORCE FIGHTER PLANES LIST.pdf
INDIAN AIR FORCE FIGHTER PLANES LIST.pdf
 
Quantum Communications Q&A with Gemini LLM
Quantum Communications Q&A with Gemini LLMQuantum Communications Q&A with Gemini LLM
Quantum Communications Q&A with Gemini LLM
 
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALLBLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
 
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
 

Scaling python webapps from 0 to 50 million users - A top-down approach

  • 1. Scaling python webapps from 0 to 50 million users - A top-down approachJinalJhaveriSystems Architectjinal@lolapps.com
  • 3. AgendaWhy is performance a big issue for social games?ArchitectureBottlenecks and solutionsPerformance strategyQuestions
  • 4. Why is performance a big issue for social games?
  • 5. Why is performance a big issue for social games? Extremely high viralityinstalls, notifications, emails, feeds, eventsAmount of time spent is highhttp://www.bestfacebookapplications.com
  • 7. Bottlenecks and SolutionsLoad BalancerWeb ServerWeb ApplicationBrowser
  • 8. Load BalancerHAProxyRoundrobinNo gzip / no file servingSupports ipbased / regex based load balancing
  • 9. Bottlenecks and SolutionsLoad BalancerWeb ServerWeb ApplicationBrowser
  • 10. WebserverPastern instances (n = no.ofcpu) (10 threads each)Timeout (10 seconds)Disable Nagles optimization
  • 11. Bottlenecks and SolutionsLoad BalancerWeb ServerWeb ApplicationBrowser
  • 12. Web ApplicationMemcached to avoid DB tripsORM integrationCompressionCaching non-existenceLists cache
  • 13. Memcache / ORM integration   def get(self, query, ident, *args, **kwargs):    key = query.mapper.identity_key_from_primary_key(ident)    obj = query.session.identity_map.get(key)    if obj:         return obj     mkey = gen_cache_key(key[0].__name__, key[1], self.version_string) obj = self.mclient.get(mkey) if obj is None:obj = query._get(key, ident, **kwargs)         if obj is not None:       query.session.expunge(obj)       self.mclient.set(mkey, obj)    if obj:    return query.session.merge(obj, dont_load=True)    else:    return NoneMike Nelson
  • 14. Memcached to avoid DB tripsORM integrationCompressionCaching non-existenceLists cacheBest Effort caching
  • 15. Web ApplicationLocal cachePythonSpeed/PerformanceTips (wiki.python.org)AsynchronousFacebookapi callsLog processingEvent trackingPartial rendering / json / ajax
  • 16. Bottlenecks and SolutionsLoad BalancerWeb ServerWeb ApplicationBrowser
  • 17. Browser – Best practicesGzipCDNLoading images in parallelAjaxificationClient side caching
  • 18. Gzipfrom paste.gzipper import make_gzip_middlewareapp = make_gzip_middleware(app, global_conf, compress_level=1)
  • 19. Browser – Best practicesGzipCDNLoading images in parallelAjaxificationClient side caching
  • 20. Performance strategyProfileImproveProfileImproveProfileImproveMeasure, Measure, Measureload balancer request timeWeb server request timeController request timeRendering time
  • 21. Profiling - Middlewareclass TimerMiddleware(object):    """     Simple middleware that logs the time of each request to the provided logger.    @author Brian Rue    """    def __init__(self, app, log, name='outer'):        self.app = app         self.log = log         self.name = name    def __call__(self, environ, start_response):        start_time = time.time()        try:            return self.app(environ, start_response)        finally:            end_time = time.time()            url = environ.get('PATH_INFO', '')             if environ.get('QUERY_STRING'):                url += '?' + environ['QUERY_STRING']            self.log.debug("%f %s-%s" % ((end_time - start_time), self.name, url))
  • 22. Profiling2010-02-07 13:27:07 0.182282 mission/index /app/20/mission user: 1000002704984422010-02-07 13:27:07 0.105489 outer-/app/20/mission?dummyid=12010-02-07 13:27:07 0.287437 battle/attack /app/19/battle/attack user: 5018791262010-02-07 13:27:07 0.006339 track/record_event /app/21/track/record_event user: 11635112662010-02-07 13:27:07 0.032981 outer-/app/21/track/record_event?file_name=base.js&cache_key=22850012647231752010-02-07 13:27:07 0.006186 track/record_event /app/19/track/record_event user: 10396625362010-02-07 13:27:07 0.072400 outer-/app/19/track/record_event?file_name=base.js&cache_key=2285001265425258
  • 24. Profiling - Repoze # establish the Registry for this application app = registry.RegistryManager(app)from repoze.profile.profiler import AccumulatingProfileMiddlewareapp = AccumulatingProfileMiddleware(app,                                              log_filename='/tmp/gameprofile.log',                                              cachegrind_filename='/tmp/cachegrind.out.bar',                                              discard_first_request=True,                                             flush_at_shutdown=True,        path='/__profile__')
  • 25. Profiling - Repozencalls: number of callstottime: time spent in given function and excluding the time spent in sub-functionspercall: tottime / ncallscumtime: total time spent in this and all sub-functions.percall: cumtime / ncallsfilename:lineno(function): function info.
  • 26. Profiling - Dozerfrom dozer import Dozer, Logviewapp = Logview(app, config)app = Dozer(app)
  • 27. Database Optimistic vs. Pessimistic lockingversion_idUpdate table set data = xyz where version = 16.SQLAlchemy(echo, echo_pool and logger)Remove/rollbackProcess1DataVal = “abc”Version: 16 Process2DataVal = “pqr”Version:16Data: Val = xyzVersion: 16
  • 29. TornadoUsed over WSGICPU and Memory usage downDidn’t do well for high response sizeAppropriate for asynchronous / realtime
  • 30. AcknowledgementsLolapps teamBrian Rue, AJ Cantu, Fred Blau, Cory Virok, Justin Rosenthal, Joseph Estrada, Allen Cheung, VivekTatineni, Jason Kim, VikramAdukiaFamily