going native how is architecting for the cloud different? align your application’s architecture...

65
Going Native How is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud… DevBoston 07-February-2013 (6:00 PM) Boston Azure User Group http ://www.bostonazure.org @bostonazure Bill Wilder http://blog.codingoutlou d.com @codingoutloud HELLO my name is Bill Wilder

Upload: buzz

Post on 25-Feb-2016

40 views

Category:

Documents


0 download

DESCRIPTION

HELLO my name is. Going Native How is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…. DevBoston 07-February-2013 (6:00 PM). Bill Wilder. Boston Azure User Group http ://www.bostonazure.org @bostonazure. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Going NativeHow is Architecting for the Cloud

Different?Align your application’s architecture with the architecture of the cloud…

DevBoston07-February-2013

(6:00 PM)

Boston Azure User Grouphttp://www.bostonazure.org@bostonazure

Bill Wilderhttp://blog.codingoutloud.com@codingoutloud

                                        

HELLOmy name isBill Wilder

Page 2: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

My name is Bill Wilder

HELLO

my name is

Bill [email protected]@codingoutloud

www.devpartners.com

Page 3: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Who is Bill Wilder?

www.devpartners.com

www.bostonazure.org

www.cloudarchitecturepatterns.com

Page 4: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

I will ass-u-me…

1. You know what “the cloud” is2. You have an inkling about Amazon Web Services and

Windows Azure cloud platforms3. You understand that such cloud platforms include

compute services [like hosted virtual machines (VMs), in both IaaS and PaaS modes], SQL and NoSQL database services, file storage services, messaging, DNS, management, etc.

4. You are interested in understanding cloud-native applications and why that’s better than deploying my old-school app to the cloud “as is”

Page 5: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Roadmap for rest of talk… …

1. Lightning-fast overview of Windows Azure2. Cover three specific patterns for building

cloud-native applications3. Mention some other patterns along the way

• Q&A during talk is okay (time permitting)• Q&A at end with any remaining time• Okay to reach out through email or twitter

?

Page 6: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Windows Azure Portal

General informationhttp://www.windowsazure.com

Management Portalhttp://manage.windowsazure.com

Page 7: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

NIST Terminology

• SaaS = Software as a Service (BYO users)• PaaS = Plaform as a Service (BYO apps)• IaaS = Infrastructure as a Service (BYO VMs)

Simplicity

ComplexityFlexibility

RigidityPower?

Power?http://csrc.nist.gov/publications/nistpubs/800-145/SP800-145.pdf

Page 8: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

So Architecting for the (Windows Azure, AWS, GAE, …) Cloud is Different…

WHY DID THEY (Microsoft, Amazon, Google, …) DO THIS TO US?

But Why?

Page 9: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Know the rules

“If I had asked people what they wanted, they would have said faster horses.”

- Henry Ford

Faster h

orses w

ould not have

addressed th

e horse m

anure problem

late 1800s..

150k horses in

NYC

x 20 lbs m

anure/day/horse

= 3 millio

n lbs o

f manure per d

ay

Page 10: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Know the rules

“If I had asked IT departments what they wanted, they would have said IaaS.”

- Henry Cloud

Page 11: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Cloud Platform Characteristics• Scaling – or “resource allocation” – is horizontal

– and ∞ (“illusion of infinite resources”)

• Resources are easily added or released– self-service portal or API; cloud scaling is automatable

• Pay only for currently allocated resources– costs are operational, granular, controllable, and transparent

• Optimized for cost-efficiency– cloud services are MT, hardware is commodity– MTTR over MTTF

• Rich, robust functionality is simply accessible– like an iceberg

Page 12: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Cloud-Native Application Characteristics

• Application architecture is aligned with the cloud platform architecture–uses the platform in the most natural way– lets the platform do the heavy lifting

Page 13: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Cloud-Native Application Characteristics

• Application architecture is aligned with the cloud platform architecture–uses the platform in the most natural way– lets the platform do the heavy lifting

GO WITH THE FLO

W Cloud (Azure) ≠ hosting Don’t fight it!

Page 14: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

1/9th above w

ater

Page 15: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

www.pageofphotos.com• Simple idea, simple app• Two-tiers: web tier (one server) + database• What’s the problem?

