ACE Components
The goal of this design document is to describe logical architecture of how ACE components interact with each other.

Please keep in mind that Sizing includes only resources needed by ACE components and do not include sizing for accommodating infrastructure (Operating System, Logging and Monitoring services, Cluster orchestration services, etc.).
PROD environment sizing is provided for 1000 concurrent users with 5 second think time. Where from ACE perspective the user is one API the call to the ACE Dynamic APIs. Please keep in mind that Sizing is provided for ACE overhead only. It can change Depending on complexity and availability of of depending systems, that ACE is accessing.
Sizing units are explained in this document. Total service requirements can be obtained by multiplying number of pod replicas with resources required.
In Sizing DEV/TEST and PROD means the environment type. If it is necessary to deploy both DEV and TEST environments, then required resources are 2 times the sizing provided below.
Services
All environment variable keys and values below are case-sensitive
Flow Manager
Flow Manager is the Single Page Application that itself contains only UI code for ACE Designer. It is deployed as the static "javascript/HTML" package.
Container name
digital-flow-ui
Deployment options
| DEV/TEST | PROD |
|---|---|
| Change configuration | View configuration |
Configuration options
PORT- port used by service.LOG_LEVEL- Defaultinfo. service log verbosity level. Possible valueserror,warn,info,http,verbose,debug,silly.REACT_APP_API_BASE_URL- URL of Orchestration service, where ACE Management APIs are available.REACT_APP_PUBLIC_API_BASE_URL- URL of Orchestration service public endpoint, where ACE Dynamic APIs are available. If not set, thenREACT_APP_API_BASE_URLis used.REACT_APP_AUTH_STRATEGY- If this parameter is set Flow Manager will attempt to authenticate with Identity Provider, to obtain the JWT token, that will be used to access Management APIs. Currently supported authentication strategy iskeycloakREACT_APP_SHOW_SERVICE_CONFIG- Defaultfalse. Show service config tab in settings page. It allows to view service environmental variables for debugging purposes (requires that service hasENABLE_ENV_VAR_DEBUGset to true). Note that config feature is intended for use in non HA environment - if there are more than one service instance, then variables are returned from random instance.
Sizing
| DEV/TEST (Pods, vCPU, RAM, Disk) | PROD (Pods, vCPU, RAM, Disk) |
|---|---|
| 1, 200m, 64Mi, 5Gb | 2, 200m, 128Mi, 5Gb |
Scaling
This service can be scaled Horizontally, there is no persistent storage.
API Gateway
API gateway which is used to safely (by adding authentication and rate limiting policies for example) expose ACE services to the outside world.
It can also be used to add SSL certificate and expose ACE services via HTTPS protocol if it is not done by load balancer.
API gateway choice is client specific, most common options are cloud based solutions like Azure API Gateway or Amazon API Gateway. Good option for on-premise solution is Kong gateway.
Orchestration
Orchestration service exposes both ACE Management APIs and Dynamic APIs. It is essential in PROD to not expose this service to the outside world directly.
Management APIs are used by ACE Designer (Flow Manager) to change ACE configuration.
Dynamic APIs are APIs that are built by Domain Experts.
Orchestration service also deploys Scheduler Runtime.
Service has 2 endpoints:
- Management endpoint - includes Management and Dynamic APIs. Management endpoint must not be exposed to outside
world directly.
- Enabled - disabled by default. Can be enabled, see
ACE_MANAGEMENT_API_DISABLED - Port -
PORT - Timeout -
ACE_MANAGEMENT_API_TIMEOUT, if not set, then fallback toACE_API_TIMEOUT
- Enabled - disabled by default. Can be enabled, see
- Public endpoint - includes only Dynamic APIs. Intended to be exposed to outside world via API Gateway.
- Enabled - enabled by default. Can be disabled by un-setting
PUBLIC_API_PORT - Port -
PUBLIC_API_PORT - Timeout -
ACE_API_TIMEOUT
- Enabled - enabled by default. Can be disabled by un-setting
Container name
digital-api-orch
Deployment options
| DEV/TEST | PROD |
|---|---|
| Required | Required |
Configuration options
PORT- port used by service for Management endpoint.3000by default.PUBLIC_API_PORT- port used by service for Public endpoint. If port is not set, then Public endpoint is not started.4000by default.ACE_MANAGEMENT_API_DISABLED- Defaulttrue. If set tofalsethen Management endpoint is started.LOG_LEVEL- Defaultinfo. Service log verbosity level. Possible valueserror,warn,info,http,verbose,debug,silly.BASE_DAL_URL- URL of Data Access Layer service.FLOW_ENRICHER_URL- URL of Flow Runner service.FLOW_DESIGNER_URL- URL of Designer service.DYNAMIC_API_URL- URL of Dynamic APIs service.FLOW_VERSIONING_URL- URL of Versioning service.CACHE_SERVICE- URL of Cache service.DEPLOYED_VERSION- Version of the Container being deployed.ACE_API_TIMEOUT- Default 0, no timeout. Request timeout in milliseconds for Public endpoint. Affects * *Management and/or Dynamic APIs** depending on service endpoint configuration.ACE_MANAGEMENT_API_TIMEOUT- Request timeout in milliseconds for Management endpoint. Affects Management and/or Dynamic APIs, in seconds. If not set thenACE_API_TIMEOUTis usedJWT_SECRET- Private key used to sign Management API tokens.JWT_EXPIRE- JWT token expiration period in minutes for Management API tokens.ACE_UI_AUTH_STRATEGY- Management APIs security strategy. If set Management APIs will require a valid token to access them. Currently supported authentication strategy iskeycloak.KEYCLOAK_REALM- ACE ream in Keycloak.KEYCLOAK_CLIENTID- ACE app client ID in Keycloak.KEYCLOAK_CLIENT_SECRET- ACE app client Secret in Keycloak..KEYCLOAK_AUTH_SERVER_URL- URL of Keycloak.ACE_UI_URL- Public URL of Flow Manager, used for redirect from Keycloak.SELF_EXTERNAL_URL- Public URL of orch service, used for redirect from Keycloak.ENABLE_INSPECT- Defaultfalse. Iftrueadds --inspect to entry-point, Debugger will listen on port 9239ENABLE_ENV_VAR_DEBUG- Defaultfalse. Iftrue, then enables to retrieve environmental variables for display in " Service config" tab.ACE_LOG_EXCHANGE- (default:<empty>) - If set totrue, logs request(url, method, body) and response(statusCode, body) related data atinfolevel.
Sizing
| DEV/TEST (Pods, vCPU, RAM, Disk) | PROD (Pods, vCPU, RAM, Disk) |
|---|---|
| 1, 500m, 256Mi, 5Gb | 2, 500m, 512Mi, 5Gb |
Scaling
This service can be scaled Horizontally, make sure to deploy the same configuration to all instances when scaling.
Any scheduled tasks will execute as many times as how many Orchestration instances are deployed.
Designer
Designer service encapsulates application logic related to:
- Designing of UI for the Flow Step
- Managing of Workspace variables
- Managing Scheduler jobs
- Managing error handlers
Container name
flow-designer-server
Deployment options
| DEV/TEST | PROD |
|---|---|
| Required | Required |
Configuration options
PORT- port used by service.LOG_LEVEL- Defaultinfo. Service log verbosity level. Possible valueserror,warn,info,http,verbose,debug,silly.BASE_DAL_URL- URL of Data Access Layer service.FLOW_VERSIONING_URL- URL of Versioning service.ENABLE_INSPECT- Defaultfalse. Iftrueadds --inspect to entry-point, Debugger will listen on port 9259ENABLE_ENV_VAR_DEBUG- Defaultfalse. Iftrue, then enables to retrieve environmental variables for display in " Service config" tab.
Sizing
| DEV/TEST (Pods, vCPU, RAM, Disk) | PROD (Pods, vCPU, RAM, Disk) |
|---|---|
| 1, 500m, 128Mi, 5Gb | 2, 500m, 512Mi, 5Gb |
Scaling
This service can be scaled Horizontally, make sure to deploy the same configuration to all instances when scaling.
Dynamic APIs
Dynamic APIs service implements application logic related to creating and managing of Dynamic APIs configuration (Operations, Schemas) as well as implement Dynamic APIs Runtime.
Dynamic APIs runtime:
- Runs error handler logic
- Maps Dynamic APIs to Flows
Container name
dynamic-api-server
Deployment options
| DEV/TEST | PROD |
|---|---|
| Required | Required |
Configuration options
PORT- port used by service.LOG_LEVEL- Defaultinfo. Service log verbosity level. Possible valueserror,warn,info,http,verbose,debug,silly.BASE_DAL_URL- URL of Data Access Layer service.FLOW_ENRICHER_URL- URL of Flow Runner service.ACE_API_TIMEOUT- Request timeout in milliseconds for Dynamic APIs, in seconds.DYNAMIC_API_RESULT_PROP- (Removed in 4.22) node name in document returned by Flow that is returned as the output of the Flow, by defaultresult.ENABLE_ERROR_CONTEXT- Defaulttrue. If set totruethen error context feature is enabled.ENABLE_INSPECT- Defaultfalse. Iftrueadds --inspect to entry-point, Debugger will listen on port 9249CACHE_FLOWS- Defaulttrue. IftrueAPI configuration is cached to avoid retrieving it from Data Access Layer every time. If caching is enabled, then updates in Flow Manager are disabled unlessCACHE_VALIDITY_REQUEST_ENABLEDis set totrue. It's not necessary to set this property explicitly, unless doing troubleshooting. If it is set tofalse, then ACE will have serious performance degradation! This is internal ACE cache, and is not related to data (response) caching in ACE.CACHE_VALIDITY_REQUEST_ENABLED- Defaulttrue(since 4.39.0). Enables data updates from flow manager. This setting should betruein development environment and during deployment. As this feature has small performance hit, it can be set tofalsein production after deployment.ENABLE_ENV_VAR_DEBUG- Defaultfalse. Iftrue, then enables to retrieve environmental variables for display in " Service config" tab.ACE_LOG_EXCHANGE- (default:<empty>) - If set totrue, logs request(url, method, body) and response(statusCode, body) related data atinfolevel.
Sizing
| DEV/TEST (Pods, vCPU, RAM, Disk) | PROD (Pods, vCPU, RAM, Disk) |
|---|---|
| 1, 500m, 256Mi, 5Gb | 2, 500m, 512Mi, 5Gb |
Scaling
This service can be scaled Horizontally, make sure to deploy the same configuration to all instances when scaling.
Flow Runner
Flow Runner implements Flow Runner Runtime. It is invoked either directly from Orchestration (when testing or debugging) or through Dynamic APIs (when calling Dynamic APIs).
Container name
flow-runner
Deployment options
| DEV/TEST | PROD |
|---|---|
| Required | Required |
Configuration options
PORT- port used by service.LOG_LEVEL- Defaultinfo. Service log verbosity level. Possible valuesemerg,fatal,alert,crit,error,warning,warn,notice,info,debug,trace.BASE_DAL_URL- URL of Data Access Layer service.CACHE_SERVICE- URL of Cache service.ACE_API_TIMEOUT- Request timeout in milliseconds for Flow Runner, in seconds.CACHE_FLOWS- Defaulttrue. IftrueFlow configuration is cached to avoid retrieving it from Data Access Layer every time. If caching is enabled, then updates in Flow Manager are disabled unlessCACHE_VALIDITY_REQUEST_ENABLEDis set totrue. It's not necessary to set this property explicitly, unless doing troubleshooting. If it is set tofalse, then ACE will have serious performance degradation! This is internal ACE cache, and is not related to data (response) caching in ACE.CACHE_VALIDITY_REQUEST_ENABLED- Defaulttrue(since 4.39.0). Enables data updates from flow manager. This setting should betruein development environment and during deployment. As this feature has small performance hit, it can be set tofalsein production after deployment.ENABLE_INSPECT- Defaultfalse. Iftrueadds --inspect to entry-point, Debugger will listen on port 9229RESPONSE_TIMEOUT- default value forrest stepresponse timeout setting, see https://ladjs.github.io/superagent/#timeouts for the explanationDEADLINE_TIMEOUT- default value forrest stepdeadline timeout setting, see https://ladjs.github.io/superagent/#timeouts for the explanationENABLE_EVAL_OPTIMIZATION- Defaultfalse. (Removed in 4.23) If set totrue, then improves the performance by running optimized logic for object evaluation.ENABLE_ENV_VAR_DEBUG- Defaultfalse. Iftrue, then enables to retrieve environmental variables for display in " Service config" tab.DISABLE_JS_CODE_STEP- Defaultfalse. Iftrue, prevents execution of JS Code step (deprecated). Can be set as an additional safety measure if JS Code step is not required.DISABLE_CODE_IVM_STEP- Defaultfalse. Iftrue, prevents execution of JS Code step. Can be set as an additional safety measure if JS Code step is not required.REST_STEP_MAX_FILE_SIZE_MB- Default 50. Specifies the max file size that REST Step will allow downloads for (in megabytes).FULL_DATA_LOGGING- Defaultfalse. If enabled logs additional information like request/response bodies. Note that additional data may contain sensitive information like personally identifiable information or secrets.ACE_FILE_REF_DOC_LIMIT_MB- (default 5) File size limit in MB for reading file content using file reference step.ENABLED_EVAL_EXTENSIONS- (default "ivm,jsonata") Enabled expression evaluators. Possible valuesivm,jsonata,eval. By default deprecated evaluatorevalis disabled.DEFAULT_EVAL_EXTENSION- (default "ivm") Default expression evaluator to be used when one is not specified in input.IVM_TIMEOUT- (default "1000") Specific toivmeval extension. Execution timeout in ms.ACE_LOG_CORRELATION_ID(default:x-request-id) - Header name to retrieve correlation id from. Also used as header name for correlation header forwarding. Header value is NOT added in ACE 4 logs (that's done in ACE 5), but it is forwarded in network requests.ACE_DISABLE_CORRELATION_HEADER_FORWARDING(default:<empty>) - if set totrue, disables correlation header forwarding in network steps.ACE_REQUEST_BODY_SIZE_LIMIT(default:50mb*) - Sets limit for maximum request body size.
Sizing
| DEV/TEST (Pods, vCPU, RAM, Disk) | PROD (Pods, vCPU, RAM, Disk) |
|---|---|
| 1, 500m, 256Mi, 5Gb | 2, 1, 1Gi, 5Gb |
Scaling
This service can be scaled Horizontally, make sure to deploy the same configuration to all instances when scaling.
Cache
Cache service provides an abstraction on top of cache implementation layer. Currently supported caching implementation is Redis.
Container name
cache-service
Deployment options
| DEV/TEST | PROD |
|---|---|
| Required if cache is used. | Required if cache is used. |
Configuration options
PORT- port used by service.LOG_LEVEL- Defaultinfo. Service log verbosity level. Possible valuesfatal,error,warn,info,debug,trace.REDIS_CACHE_HOST- redis host.REDIS_CACHE_PORT- redis port.REDIS_CACHE_KEY- redis authentication key.REDIS_KEY_PREFIX- prefix for redis cache keys (default:ace-cache).REDIS_CACHE_DB- redis database numberREDIS_CACHE_USER- Redis usernameREDIS_CACHE_TLS_ENABLED- Flag, set totrueif redis is tls configured.REDIS_CACHE_TLS_KEY- TLS private keyREDIS_CACHE_TLS_CERT- TLS certREDIS_CACHE_TLS_CA- TLS CAREDIS_DEFAULT_TTL_MIN- Default1440(24h). Redis cache time to live before refreshing the result for an item (default TTL value if not specified for step).ENABLE_INSPECT- Defaultfalse. Iftrueadds --inspect to entry-point, Debugger will listen on port 9289ENABLE_ENV_VAR_DEBUG- Defaultfalse. Iftrue, then enables to retrieve environmental variables for display in " Service config" tab.
Sizing
| DEV/TEST (Pods, vCPU, RAM, Disk) | PROD (Pods, vCPU, RAM, Disk) |
|---|---|
| 1, 200m, 128Mi, 5Gb | 2, 500m, 512Mi, 5Gb |
Scaling
This service can be scaled Horizontally, make sure to deploy the same configuration to all instances when scaling.
Redis
Redis is the caching backend.
Container name
redis
Deployment options
| DEV/TEST | PROD |
|---|---|
| Required if redis implementation for cache is used. | Required if redis implementation for cache is used. |
Sizing
| DEV/TEST (Pods, vCPU, RAM, Disk) | PROD (Pods, vCPU, RAM, Disk) |
|---|---|
| 1, 50m, 128Mi, 5Gb | 2, 500m, 512Mi, 5Gb |
Scaling
Refer to the Redis documentation about how to scale the Redis.
Versioning
Versioning service encapsulates application logic relating to accessing Source Control Management systems or Exporting/Importing of the workspace configurations in general.
Container name
flow-versioning
Deployment options
| DEV/TEST | PROD |
|---|---|
| Required | Required |
Configuration options
PORT- port used by service.LOG_LEVEL- Defaultinfo. Service log verbosity level. Possible valueserror,warn,info,http,verbose,debug,silly.DYNAMIC_API_URL- URL of Data Access Layer service.FLOW_ENRICH_URL- URL of Flow Runner service.FLOW_DESIGNER_URL- URL of Designer service.BASE_DAL_URL- URL of Data Access Layer service.ENABLE_INSPECT- Defaultfalse. Iftrueadds --inspect to entry-point, Debugger will listen on port 9279ENABLE_ENV_VAR_DEBUG- Defaultfalse. Iftrue, then enables to retrieve environmental variables for display in " Service config" tab.CACHE_SERVICE- URL of Cache service.ACE_LOG_EXCHANGE- (default:<empty>) - If set totrue, logs request(url, method, body) and response(statusCode, body) related data atinfolevel.
Sizing
| DEV/TEST (Pods, vCPU, RAM, Disk) | PROD (Pods, vCPU, RAM, Disk) |
|---|---|
| 1, 500m, 256Mi, 5Gb | 2, 1, 512Mi, 5Gb |
Scaling
This service can be scaled Horizontally, make sure to deploy the same configuration to all instances when scaling.
Data Access Layer
All persistent configiurations are accessed through Data Access Layer.
Container name
flow-enrich-dal
Deployment options
| DEV/TEST | PROD |
|---|---|
| Required | Required |
Configuration options
PORT- port used by service.LOG_LEVEL- Defaultinfo. Service log verbosity level. Possible valueserror,warn,info,http,verbose,debug,silly.STORAGE_ENV- How to store/read configuration. Currently available option isfile.STORAGE_LOCATION- Storage location on disk. Available ifSTORAGE_ENVisfile. Default value -/usr/src/app/databasesENABLE_INSPECT- Defaultfalse. Iftrueadds --inspect to entry-point, Debugger will listen on port 9269ENABLE_ENV_VAR_DEBUG- Defaultfalse. Iftrue, then enables to retrieve environmental variables for display in " Service config" tab.ACE_LOG_EXCHANGE- (default:<empty>) - If set totrue, logs request(url, method, body) and response(statusCode, body) related data atinfolevel.
Sizing
| DEV/TEST (Pods, vCPU, RAM, Disk) | PROD (Pods, vCPU, RAM, Disk) |
|---|---|
| 1, 1, 512Mi, 5Gb | 2, 2, 1Gi, 5Gb |
Scaling
This service can be scaled Horizontally, make sure to deploy the same configuration to all instances when scaling or when in edit mode, deploy shared volume, where configurations are stored.
Logging
All ACE services are logging according to env variable LOG_LEVEL supplied to the service. It is possible to capture
logs in any Log aggregation solution by capturing what is being logged to stdout.
To prevent GDPR related issues sensitive data is not logged by default
User can provide following env variables in 'Settings' related to logs.
FULL_DATA_LOGGING = true to enable logging of sensitive data.
ACE_LOG_EXCHANGE = true to log request(url, method, body) and response(statusCode, body) related data at info level.
It is also possible to log custom business information using "Logger" step in flow
Security
It is critical to disable Management APIs in production, see Orchestration service configuration
When exposing Dynamic APIs to Consumers use API Gateway or any other infrastructure components to secure * *Orchestration** Dynamic APIs.
Monitoring
There are no considerable warmups livenessProbe and readinessProbe should be defined on per $HOST:$Port basis.
Tracing
Jaeger tracing is removed from version 4.27.0 onwards
ACE currently supports Jaeger distributed tracing for the following services
flow-runner- does not yet supportJAEGER_AUTO_INSTRUMENTINGflow-enrich-dalflow-designer-serverdynamic-api-serverflow-versioningdigital-api-orch
Configuration options available for each service
JAEGER_ENABLED- Defaultfalse. Iftruethen enables JaegerJAEGER_AUTO_INSTRUMENTING- Defaulttrue. If true, creates trace between requests, if false, only notifies on start and end of requests- Further Jaeger configuration