56
Designing and Delivering Scalable and Resilient Web Services Ron Jacobs Sr. Technical Evangelist, Microsoft http://blogs.msdn.com/rjacobs

Scalable Resilient Web Services In .Net

Embed Size (px)

DESCRIPTION

Web Architecture with AppFabric and WCF services in a hosting environment.

Citation preview

Page 1: Scalable Resilient Web Services In .Net

Designing and Delivering Scalable and Resilient Web Services

Ron JacobsSr. Technical Evangelist, Microsofthttp://blogs.msdn.com/rjacobs

Page 2: Scalable Resilient Web Services In .Net

Agenda

The Problem

A Possible Solution

New Possibilities

What to do next

Page 3: Scalable Resilient Web Services In .Net

Simple

Do the simplest thing that will possibly work

Page 4: Scalable Resilient Web Services In .Net

Scalability

Able to support the required quality of service as the system load increases

-Wiktionary

Page 5: Scalable Resilient Web Services In .Net

Typical Web Architecture

• Need to get routed to same machine (i.e. sticky sessions)Users

• Each machine round trips for data

• Data that is cached is stored in the memory of one server

Web Tier

• CPU and disk can get saturated due to traffic

• Service access is slow

Data Tier

Page 6: Scalable Resilient Web Services In .Net

Web Explosion

Database

IIS/ASP.NET Application

Web Site’s too

slow!!

Database is hot!!

Where did my

shopping cart go?

IIS/ASP.NET Application

IIS/ASP.NET Application

Servers are crashing

Services are slow

Page 7: Scalable Resilient Web Services In .Net

Agenda

The Problem

A Possible Solution

New Possibilities

What to do next

Page 8: Scalable Resilient Web Services In .Net

Data Near Processing

ASP.NET

Web ServiceDatabase

Smart Client Browser

Cache

CacheCache

CacheCache

Page 9: Scalable Resilient Web Services In .Net

Good but…

• Cache is scoped to machine / process– Machines die– Processes recycle

• Cache memory is limited

Page 10: Scalable Resilient Web Services In .Net

What if?

• You could have as much cache as you wanted?• You could share a giant cache across servers,

services and even clients?

• What if this was something you could simply add to the platform for 1free?

1Some features may require certain editions of Windows Server

Page 11: Scalable Resilient Web Services In .Net

Windows Server AppFabric

AppFabricCACHING

MONITORING

WORKFLOW HOSTING

SERVICE HOSTING

SCALE OUTHIGH AVAILABILITY MANAGEMENT

AppFabric Cache – Formerly known as Code Name “Velocity”

Page 12: Scalable Resilient Web Services In .Net

Unified Cache View

What is AppFabric Caching?

• An explicit, distributed, in-memory application cache for all kinds of data

Caching clients can be across machines or

processes

Clients Access the Cache as if it

was a large single cache

Cache Layer distributes data

across the various cache

nodes

Page 13: Scalable Resilient Web Services In .Net

AppFabric Cache

• No need for sticky sessionsUsers

• Cached data available to all serversWeb

Tier

• Multiple machines means scale and high-availability

• Lots of cache memory

Caching Tier

• Reduces load on database• Duplicate Service Calls

eliminated

Data Tier

Page 15: Scalable Resilient Web Services In .Net

Scale Test Output

Load

Throughput

Latency

1 Cache ServerAs load increases, throughput fails

to scale latency increases

Caching Tier

Page 16: Scalable Resilient Web Services In .Net

Add Second Cache Server

ThroughputLoad Max

Throughput increasesLatency

decreases

Caching Tier

Load

Latency

Page 17: Scalable Resilient Web Services In .Net

Add Third Cache ServerLoad

Throughput

Latency

Caching Tier

Page 18: Scalable Resilient Web Services In .Net

Associated Press

• Caches metadata and news

• Serves 16 million hits per day

• Increased the amount of cached data 6 times.

Page 19: Scalable Resilient Web Services In .Net

System.Web.Cache

Page 20: Scalable Resilient Web Services In .Net

AppFabric DataCache

Page 22: Scalable Resilient Web Services In .Net

Usage Pattern – Cache Aside (Explicit Caching)

// Read from CacheToy toyObj = (Toy) catalog.Get("toy-101");

Application

Cach

ing

Serv

ice

Database

// If Not present in the cacheif (toyObj == null){ // Read from backend.. toyObj = ReadFromDatabase(); // Populate Cache catalog.Put("toy-101", toyObj);

return toyObj;}

Caching Access Layer

Page 23: Scalable Resilient Web Services In .Net

Administration

• PowerShell cmdlets are used to administer the cache cluster

• Rich set of cmdlets for – Cache cluster management– Cache creation and monitoring

Page 24: Scalable Resilient Web Services In .Net

Hello AppFabric Cache

Demo

Page 25: Scalable Resilient Web Services In .Net

Using PowerShell

