logoBack to home screen

Typical ADx Enterprise Setup

Introduction

An ADx setup consists of multiple applications: ADx and Conversion. To avoid single points of failure, each application requires at least two nodes running on different hosts. ADx nodes can share the same host. Conversion nodes, which perform CPU-intensive tasks, should be installed on separate hosts to better distribute the load.

Hosts & Nodes

A typical ADx enterprise setup therefore consists of two ADx nodes and two Conversion nodes running on four hosts:

  • Host 1 with ADx node 1
  • Host 2 with ADx node 2
  • Host 3 with Conversion node 1
  • Host 4 with Conversion node 2

From there it's naturally possible to scale up when needed, e.g. add host 5 with Conversion node 3.

Load Balancers

Communication to ADx and Conversion instances is achieved through load balancers:

  • ADx: HTTP load balancer delegating to ADx nodes
  • Conversion: HTTP load balancer delegating to Conversion nodes

ADx applications, by default, only provide a self-signed certificate. In a typical setup this is fine though, also for production, because the load balancer provides a valid certificate for external communication. Internally the load balancer can be then configured to accept self-signed certificates. That way, communication is still encrypted.

For example, ADx load balancer adx-lb listens on HTTPS port 443 and delegates requests to HTTPS port 8443 of ADx node 1 on host adx-host-1 and ADx node 2 on host adx-host-2:

`adx-lb:443` ->  `adx-host-1:8433`, `adx-host-2:8433`

Databases

Multiple databases (or database schemas) are used to separate system from business data:

  • ADx System database
    • Stores system data such as repository configuration, users or sessions
    • Backups are important
  • ADx Content database
    • Stores ADx repository content data
    • Backups are very important!
  • ADx Cache database
    • Stores ADx cache and conversion data
    • Backups are not important (only temporary data or data which can be recreated automatically)

If required, one could further separate and e.g. have a separate database for each repository.

Storage

In addition to the database data, ADx also needs to store resources of various kinds, e.g. content, cache or conversion resources. Usually these resources are stored as normal files in various folders on a shared file system which all nodes have access to.

In the example setup below there is a single shared file system which is accessible via mount point /adx-shared-fs from all the hosts. Subfolders are used to organize the files, e.g. to separate repository files from conversion files. Of course, one could further separate, e.g. by having a separate conversion file system /adx-conversion-shared-fs and only allowing access from Conversion nodes.

Concrete Example Setup

Below we provide a concrete example setup, i.e. example hosts, ports, urls, folders. Based on this it should be easy to adapt the values to match a real setup.

Hosts

ADx 1

Hostname: adx-host-1

Nodes: ADx Node 1

ADx 2

Hostname: adx-host-2

Nodes: ADx Node 2

Conversion 1

Hostname: conversion-host-1

Nodes: Conversion Node 1

Conversion 2

Hostname: conversion-host-2

Nodes: Conversion Node 2

Databases

ADx System

DB name: adx-system

DB host: adx-db

ADx Content

DB name: adx-content

DB host: adx-db

ADx Cache

DB name: adx-cache

DB host: adx-db

Storage

ADx Shared Filesystem

Description: single shared file system accessible from all nodes, see mount point.

Mount Point: /adx-shared-fs

Nodes

ADx Node 1

Host: adx-host-1

Ports:

  • HTTP: 8080

Databases:

  • System: adx-system
  • (additional databases dependent on repo settings, see below)

URLs:

  • Tribefire Services URL: https://adx-lb:443/tribefire-services
    • Controlled by setting TRIBEFIRE_PUBLIC_SERVICES_URL
  • Conversion URL: https://conversion-lb:443/tribefire-services
    • Controlled by setting DOCUMENTS_CONVERSION_TFS_URL

Repositories:

Example Repository:

    Name: `example`

    Content:

        Database: `adx-content`

        Storage: `/adx-shared-fs/repository-resources/content/example`

    Cache:

        Database: `adx-cache`

        Storage: `/adx-shared-fs/repository-resources/cache/example`

ADx Node 2

Host: adx-host-2

(Rest of settings same as ADx Node 1.)

Conversion Node 1

Host: conversion-host-1

Ports:

  • HTTP: 8080

Databases:

  • System: adx-system
  • Conversion: adx-cache

URLs:

  • Tribefire Services URL: https://adx-lb:443/tribefire-services
    • Controlled by setting TRIBEFIRE_PUBLIC_SERVICES_URL

Conversion Storage: /adx-shared-fs/conversion-resources

Conversion Node 2

Host: conversion-host-2

(Rest of settings same as Conversion Node 1.)

Load Balancers

ADx

Host: adx-lb

Ports:

  • HTTPS: adx-lb:443 -> adx-host-1:8443, adx-host-2:8443
    • HTTP load balancing, i.e. level 7

Conversion

Host: conversion-lb

Ports:

  • HTTPS: conversion-lb:443 -> conversion-host-1:8443, conversion-host-2:8443
    • HTTP load balancing, i.e. level 7