11/28/2018 12:08 AM PDC09-FT26 Scale Your Data Tier using Windows Server AppFabric Caching (formerly Project “Velocity”) Muralidhar Krishnaprasad Principal.

Slides:



Advertisements
Similar presentations
Faith Allington Program Manager Microsoft Corporation Session Code: WSV304.
Advertisements

Wade Wegner Windows Azure Technical Evangelist Microsoft Corporation Windows Azure AppFabric Caching.
BUILDING HYBRID APPS WITH DYNAMICS CRM & WINDOWS AZURE Guy Riddle & George Doubinski Dynamics CRM MVP’s SESSION CODE: DEV-DYN-MID306 (c) 2011 Microsoft.
Training Workshop Windows Azure Platform. Presentation Outline (hidden slide): Technical Level: 200 Intended Audience: Developers Objectives (what do.
 Muralidhar Krishnaprasad Principal Architect Microsoft Corporation TL14.
 Anil Nori Distinguished Engineer Microsoft Corporation.
Connect with life Janakiram MSV Sr. Technology Strategist | MS India Development Center Siddharth Jagtiani Sr. Program Manager.
Virtual techdays INDIA │ November 2010 AppFabric Cache Jatin Kakkar │ Sr. Program Manager, AppFabric.
… Application /Web Tier UsersUsers DatabaseDatabase Data tier Application Asp.Net app Session cart hosted in memory Asp.Net app Session cart hosted.
Designing and Delivering Scalable and Resilient Web Services Ron Jacobs Sr. Technical Evangelist, Microsoft
Service Pack 2 System Center Configuration Manager 2007.
Nicholas Goossens R&D Lead Open Box Software Session Code: WUX301.
Migrate SQL Server Apps to SQL Azure Cloud DB
Microsoft Virtual Academy
Building ARM IaaS Application Environment
Microsoft Virtual Academy
Microsoft Virtual Academy
Introduction to Windows Azure AppFabric
MIX 09 6/5/2018 9:14 AM © 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered.
Microsoft Virtual Academy
SaaS Application Deep Dive
6/16/2018 © 2014 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks.
Developing Hybrid Apps on Microsoft Azure Stack
6/17/ :27 AM BRK3341 Unlock extensibility by connecting your service to PowerApps and Microsoft Flow Theresa (Tessa) Palmer–Sr. Program Manager Sunay.
Jim Nakashima Program Manager – Cloud Tools Microsoft Corporation
Optimizing Microsoft OneDrive for the enterprise
Managing the Solution Lifecycle for xRM Applications
Microsoft Ignite /31/ :08 AM
Infrastructure Provisioning Kenon Owens Sr
9/13/2018 © 2014 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks.
Bridging the Gap From On-Premises to the Cloud
Exceedra + Azure Mark Rendle Principal Software Architect
Excel Services Deployment and Administration
SharePoint Online Management and Control
Microsoft Virtual Academy
Introduction to Windows Azure Web Sites
Windows Azure 講師: 李智樺, Ruddy Lee
The Challenges of moving Document Creation to the Cloud
Microsoft Virtual Academy
Microsoft Virtual Academy
SESSION CODE: ASI313 Windows Server AppFabric Caching: What It Is and When You Should Use It Jon Flanders.
Developer Patterns to Integrate Silverlight 4.0 with SharePoint 2010
Module 1–Windows AppFabric Cache
TechEd /23/ :44 AM © 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered.
TechEd /4/2018 3:19 AM © 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks.
Power-up NoSQL with Azure Cosmos DB
F# for Parallel and Asynchronous Programming
Microsoft Virtual Academy
12/9/2018 Desktop Virtualization Corey Hynes Kyle Rosenthal President Technical Lead HynesITe Inc Spider Consulting @windowspcguy.
TechEd /11/ :54 PM © 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered.
ASP.NET 4 Core Runtime for Web Developers
TechEd /15/2019 8:08 PM © 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks.
Pablo Castro Software Architect Microsoft Corporation
2/22/2019 7:48 AM © 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered.
MDC-B203 Deploying Applications in Microsoft System Center Virtual Machine Manager Using Services John Messec Program Manager Microsoft.
2/27/2019 © 2014 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks.
Developing for Windows Azure
Sayed Ibrahim Hashimi Program Manager Microsoft Corporation
Service Template Creation from the Ground Up
Building global and highly-available services using Windows Azure
Service Template Creation from the Ground Up
Day 2, Session 2 Connecting System Center to the Public Cloud
Microsoft Virtual Academy
Office 365 Development July 2014.
Microsoft Virtual Academy
Microsoft Virtual Academy
Microsoft Virtual Academy
Microsoft Virtual Academy
Building Data-Driven Applications Using "Quadrant" and "M"
Microsoft Virtual Academy
Presentation transcript:

11/28/2018 12:08 AM PDC09-FT26 Scale Your Data Tier using Windows Server AppFabric Caching (formerly Project “Velocity”) Muralidhar Krishnaprasad Principal Software Architect Microsoft Corporation © 2007 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.

Grocery Web Site

Typical Architecture Users Load Balancer Sticky Routing Application / Web Tier Application Application Application ASP.Net App Session Cart Hosted in memory Database Data Tier Catalog sits in Database

And then… Flu Hits!

You become a popular Grocer! Web Site’s too slow!! Users Where did my shopping cart go? Web Tier (ASP.Net) … Application Application Application Servers are crashing Database Data Tier Database is hot!!

Windows Server AppFabric Caching can help

Outline The Problem! Caching with the Windows Server AppFabric What is it? Why AppFabric caching? What stage is it in? Overview and Programming Caching Futures Conclusions

What is AppFabric Caching? 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 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

… Where does it fit? Users Web Tier (ASP.Net) Data Tier Cache Tier Application Application Application Caching Access Layer Caching Service Cache Tier Database Cloud Data Tier

Outline The Problem! Caching with the Windows Server AppFabric What is it? Why AppFabric caching? What stage is it in? Overview and Programming Caching Futures Conclusions

Why use AppFabric Caching? 1. Share Data Across Applications No more sticky routing 2. Performance Oper Throughput Latency Bulk Fetch Read 28, 000/ sec (2k) 1-2ms 200k/sec (512 bytes) Write 20,000 / sec (2k) 3 ms - 3. Scale out by adding more boxes Operation Servers Throughput Read 2k 1 28,000 ops/ sec 2 52, 500 ops/ sec 3 78, 000 ops/ sec 4. High Availability Protect from Web & Cache Server Failure

Why use AppFabric Caching? 5. Proven Technology Associated Press Custom News live on CTP3 AppFabric caching capabilities caches metadata and news for widgets Serves 16 million hits per day Increased the amount of cached data 6 times.

Why AppFabric Caching? 5. Proven Technology Contd.. Dell.com uses AppFabric caching! Channel Partner Portal uses AppFabric caching Provides targeted content and search results Tracks customer browse history and downloads. Next Generation Sales Platform Solutions to use AppFabric caching (currently under construction) Just two of the many TAP customers in line for production

Why AppFabric Caching? – Best yet 6. Do all this at low cost! . Use inexpensive commodity hardware Ships as part of Windows Server AppFabric 2010 Wave 1 * Different Features of the cache might require higher level SKUs of Windows Server. AppFabric CACHING WORKFLOW HOSTING MONITORING SERVICE BUS SERVICE HOSTING ACCESS CONTROL MANAGEMENT HIGH AVAILABILITY SCALE OUT MULTI-TENANT

Outline The Problem! Caching with the Windows Server AppFabric What is it? Why caching? What stage is it in? Overview and Programming Caching Futures Conclusions

When Can I Get Windows Server AppFabric ? CTP1 June ‘08 Beta PDC Nov ‘09 CTP2 PDC ‘08 CTP3 Mar ‘09 RTM 2010 Wave 1 * CY10 Azure CTP Post RTM (Formerly Called “Velocity”) Microsoft Confidential

Outline The Problem Caching with the Windows Server AppFabric Overview and Programming AppFabric Caching Deployment & Access API How does AppFabric Caching Scale? Features AppFabric Caching Futures Conclusions

Deployment … Users Copy Client DLLs and add app.config Web Tier <hosts> <host name="BL1CDB8083714“ cachePort="22233" cacheHostName="DistributedCacheService"/> ….. </hosts> <localCache isEnabled=“true" ../> <security … /> Application Caching Access Layer Caching Access Layer Caching Access Layer Caching Service Cache Tier Configuration Store (Can be database, File share, etc.) Stores Global Cache Policies Stores Current Partitioning Information Caching Service Enable Application Server Cache Role

Security (new in Beta) Domain Based Security Option 11/28/2018 12:08 AM Security (new in Beta) 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 © 2008 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.

Administration & Monitoring Centralized administration through powershell Perfmon to monitor the cache (new in Beta) Logging Default ETW, support for file logs

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");

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

Access APIs – Tagging Items Add Tags to Items Tag Search on Default Regions (New in Beta) 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);

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

