Skip to content

Islandora Architecture

At its core, Islandora is a Drupal website that leverages a suite of Microservices. To help illustrate this, different site operations are described below.

  • The diagram under Islandora is a Drupal Website describes how a typical web page is displayed when a site visitor arrives at an Islandora repository on the internet. How most HTML responses are generated for Islandora sites are identical to any Drupal website that integrates with Solr. The exception being Islandora's IIIF integration, which is explained in a bit more detail in IIIF Integration
  • The diagrams under Microservices explain how events are emitted from an Islandora Drupal website and processed by Islandora's event driven architecture
  • Components is a list of software used in the Islandora tech stack

Islandora is a Drupal Website

When a client visits an Islandora website, the request flow looks like a typical Drupal request. The request is received by NGINX, which forwards the request to Drupal. Drupal bootstraps and queries MariaDB to generate an HTML response. If the request was for a search page, Drupal may also query Solr to include search results in the HTML response.

flowchart TD
    user([Client / Browser])
    user e1@-->|HTTP request| nginx

    subgraph webserver[Nginx Web Server]
        nginx[Nginx] e2@-->|forward request| drupal[Drupal]
    end

    drupal e3@-->|query| mariadb[(MariaDB)]
    drupal e4@-->|query| solr[(Solr)]

    mariadb e6@-.->|data| drupal
    solr e7@-.->|results| drupal
    drupal e9@-.->|HTML response| nginx
    nginx e10@-.->|HTML response| user

    class e1 flow0;
    class e2 flow1;
    class e3 flow2;
    class e4 flow2;
    class e5 flow2;
    class e6 flow3;
    class e7 flow3;
    class e8 flow3;
    class e9 flow4;
    class e10 flow5;

IIIF Integration

For some Resource Nodes in Islandora, the HTML response may include a link to a IIIF Manifest that is dynamically generated by Drupal for the given node. This typically happens when rendering Resource Nodes that have image media. For these types of requests, Islandora's IIIF module may also query the Cantaloupe IIIF server for metadata needed to generate the IIIF Manifest. The IIIF viewer configured on the Islandora site (e.g. OpenSeadragon or Mirador) will communicate with Cantaloupe to render the image(s) included in the IIIF Manifest.

All this to say, in addition to the typical drupal request flow, Drupal may also query Cantaloupe for basic image metadata (e.g. height/width) which are needed to generate a valid IIIF Manifest. The client's web browser will then read that IIIF Manifest using Javascript and the IIIF viewer will GET the images referenced in the IIIF Manifest from Cantaloupe.

flowchart TD
    user([Client / Browser])
    user e1@-->|GET IIIF Manifest| nginx

    subgraph webserver[Nginx Web Server]
        nginx[Nginx] e2@-->|forward request| drupal[Drupal]
    end

    drupal e3@-->|GET /info.json| cantaloupe[Cantaloupe IIIF Image Server]

    cantaloupe e4@-->|info.json| drupal
    drupal e5@-.->|HTML response| nginx
    nginx e6@-.->|HTML response| user
    user e7@-->|GET /image.png| cantaloupe
    cantaloupe e8@-.->|image.png| user

    class e1 flow0;
    class e2 flow1;
    class e3 flow2;
    class e4 flow3;
    class e5 flow4;
    class e6 flow5;
    class e7 flow6;
    class e8 flow7;
    class e9 flow8;

Fedora Flysystem Adapter

Islandora uses Flysystem and the associated Drupal module to store Drupal managed files in Fedora (Repository Software).

You can read more about this in Islandora's Flysystem documentation.

Microservices

In addition to all the tools Drupal provides, Islandora extends the Drupal site's capabilities using an event-driven, distributed architecture of Microservices. When a repository manager creates, updates, or deletes Drupal entities, the Islandora Drupal module generates an event message which is put on Islandora's ActiveMQ queue.

There are two different types of events Islandora emits:

  • Derivative Events - these types of events create derivatives from files uploaded to Islandora
  • Index Events - these types of events create an indexed representation of a Resource Node in a system external to Drupal

Derivative Events

Below is a full diagram of the different microservices Islandora provides. You can see as an animation in the diagram what happens when an Islandora repository manager uploads an image to their Islandora repository. First, Drupal emits an event to generate a thumbnail for that image. That event is put on the ActiveMQ event queue, alpaca reads the message from the queue, and forwards the event to the configured service. In the case of a thumbnail, houdini handles generating the thumbnail for the uploaded image. Houdini creates the thumbnail and alpaca saves the thumbnail in Drupal.

flowchart TD
    drupal([Islandora Drupal Website])

    drupal e1@-->|publishes drupal entity event| activemq

    subgraph broker[Message Broker]
        activemq[ActiveMQ]
        alpaca[Alpaca]
        activemq e2@-->|alpaca receives event| alpaca
    end


    subgraph microservices[scyllaridae microservices]
        fits[FITS]
        homarus[Homarus]
        houdini[Houdini]
        hypercube[Hypercube]
    end

    alpaca --> fits
    alpaca --> homarus
    alpaca e3@--> houdini
    alpaca --> hypercube

    fits -.->|derivative streamed back| alpaca
    homarus -.->|derivative streamed back| alpaca
    houdini e4@-.->|derivative streamed back| alpaca
    hypercube -.->|derivative streamed back| alpaca
    alpaca e5@-.->|alpaca saves the derivative| drupal

    class e1 flow0;
    class e2 flow1;
    class e3 flow2;
    class e4 flow3;
    class e5 flow4;

Index Events

There are two systems that are populated using Islandora Index Events: Blazegraph and Fedora (Repository Software).

flowchart TD
    drupal([Islandora Drupal Website])

    drupal e1@-->|publishes drupal entity event| activemq

    subgraph broker[Message Broker]
        activemq[ActiveMQ]
        alpaca[Alpaca]
        activemq e2@-->|alpaca receives event| alpaca
    end


    alpaca e3@--> milliner

    fedora[(Fedora)]
    milliner e4@-.->|syncs resource to| fedora
    blazegraph[(blazegraph)]
    alpaca -.->|sends RDF| blazegraph

    class e1 flow0;
    class e2 flow1;
    class e3 flow2;
    class e4 flow3;
    class e5 flow4;

Components

Islandora

The following components are microservices developed and maintained by the Islandora community. They are bundled under scyllaridae and Islandora Crayfish:

Other Open Source

The following components are deployed with Islandora, but are developed and maintained by other open source projects: