Web garden scenarios, IMHO, are quite uncommon. I havent found anything yet
that a solid server with enough RAM cannot handle.
To me, the only thing to really watch is how you configure webgardens, and
manage session state. In IIS5 you need to modify the machine.config files so
your application can support webgardens (the webgarden and cpumask
attributes). In IIS6 you can modify these settings on a per-application pool
basis using the MMC.
When you implement web gardens, each of the asp.net processes has its
processor affinity assigned to a specific processor. This can result in
sessions values apperaing lost, or empty. Using the session state service or
SQL Server to manage your sessions is better in this case, as both serve as
a single session repository.
In web farming, application objects *are* supported. They haveto be
implemented, though, using either state service or SQL Server for the
reasons mentioned above (single session storage).
You can implement caching for web farms, gardens, etc. under any scenario
using page output caching (varybyparam attribute). This should handle your
page cache question. I have implemented caching, both data and page, on a 5
server web farm without any problems.
With a web farm, you will have to change each machine's machineKey attribute
under machine.config. These must match so each application's viewstate
requests match (otherwise you'll get corrupt ViewState errors). MS has a KB
that applies to the above scenario (and source for an executable that will
build new hash keys) at
http://support.microsoft.com/default.aspx?scid=kb;en-us;323744&Product=NETFrame.
MSDN has a lot more detail for your other questions than I could ever
provide to you. but I hope this helps to start.