Outline The Problem Caching with the Windows AppFabric Overview and Programming AppFabric Caching Deployment & Access API How does AppFabric Caching Scale? Features Demo AppFabric Caching Futures Conclusions

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

Scale Test Output Load Throughput Latency Server 3 Added Throughput Increases Latency Decreases Load Server 2 Added Throughput Increases Latency Decreases Until Server Saturation Single Server Throughput Increases with Increasing Load Until Server Saturation Throughput Latency

GridDynamics Blog Engine Tests More info at http://blogs.msdn.com/velocity/ or http://www.griddynamics.com/velocity

Outline The Problem AppFabric Caching – The Solution Understanding Cache Data Overview and Programming AppFabric Caching Deployment & Access API How does AppFabric Caching Scale? Features Demo AppFabric Caching Futures Conclusions

Use the right features! Classify your data Examine Requirements 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?

Types of Data Grocery Inventory Grocery Shop Web Tier Reference 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

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 K2, V2 Routing Table Routing Table Cache1 Cache2 Cache3 Primary for K1,V1 Primary for K2,V2 Primary for K3,V3 K2, V2 K1, V1 K2, V3 K3, V3

Reference Data – Bulk Get Enumerate all items in Region Bulk Fetch from region (New in Beta) 200-300k ops per second Catalog.BulkGet( new List<string>(){“toy-101”, “toy-102”} , “toyRegion”);

