Introducing Omnistrate Platform
As we contemplated building the SaaS platform, we divided the requirements into 5 packages. If you are building a SaaS from scratch, you will likely need all the layers.
We also understand that some of you may have already started but are actively looking to accelerate your SaaS journey and scale with your current team better. Hence, we have divided the platform into 5 packages to make it easy to integrate and enable/disable specific pieces:
Omnistrate Tenant Management
Tenant isolation: support different isolation modes from dedicated, account-based to resource-based without any application changes,
Tenant provisioning and management: from provisioning to management operations at the per-tenant level depending on the isolation modes
SaaS versioning: Be able to make changes and deploy new SaaS experiences in real-time,
SaaS control plane UX: API, CLI, and even default GUI for your customers to perform different operations,
Tenant capabilities: RBAC, Auth Keys, metrics, logging, auditing, and tenant level controls,
Omnistrate Application Management
Scaling including advanced auto-scaling and serverless with scale down to zero,
Upgrades (from upgrading infrastructure to patching your application) and ability to control per customer account,
Service capabilities like auto-scaling, serverless, SSL offloading, load balancing, integration with your favorite CI tooling, etc.
Omnistrate Operations Management
Monitoring from simple machine failures to complex AZ failures, network partitions, hung processes, etc.,
Fleet-wide observability including alerting, metrics, and logging, inventory management,
Automated operations from certificate rotation to L1 recovery mechanisms,
Continuous deployment with access control.
Omnistrate Infra Management
Automated IaC across clouds, across regions, across customer cloud accounts,
Automated state management for every tenant,
ACID compliant to keep your fleet consistent across different operations,
Fully versioned to support failures, infra evolution, rollbacks.
Omnistrate Commerce Management
Metering
Billing
Marketplace integration
Putting Omnistrate in action
Now, we will see with an example how one can transform their application into a multi-cloud service with enterprise capabilities in minutes. One of the core elements of the majority of the application stack is a database. One of the popular database choices is PostgreSQL. Let’s see how one can build a Multi-Cloud Vector Database SaaS with PostgreSQL.
Let's start simple and we will extend the offering incrementally. Here is a hello world version of PostgreSQL:
version: "3"
services:
Database:
image: 'bitnami/postgresql:latest'
ports:
- 5432:5432
volumes:
- ./data:/var/lib/postgresql/data
environment:
- POSTGRESQL_PASSWORD=password
- POSTGRESQL_DATABASE=testdb
- POSTGRESQL_USERNAME=root
- POSTGRESQL_POSTGRES_PASSWORD=rootpassword
- POSTGRESQL_PGAUDIT_LOG=READ,WRITE
- POSTGRESQL_LOG_HOSTNAME=true
- POSTGRESQL_REPLICATION_MODE=master
- POSTGRESQL_REPLICATION_USER=repl_user
- POSTGRESQL_REPLICATION_PASSWORD=repl_password
- POSTGRESQL_DATA_DIR=/var/lib/postgresql/data/dbdata
- SECURITY_CONTEXT_USER_ID=1001
- SECURITY_CONTEXT_FS_GROUP=1001
- SECURITY_CONTEXT_GROUP_ID=0
Let’s say that you want to host this SaaS in your account, just add this:
x-omnistrate-my-account:
AwsAccountId: '123456789012'
AwsBootstrapRoleAccountArn: 'arn:aws:iam::123456789012:role/omnistrate-bootstrap-role'
GcpProjectId: 'omnistrate-internal'
GcpProjectNumber: '1234567890123'
GcpServiceAccountEmail: '[email protected]'
Now, you want to provide visibility into application metrics and logging:
x-omnistrate-integrations:
- omnistrateLogging
- omnistrateMetrics
With AI, your customers also want to use vector support, you can inject custom code at database initialization:
x-omnistrate-actionhooks:
- scope: CLUSTER
type: INIT
commandTemplate: >
PGPASSWORD=rootpassword12345 psql -U postgres
-h master testdb -c "create extension vector"
Let’s say you want to allow your users to customize instance type as input from your customers, just add:
x-omnistrate-api-params:
- key: masterInstanceType
description: Master Instance Type
name: Master Instance Type
type: String
modifiable: true
required: true
export: true
options:
- t4.large
- t4.xlarge
- t4.2xlarge
But lets say your customers want replica support. We can add a replica service component and add a numReadReplicas API parameter to allow your users to configure the number of read replicas:
Replica: x-omnistrate-compute: replicaCountAPIParam: numReadReplicas x-omnistrate-api-params: - key: numReadReplicas description: Number of Read Replicas name: Number of Read Replicas type: Float64 modifiable: true required: true export: true
Your customers are asking this service to Multi-Zone and auto-scaling with scale down to zero:
x-omnistrate-capabilities:
enableMultiZone: true
enableEndpointPerReplica: true
autoscaling:
maxReplicas: 5
minReplicas: 1
idleMinutesBeforeScalingDown: 20
idleThreshold: 1
overUtilizedMinutesBeforeScalingUp: 3
overUtilizedThreshold: 80
serverlessConfiguration:
targetPort: 5432
enableAutoStop: true
minimumNodesInPool: 5
To bill your customers, you have to meter their usage. To enable that, just add:
x-omnistrate-integrations:
- omnistrateMetering
Now, you will automatically get patching, monitoring with auto-recovery, alerting, fleet observability, continuous deployment with access control for your teams, automated fleet operations, infrastructure management, security controls and much more out of the box.
As you can see, we took an open-source PostgreSQL software and built a multi-cloud enterprise-grade PostgreSQL SaaS with vector extension. For full example, please see this: Vector DB example
Now, database is one of the components but let’s say you want to add more components to build a complex application. Let’s say you want to build a Wiki SaaS and deploy it in your customers’ account - an application with cache and database dependency. You can model dependencies using depends_on clause like this:
app:
....
image: omnistrate/outline:0.74.0
depends_on:
- postgres
- redis
redis:
....
image: redis:7.0.12
postgres:
....
image: postgres:14.8
For full example, please see this: simple application with multiple components
In case you want to deploy your app in your customers’ account, you can add this block:
x-omnistrate-byoa:
AwsAccountId: 'your-aws-account-id'
AwsBootstrapRoleAccountArn: 'arn:aws:iam::your-aws-account-id:role/omnistrate-bootstrap-role'
GcpProjectId: 'your-gcp-id'
GcpProjectNumber: 'your-project-number'
GcpServiceAccountEmail: 'your-gcp-service-email'
For full example on BYOA (Bring Your Own Account), please see this: BYOA example
To get started and build your first SaaS in less than 15 minutes, please see the getting started video and getting started docs
Comments