Presentation is loading. Please wait.

Presentation is loading. Please wait.

Designing and Delivering Scalable and Resilient Web Services Ron Jacobs Sr. Technical Evangelist, Microsoft

Similar presentations


Presentation on theme: "Designing and Delivering Scalable and Resilient Web Services Ron Jacobs Sr. Technical Evangelist, Microsoft"— Presentation transcript:

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

2 Agenda The ProblemA Possible SolutionNew PossibilitiesWhat to do next

3 Simple Do the simplest thing that will possibly work

4 Scalability Able to support the required quality of service as the system load increases -Wiktionary

5 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

6 Web Explosion Database IIS/ASP.NETIIS/ASP.NET Application Web Site’s too slow!! Database is hot!! Where did my shopping cart go? IIS/ASP.NETIIS/ASP.NET Application IIS/ASP.NETIIS/ASP.NET Servers are crashing Services are slow

7 Agenda The ProblemA Possible SolutionNew PossibilitiesWhat to do next

8 Data Near Processing Database Smart Client Browser Cache

9 Good but… Cache is scoped to machine / process – Machines die – Processes recycle Cache memory is limited

10 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 1 free? 1 Some features may require certain editions of Windows Server

11 Windows Server AppFabric AppFabric CACHING MONITORING WORKFLOW HOSTING SERVICE HOSTING SCALE OUTHIGH AVAILABILITYMANAGEMENT AppFabric Cache – Formerly known as Code Name “Velocity”

12 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

13 AppFabric Cache No need for sticky sessio ns Users Cached data available to all servers Web Tier Multiple machines means scale and high- availability Lots of cache memory Cachin g Tier Reduces load on database Duplicate Service Calls eliminated Data Tier

14 Data Distribution - Partitioned Cache … Web Tier Cache Tier Cache Service AA CC EEDD BB GGIIHHFF Scale on Data Size - More machines => More memory to cache Scale on Cache Throughput - More machines => keys distributed across more machines => better throughput ASP.Net App Caching Client ASP.Net App Caching Client ASP.Net App Caching Client AACC EEDDBBGG IIHH FF

15 Scale Test OutputLoadLoad ThroughputThroughput LatencyLatency 1 Cache Server As load increases, throughput fails to scale latency increases Caching Tier

16 Add Second Cache ServerThroughputThroughput Load Max Throughput increases Latency decreases Caching Tier LoadLoad LatencyLatency

17 Add Third Cache ServerLoadLoad ThroughputThroughput LatencyLatency Caching Tier

18 Associated Press Caches metadata and news Serves 16 million hits per day Increased the amount of cached data 6 times.

19 System.Web.Cache

20 AppFabric DataCache

21 Deployment Caching Service Configuration Store Install AppFabric Copy Client DLLs … Application <host name="BL1CDB8083714“ cachePort="22233" cacheHostName="DistributedCacheService"/> ….. <host name="BL1CDB8083714“ cachePort="22233" cacheHostName="DistributedCacheService"/> ….. Caching Access Layer.NET 3.5 SP1 OR.NET 4 Configure AppFabric.NET 4 Update Web.config

22 Usage Pattern – Cache Aside (Explicit Caching) // Read from Cache Toy toyObj = (Toy) catalog.Get("toy-101"); // Read from Cache Toy toyObj = (Toy) catalog.Get("toy-101"); Application Caching Service // If Not present in the cache if (toyObj == null) { // Read from backend.. toyObj = ReadFromDatabase(); // Populate Cache catalog.Put("toy-101", toyObj); return toyObj; } // If Not present in the cache if (toyObj == null) { // Read from backend.. toyObj = ReadFromDatabase(); // Populate Cache catalog.Put("toy-101", toyObj); return toyObj; } Caching Access Layer

23 Administration PowerShell cmdlets are used to administer the cache cluster Rich set of cmdlets for – Cache cluster management – Cache creation and monitoring

24 Hello AppFabric Cache

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

26 AppFabric Cache Codeplex Tool

27 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

28 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 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

29 AppFabric Caching API // Create instance of cachefactory (reads appconfig) DataCacheFactory fac = new DataCacheFactory(); // Get a named cache from the factory DataCache catalog = fac.GetCache("catalogcache"); // Simple Get/Put catalog.Put("toy-101", new Toy("Puzzle",.,.)); // From the same or a different client Toy toyObj = (Toy)catalog.Get("toy-101"); // Simple Get/Put catalog.Put("toy-101", new Toy("Puzzle",.,.)); // From the same or a different client Toy toyObj = (Toy)catalog.Get("toy-101"); // Region based Get/Put catalog.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"); // Region based Get/Put catalog.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");

