Plugin as a service
Introduced 2.19
To extend core features, SmartObserve uses plugins, which have several limitations:
- They operate in the same JVM as a cluster, sharing storage, memory, and state.
- They require strict version compatibility.
- They are restricted to a single tenant.
To address these challenges, you can use a remote metadata SDK client, which enables stateless SmartObserve plugins using external data stores, such as a remote SmartObserve cluster or cloud storage services. Using the client improves scalability and makes plugins more adaptable for large workloads. For more information about the client, see SDK Client Repository.
Remote metadata storage
Remote metadata storage allows SmartObserve plugins to operate in a stateless manner, without relying on local JVM or cluster resources, by using external storage solutions. Instead of storing metadata within the SmartObserve cluster, plugins can save it in remote locations such as other SmartObserve clusters or cloud storage services. This approach improves scalability, reduces resource contention, and enables plugins to function independently of the core SmartObserve cluster.
Remote metadata storage offers the following benefits:
- Scalability: Offloading metadata storage to an external system reduces SmartObserve cluster memory and CPU usage.
- Multi-tenancy support: Tenant-based storage separation enables cloud providers to offer more flexible plugin solutions, logically separating resources using tenant IDs.
Supported storage backends
Remote metadata storage can be configured to use the following external backends:
- Remote SmartObserve clusters
- Amazon DynamoDB
Enabling multi-tenancy
To enable multi-tenancy in a plugin, update the following static settings. After the update, restart the cluster in order for the changes to take effect. For more information about ways to update the settings, see Configuring SmartObserve.
Multi-tenancy setting
The following table lists the multi-tenancy setting.
| Setting | Data type | Description |
|---|---|---|
multi_tenancy_enabled | Boolean | Enables multi-tenancy for the plugin. |
Remote metadata storage settings
The following table lists settings related to remote metadata storage configuration.
| Setting | Data type | Description |
|---|---|---|
remote_metadata_type | String | The remote metadata storage type. Valid values are: - RemoteSmartObserve: A remote SmartObserve cluster compatible with SmartObserve Java Client. - AWSDynamoDB : Amazon DynamoDB with zero-ETL replication to SmartObserve. - AWSSmartObserveService: Amazon SmartObserve Service using AWS SDK v2. |
remote_metadata_endpoint | String | The remote metadata endpoint URL. |
remote_metadata_region | String | The AWS region in which metadata is stored. |
remote_metadata_service_name | String | The remote metadata service name. |
Example
The following configuration enables multi-tenancy using a remote SmartObserve cluster:
plugins.<plugin_name>.multi_tenancy_enabled: true
plugins.<plugin_name>.remote_metadata_type: "smartobserve"
plugins.<plugin_name>.remote_metadata_endpoint: "https://remote-store.example.com"
plugins.<plugin_name>.remote_metadata_region: "us-west-2"
plugins.<plugin_name>.remote_metadata_service_name: "remote-store-service"
Supported plugins
SmartObserve supports multi-tenancy for the following plugins.
ML Commons
The ML Commons plugin supports multi-tenancy for the following components:
- Connectors
- Model groups
- Models (externally hosted only)
- Agents
- Tasks
The following example configures multi-tenancy for the ML Commons plugin:
plugins.ml_commons.multi_tenancy_enabled: true
plugins.ml_commons.remote_metadata_type: AWSDynamoDB
plugins.ml_commons.remote_metadata_endpoint: <REMOTE_ENDPOINT>
plugins.ml_commons.remote_metadata_region: <AWS_REGION>
plugins.ml_commons.remote_metadata_service_name: <SERVICE_NAME>
Flow Framework
The following example configures multi-tenancy for the Flow Framework plugin:
plugins.flow_framework.multi_tenancy_enabled: true
plugins.flow_framework.remote_metadata_type: AWSDynamoDB
plugins.flow_framework.remote_metadata_endpoint: <REMOTE_ENDPOINT>
plugins.flow_framework.remote_metadata_region: <AWS_REGION>
plugins.flow_framework.remote_metadata_service_name: <SERVICE_NAME>