asp.net scalability - ddd7

25
“This One Goes Up To 11” or How to write scalable ASP.NET Phil Pursglove [email protected] http://diaryofadotnetdeveloper.blogspot.com http://www.philippursglove.com/ScalableASPNET

Upload: phil-pursglove

Post on 13-May-2015

1.466 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: ASP.NET Scalability - DDD7

“This One Goes Up To 11”or

How to write scalable ASP.NET

Phil [email protected]://diaryofadotnetdeveloper.blogspot.comhttp://www.philippursglove.com/ScalableASPNET

Page 2: ASP.NET Scalability - DDD7

I am…

• Senior .NET Developer• MCSD• VBUG East Anglia Co-ordinator• Used to write for VB Developer and

SQL Server Pro

Page 3: ASP.NET Scalability - DDD7

Agenda• Increasing server performance

– Caching• Output caching• Object caching• Donut caching• Velocity

– Paging

• Reducing network loads– Managing ViewState– Compression

• Load Balancing

Page 4: ASP.NET Scalability - DDD7

What is Scalability?

• “The ability to handle growing amounts of work in a graceful manner” Wikipedia

• What affects scalability?

• Everything you see this morning applies to .NET 2.0 and higher

Page 5: ASP.NET Scalability - DDD7

Increasing Server Performance

Page 6: ASP.NET Scalability - DDD7

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!

Page 7: ASP.NET Scalability - DDD7

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

Page 8: ASP.NET Scalability - DDD7

Caching 2: 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

Page 9: ASP.NET Scalability - DDD7

Caching 2: 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

Page 10: ASP.NET Scalability - DDD7

Caching 3: Velocity

• Velocity– Distributed cache

• One logical cache split across several servers• PowerShell management console

– CTP2 released at PDC

– Doesn’t have dependencies – yet

– The future: automatic caching?

Page 11: ASP.NET Scalability - DDD7

Caching 3: Velocity

Page 12: ASP.NET Scalability - DDD7

Caching 4: 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

Page 13: ASP.NET Scalability - DDD7

Paging

• Default GridView paging behaviour reads the entire dataset every time– For 100 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

Page 14: ASP.NET Scalability - DDD7

Reducing Network Loads

Page 15: ASP.NET Scalability - DDD7

ViewState 1

52HTML Table (built in-line)

Viewstate Size in bytes

10928GridView

10592DataGrid

6600Repeater

6628DataList

52HTML Table (built in code-behind)

Page 16: ASP.NET Scalability - DDD7

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

Page 17: ASP.NET Scalability - DDD7

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

• JavaScript Compression– JSMin (http://tinyurl.com/jscriptmin)– jQuery is pre-minified for you

Page 18: ASP.NET Scalability - DDD7

Compression

Page 19: ASP.NET Scalability - DDD7

Load Balancing

Page 20: ASP.NET Scalability - DDD7

Load Balancing

• Synchronise machineKey (in machine.config)

• Don’t use basic Session state– SQL Server Session State– ASP.NET State Service– Velocity ASP.NET Session state

Page 21: ASP.NET Scalability - DDD7

Summary

• Cache is King!• Paging is good for your pages!• Viewstate doesn’t have to be evil!

Page 22: ASP.NET Scalability - DDD7

Any Questions?

Page 23: ASP.NET Scalability - DDD7

Enjoy the day!

Page 24: ASP.NET Scalability - DDD7

Resources• DotNetRocks

– http://www.dotnetrocks.com/default.aspx?showNum=24– http://www.dotnetrocks.com/default.aspx?showNum=367

• 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

• MSDN White Paper on .NET Performance & Scalability

– http://msdn.microsoft.com/en-us/library/ms998530.aspx

Page 25: ASP.NET Scalability - DDD7

Resources• Velocity

– http://blogs.msdn.com/velocity– http://www.hanselman.com/blog/HanselminutesPodcast116DistributedCac

hingWithMicrosoftsVelocity.aspx

• Donut Caching– http://tinyurl.com/donutcaching

• HttpCompress Library– http://www.blowery.org/code/HttpCompressionModule.html