AppStack: Microsoft EcoSystem for Enterprise Web Application Hosting
Before we think about Microsoft Application Hosting component (AppStack), I want to establish my personal preference. Applications nowadays are mixture of UI component and associated web services built in ASP.Net/WCF/WF. My aim is to build application that is Fast, Secure and Resilient and I’ll coin the term “FSR” to describe these three attributes.
In order to achieve this goal from application’s perspective I prefer applications to be stateless and this extends to servers hosting these applications to be stateless as well. Now there are pros and cons to make application/server stateful and stateless but in long term I would like to think that stateless configuration is more desirable with scalability in mind.
Application Request Routing (ARR): This extension of IIS shows true power of its flexibility by modular architecture. This is very advanced reverse-proxy based solution implemented on top of URLRewrite to increase Web application’s scalability and reliability through rule-based routing, client and host name affinity, load balancing of HTTP server requests, and distributed disk caching.
Application Initialization (AppInit): IIS Application Initialization helps to improve responsiveness of web site by loading Web applications before first request arrives. By proactively loading and initializing all dependencies such as database connections, compilation of ASP.NET code, and loading of modules, you can ensure Web sites are responsive at all times even if it uses a custom request pipeline or if Application Pool is recycled or during overlapped recycling.
AppFabric (Caching): This is about making your application fast, scalable and resilient by having distributed memory based cache cluster. AppFabric caching features can help scale your .NET applications easily and inexpensively by allowing you to combine the memory capacity of multiple computers into a single unified cache cluster. These features include Caching Services, Cache Client, and Cache Administration tools. AppFabric Caching Services are highly scalable, allowing many computers to be configured as nodes of a cache cluster that is available as a single unified memory cache. Caching Services provide a high-availability feature that supports continuous availability of your cached data by storing copies of that data on separate cache hosts. When high availability is enabled on a multi-server cluster, your application can still retrieve its cached data if a cache server fails.
AppFabric (Hosting): This is my silver bulletfor effectively manage WCF/WF services on IIS7. AppFabric-Hosting Services includes features provided by Workflow Management Service, including lock/retry, auto-start, durable timers, and a command queue.
- It provides persistence that works right out of the box. It uses the SQL persistence store that ships with .NET Framework 4, and create a default persistence database that your applications can leverage, which allows you to scale your stateful services across a set of computers.
- AppFabric Monitoring service allows you to perform health monitoring and troubleshooting of running WCF and WF services, and to control those services.
- It uses security accounts and SQL Server logins and database roles to determine the access a user or application has to system resources such as persistence databases, timer data, monitoring data, and configuration files. Access to these resources occurs at both application and management levels, which are the two areas of logical scope that relate to the AppFabric security model.
- To top all that AppFabric Dashboard gives you visibility into the health of a system, and unified configuration user interface gives you control over your service configuration. I cry whenever I see WCF/WF services deployed on IIS without AppFabric!
There are more bells and whistles to add on above list that makes IIS excellent candidate to host your applications but for now it will do. In next post I will describe sample architecture to build web farm using Microsoft WebStack (described in earlier post) and AppStack.