Reference Architecture Pattern / version 2.0
معماری DevOps و زیرساخت عملیاتی
این صفحه یک الگوی عمومی برای معماری DevOps و زیرساخت عملیاتی مستند می کند: مهاجرت مرحله ای از monolith به microservice، استقرار Docker روی VMهای ESXi، تفکیک Internet و Trusted Zone، مسیر استاندارد request از firewall تا API Gateway، و زنجیره ابزارهای CI/CD، monitoring، logging، backup و governance.
رویکردهای معماری
| رویکرد | توضیح | خروجی عملیاتی |
|---|---|---|
| BFF | از ابتدای توسعه، Back-end for Front-end برای جداسازی نیازهای clientها رعایت شده است. | کاهش coupling بین UIها و سرویس های دامنه. |
| API Gateway | Kong به عنوان ورودی استاندارد APIها و محل routing درخواست ها اضافه می شود. | یک نقطه کنترل برای policy، versioning، routing و observability. |
| Strangler Migration | monolith فعلی به عنوان یک سرویس حفظ می شود و قابلیت ها به تدریج به microserviceهای جدید منتقل می شوند. | مهاجرت مرحله ای بدون قطع سرویس فعلی. |
| Stateless Services | microserviceها داده محلی نگه نمی دارند و state در database، cache یا object storage قرار می گیرد. | امکان scale out و جایگزینی سریع instanceها. |
| Scale-out First | افزایش ظرفیت با اضافه کردن سرور/VM و تقسیم بار انجام می شود؛ scale-up فقط گزینه تکمیلی است. | آمادگی بهتر برای HA و رشد تدریجی بار. |
| Trusted Zone | ابزارهای مدیریتی، دیتابیس ها و سرویس های حساس پشت VPN و zone امن نگه داشته می شوند. | کاهش سطح attack و کنترل دسترسی داخلی. |
| CI/CD | pipelineهای GitLab CI توسط runnerها build، quality gate، artifact publish و deploy را بین workerها توزیع می کنند. | تحویل تکرارپذیر، قابل audit و قابل rollback. |
| Operations Loop | Zabbix، ELK/Kibana، Grafana، Veeam و Passbolt حلقه monitor، log، backup و secret را پوشش می دهند. | قابلیت نگهداری و بازیابی بهتر در عملیات روزانه. |
ابزارها و نقش ها
VMware ESXi
لایه مجازی سازی و مدیریت VMهای عملیاتی
VirtualizationUbuntu
سیستم عامل پایه برای ماشین های مجازی
Operating SystemDocker
استاندارد استقرار کانتینری سرویس ها و ابزارها
DeploymentDocker Swarm
orchestration و clustering برای اجرای سرویس های کانتینری روی چند node
Container OrchestrationKong
API Gateway برای routing، policy و مرزبندی API
GatewayHAProxy
Load balancing در مسیر درخواست های ورودی
TrafficNginx
Reverse proxy و توزیع بار در کنار HAProxy
TrafficMikroTik
Firewall و Internet Gateway
NetworkpfSense / OpenVPN
دسترسی امن کاربران trusted به ابزارهای داخلی
VPNPostgreSQL
پایگاه داده رابطه ای stateful برای سرویس ها
DatabaseRedis
cache management و داده های کوتاه مدت
CacheMinIO
Object storage داخلی برای فایل ها و تصاویر
StorageS3-compatible Object Storage
ذخیره سازی آبجکت برای فایل، artifact و backup
StorageGitLab CI
تعریف pipeline و اجرای CI/CD
DeliveryGitLab Runner
workerهای build و deploy
DeliverySonarQube
static code analysis، security hotspot و quality gate در pipeline
QualityNexus Repository
مخزن artifact و package برای image، library و build output
Artifact RepositoryZabbix
monitoring، alarm و aggregation وضعیت سرویس ها
ObservabilityELK / Kibana
جمع آوری، جستجو و مشاهده logها
ObservabilityGrafana
داشبوردهای عملیاتی و مشاهده metricها
ObservabilityVeeam
backup زمان بندی شده ماشین ها و سرویس ها
BackupJira
issue tracking و مدیریت تسک
GovernanceConfluence
مدیریت دانش و مستندات تیمی
GovernancePassbolt
مدیریت امن password و credential تیمی
Security
Bind DNS
DNS master/slave برای resolve دامنه های داخلی
NetworkInternet to Trusted Zone Request Flow
Firewall, Load Balancer, API Gateway, Microservices
flowchart LR
Clients["Clients: Mobile, PWA, Web, Admin Panels"] -->|HTTPS REST API| Firewall["MikroTik Firewall / Internet GW"]
Firewall --> LB["HAProxy / Nginx Load Balancer"]
LB --> Kong["Kong API Gateway"]
Kong --> MS1["Microservice A"]
Kong --> MS2["Microservice B"]
Kong --> MS3["Legacy Monolith as Service"]
MS1 --> PG1[("PostgreSQL")]
MS2 --> Redis[("Redis Cache")]
MS2 --> Minio[("MinIO / Object Storage")]
Trusted["Trusted Users: Dev, DBA, Ops"] --> VPN["pfSense / OpenVPN"]
VPN --> Internal["Grafana, Zabbix, vCenter, Kibana, DB Admin"]
classDef edge fill:#dbeafe,stroke:#2563eb,color:#0f172a
classDef data fill:#dcfce7,stroke:#16a34a,color:#0f172a
class PG1,Redis,Minio data
VM and Container Deployment Topology
ESXi, VM, Docker, runtime services
flowchart TB
subgraph Hardware["Physical Server / ESXi"]
ESX["VMware ESXi"]
subgraph VMs["Virtual Machines"]
VM1["VM: API Gateway / LB"]
VM2["VM: Backend Services"]
VM3["VM: Databases"]
VM4["VM: Observability"]
VM5["VM: Collaboration Tools"]
end
end
ESX --> VMs
VM1 --> C1["Docker: Kong / HAProxy / Nginx"]
VM2 --> C2["Docker: Stateless Microservices"]
VM3 --> C3["Docker: PostgreSQL / Redis"]
VM4 --> C4["Docker: Zabbix / ELK / Grafana"]
VM5 --> C5["Docker: GitLab / SonarQube / Nexus / Jira / Confluence / Passbolt"]
C2 --> DB[("Stateful data layer")]
C4 --> Alerts["Alarm / Dashboard / Log Search"]
CI/CD Delivery Flow
GitLab CI and Runner sequence
sequenceDiagram autonumber participant Dev as Developer participant Git as GitLab Repository participant CI as GitLab CI participant Runner as GitLab Runner participant Quality as SonarQube participant Nexus as Nexus Repository participant Image as Docker Image participant VM as Target VM participant Ops as Monitoring Dev->>Git: Push / Merge Request Git->>CI: Trigger pipeline CI->>Runner: Assign build job Runner->>Quality: Static analysis and quality gate Quality-->>Runner: Quality gate result Runner->>Image: Build and tag container Runner->>Nexus: Publish artifact / package Runner->>VM: Deploy service container VM->>Ops: Emit logs and metrics Ops-->>Dev: Alert / dashboard feedback
Observability, Backup and Governance Loop
Monitoring, logging, backup, password and knowledge tools
flowchart LR Services["Microservices / System Apps"] --> Logs["ELK / Kibana"] Services --> Metrics["Zabbix"] Metrics --> Grafana["Grafana Dashboards"] Metrics --> Alarm["Alarm and Aggregation"] VMs["Virtual Machines"] --> Veeam["Veeam Backup"] Veeam --> Backup["Offsite / Object Backup Storage"] Secrets["Credentials"] --> Passbolt["Passbolt"] Jira["Jira Issues"] --> Confluence["Confluence Knowledge Base"] Logs --> Incident["Incident Analysis"] Alarm --> Incident
Strangler Migration Roadmap
Monolith to microservices transition
flowchart LR
Client["Clients"] --> Gateway["API Gateway"]
Gateway --> Legacy["Current Monolith as one service"]
Gateway --> NewA["New Microservice A"]
Gateway --> NewB["New Microservice B"]
Legacy --> DB[("Existing Data")]
NewA --> DBA[("Service-owned DB")]
NewB --> DBB[("Service-owned DB")]
Legacy -. capability extracted .-> NewA
Legacy -. capability extracted .-> NewB
Legacy -. retired after migration .-> Archive["Decommission plan"]
Tooling Coverage Graph
Mermaid pie chart
pie showData title DevOps tooling coverage "Delivery and Source Control" : 5 "Runtime and Traffic" : 8 "Data and Storage" : 5 "Observability and Backup" : 5 "Governance, Quality and Security" : 5
نقشهای زیرساختی پیشنهادی
این جدول نام ماشینهای پروژه مرجع را تکرار نمیکند. هر ردیف یک نقش زیرساختی است که باید با نامگذاری، sizing و محیطهای واقعی پروژه شما تکمیل شود.
| Role ID | نقش | CPU | Memory |
|---|---|---|---|
| api-gateway-vm | API Gateway role | Sizing TBD | Sizing TBD |
| load-balancer-vm | Load balancer role | Sizing TBD | Sizing TBD |
| backend-runtime-vm | Production backend runtime | Sizing TBD | Sizing TBD |
| logging-vm | Central logging role | Sizing TBD | Sizing TBD |
| monitoring-vm | Monitoring and alarms | Sizing TBD | Sizing TBD |
| dashboard-vm | Operational dashboards | Sizing TBD | Sizing TBD |
| source-control-vm | Source control and CI metadata | Sizing TBD | Sizing TBD |
| runner-vm | Build and deploy runner | Sizing TBD | Sizing TBD |
| object-storage-vm | Object storage role | Sizing TBD | Sizing TBD |
| backup-vm | Backup service role | Sizing TBD | Sizing TBD |
| password-vault-vm | Password management role | Sizing TBD | Sizing TBD |
| collaboration-vm | Issue tracking and knowledge base | Sizing TBD | Sizing TBD |
قرارداد URL و عبور درخواست
قرارداد پیشنهادی به صورت generic تعریف میشود: {API_BASE_URL}/{service_name}/api/{version}/{context}/{endpoint}. مقدار API_BASE_URL، نام سرویسها و context باید از قرارداد واقعی SAAN/IOT و تنظیمات API Gateway پروژه تکمیل شود.