Activity Data – Session Cart 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 Application Caching Access Layer … Caching Access Layer Caching Access Layer Session State stored in AppFabric Caching New in Beta – Allow session state to be shared amongst multiple applications Scale your Session Store Dynamically Cache Service Caching Service Caching Service Highly Available

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

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”); catalog.GetCacheItem(“PlayerRegion”, ”Zune”); T1 ((ZuneObject)item.Object).inventory --; ((ZuneObject)item.Object).inventory--; T2 catalog.Put(“PlayerRegion”, “Zune”, item.Object, item.Version); T3 // 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

Resource Data - Pessimistic Locking Client1: GetAndLock ("k1") Client2: GetAndLock ("k1") Client3: Get ("k1") GetAndLock gets lock handle Regular Get succeeds Other GetAndLock on same item fails K1 New in Beta – Take locks on non-existent keys Allows you to co-ordinate creating new object amongst multiple clients

Resource/Activity Data – Tracking Changes 11/28/2018 12:08 AM Resource/Activity Data – Tracking Changes Cache Event notifications Register on any client to notify changes Batched Notifications – (New in Beta) DataCache.RegisterCacheLevelCallback( int filter, DataCacheChangeCallback delegate); DataCache.RegisterRegionLevelCallback( String region, int filter, DataCacheChangeCallback delegate); DataCache.RegisterKeyLevelCallback( String region, String key, int filter, DataCacheChangeCallback delegate); © 2008 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.

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

Outline The Problem AppFabric Caching – The Solution Understanding Cache Data Overview and Programming AppFabric Caching Deployment & Access API How does AppFabric Caching Scale? Features Demo AppFabric Caching Futures Conclusions

Outline The Problem AppFabric Caching – The Solution Understanding Cache Data Overview and Programming AppFabric Caching AppFabric Caching Futures AppFabric Caching and Azure Platform ASP.Net and Persistance Conclusions

Application Growth You are a popular Grocer!! 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

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

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

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

Outline The Problem AppFabric Caching – The Solution Understanding Cache Data Overview and Programming AppFabric Caching AppFabric Caching Futures AppFabric Caching and Azure Platform ASP.Net and Persistance Conclusions

Integration with ASP.Net 11/28/2018 12:08 AM Integration with ASP.Net 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 © 2008 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.

Future – Cache Through Bulk Access APIs 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

Central Market Data Store HPC Integration Final Results Store Central Market Data Store (~1 TB Tick Data) AppFabric Caching Market Data Results Final AppFabric Caching Intermediate Store Market Data Scratch Job Input Rollup Operation Split Method Keys Calculation Operation Scratch GridDynamics testing on CTP1 50 times improvement in some cases

Outline The Problem AppFabric Caching – The Solution Understanding Cache Data Overview and Programming AppFabric Caching Deployment and Maintenance AppFabric Caching Futures Conclusions

AppFabric Caching Vision – Cache for all your data Web Scenarios Distributed/Global object cache Low latency access High scale Availability Cache for reference and activity data Scale IIS/ASP.Net applications Enterprise / HPC Scenarios Persistence LINQ enabled cache Integrate with HPC server Heterogeneous client support Co-locate compute and data Software + Services Scenarios Application Cache for Windows Azure More data services BI, Streaming, Reporting OData (REST API)

Additional Resources Related Talks Hands On Labs On the Web PDC09-FT25 Microsoft Application Server Technologies: Present and Future PDC09-FT18 Microsoft ASP.NET Futures Hands On Labs Introduction to Microsoft Project Code Name “Velocity” On the Web Windows Server AppFabric Developer Center http://msdn.microsoft.com/appfabric

YOUR FEEDBACK IS IMPORTANT TO US! Please fill out session evaluation forms online at MicrosoftPDC.com

channel9.msdn.com/learn 11/28/2018 12:08 AM Learn More On Channel 9 Expand your PDC experience through Channel 9 Explore videos, hands-on labs, sample code and demos through the new Channel 9 training courses channel9.msdn.com/learn Built by Developers for Developers…. © 2007 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.

11/28/2018 12:08 AM © 2009 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. © 2007 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.

11/28/2018 12:08 AM © 2009 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.

11/28/2018 12:08 AM © 2009 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.