Consolidating Complex Systems Into a Unified Platform
How a multi-tenant cloud platform traded a sprawl of stateless nano-services for a consolidated, vertical-aligned microservice model.
Problem
The multi-tenant cloud platform used stateless nano-service architecture where each service handled a specific workflow operation. As the number of services grew, this drove up both operational overhead and cloud hosting costs, made failures difficult to trace, and grew the dependency graph exponentially.
The target market compounded the problem: the platform needed to run on-prem and airgapped with fixed resources, not just as a centrally hosted cloud service — so any fix had to hold up under constrained infrastructure, not just cut cloud spend.
flowchart LR
Trigger["Knative Event Trigger"] --> GetUser
subgraph Nano["Nano-Services (one lambda per operation)"]
direction LR
GetUser["λ get_user"] --> CheckPerm["λ check_permissions"]
CheckPerm --> AccessDB["λ access_db"]
AccessDB --> UpdateRes["λ update_resource"]
UpdateRes --> TriggerNotif["λ trigger_notification"]
TriggerNotif --> Resolve["λ resolve_request"]
end
Approach
The team analyzed the existing platform architecture to find consolidation opportunities while maintaining operational requirements and scalability. Key examination areas were service scope redesign, event backbone and inter-service communications, platform data models, and existing functionality — including the underlying datastore choice, which had to work equally well centrally hosted and on fixed-resource on-prem deployments.
Solution
They implemented a microservice architecture that consolidated services into a more manageable model. Rather than having a service for each step, each service now handled a complete platform vertical, reducing operational costs, simplifying deployments, and improving system efficiency and observability. The datastore was also migrated from FoundationDB to PostgreSQL, easing both operational burden and resource requirements on constrained, on-prem deployments.
flowchart LR
Client["Client Request"] --> Entities["Entities Service
generic entity handling + IAM"]
Entities --> DB[("User Store")]
Entities -->|"entity.updated"| Bus[("NATS JetStream")]
Bus --> Notifications["Notifications Service
email + SMS dispatch"]
Outcome
Get Started
Ready to streamline your operations? Let’s build smarter workflows together.
