Skip to end of banner
Go to start of banner

High-level solution structure

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

Target architecture


The following table shows how entities from Conceptual diagram (see Conceptual model page) are mapped to the solution components:

Conceptual diagram entitySolution component
Audit Logs interceptormod-audit-logs-interceptor, Audit logs interceptor library
Audit Log storageKafka
Audit Logs aggregatormod-circulation-audit-logs-aggregator
Materialized viewElasticSearch
Audit Reports providermod-circulation-audit-logs-provider
Folio UIFolio UI


Key decisions

  1. ElasticSearch should be used to store data because of:
         - Audit logs may contain 100s of millions of records
         - Audit data is immutable. Audit records shouldn't be updated. The records should be deleted/archived in batches once they expire.
         - A full-text search is required to be used to find Audit records.
         - It is required to return the total number of records found for a search query. The number should be included in response to the original query. Query response time should be less than a few seconds. 

  2. mod-audit-log-interceptor should be implemented as a separate module. It should be deployed as a side-car with modules that contain Audit data. It should work as a proxy that intercepts these modules requests/responses.

Transient architecture


The following table shows how entities from Conceptual diagram (see Conceptual model page) are mapped to the solution components:

Conceptual diagram entitySolution component
Audit Logs interceptorAudit logs interceptor library
Audit Log storagemod-pubsub, Kafka
Audit Logs aggregatormod-circulation-audit-logs-aggregator
Materialized viewPostgreSQL
Audit Reports providermod-circulation-audit-logs-provider
Folio UIFolio UI
  • No labels