This article describes some of the components and configuration options available in Sense/Net ECM for building high availability scenarios.
High availability in Sense/Net ECM consists of horizontal scaling of web servers, load balancing, database clustering, smart index and content cache handling. High availability and scalability go hand in hand in Sense/Net ECM.
Scaling out web servers
Scalability of an ECM is the ability of the system and its networking components, to handle a growing amount of traffic in a capable manner or its ability to be enlarged to accommodate that growth. To scale out or to scale horizontally means to add more web server nodes to an ECM system. With installing more than one server, fault tolerance can be achieved. Sense/Net ECM stores cache and indices on web server nodes, so by scaling out, query and content retrieval performance increases significantly. Employing more web servers increases the availability, but at the same time, leads to lower overall response times, especially when the number of nodes is higher. Inbound HTTP requests are distributed among web server nodes by a network load balancer. The load balancer should be redundant in itself, so it does not become a single point of failure. We highly recommend a separate load balancer appliance, but using Windows Server 2008 R2 Network Load Balancing is also an option. The load distribution strategy of the load balancer affects the performance and fault tolerance of the entire system. Theoretically the number of web servers is only limited by the capabilities of the load balancer, however in practice it is not recommended to go beyond 16 web server nodes, because of load balancing and cluster messaging overhead. Web servers must have .NET Framework, MSMQ and IIS installed to support high availability (see the Software Requirements for Production Environment article for details).
Replicated (redundant) indices for web server nodes
Sense/Net ECM uses Lucene.NET for indexing the contents of the Content Repository. Separate indices are stored for each web server node. This ensures lightning-fast query execution, while making sure the indexing subsystem does not become a single point of failure. Sense/Net ECM uses MSMQ to manage synchronization of indices between web server nodes. Installing ultra-fast disks, such as SSD in the web servers helps achieve faster query results.
Replicated (redundant) content cache for web nodes
Content is cached on each web server node running Sense/Net ECM. This ensures fast cache read and write operations, while being fault tolerant. Sense/Net ECM uses MSMQ to manage cache invalidation and synchronization between web server nodes. It is advisable to install an ample amount of RAM in the web servers to accommodate for local Content Cache storage. A minimum of 16 Gigabytes of RAM is recommended for each web server node, depending on the size of the system.
Clustered SQL database
The database tier of Sense/Net ECM supports high availability by using failover clustering, which is a fault tolerant setup of Microsoft SQL Server. When one node intentionally or accidentally is down, the other node takes its place without administrative intervention. Microsoft SQL failover clustering requires an Active Directory Domain Controller, which should also be redundant for proper high availability. Using Database Mirroring is also an option, which does not require a Domain Controller in the network. A shared storage subsystem, such as a Storage Area Network (SAN) is also required for failover clustering of SQL.
Sense/Net ECM uses Microsoft Message Queuing (MSMQ) to manage synchronization of indices and cache between web server nodes. In high availability scenarios, it is recommended to install MSMQ on all of the web server instances. Every web node should have its own local message queue that other web nodes will use to send messages to the node in question. In this configuration if a web node is down it will only stop handling its own messages instead of interfering with other web nodes.
Network and backup
A redundant network to and between the server nodes is also required to provide fault tolerance and thus high availability. Since Sense/Net ECM can be configured to automatically back up Lucene.NET index files in the SQL server at predefined time intervals. Backing up the database is an adequate solution for high availability installations, allowing for an instant restore in case of a disaster.
High availability and virtualization
The high availability architecture described above can also be installed using virtual servers.
High availability architecture diagram
The diagram below shows a possible setup of a scalable and highly available Sense/Net ECM solution.