Remember – PowerShell can also be called from .NET Code!

Page 26: Scalable Resilient Web Services In .Net

AppFabric Cache Codeplex Tool

http://mdcadmintool.codeplex.com/

Demo

Page 27: Scalable Resilient Web Services In .Net

Security

• Domain Based Security Option– Domain Account / Local Account based Authentication– Only authorized servers can join the cluster– Only authorized clients can connect to the cluster

• Transport Level Security– Turn on/off Signing or Encryption

• Can turn off Cache Security– Use Firewalls, IPSec, VLANs to protect cache

grant-cacheallowedclientaccount  RedDomain\Machine1$ grant-cacheallowedclientaccount  RedDomain\John

Page 28: Scalable Resilient Web Services In .Net

AppFabric Caching Logical Hierarchy

• Host– Physical processes hosting AppFabric

Caching instance.• Named Caches

– Can span across machines– Defined in the configuration file

• Cache Item– Key, Payload (Object ), Tags, TTL,

Timestamps, Version• Regions

– Physically co-located Container of Cache Items

– May be implicit or explicitly created

Regions Region A

Key Payload Tags Key Payload Tags 121 xxxx “Toy” “Child”

123 yyyy “Toy” “Chair”..

Machine -> Cache Host -> Named Caches -> Regions -> Cache Items -> Objects

AppFabric Caching Service

Named Cache : Product Catalog

Named Cache : Electronics Inventory

AppFabric Caching Service

AppFabric Caching Service

AppFabric Caching Service

Page 29: Scalable Resilient Web Services In .Net

AppFabric Caching API// Create instance of cachefactory (reads appconfig)DataCacheFactory fac = new DataCacheFactory();

// Get a named cache from the factoryDataCache catalog = fac.GetCache("catalogcache");

// Simple Get/Putcatalog.Put("toy-101", new Toy("Puzzle", .,.));

// From the same or a different clientToy toyObj = (Toy)catalog.Get("toy-101");

// Region based Get/Putcatalog.CreateRegion("toyRegion");

// Both toy and toyparts are put in the same region catalog.Put("toy-101", new Toy( .,.), “toyRegion”);Catalog.Put("toypart-100", new ToyParts(…), “toyRegion”);