• But… what’s WRONG with this architecture?

• Different ≠ WRONG. Use the right tool for the job. Some apps are simply not good fit for cloud.

?

Page 16: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

www.pageofphotos.com• Simple idea, simple app• Two-tiers: web tier (one server) + database• What can go wrong

• We’ll reexamine1. Scaling the web tier2. Scaling the service tier3. Scaling the data tier4. Handling failure5. Operational efficiency (scale the app, not the team!)

Page 17: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Horizontal Scaling Compute Pattern

pattern 1 of 3

Page 18: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

What’s the difference between performance

and scale??

Page 19: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Common Terminology:Scaling Up/Down Vertical ScalingScaling Out/In Horizontal “Scaling” But really is Horizontal Resource Allocation

• Architectural Decision– Big decision… hard to change

Scale Up (and Scale Down??)vs. Horizontal Resourcing

Page 20: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Vertical Scaling (“Scaling Up”)

.

Resources that can be “Scaled Up”• Memory: speed, amount • CPU: speed, number of CPUs• Disk: speed, size, multiple controllers• Bandwidth: higher capacity pipe• … and it sure is EASY

Downsides of Scaling Up• Hard Upper Limit• HIGH END HARDWARE HIGH END CO$T• Lower value than “commodity hardware”• May have no other choice (architectural)

Page 21: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Scaling Horizontally: Adding BoxesAutonomous nodes

for scalability(stateless web servers, shared

nothing DBs, your custom code in

QCW)

Autonomous nodes*and*

Homogeneous nodes for operational simplicity

*and*Anonymous nodes

don‘t get emotionally involved!

This is how the CLOUD works *and*This is how YOUR CLOUD-NATIVE APP WORKS

Page 22: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Load Balancer(Cloud Service)

Managed VMs(Cloud Service)

Example: Web Tier www.pageofphotos.com

Page 23: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

1. Auto-Scale • Bidirectional

2. Nodes can fail• Auto-Scale is only one cause• Handle shutdown signals• Stateless (“like a taxi”)

vs. Sticky Sessions• Stateless nodes

vs. Stateless apps• N+1 rule

vs. occasional downtime (UX)

Horizontal Scaling Considerations

Page 24: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

How many users does your cloud-native

application need before it needs to be able to

horizontally scale??

Page 25: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Queue-Centric Workflow Pattern

(QCW for short)

pattern 2 of 3

Page 26: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Extend www.pageofphotos.com example into Service Tier

• QCW enables applications where the UI and back-end services are Loosely Coupled

• (Compare to CQRS at end if there is interest)

Page 27: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

QCW Example: User Uploads Photo www.pageofphotos.com

Web Server

Compute ServiceReliable Queue

Reliable Storage

Page 28: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

QCW

WE NEED:• Compute (VM) resources to run our code

• Reliable Queue to communicate

• Durable/Persistent Storage

Page 29: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Where does Windows Azure fit?

Page 30: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

QCW [on Windows Azure]

WE NEED:• Compute (VM) resources to run our code

Web Roles (IIS) and Worker Roles (w/o IIS)• Reliable Queue to communicate

Azure Storage Queues• Durable/Persistent Storage

Azure Storage Blobs & Tables; WASD

Page 31: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

QCW on Azure: User Uploads a Photo

WebRole(IIS)

WorkerRoleAzure Queue

Azure Blob

UX implications: user does not wait for thumbnail(architecture!)

ww

w.p

ageo

fpho

tos.

com

push pull

Page 32: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

QCW enables Responsive UX

• Response to interactive users is as fast as a work request can be persisted

• Time consuming work done asynchronously• Comparable total resource consumption, arguably

better subjective UX• UX challenge – how to express Async to users?

– Communicate Progress– Display Final results– Long Polling/Web Sockets (e.g., SignalR or Node.io)

Page 33: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

QCW enables Scalable App

• Decoupled front/back provides insulation– Blocking is Bane of Scalability– Order processing partner doing maintenance– Twitter down– Email server unreachable– Internet connectivity interruption

• Loosely coupled, concern-independent scaling– (see next slide)– Get Scale Units right

–Key to optimizing operational CO$T$