30 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 client List > toys = catalog.GetAnyMatchingTag("toyRegion", hotItem); 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 client List > toys = catalog.GetAnyMatchingTag("toyRegion", hotItem);

31 Types of Data ReferenceActivityResource Primary Read OnlyRead-Write Not sharedRead-Write, Shared Catalog DataShopping CartAuction Data/Seat Assignment Web Tier Distributed Cache Shopping Cart Grocery Catalog Grocery Inventory Grocery Shop

32 Application 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 Cache2 Cache1 Primary for K2,V2 K2, V2 Primary for K1,V1 K1, V1 Cache3 Primary for K3,V3 K3, V3 AppFabric Caching Client Local Cache Routing Table K2, V2 Get(K2) K2, V3

33 Reference Data – Bulk Get Bulk Fetch from region – 200-300k ops per second – Fewer network calls Catalog.BulkGet( new List (){“toy-101”, “toy-102”}, “toyRegion”); Catalog.BulkGet( new List (){“toy-101”, “toy-102”}, “toyRegion”);

34 Activity Data – Session Integration … Session State stored in AppFabric Caching Cache Service Caching Service Load Balance Requests No more sticky routing Load Balance Requests No more sticky routing Caching Service Scale your Session Store Dynamically Dynamically Highly Available Drop in AppFabric Caching SessionStoreProvider Allows session state to be shared amongst multiple applications Application Caching Access Layer Application Caching Access Layer <add name="SessionStoreProvider" type=“Microsoft.Data.Caching.DataCacheSessionStoreProvider, ClientLibrary“ cacheName=" "/> <add name="SessionStoreProvider" type=“Microsoft.Data.Caching.DataCacheSessionStoreProvider, ClientLibrary“ cacheName=" "/>

35 Application (K2, V2) Cache2 Cache1 Cache3 Primary for Activity Data - Availability Get(K2) Primary for K3, V3 AppFabric Caching Client Routing 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 Agent K2, V2

36 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 TimeClient1Client2 (Different Thread or process) T0 CacheItem item = catalog.GetCacheItem(“PlayerRegion”, ”Zune”); CacheItem item = catalog.GetCacheItem(“PlayerRegion”, ”Zune”); T1((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 First client tries put; Fails because the versions don’t match

37 K1 Resource Data - Pessimistic Locking Take locks on non-existent keys – Allows you to co-ordinate calls for data Client1: GetAndLock ("k1") Client1: GetAndLock ("k1") Client2: GetAndLock ("k1") Client2: GetAndLock ("k1") Client3: Get ("k1") Client3: Get ("k1") Regular Get succeeds GetAndLock gets lock handle Other GetAndLock on same item fails

38 Data Race GET

39 Lock Non-Existent Key GET/LOCK Cache Service Caching Service Cache Service

40 Composite Race CALLWAIT Cache Service Caching Service Cache Service

41 Composite Race PUT UNLOCK GET Cache Service Caching Service Cache Service

42 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); DataCache.RegisterCacheLevelCallback( int filter, DataCacheChangeCallback delegate); DataCache.RegisterRegionLevelCallback( String region, int filter, DataCacheChangeCallback delegate); DataCache.RegisterKeyLevelCallback( String region, String key, int filter, DataCacheChangeCallback delegate);

43 Application Cache2 Cache1 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 Partition: P2 Last LSN: 19 Call Delegate Store Last LSN Call Delegate Store Last LSN Change Log Partition P1 1Add K2 2Del K32 Change Log Partition P1 1Add K2 2Del K32 Change Log (Partition P2) 18Del K32 19Del K43 Change Log (Partition P2) 18Del K32 19Del K43 Change Log 33 Add K1 34 Del K22 Change Log 33 Add K1 34 Del K22

44 Agenda The ProblemA Possible SolutionNew PossibilitiesWhat to do next

45 Data Center Pre-Fetch Hospital

46 Data Center Pre-Fetch HospitalRemote Clinic Slow!! WAN

47 Data Center Pre-Fetch HospitalRemote Clinic Cache Service WAN

48 Agenda The ProblemA Possible SolutionNew PossibilitiesWhat to do next

49 Web Platform Installer

50 Select Enterprise

51 Install AppFabric

52

53 endpoint.tv

54 AppFabric on MSDN http://msdn.microsoft.com/AppFabric

55

56


Download ppt "Designing and Delivering Scalable and Resilient Web Services Ron Jacobs Sr. Technical Evangelist, Microsoft"

Similar presentations


Ads by Google