1 / 56

Designing and Delivering Scalable and Resilient Web Services

Designing and Delivering Scalable and Resilient Web Services. Ron Jacobs Sr. Technical Evangelist, Microsoft http://blogs.msdn.com/rjacobs. Agenda. Simple. Do the simplest thing that will possibly work. Scalability.

neci
Download Presentation

Designing and Delivering Scalable and Resilient Web Services

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Agenda

  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

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

  7. Agenda

  8. Data Near Processing Cache Cache Browser Smart Client Cache Web Service ASP.NET Cache Cache Database

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

  11. Windows Server AppFabric AppFabric CACHING WORKFLOW HOSTING SERVICE HOSTING MONITORING • HIGH AVAILABILITY SCALE OUT MANAGEMENT AppFabric Cache – Formerly known as Code Name “Velocity”

  12. 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 Unified Cache View Cache Layer distributes data across the various cache nodes

  13. AppFabric Cache

  14. Data Distribution - Partitioned Cache … Web Tier ASP.Net App ASP.Net App ASP.Net App Caching Client Caching Client Caching Client G H I D E F A B C Cache Service Cache Service Cache Tier Cache Service E G B D H A I C F Scale on Data Size -More machines => More memory to cache Scale on Cache Throughput -More machines => keys distributed across more machines => better throughput

  15. Scale Test Output Load 1 Cache Server As load increases, throughput fails to scale latency increases • Caching Tier Throughput Latency

  16. Add Second Cache Server Load Load Max Throughput increases Latency decreases • Caching Tier Throughput Latency

  17. Add Third Cache Server Load • Caching Tier Throughput Latency

  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. AppFabricDataCache

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

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

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

  24. Demo Hello AppFabric Cache

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

  26. Demo AppFabric Cache Codeplex Tool http://mdcadmintool.codeplex.com/

  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 AppFabric Caching Service AppFabric Caching Service AppFabric Caching Service AppFabric Caching Service • 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 Named Cache : Product Catalog Named Cache : Electronics Inventory Regions Key Payload Tags Region A 121 xxxx “Toy” “Child” 123 yyyy “Toy” “Chair”.. • Machine -> Cache Host -> Named Caches -> Regions -> Cache Items -> Objects

  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"); // 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<KeyValuePair<string, object>> toys = catalog.GetAnyMatchingTag("toyRegion", hotItem);

  31. Types of Data Grocery Shop Web Tier Shopping Cart Grocery Inventory Distributed Cache Grocery Catalog

  32. Reference Data – Performance • Catalog data doesn’t change often • Unnecessary network cost to access from different machines • Solution – Local Cache Application Application Get(K2) Get(K2) Put(K2, v3) AppFabric Caching Client AppFabric Caching Client Local Cache RoutingTable Routing Table Cache2 Cache3 Cache1 K2, V2 K2, V2 Primary for K1,V1 Primary for K3,V3 Primary for K2,V2 K1, V1 K2, V3 K3, V3

  33. 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”);

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

  35. Activity Data - Availability Application Application PUT Get(K2) AppFabric Caching Client AppFabric Caching Client Routing Table Routing Table Cache1 Cache2 Cache3 Primary for Primary for Primary for Replication Agent K3, V3 K1, V1 K2, V2 (K2, V2) K2, V2 Secondary for Secondary for Secondary for K2, V2 K2, V2 K3, V3 K1, V1

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

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

  38. Data Race GET GET GET

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

  40. Composite Race CALL WAIT WAIT Cache Service Cache Service Caching Service

  41. Composite Race PUT UNLOCK GET GET Cache Service Cache Service Caching 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);

  43. Scalable Notifications Register Notification for Key “K3" Call Delegate Store Last LSN Application Map Keys to Partition AppFabric Caching Client Partition: P2 Last LSN: 19 Routing Table Poll Required Nodes Nodes Return List of Changes LSN Order Cache2 Cache3 Cache1 K2, V2 Primary for Primary for Primary for Change Log (Partition P2) Del K32 Del K43 Change Log Partition P1 Add K2 Del K32 Change Log 33 Add K1 34 Del K22 K1, V1 K3, V3

  44. Agenda

  45. Pre-Fetch Hospital Data Center

  46. Pre-Fetch Remote Clinic Hospital Slow!! Data Center WAN

  47. Pre-Fetch Remote Clinic Hospital Cache Service Data Center WAN

  48. Agenda

  49. Web Platform Installer

  50. Select Enterprise

More Related