Page 34: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

General Case: Many Roles, Many Queues

WebRole(IIS)

WorkerRole

WebRole(IIS)

WebRole

(Public)

WorkerRoleWorker

RoleWorker

Role Type 1

WorkerRoleWorker

RoleWorkerRoleWorker

Role Type 2

Queue Type 1

Queue Type 2

Queue Type 1

Queue Type 2

Queue Type 3

• Scaling best when Investment α Benefit• Optimize for CO$T EFFICIENCY

• Logical vs. Physical Architecture depends on current scale

WorkerRole

Type 2

WorkerRole

Type 2

WorkerRole

Type 2

WebRole

(Admin)

Page 35: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Reliable Queue & 2-step Delete

(IIS)WebRole

WorkerRole

var url = “http://pageofphotos.blob.core.windows.net/up/<guid>.png”;queue.AddMessage( new CloudQueueMessage( url ) );

var invisibilityWindow = TimeSpan.FromSeconds( 10 );CloudQueueMessage msg = queue.GetMessage( invisibilityWindow );

(… do some processing then …)queue.DeleteMessage( msg );

Queue

Page 36: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

QCW requires Idempotent

• Perform idempotent operation more than once, end result same as if we did it once

• Example with Thumbnailing (easy case)• App-specific concerns dictate approaches

– Compensating action, Last write wins, etc.• PARTNERSHIP: division of responsibility

between cloud platform & app– Far cry from database transaction

Page 37: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

QCW expects Poison Messages

• A Poison Message cannot be processed– Error condition for non-transient reason– Use dequeue count property

• Be proactive– Falling off the queue may kill your system

• Determine a Max Retry policy per queue– Delete, put on “bad” queue, alert human, …

Page 38: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

QCW requires “Plan for Failure”

• VM restarts will happen– Hardware failure, O/S patching, crash (bug)

• Bake in handling of restarts into our apps– Restarts are routine: system “just keeps working”– Idempotent support needed important– Event Sourcing (commonly seen with CQRS) may

help• Not an exception case! Expect it!• Consider N+1 Rule

Page 39: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Typical Site Any 1 Role Inst Overall System

Operating System Upgrade

Application Code Update

Scale Up, Down, or In

Hardware Failure

Software Failure (Bug)

Security Patch

What’s Up? Reliability as EMERGENT PROPERTY

Page 40: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Aside: Is QCW same as CQRS?

• Short answer: “no”• CQRS

– Command Query Responsibility Segregation• Commands change state• Queries ask for current state• Any operation is one or the other• Sometimes includes Event Sourcing• Sometimes modeled using Domain Driven

Design (DDD)

Page 41: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

What about the DATA?

• You: Azure Web Roles and Azure Worker Roles– Taking user input, dispatching work, doing work– Follow a decoupled queue-in-the-middle pattern– Stateless compute nodes

• Cloud: “Hard Part”: persistent, scalable data– Azure Queue & Blob Services– Three copies of each byte– Blobs are geo-replicated– Busy Signal Pattern

Page 42: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Database Sharding Pattern

pattern 3 of 3

Page 43: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Extend www.pageofphotos.com example into Data Tier

• What happens when demands on data tier grow?

• The Database Sharding Pattern a little about reliability – a lot about scale and performance

Page 44: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Foursquare is a Social Network

Page 45: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Foursquare #Fail

• October 4, 2010 – trouble begins…• After 17 hours of downtime over two days…

“Oct. 5 10:28 p.m.: Running on pizza and Red Bull. Another long night.”

WHAT WENT WRONG?

Page 46: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

What is Sharding?

• Problem: one database can’t handle all the data– Too big, not performant, needs geo distribution, …

• Solution: split data across multiple databases– One Logical Database, multiple Physical Databases

• Each Physical Database Node is a Shard• Most scalable is Shared Nothing design

– May require some denormalization (duplication)

Page 47: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

All shard have same schema

SHARDS

Page 48: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Sharding is Difficult

• What defines a shard? (Where to put stuff?)– Example – use country of origin: customer_us,

customer_fr, customer_cn, customer_ie, …– Use same approach to find records (can use lookup)

• What happens if a shard gets too big?– Rebalancing shards can get complex– Foursquare case study is interesting

