Best practices to specialize back end servers
Explains how to specialize a back end server.
Unlike the Front end server configuration, back end servers in a cluster do not need to be identical.
Out of the box, a back end server is configured with the following active roles:
- Web role.
- Default background task role, where the
Defaultservice role configuration is targeted in the . - Translation role.
This means that all out of the box servers have the same behavior, but it is possible to differentiate. For example, we could set up a cluster of three back end servers where two servers would be specialized in the publish and translation functionality respectively and the last of the three would be configured to execute the rest. This deployment is visible in the next diagram.
- A back end server for publishing:
- Web role;
- Publish role.
- A back end server specialized only in the translations:
- Web role;
- Translation role.
The last back end server is required to execute all items that are not picked up by the other two. In this case all handlers relative to the publish and translation functionality will be excluded. Those handlers need to be referenced by a service role in . For example:
<service role="Generic"> <matrix> <group name="SynchronizeToLiveContent" maxExecutions="1"> <handlers> <add ref="SYNCHRONIZETOLIVECONTENT" /> </handlers> </group> <group name="Others" maxExecutions="2"> <handlers> <add ref="THUMBNAILSUBMIT" /> <add ref="ISHBATCHIMPORT" /> </handlers> </group> </matrix> <!-- The service will check for tasks to recover (= revoke the lease) --> <leaseRecovery isEnabled="true" interval="00:05:00" /> <!-- If no next tasks are present, the poller will sleep the specified period in the interval --> <poller isEnabled="true" interval="00:00:10" /> <!-- The service will aggregate tasks with the same aggregationId, only when the last item is submitted longer than the gracePeriod the tasks will be aggregated. Note: if there are no tasks to aggregate, the aggregation will sleep the specified period in the interval --> <aggregationRecovery isEnabled="true" gracePeriod="00:10:00" interval="00:10:00" maximumRetries="3" /> </service>