Thursday, May 16, 2019

Dispatcher Farms


The dispatcher configuration file (dispatcher.any) can have multiple farm entries. The default configuration has one farm entry which contains the configuration to control the behavior of the dispatcher. The default dispatcher.any configuration file looks like this

/name "name"
/farms
 {
   /website # Dispatcher farm configuration
     { 
        # configuration entries

All configuration entries of the dispatcher are at the farm level. And we can have multiple farm entries in the dispatcher configuration file. Through this we can essentially split the content cached in the dispatcher into multiple categories and define different caching characteristics and behavior for each of them.


Use cases made possible by having multiple farms

  1. Having a common dispatcher for different AEM publish farms
    • Say mysite.com/products & mysite.com/offers fetches content from publish farm 1 and publish farm 2 instances
  2. Selective load balancing based on content accessed
    • Say all dam assets are rendered from publish instance 1 and all pages rendered from publish instance 2
  3. Having different cache folders and cache invalidation rules for content under different paths
    • Say all authenticated pages are cached under …/auth_cache and other pages under …/public_cache

These are just some of the representative use cases. In effect the complete dispatcher configuration can vary across farms and can be leveraged to define the behavior required\

    Steps in defining the dispatcher configuration


    The steps involved in designing for and creating the definition of the dispatcher configuration is depicted in the diagram below


     


    Each step is detailed below


    Identifying the no. of farms needed

    Analyze the content structure based on its desired caching behavior.
    For example, in most cases the caching requirement of the assets and those of the pages could differ

    1. Assets being independent of each other, invalidating the cache entry of an asset need not impact any other assets
    2. Pages on the other hand have cross referenced content and typically invalidating a cached page would require invalidating all its subpages and may be other cross referenced content as well
    Asses the content structure and classify them based on the caching behavior needed. Each category would typically need a separate farm configuration


    Defining the cache behavior of each farm

    Now that we have classified and arrived at the listing of the farms needed, define the cache behavior for each farm, covering all aspects of the dispatcher configuration. By now, the configuration entry needed for each section of each farm needs to be clearly documented


    Identifying the commonalities and variations in the behavior

    With the cache behavior defined for each form, identify which parts of the configuration are common across multiple farms and which parts vary from farm to farm. For example, if all farms connect to the same set of publish instances, the renderer configuration would be common and it would be optimal to have the renderers configured in a single file and included across different farm configuration files


    Building the configuration nuggets

    Once the commonalities and variations in the configuration of different farms is identified, create individual nuggets of the configuration in separate files. Dispatcher configuration supports including configuration defined in another file through a $include construct.
    Note: $include also support * wildcard inclusion.
    Once the individual nuggets of configuration are defined, they can be combined as needed in a hierarchy to create the required configuration


    Assemble the configurations for each farm and dispatcher.any

    The last step would be to assemble the configuration nuggets to arrive the desired setup. Typically use the individual nuggets to assemble each farm configuration file and then include the farm configuration files into the dispacther.any configuration.
    A scenario where we define 2 farms – one for dam assets and another for pages but both sharing the same renderer configuration can be defined as


    1.  renderers.lst

    # Listing of AEM Publish instances
    Publish_1
    Publish_2
    ...



    2.  dam_farm_config.any

    /dam_farm
    {
    ...
    /renders
    {
    $include "renderers.lst"
    }
    ...
    }



    3.  page_farm_config.any

    /page_farm
    {
    ...
    /renders
    {
    $include "renderers.lst"
    }
    ...
    }



    4.  #dispatcher.any

    ...
    /farms
      {
      $include "dam_farm_config.any"
      $include "page_farm_config.any"
      }


    In this configuration, on addition or removal of publish instances can be managed by editing the single renderers.lst configuration file


    Checkout https://www.slideshare.net/AshokkumarTA/aem-dispatcher-tips-tricks for more information on dispatcher configuration


    No comments:

    Connected Assets

    This is a feature introduced in 6.5 release.  To understand the concept of connected assets clearly, it is essential to understand th...