• How to query / join / transact across shards• Cache coherence, connection pool management

– Roll-your-own challenge

Page 49: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Where does Windows Azure fit?

Page 50: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Windows Azure SQL Database (WASD)is SQL Server Except…

Common

SQL ServerSpecific(for now)

WASDSpecific

“Just change the connection

string…”

• Full Text Search• Transparent Data

Encryption (TDE)• Many more…

Limitations• 150 GB size limit• Busy Signal PatternExtra Capabilities• Managed Service• Highly Available• Rental model• Federations

http://msdn.microsoft.com/en-us/library/ff394115.aspxAdditional information on Differences:

Page 51: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Windows Azure SQL Databse Federations for Sharding

• Single “master” database– “Query Fanout” makes partitions transparent– Instead of customer_us, customer_fr, etc… we are back to customer

database• Handles redistributing shards• Handles cache coherence• Simplifies connection pooling

• No MERGE (yet); SPLIT only• Bonus feature for Multitenant Applications

USE FEDERATION myfed (myfedkey = 911) WITH FILTERING=ON RESET

• http://blogs.msdn.com/b/cbiyikoglu/archive/2011/01/18/sql-azure-federations-robust-connectivity-model-for-federated-data.aspx

Page 52: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Foursquare #Fail

Foursquare was implementing database sharding in the application layer. WASD Federations makes this unnecessary.

WHAT WENT WRONG?

Page 53: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

My database instance is limited to 150 GB.

∞ ∞ ∞Does that mean the

cloud doesn’t really offer the illusion of infinite

resources??

Page 54: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Pre-Cloud vs. Cloud-Native

Old-School vs.

Cloud-Native

Control Efficiency

Stable/Static Hardware Dynamic/∞ Resources

Fixed/CapEx Variable/OpEx

Vertical Scaling Horizontal Resourcing

Minimize MTBF Minimize MTTR

Data Storage = RDBMS Scenario-specific Storage

Manage Infrastructure Managed Infrastructure

arch

itect

ural

con

cern

s

Page 55: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Pre-Cloud vs. Cloud-Native

Lessons: being

Cloud-Native

1:15,000 Efficiency

Auto-Scaling via API Dynamic/∞ Resources

Pay-As-You-Go Variable/OpEx

Stateless, Autonomous Horizontal Resourcing

N+1, Idempotent Minimize MTTR

SQL, NoSQL, Blob Scenario-specific Storage

VM, Storage, LB, DR Managed Infrastructure

Page 56: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Know the rules

“Know the rules well, so you can break them effectively.”

- Dalai Lama XIV

Page 57: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Cloud Architecture Patterns bookPrimer Chapters

1. Scalability2. Eventual Consistency3. Multitenancy and

Commodity Hardware4. Network Latency

Page 58: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Cloud Architecture Patterns book Pattern Chapters

1. Horizontally Scaling Compute Pattern2. Queue-Centric Workflow Pattern3. Auto-Scaling Pattern4. MapReduce Pattern5. Database Sharding Pattern6. Busy Signal Pattern7. Node Failure Pattern8. Colocate Pattern9. Valet Key Pattern10. CDN Pattern11. Multisite Deployment Pattern

Page 59: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Questions?Comments?

More information?

?

Page 60: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Business Card

Page 61: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

BostonAzure.org

• Boston Azure cloud user group• Focused on Microsoft’s Public Cloud Platform

• Monthly, 6:00-8:30 PM in Boston area– Food; wifi; free; great topics; growing community

• Follow on Twitter: @bostonazure • More info or to join our Meetup.com group:

http://www.bostonazure.org

Page 62: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

Looking for …• consulting help with Windows Azure Platform? • someone to bounce Azure or cloud questions off?• a speaker for your user group or

company technology event?Just Ask!

Bill Wilder@codingoutloudhttp://blog.codingoutloud.comcommunity inquiries: [email protected] inquiries: www.devpartners.com book: www.cloudarchitecturepatterns.com

Contact Me

Find this slide deck here

Page 63: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…
Page 64: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…

DONE

Page 65: Going Native How  is Architecting for the Cloud Different? Align your application’s architecture with the architecture of the cloud…