39
How to make bullet proof applications

Architecting for scalability in cf

Embed Size (px)

DESCRIPTION

Architecting for Scalability from cfObjective() 2011

Citation preview

Page 1: Architecting for scalability in cf

How to make bullet proof applications

Page 2: Architecting for scalability in cf

BBA in ISYS & Mgmt, Minor CS UND ImageTrend, Inc. 4+ years ◦ Currently: Lead Developer

cf.Objective() attendee 5 years MAX 2008 (San Francisco) Attendee Contact: ◦ twitter: tedsteinmann ◦ [email protected]

Page 3: Architecting for scalability in cf

BS Computer Science, University of Minnesota, 2005

ImageTrend, 5+ years

◦ Currently: Application Architect

cf.Objective() attendee 4 years

Contact: ◦ twitter: timlmeyer

[email protected]

Page 4: Architecting for scalability in cf
Page 5: Architecting for scalability in cf

Framework Sale

Buy my blog

Group Think

Miracle Drug

Page 6: Architecting for scalability in cf

Explanations

Solutions

Suggestions

Demos

Page 7: Architecting for scalability in cf

The Big Idea

Concerns

Considerations

Challenges

Solutions

Additional Considerations

Page 8: Architecting for scalability in cf

We want to make a website…

We’re going to call it Spacebook…

We’re going to be millionaires…*

* If we don’t get sued by these guys

Page 9: Architecting for scalability in cf

Performance

Uptime

Availability

Failover ◦ Accidents

◦ Maintenance

◦ Uncontrollable events

s##t happens

Page 10: Architecting for scalability in cf

Scalability ◦ Popularity problems:

Increased traffic/load

Hardware limitations

Complexity

“Okay, let me tell you the difference between

Facebook and everyone else, we don't crash EVER! if those servers are down for even a day, our entire reputation is irreversibly

destroyed! “

Page 11: Architecting for scalability in cf

Things we know ◦ Redundancy

◦ Routing

◦ Replication

Page 12: Architecting for scalability in cf

Proven methods/approaches ◦ Server Clustering

◦ Request Routing

◦ Replication/Mirroring

◦ Process Delegation

◦ Memory Management

Page 13: Architecting for scalability in cf
Page 14: Architecting for scalability in cf

Clustering ◦ High-availability Failover

Redundancy

◦ Load Balancing

Page 15: Architecting for scalability in cf

Request Routing ◦ Routing Rules

◦ Server Farms

◦ Load Balancing

◦ Programmatic failover

◦ Asset Caching

Page 16: Architecting for scalability in cf

Clustering & Routing

Page 17: Architecting for scalability in cf

Replication/Mirroring

Page 18: Architecting for scalability in cf

Process Delegation

◦ Asynchronous task completion

◦ Work queues

Page 19: Architecting for scalability in cf

Memory

◦ Scale Out

Many small CF instances

◦ Scale Up

Fewer large instances/servers

Page 20: Architecting for scalability in cf
Page 21: Architecting for scalability in cf
Page 22: Architecting for scalability in cf

Persistence of State

Persistence of Data

Configuration

Page 23: Architecting for scalability in cf

◦ Persistence of State

◦ Session Management Browser Session & Server session

Session/logged in

Replication / Sticky Sessions

Client vs. Session

Page 24: Architecting for scalability in cf

Persistence of Data

◦ Variables

◦ File system

◦ Database

Page 25: Architecting for scalability in cf

Persistence of Data - Variables

◦ CGI scope

Cannot rely on web servers or proxy servers to set them consistently

Cannot set CGI variables

◦ Session scope

◦ Client scope

Page 26: Architecting for scalability in cf

Persistence of Data – File System

◦ Multiple copies of your application code

Code promotion / Release

◦ Management of user generated content

Page 27: Architecting for scalability in cf

Persistence of Data - Database

◦ Identifiers

Identities/auto incremented primary keys

◦ Release

New data structure

Structure change/removal

Page 28: Architecting for scalability in cf

Configuration

◦ Will need to take place in/on:

Every location

Every server

Every environment

Dev, alpha, beta, testing, prod, etc.

Page 29: Architecting for scalability in cf
Page 30: Architecting for scalability in cf

Make it Easier to Change - Session Façade session.cfc:

usage:

Challenge: Persistence of State

Page 31: Architecting for scalability in cf

Session/Client Data Management

◦ Database

◦ Client Scope as Session Scope

◦ Caching Servers

Session/Client Persistence

◦ Cookies

◦ URL Token Based

Challenge: Persistence of State

Page 32: Architecting for scalability in cf

Use Façades

◦ CGI

◦ Session

◦ Client

Challenge: Persistence of Data - Variables

Don’t be a dope …wrap you scopes!

Page 33: Architecting for scalability in cf

File System Design Strategies

◦ Database files

◦ Network shared file system

◦ Automatic replication of files

Automate code deployments ◦ ANT, .bat, etc.

Challenge: Persistence of Data – File system

Page 34: Architecting for scalability in cf

Database Design Strategies

◦ Identifiers GUIDS

Ranges

Clustered primary keys

Server name/location/identifier

Roll your own

◦ Release

Backwards compatibility

Location specific updates

Challenge: Persistence of Data – Database

Page 35: Architecting for scalability in cf

Centralized Automatic configuration ◦ CFAdmin API

◦ XML config files

◦ Dynamic file paths

◦ Datasource configuration

Challenge: Configuration

Page 36: Architecting for scalability in cf

Globalization ◦ Time zones

◦ Multiple Languages

Caching ◦ Distributed cache stores (ehcache, memcached)

Database Role Segmentation ◦ One or many databases for reads / one for writes

at each location

Page 37: Architecting for scalability in cf

Verification - Will my application really scale? ◦ Load Testing

◦ Failover Testing

◦ Can I seamlessly add to the hardware?

Roll your own clustering/deployment ◦ JBOSS

◦ Tomcat

Page 38: Architecting for scalability in cf

ColdFusion: ◦ Administrator API ◦ Environment Configuration ◦ CF design patterns (sessions) ◦ Managing the client state ◦ Configuring and using session variables: ◦ JVM Memory Management ◦ JRUN Configuring Individual JVM Settings ◦ JRUN Clustering ◦ ColdFusion 9 on JBOSS ◦ ColdFusion Clustering ◦ Enabling clustering for load balancing and failover ◦ House of Fusion ◦ Database Your Files (Tim’s Presentation from TCCFUG)