Subgroup Members:
Meetings: TBD
Meeting room: https://meet.lrz.de/tcdistributedvscentralized or Slack Huddle.
Links to former proposals and documents
- Distributed Configuration
- https://github.com/folio-org/mod-configuration/blob/master/README.md
- https://github.com/folio-org/mod-settings/blob/master/README.md
Scope of the group
Shall tenant level configuration stored in a central module or distributed in modules.
Give guidance when to use central or distributed configuration.
Types of configurations
System settings (the same for all Tenants, all modules)
Examples:
- Common Kafka URL and Access
- Common Elasticsearch URL and Access
- Common Database URL and Access
Module System/deployment settings
Examples:
- specific Kafka URL and Access
- specific Elasticsearch URL and Access
- specific Database URL and Access
- S3 Access
Tenant specific settings
Examples:
- Tenant Default Language
- Circulation Rules
- Locations
- Usergroups
Tenant and Module specific settings
Examples:
- KB Credentials in mod-kb-ebsco-java
Module specific settings (the same for all Tenants)
Examples:
- S3 Bucket Access
User/Usergroup specific settings
- User Default Language
- Circulation Desk
Configuration storage locations
Deployment Settings (central)
For deployment options like Ansible, Kubernetes/Helm.
Examples:
- Common Kafka Url
- Okapi Url
Module environment variables (distributed)
Examples:
- Kafka URL
- Database Access
Module configuration files (distributed)
Mounted at deploy time.
Examples:
- edge SIP2 configuration files
Module managed settings (distributed)
Module stores configuration in its database schema. Module may offer API endpoints to modify configuration
Examples:
- Circulation rules
Configuration Module managed settings (central)
Examples:
- mod-configuration
- Default tenant language
- mod-settings
- mod-service-interactions
- Dashboard settings
- thought as central settings module, but not used?
- no documentation at https://dev.folio.org/reference/api/ ?
Central vs. Distributed
Pros of central configuration:
- No need to implement API endpoints and storage for module specific configuration.
- All configuration variables of a tenant can be accessed for backup/clone/configuration of new tenant ... But: differentiating between configuration and data depends on point of view.
- Possibility for a central UI for configuration
- Can store configuration for values that have no "natural" owner module. Example: default tenant locale
- Can handle shared configuration, but do we need a owner module?
Drawback of mod-configuration:
- A big institution need config write permissions with module granularity. One member of staff may be allowed to edit circulation config but not acquisition config. Solved in mod-settings
Drawbacks of central configuration like mod-settings and mod-configuration
- No validation. The module cannot validate a POST or PUT request because it doesn't know a schema. Only the module it belongs to knows this. Relevant use case: Using curl/wget/postman/...
- No documentation. mod-configuration has no documentation, one needs to search, maybe the module's README has some? A dedicated module API always publishes the API documentation at https://dev.folio.org/reference/api/
- No explicit dependency. If more than one module uses a configuration this dependency should be make explicit with an interface dependency in the ModuleDescriptor.
- Performance. Requests to mod-configuration result in latency. If the config API belongs to the module the module can cache it and can invalidate the cache if the config is changed. Caching requests to mod-configuration will always result in a time period with outdated values. In mod-inventory-storage we've combined fetching the HRID config and HRID generation into a single SQL query.
- Coupling. Modules should be loosely coupled and therefore each module should store its own configs.
Pros of distributed configuration
- Offers possibility for write-only configuration values like passwords
Drawbacks of distributed configuration
- Adding configuration APIs adds interface dependencies and APIs are not consistent - need a guide for module configuration APIs
Conclusions
- mod-configuration shall not be used any more due to security issues
- module is already deprecated, no more configuration settings shall be added.