“This One Goes Up To 11” or How to write scalable ASP.NET Phil Pursglove phil@philippursglove.com http://diaryofadotnetdeveloper.blogspot.com http://www.philippursglove.com/ScalableASPNET http://twitter.com/philpursglove
About Me • Senior .NET Developer • MBCS • MCSD • VBUG East Anglia Co-ordinator • Written for VB Developer and SQL Server Pro
Agenda • Increasing server performance – Caching • Output caching • Donut caching • Object caching • Velocity – Paging • Reducing network loads – Managing ViewState – Compression
What is Scalability? • “The ability to handle growing amounts of work in a graceful manner” Wikipedia • Scalability != Performance • What affects scalability? • Everything you see today applies to .NET 2.0 and higher
Increasing Server Performance
Why Cache? • Because there’s a credit crunch! • Building a page is an expensive process – Database calls across servers – Web Service calls – AD lookups • Returning a stored page from a cache is much cheaper!
Caching 1: OutputCache • Caches the rendered HTML from your page – Duration is in seconds – VaryByParam allows you to cache several versions – Location means you can cache on the web server, client, downstream machines or all of these – CacheProfiles mean you have fine config-based control – Cached pages can be removed with HttpResponse.RemoveOutputCachedItem
Caching 2: Donut Caching • aka Post-Cache Substitution • Inject dynamic content into a cached page before it is returned to the client – <asp:substitution> – Must use static methods with a HttpContext
Caching 3: Caching API • Store objects in memory and pull them out when you need them • For data objects, you have to use DataSets and DataTables, not DataReaders
Caching 3: CacheDependency • Objects in the cache can be dependent on other objects – When the dependency changes, the cached item is removed – Not very useful in .NET 1.1 • .NET 2.0 introduced SqlCacheDependency – Cached objects can be dependent on SQL tables – Enable using the ASPNET_REGSQL tool – Or programmatically with the SqlCacheDependencyAdmin object – Can integrate with OutputCaching
Caching 3: Velocity • Velocity – Distributed cache • One logical cache split across several servers • PowerShell management console – CTP3 released April 09 • v1 Summer 09 • SP1 Q4 09 • v2 Summer 2010 – Doesn’t have dependencies – yet – The future: automatic caching? • See also NCache and memcached
Paging • Default GridView paging behaviour reads the entire dataset every time – For 100 rows this probably isn’t going to matter – For 1 000 000 rows this probably isn’t so good • Write your own paging mechanism • For custom paging DataGrids are better than GridViews • In SQL 2005 the ROW_NUMBER function is your friend! • LINQ – Skip
Reducing Network Loads
ViewState 1 Viewstate Size Object in bytes HTML Table 52 DataList 6628 Repeater 6600 DataGrid 10592 GridView 10928
ViewState 2 • Taming Viewstate – Can be disabled per-control – ZIP it up and put the zipped version on the page – Keep it on the web server
Compression 1 • All modern browsers will accept compressed content – Content is compressed on the server / decompressed by the browser – Can be enabled in IIS or – Use the HttpCompress library
Compression
Compression 2 • JavaScript Compression – JSMin (http://tinyurl.com/jscriptmin) – jQuery is pre-minified for you • CSS Compression – CSSMin (http://tinyurl.com/cssmin-webdd) – Written in PHP
Summary • Cache is King! • Paging is good for your pages! • Viewstate doesn’t have to be evil!
Any Questions?
Resources • Books – Essential ASP.NET by Fritz Onion – The ASP.NET 2.0 Cookbook by Michael Gittel & Geoffrey LeBlond – The ASP.NET Anthology by Scott Allen et al • PodCasts – http://www.dotnetrocks.com/default.aspx?showNum=24 – http://www.dotnetrocks.com/default.aspx?showNum=367 • MSDN White Paper on .NET Performance & Scalability – http://msdn.microsoft.com/en-us/library/ms998530.aspx • Strangeloop Networks Scaling Appliance – http://www.strangeloopnetworks.com/products/AS1000/
Resources • Velocity – http://blogs.msdn.com/velocity – http://www.hanselman.com/blog/HanselminutesPodcast116DistributedCac hingWithMicrosoftsVelocity.aspx – http://videos.visitmix.com/MIX09/T59F • NCache – http://www.alachisoft.com/ncache/ • memcached – http://www.danga.com/memcached/ • Donut Caching – http://tinyurl.com/donutcaching • HttpCompress Library – http://www.blowery.org/code/HttpCompressionModule.html

ASP.NET Scalability - WebDD

  • 1.
    “This One GoesUp To 11” or How to write scalable ASP.NET Phil Pursglove phil@philippursglove.com http://diaryofadotnetdeveloper.blogspot.com http://www.philippursglove.com/ScalableASPNET http://twitter.com/philpursglove
  • 2.
    About Me • Senior .NET Developer • MBCS • MCSD • VBUG East Anglia Co-ordinator • Written for VB Developer and SQL Server Pro
  • 3.
    Agenda • Increasing serverperformance – Caching • Output caching • Donut caching • Object caching • Velocity – Paging • Reducing network loads – Managing ViewState – Compression
  • 4.
    What is Scalability? •“The ability to handle growing amounts of work in a graceful manner” Wikipedia • Scalability != Performance • What affects scalability? • Everything you see today applies to .NET 2.0 and higher
  • 5.
    Increasing Server Performance
  • 6.
    Why Cache? • Becausethere’s a credit crunch! • Building a page is an expensive process – Database calls across servers – Web Service calls – AD lookups • Returning a stored page from a cache is much cheaper!
  • 7.
    Caching 1: OutputCache •Caches the rendered HTML from your page – Duration is in seconds – VaryByParam allows you to cache several versions – Location means you can cache on the web server, client, downstream machines or all of these – CacheProfiles mean you have fine config-based control – Cached pages can be removed with HttpResponse.RemoveOutputCachedItem
  • 8.
    Caching 2: DonutCaching • aka Post-Cache Substitution • Inject dynamic content into a cached page before it is returned to the client – <asp:substitution> – Must use static methods with a HttpContext
  • 9.
    Caching 3: CachingAPI • Store objects in memory and pull them out when you need them • For data objects, you have to use DataSets and DataTables, not DataReaders
  • 10.
    Caching 3: CacheDependency •Objects in the cache can be dependent on other objects – When the dependency changes, the cached item is removed – Not very useful in .NET 1.1 • .NET 2.0 introduced SqlCacheDependency – Cached objects can be dependent on SQL tables – Enable using the ASPNET_REGSQL tool – Or programmatically with the SqlCacheDependencyAdmin object – Can integrate with OutputCaching
  • 11.
    Caching 3: Velocity •Velocity – Distributed cache • One logical cache split across several servers • PowerShell management console – CTP3 released April 09 • v1 Summer 09 • SP1 Q4 09 • v2 Summer 2010 – Doesn’t have dependencies – yet – The future: automatic caching? • See also NCache and memcached
  • 12.
    Paging • Default GridViewpaging behaviour reads the entire dataset every time – For 100 rows this probably isn’t going to matter – For 1 000 000 rows this probably isn’t so good • Write your own paging mechanism • For custom paging DataGrids are better than GridViews • In SQL 2005 the ROW_NUMBER function is your friend! • LINQ – Skip
  • 13.
  • 14.
    ViewState 1 Viewstate Size Object in bytes HTML Table 52 DataList 6628 Repeater 6600 DataGrid 10592 GridView 10928
  • 15.
    ViewState 2 • TamingViewstate – Can be disabled per-control – ZIP it up and put the zipped version on the page – Keep it on the web server
  • 16.
    Compression 1 • Allmodern browsers will accept compressed content – Content is compressed on the server / decompressed by the browser – Can be enabled in IIS or – Use the HttpCompress library
  • 17.
  • 18.
    Compression 2 • JavaScriptCompression – JSMin (http://tinyurl.com/jscriptmin) – jQuery is pre-minified for you • CSS Compression – CSSMin (http://tinyurl.com/cssmin-webdd) – Written in PHP
  • 19.
    Summary • Cache isKing! • Paging is good for your pages! • Viewstate doesn’t have to be evil!
  • 20.
  • 21.
    Resources • Books – Essential ASP.NET by Fritz Onion – The ASP.NET 2.0 Cookbook by Michael Gittel & Geoffrey LeBlond – The ASP.NET Anthology by Scott Allen et al • PodCasts – http://www.dotnetrocks.com/default.aspx?showNum=24 – http://www.dotnetrocks.com/default.aspx?showNum=367 • MSDN White Paper on .NET Performance & Scalability – http://msdn.microsoft.com/en-us/library/ms998530.aspx • Strangeloop Networks Scaling Appliance – http://www.strangeloopnetworks.com/products/AS1000/
  • 22.
    Resources • Velocity – http://blogs.msdn.com/velocity – http://www.hanselman.com/blog/HanselminutesPodcast116DistributedCac hingWithMicrosoftsVelocity.aspx – http://videos.visitmix.com/MIX09/T59F • NCache – http://www.alachisoft.com/ncache/ • memcached – http://www.danga.com/memcached/ • Donut Caching – http://tinyurl.com/donutcaching • HttpCompress Library – http://www.blowery.org/code/HttpCompressionModule.html