ERP SaaS Dedicated Tenant Architecture & Roadmap
Overview
Dokumen ini menjelaskan roadmap transformasi ERP menjadi SaaS menggunakan pendekatan:
- Single Codebase
- Dedicated Application per Tenant
- Dedicated Database per Tenant
- DNS-based Tenant Isolation
- SaaS Control Plane
- Licensing Service per Tenant
- Future Infrastructure as Code (IaC)
Pendekatan ini dipilih untuk meminimalkan perubahan pada existing ERP monolith dan memberikan isolasi tenant yang tinggi.
Lihat juga: Licensing Service Architecture Proposal — detail desain License Service, kontrak integrasi ERP, struktur license file, dan rencana ekspansi fitur.
Target Architecture
Design Principles
- Setiap customer memiliki Application Instance sendiri.
- Setiap customer memiliki Database sendiri.
- Tenant diisolasi melalui DNS dan deployment.
- ERP Application tidak perlu tenant-aware.
- Tidak diperlukan Tenant Resolver.
- Portal bertindak sebagai SaaS Control Plane.
- Provisioning dilakukan melalui Portal.
- Setiap tenant memiliki License Service sendiri — licensing adalah platform concern, bukan ERP business concern.
- ERP hanya mengkonsumsi entitlement melalui
ILicenseProvider; tidak mengetahui cara lisensi di-generate atau di-sign. - Portal terdiri dari beberapa service internal yang berbagi satu Portal Database.
Portal Services
Portal (portal.erp.com) adalah SaaS Control Plane yang terdiri dari service-service berikut, semua berbagi satu Portal Database:
| Service | Tanggung Jawab |
|---|---|
| Tenant Management Service | Tenant registry, onboarding, status tenant |
| Article Management Service | Konten knowledge base, dokumentasi, announcement |
| License Management Service | Generate, sign, renew, revoke license |
| Subscription Management Service | Trial, monthly, annual, perpetual, support contract |
| Provision Management Service | Ticketing provisioning, koordinasi support team, tracking status |
flowchart TD
Portal[portal.erp.com]
Portal --> TenantSvc[Tenant Management Service]
Portal --> ArticleSvc[Article Management Service]
Portal --> LicenseSvc[License Management Service]
Portal --> SubSvc[Subscription Management Service]
Portal --> ProvisionSvc[Provision Management Service]
TenantSvc --> PortalDB[(Portal Database)]
ArticleSvc --> PortalDB
LicenseSvc --> PortalDB
SubSvc --> PortalDB
ProvisionSvc --> PortalDB
Semua service Portal membaca dan menulis ke satu Portal Database — tidak ada database terpisah per service pada tahap ini. Pemisahan dapat dilakukan di masa depan jika ada kebutuhan skalabilitas per service.
Phase 1 - SaaS Foundation
Objectives
- Menyediakan onboarding customer.
- Menyediakan tenant registry.
- Menyediakan provisioning workflow.
- Menjaga ERP existing tetap minim perubahan.
- Mendeploy License Service per tenant saat provisioning.
- Mengimplementasi Portal License Management (generate & sign license).
Architecture
flowchart TD
Portal[portal.erp.com]
subgraph Portal Services
TenantSvc[Tenant Management Service]
LicenseSvc[License Management Service]
SubSvc[Subscription Management Service]
ProvisionSvc[Provision Management Service]
ArticleSvc[Article Management Service]
end
Portal --> TenantSvc
Portal --> LicenseSvc
Portal --> SubSvc
Portal --> ProvisionSvc
Portal --> ArticleSvc
TenantSvc --> PortalDB[(Portal Database)]
LicenseSvc --> PortalDB
SubSvc --> PortalDB
ProvisionSvc --> PortalDB
ArticleSvc --> PortalDB
ProvisionSvc --> Ticket[Provisioning Ticket]
Ticket --> Support[Support Team]
Support --> DNSA[Create DNS]
Support --> APPA[Deploy ERP Instance]
Support --> DBA[Create Database]
Support --> LICA[Deploy License Service + license.lic]
DNSA --> ClientA[client-a.app.erp.com]
ClientA --> AppA[ERP Instance A]
AppA --> LicenseA[License Service A]
AppA --> DbA[(ERP Client A DB)]
LicenseSvc --> LicenseA
DNSB[Create DNS]
APPB[Deploy ERP Instance]
DBB[Create Database]
LICB[Deploy License Service + license.lic]
Support --> DNSB
Support --> APPB
Support --> DBB
Support --> LICB
DNSB --> ClientB[client-b.app.erp.com]
ClientB --> AppB[ERP Instance B]
AppB --> LicenseB[License Service B]
AppB --> DbB[(ERP Client B DB)]
LicenseSvc --> LicenseB