Scaling a web applications can be easy for simple CRUD software running when you use Platform as a Service Clouds (PaaS). But if you need to deploy a complex software, with many components and a lot users, you will need have a mix of cloud services in PaaS, SaaS and IaaS layers. You will also need knowledge in architecture patterns to make all these software components communicate accordingly. In this presentation, we share our experience of using cloud services to scale a web application. We show usage examples of load balancing, session sharing, e-mail delivery, asynchronous processing, logs processing, monitoring, continuous deployment, realtime user monitoring (RUM). These are a mixture of development and system operations (DevOps) that improved our application availability, scalability and performance.
DevOps Patterns to Scale Web Applications using Cloud Services
1. DevOps Patterns
to Scale Web Applications
using Cloud Services
Daniel Cukier
Department of Computer Science
University of São Paulo
!
danicuki@ime.usp.br
3. Elo7 (3)
Login (2)
java server
java server
core
staging env (3)
login
Rest API (2)
rails server
REST api
http server
http server
cart
queue (1)
search (3)
memcache (2)
solr
(lucene)
sessions
search API
DynamoDB
search
user stats
worker (n)
image
processing
redis server
http server
assyncjobs
MySQL (2)
core data
vitrine data
S3
photos
assets
Vitrine (2)
rails server
vitrine
http server
atelier (1)
backoffice
4. Store Big Files
in Cloud Storages
Context: You have a web application that needs to
deliver large files to users. These files can be documents, photos, videos, or other binary formats.
!
Solution: Serve large static data
files using a cloud web storage
!
Why: avoid BLOB columns,
large files consume
resources and disk,
backup
5. Queue based solution to
process async jobs
Context: Needs fast response to end
user, have some time consuming
tasks
!
Solution: Use a queue based
solution to process your
P
background jobs.
c1
c2
!
Why: Async threads can harm your
application, auto-failover,
monitoring, auto-scale
c3
6. Load Balancing with
memcached user sessions
Context: Complex web application,
SLA 100%, user information in
session, many deploys daily
!
Solution: Use memcached session
manager (MSM) software to store
user session
Why: hot deploy does not work,
availability, no session data loss,
Tomcat solution does not scale
7. Cloud email delivery
Context: Lots of transactional
emails. You need a guarantee
that these emails are properly
delivered
!
Solution: Use cloud mail delivery
services that provide easy-to-use
REST API
!
Why: cost, management, easy to
program REST, spam, tracking
8. Cloud logging
Context: Complex web
application, many logs, no
access to production servers,
needs log debugging
!
Solution: Use a cloud based
log service to consolidate
your application logs
!
Why: manual copy, take care
of disk space, indexing files
demands work
9. Realtime User Monitoring
(RUM)
Context: 1M users, many deploys per day,
different user behaviors, complex infrastructure
!
Solution: Use cloud mail delivery services that
provide easy-to-use REST API
!
Why: 100% test coverage
do not guarantee it will
not fail, staging different
from production
10. Prefer PaaS over IaaS
When use PaaS
• Low knowledge about
infrastructure
• No knowledge about
scalability or security
• Do not want to monitor
infrastructure
• Your application does
not have have any
specific technology
When use IaaS
• Want to have more
control of the
infrastructure
• Infrastructure is core to
your business
• You have software
components that do
not conform to PaaS
providers standards