design patterns for scaling web applications

30

Upload: ivan-dimitrov

Post on 17-Aug-2015

73 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Design patterns for scaling web applications
Page 2: Design patterns for scaling web applications

Design patterns for scaling web applications

SysAdmin Bulgaria meetup #01

Page 3: Design patterns for scaling web applications

Ivan DimitrovManager Technical OperationsXogito Group, Inc

[email protected]

Page 4: Design patterns for scaling web applications

tl;dr

Web application architecture

Life’s too short for bad software- Lew Cirne

Page 5: Design patterns for scaling web applications

tl;dr

Scalability patterns

The only real problem is scaling.Everything else is a sub-problem.

- O’Dell’s Axiom

Page 6: Design patterns for scaling web applications

Let’s start with hardware

Page 7: Design patterns for scaling web applications

Web application architecture

● Single machine web server● Two-tier web application● Multi-Tier application● Message Bus architecture● Service-Oriented architecture

Page 8: Design patterns for scaling web applications

Single machine web server

Page 9: Design patterns for scaling web applications

Single machine web server

● All in one servero Real IPo Web servero Application servero Databaseo Storageo Compute

● All in one servero Security problemo Shared CPUo Shared memoryo SPOFo Maintenance =

Downtime

Page 10: Design patterns for scaling web applications

Single machine web server

Page 11: Design patterns for scaling web applications

Two-tier web application

Page 12: Design patterns for scaling web applications

Two-tier web application

● Dedicated resources

● Multiple POF● Internal network● Maintenance =

downtime

● Different hardware generations

● Expensive

Page 13: Design patterns for scaling web applications

Multi Tier web application

Page 14: Design patterns for scaling web applications

Multi-tier web application

● Separate responsibility to teams● Most of security at first tier● Independant scaling● Front-end can talk with APIs internaly● Every tier can have it’s own hardware

requirements● Global Load Balancer

Page 15: Design patterns for scaling web applications

Global Load Balancer

Page 16: Design patterns for scaling web applications

Message Bus application

Page 17: Design patterns for scaling web applications

Message Bus application

● Many to Many communication between servers

● Replaces constantly polling the database● Asyncronious, not sorted● Loosly coupled systems● Support different hardware

Page 18: Design patterns for scaling web applications

Service Oriented Architecture

Page 19: Design patterns for scaling web applications
Page 20: Design patterns for scaling web applications

Service Oriented Architecture

● Loosly coupled systems● Service oriented company - small teams● Can provide services to third parties● Can subscribe to services from third parties

Page 21: Design patterns for scaling web applications

Scaling Up

● Bottleneck● Measure Results● Horizontal

duplication● Functional/Service

split● Lookup-oriented

split

● Caching● Data sharding● Threading● Queueing● Content Delivery

Networks

Page 22: Design patterns for scaling web applications

Theory of constraints

● Identify the Bottleneck● Utilize the Bottleneck● Adjust Non-Bottlenecks● Elevate the Bottleneck● Review the Process

Page 23: Design patterns for scaling web applications

Finding the bottleneck

● Accumulation● Throughput● Full Capacity● Wait Times

Page 24: Design patterns for scaling web applications

Measure results

Page 25: Design patterns for scaling web applications
Page 26: Design patterns for scaling web applications

Caching

cache hit ratio = cache lookups / cache hits● Store most recent data● Store most used data● Store only repeatedly used data

Cache invalidation - TTL

Page 27: Design patterns for scaling web applications
Page 28: Design patterns for scaling web applications

Threads and Queues

● Single thread process vs Multi thread process

● Queues FIFO, LIFO

Page 29: Design patterns for scaling web applications

Content delivery network

Page 30: Design patterns for scaling web applications

Additional reading