Toy toyObj = (Toy)catalog.Get("toy-101“,"toyRegion");

Page 30: Scalable Resilient Web Services In .Net

Access APIs – Tagging Items

Tag hotItem = new Tag("hotItem");

catalog.Put("toy-101", new Toy("Puzzle"), new Tag[]{hotItem}, “toyRegion”);

catalog.Put("toy-102", new Toy("Bridge"), “toyRegion”);

// From the same or a different clientList<KeyValuePair<string, object>> toys = catalog.GetAnyMatchingTag("toyRegion", hotItem);

Page 31: Scalable Resilient Web Services In .Net

Types of DataReference Activity Resource

Primary Read Only Read-Write Not shared Read-Write, Shared

Catalog Data Shopping Cart Auction Data/Seat Assignment

Web Tier

Distributed Cache

Shopping Cart

Grocery Catalog

Grocery Inventory

Grocery Shop

Page 32: Scalable Resilient Web Services In .Net

ApplicationApplication

AppFabric Caching Client

Reference Data – Performance• Catalog data doesn’t change often• Unnecessary network cost to access from different machines• Solution – Local Cache

Put(K2, v3)

Routing Table

Cache2Cache1

Primary for K2,V2

K2, V2

Primary for K1,V1

K1, V1

Cache3

Primary for K3,V3

K3, V3

AppFabric Caching ClientLocal Cache

Routing TableK2, V2

Get(K2)Get(K2)

K2, V3

Page 33: Scalable Resilient Web Services In .Net

Reference Data – Bulk Get

• Bulk Fetch from region– 200-300k ops per second– Fewer network calls

Catalog.BulkGet( new List<string>(){“toy-101”, “toy-

102”} , “toyRegion”);

Page 34: Scalable Resilient Web Services In .Net

Activity Data – Session Integration

…Session State

stored in AppFabric Caching

Cach

e S

ervi

ce

Cach

ing

Ser

vice

Load Balance RequestsNo more sticky routing

Cach

ing

Ser

vice

Scale your Session StoreDynamically

Highly Available

Drop in AppFabric Caching

SessionStoreProvider

Allows session state to be shared amongst multiple applications

Application

Caching Access Layer

Application ApplicationCaching Access Layer Caching Access Layer

<sessionState mode="Custom“ customProvider="SessionStoreProvider"><providers> <add name="SessionStoreProvider" type=“Microsoft.Data.Caching.DataCacheSessionStoreProvider, ClientLibrary“ cacheName="<YourNamedCache>"/></providers></sessionState>

Page 35: Scalable Resilient Web Services In .Net

ApplicationApplication

(K2, V2)

Cache2Cache1 Cache3

Primary for

Activity Data - Availability

Get(K2)

Primary for Primary for

K3, V3

AppFabric Caching ClientRouting Table

K2, V2

PUT

Secondary for

K2, V2

K1, V1

Secondary for

K3, V3

Secondary for

K1, V1

AppFabric Caching Client

Routing Table

K2, V2

Replication AgentK2, V2

Page 36: Scalable Resilient Web Services In .Net

Resource Data - Optimistic Locking

• GetCacheItem returns a version object• Every update to an object internally increments it's version• Supply the version obtained along with the Put/Remove• Put/Remove will succeed only if the passed in version matches the version

in the cache

Version Based Update

Time Client1 Client2 (Different Thread or process)

T0 CacheItem item = catalog.GetCacheItem(“PlayerRegion”, ”Zune”);

CacheItem item = catalog.GetCacheItem(“PlayerRegion”, ”Zune”);

T1 ((ZuneObject)item.Object).inventory --; ((ZuneObject)item.Object).inventory--;

T2 catalog.Put(“PlayerRegion”, “Zune”, item.Object, item.Version);

T3 catalog.Put(“PlayerRegion”, “Zune”, item.Object, item.Version);// Version mismatch// Client must retry again

Two clients access the same item

Both update the item

Second Client gets in first; put succeeds because item version matches; atomically

increments the version

First client tries put;Fails because the versions

don’t match

Page 37: Scalable Resilient Web Services In .Net

K1

Resource Data - Pessimistic Locking

• Take locks on non-existent keys– Allows you to co-ordinate calls for data

Client1: GetAndLock ("k1")

Client2: GetAndLock ("k1")

Client3: Get ("k1")

Regular Get succeeds

GetAndLock gets lock handle

Other GetAndLock on same item fails

Page 38: Scalable Resilient Web Services In .Net

Data Race

GET GETGET

Page 39: Scalable Resilient Web Services In .Net

Lock Non-Existent Key

GET/LOCK GET/LOCKGET/LOCKCa

che

Ser

vice

Cach

ing

Ser

vice

Cach

e S

ervi

ce

Page 40: Scalable Resilient Web Services In .Net

Composite Race

CALL WAITWAITCa

che

Ser

vice

Cach

ing

Ser

vice

Cach

e S

ervi

ce

Page 41: Scalable Resilient Web Services In .Net

Composite Race

PUTUNLOCK GETGET

Cach

e S

ervi

ce

Cach

ing

Ser

vice

Cach

e S

ervi

ce

Page 42: Scalable Resilient Web Services In .Net

Resource/Activity Data – Tracking Changes

• Cache Event notifications• Register on any client to notify changes• Batched Notifications

DataCache.RegisterCacheLevelCallback( int filter, DataCacheChangeCallback delegate);

DataCache.RegisterRegionLevelCallback( String region, int filter, DataCacheChangeCallback delegate);

DataCache.RegisterKeyLevelCallback( String region, String key, int filter, DataCacheChangeCallback delegate);

Page 43: Scalable Resilient Web Services In .Net

Application

Cache2Cache1

Primary for

K2, V2

Primary for

K1, V1

Cache3

Primary for

K3, V3

Scalable Notifications

AppFabric Caching Client

Routing Table

Register Notification for Key “K3"

Map Keys to Partition

Poll Required Nodes

Nodes Return List of Changes LSN Order

Partition: P2

Last LSN: 19

Call DelegateStore Last LSN

Change LogPartition P11 Add K22 Del

K32

Change Log

(Partition

P2)

18Del K32

19Del K43

Change Log33 Add K134 Del

K22

Page 44: Scalable Resilient Web Services In .Net

Agenda

The Problem

A Possible Solution

New Possibilities

What to do next

Page 45: Scalable Resilient Web Services In .Net

Data Center

Pre-Fetch

Hospital

Page 46: Scalable Resilient Web Services In .Net

Data Center

Pre-Fetch

HospitalRemote Clinic

Slow!!

WAN

Page 47: Scalable Resilient Web Services In .Net

Data Center

Pre-Fetch

HospitalRemote Clinic

Cach

e S

ervi

ce

WAN

Page 48: Scalable Resilient Web Services In .Net

Agenda

The Problem

A Possible Solution

New Possibilities

What to do next

Page 49: Scalable Resilient Web Services In .Net

Web Platform Installer

Page 50: Scalable Resilient Web Services In .Net

Select Enterprise

Page 51: Scalable Resilient Web Services In .Net

Install AppFabric

Page 52: Scalable Resilient Web Services In .Net

Install AppFabric

Page 53: Scalable Resilient Web Services In .Net

endpoint.tv

Page 54: Scalable Resilient Web Services In .Net

AppFabric on MSDN

http://msdn.microsoft.com/AppFabric

Page 55: Scalable Resilient Web Services In .Net
Page 56: Scalable Resilient Web Services In .Net

© 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.

The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions,

it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.