This document discusses using Windows Server AppFabric caching to scale data layers. AppFabric caching provides a distributed, in-memory cache that can span machines and processes. It addresses issues like limited cache memory on individual servers. The document outlines how AppFabric caching works, how to install and configure it, and how to access the cache through the API. It also describes features like data distribution, eviction policies, and change notifications that allow the cache to efficiently scale to large workloads and data sets.
HTML Injection Attacks: Impact and Mitigation Strategies
TechDays 2010 Portugal - Scaling your data tier with app fabric 16x9
1. Como garantir a escalabilidade da sua camada de dados com o Windows Server AppFabric WIN304 NunoGodinho Partner & CTO @ ITech4All nuno.godinho@itech4all.com @NunoGodinho
11. You become a popular Pharmacy! Web Site’s too slow!! Users Where did my shopping cart go? Web Tier (ASP.Net) … Application Application Application Servers are crashing Database is hot!! Data Tier Database
13. Data Near Processing Cache Cache Browser Smart Client Cache Web Service ASP.NET Cache Cache Database
14. Cache is scoped to machine / process Machines die Processes recycle Cache memory is limited Good but…
15. 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 What if?
18. An explicit, distributed, in-memory application cache for all kinds of data (CLR objects, rows, XML, Binary data etc.) Fuse "memory" across machines into a unified cache What is AppFabric Caching? 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
19. Where does it fit? Users Caching Access Layer Caching Access Layer Caching Access Layer … Web Tier (ASP.Net) Application Application Application Caching Service Caching Service Caching Service Cache Tier Data Tier Database Cloud
22. 1. Share Data Across Applications No more sticky routing 2. Performance 3. Scale out by adding more boxes 4. High Availability Protect from Web & Cache Server Failure Why use AppFabric Caching?
27. Ships as part of Windows Server AppFabric 2010 Wave 1 * Different Features of the cache might require higher level SKUs of Windows Server. AppFabric MONITORING WORKFLOW HOSTING CACHING ACCESS CONTROL SERVICE HOSTING SERVICE BUS MANAGEMENT MULTI-TENANT SCALE OUT HIGH AVAILABILITY
36. 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 Security (new since Beta) grant-cacheallowedclientaccount RedDomainachine1$ grant-cacheallowedclientaccount RedDomainohn
37. Centralized administration through powershell Perfmon to monitor the cache (new in Beta) Logging Default ETW, support for file logs Administration & Monitoring
38. // Create instance of cachefactory (reads appconfig) DataCacheFactoryfac = new DataCacheFactory(); // Get a named cache from the factory DataCache catalog = fac.GetCache("catalogcache"); AppFabric Caching API // 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");
39. AppFabric Caching Logical Hierarchy AppFabric Caching Service AppFabric Caching Service AppFabric Caching Service AppFabric Caching Service 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 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
40. Add Tags to Items Tag Search on Default Regions (New in Beta) 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);
41. 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
43. Data Distribution - Partitioned Cache Users … G H I D E F A B C Web Tier ASP.Net App ASP.Net App ASP.Net App Caching Client Caching Client Caching Client E G B D H A I C F Cache Service Cache Service Cache Tier Cache Service Scale on Data Size -More machines => More memory to cache Scale on Cache Throughput -More machines => keys distributed across more machines => better throughput
44. Scale Test Output Load 1 Cache Server As load increases, throughput fails to scale latency increases Caching Tier Throughput Latency
45. Add Second Cache Server Load Load Max Throughput increases Latency decreases Caching Tier Throughput Latency
49. Classify your data Reference or Activity or Resource Data Examine Requirements Performance - Throughput & Latency Consistency – Tolerable staleness Eviction - Is the data evictable? Security - Is there any secure data? Availability – Survive node or cluster failures? Use the right features!
50. Types of Data Grocery Shop Web Tier Shopping Cart Pharmacy Inventory Distributed Cache Pharmacy Catalog
51. Catalog data doesn’t change often Unnecessary network cost to access from different machines Solution – Local Cache Application Application Reference Data – Performance Get(K2) Get(K2) Put(K2, v3) AppFabric Caching Client AppFabric Caching Client Local Cache Routing Table Routing Table K2, V2 K2, V2 Cache2 Cache3 Cache1 Primary for K1,V1 Primary for K3,V3 Primary for K2,V2 K1, V1 K2, V3 K3, V3
52. Enumerate all items in Region Bulk Fetch from region (New in Beta) 200-300k ops per second Reference Data – Bulk Get Catalog.BulkGet( new List<string>(){“toy-101”, “toy-102”} , “toyRegion”);
53. Application PUT Application Get(K2) AppFabric Caching Client AppFabric Caching Client Routing Table Routing Table Cache1 Cache2 Cache3 Activity Data - Availability Primary for Primary for Primary for Replication Agent (K2, V2) K3, V3 K2, V2 K1, V1 K2, V2 K2, V2 Secondary for Secondary for Secondary for K3, V3 K1, V1
54. 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 Resource Data - Optimistic Locking 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
55. Resource Data - Pessimistic Locking Client1: GetAndLock ("k1") Client3: Get ("k1") Client2: GetAndLock ("k1") GetAndLock gets lock handle Regular Get succeeds Other GetAndLock on same item fails New in Beta – Take locks on non-existent keys Allows you to co-ordinate creating new object amongst multiple clients K1
56. Cache Event notifications Register on any client to notify changes Batched Notifications – (New in Beta) Resource/Activity Data – Tracking Changes DataCache.RegisterCacheLevelCallback( int filter, DataCacheChangeCallback delegate); DataCache.RegisterRegionLevelCallback( String region, int filter, DataCacheChangeCallback delegate); DataCache.RegisterKeyLevelCallback( String region, String key, int filter, DataCacheChangeCallback delegate);
57. Register Notification for Key “K3" Call Delegate Store Last LSN Map Keys to Partition (say P2) Application 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 Scalable Notifications
61. You are a popular Online Pharmacy!! Lots of Users! Irregular & Elastic Demands Solution - Move to the Services World! Application on-premise with data on SQL Azure Application on Windows Azure with data on SQL Azure Application on Windows Azure with on-premise database connected by AppFabric Service Bus Application Growth
62. App on-premise; Data on SQLAzure … ASP.Net Web Tier Application Application Application AppFabric Caching Access Layer AppFabric Caching Access Layer AppFabric Caching Access Layer Application & AppFabric Caching deployed On-premise Caching Service Caching Service Caching Service Caching Worker Role Data on SQL Azure
63. App on Windows Azure; Data on SQL Azure Web Role … Application Application Application AppFabric Caching Access Layer AppFabric Caching Access Layer AppFabric Caching Access Layer Application & AppFabric Caching on Windows Azure Caching Service Caching Service Caching Service Caching Worker Role AppFabric Caching Worker Role Data on SQL Azure
64. App on Windows Azure; Data on-premise Web Role … Application Application Application AppFabric Caching Access Layer AppFabric Caching Access Layer AppFabric Caching Access Layer AppFabric Service Bus Application & AppFabric Caching on Windows Azure Caching Service Caching Service Caching Service Caching Worker Role AppFabric Caching Worker Role Data on-premises
66. ASP.Net extends cache surface .Net 4.0 Integrate with the Application Cache System.Runtime.Caching namespace AppFabric Caching will be a provider for this namespace Granular Session Updates IPartialSessionState lists keys changed Extensible Output Cache Provider Output Caching not limited to single node Integration with ASP.Net
67. Callback for read-through, write-behind Specified at Named Cache Level Read-Through Called when item not present in cache Callback returns the object/serialized bytes Write-Behind Writes to cache are queued Callback called asynchronously in batches Re-tries upon failure Bulk Access APIs Future – Cache Through
68. HPC Integration Final Results Store AppFabric Caching Market Data Central Market Data Store (~1 TB Tick Data) Final Results AppFabric Caching Intermediate Store Market Data Scratch Job Input Rollup Operation Split Method Scratch Keys Calculation Operation GridDynamics testing on CTP1 50 times improvement in some cases