سند معماری سامانه دارانو
1. مقدمه
این سند به تشریح معماری نرمافزاری سامانه دارانو میپردازد. دارانو یک پلتفرم توکنسازی داراییهای واقعی است که مبتنی بر معماری Microservices طراحی شده است. این سند شامل تشریح کامل اجزای نرمافزاری، ارتباطات میان سرویسها، و الگوهای معماری استفاده شده میباشد.
2. اصول معماری
2.1 الگوهای معماری استفاده شده
| الگو | کاربرد |
|---|---|
| Microservices | جداسازی مسئولیتها و مقیاسپذیری |
| API Gateway | نقطه ورود واحد و مدیریت درخواستها |
| Repository Pattern | انتزاع دسترسی به داده |
| Stateless Services | عدم وابستگی به Session داخلی |
| Circuit Breaker | مقاومسازی در برابر خرابی سرویسها |
| Source of Truth (SOT) | بلاکچین به عنوان منبع اصلی مالکیت توکنها |
2.2 اصول طراحی
- Single Responsibility: هر سرویس یک مسئولیت مشخص دارد
- Separation of Concerns: جداسازی لایههای مختلف
- Domain-Driven Design: طراحی بر اساس دامنه کسبوکار
- API-First: طراحی API ها قبل از پیادهسازی
- Security by Design: امنیت در تمام لایهها
- Fail-Safe: طراحی برای مقاومت در برابر خرابی
3. معماری کلان سیستم
3.1 دیاگرام معماری سطح بالا
graph TB
subgraph "Client Layer"
WEB[Web Browser]
MOBILE[Mobile App]
ADMIN[Admin Dashboard]
end
subgraph "Edge Layer"
CF[Cloudflare<br/>DNS + WAF + DDoS Protection]
TFK[Traefik<br/>Reverse Proxy + TLS]
end
subgraph "Presentation Layer"
UI[UI - Next.js<br/>SSR + Client Rendering]
AP[Admin Panel - Django<br/>Server-Side Rendering]
end
subgraph "API Layer"
APIGW[API Gateway - Go<br/>Routing + Auth + Rate Limiting]
end
subgraph "Business Logic Layer"
AUTH[Auth Service - Go<br/>Authentication + Authorization]
WAL[Wallet Service - Go<br/>Blockchain Operations]
MKT[Market Service - Go<br/>Order Management + Trading]
WSTR[Wallet Streamer - Go<br/>Blockchain Event Listener]
end
subgraph "Data Layer"
DB[(PostgreSQL<br/>Relational Database)]
CACHE[(Redis<br/>Cache + Session)]
MQ[(RabbitMQ<br/>Message Queue)]
end
subgraph "External Layer"
GH[Kuknos Blockchain<br/>Token Ledger - Source of Truth]
KYC[KYC Services<br/>Zohal + Ehraz + Jibit]
PAY[Payment Gateways<br/>Bank + Digital Wallets]
end
subgraph "Operations Layer"
PROM[Prometheus<br/>Metrics Collection]
GRAF[Grafana<br/>Visualization]
ALERT[Alertmanager<br/>Alerting]
PORT[Portainer<br/>Container Management]
end
WEB --> CF
MOBILE --> CF
ADMIN --> CF
CF --> TFK
TFK --> UI
TFK --> AP
TFK --> APIGW
UI --> APIGW
AP --> APIGW
AP --> DB
APIGW --> AUTH
APIGW --> WAL
APIGW --> MKT
APIGW --> CACHE
APIGW --> MQ
AUTH --> DB
AUTH --> CACHE
AUTH --> KYC
WAL --> DB
WAL --> GH
WAL --> CACHE
MKT --> DB
MKT --> WAL
MKT --> MQ
WSTR --> GH
WSTR --> DB
WSTR --> MQ
WAL --> PAY
PROM --> APIGW
PROM --> AUTH
PROM --> WAL
PROM --> MKT
PROM --> DB
GRAF --> PROM
ALERT --> PROM
PORT -.-> TFK
3.2 دیاگرام سادهشده
برای درک بهتر، نمای سادهتر:
graph LR
U[User] --> UI[UI - Next.js]
UI --> API[API Gateway - Go]
API --> AUTH[Auth Service<br/>RBAC / JWT]
API --> WAL[Wallet Service<br/>Blockchain Ops]
API --> MKT[Market Service<br/>Trading Engine]
AUTH --> DB[(PostgreSQL)]
WAL --> DB
MKT --> DB
WAL --> BC[(Kuknos Network<br/>Token Ledger)]
WSTR[Wallet Streamer] --> BC
4. لایهبندی معماری (Layered Architecture)
4.1 نمای لایهای
graph TD
subgraph "Layer 1: Client"
L1A[Web/Mobile Clients]
L1B[Admin Dashboard]
end
subgraph "Layer 2: Edge & Security"
L2A[Cloudflare WAF]
L2B[Traefik Reverse Proxy]
end
subgraph "Layer 3: Presentation"
L3A[Next.js UI]
L3B[Django Admin Panel]
end
subgraph "Layer 4: API Gateway"
L4[API Gateway<br/>Routing + Auth + Rate Limit]
end
subgraph "Layer 5: Business Services"
L5A[Auth Service]
L5B[Wallet Service]
L5C[Market Service]
L5D[Wallet Streamer]
end
subgraph "Layer 6: Data Access"
L6A[PostgreSQL]
L6B[Redis Cache]
L6C[RabbitMQ]
end
subgraph "Layer 7: External Services"
L7A[Kuknos Blockchain]
L7B[KYC Services]
L7C[Payment Gateways]
end
L1A --> L2A
L1B --> L2A
L2A --> L2B
L2B --> L3A
L2B --> L3B
L3A --> L4
L3B --> L4
L4 --> L5A
L4 --> L5B
L4 --> L5C
L5A --> L6A
L5B --> L6A
L5C --> L6A
L5D --> L6A
L5A --> L6B
L5B --> L6B
L4 --> L6B
L4 --> L6C
L5C --> L6C
L5D --> L6C
L5B --> L7A
L5D --> L7A
L5A --> L7B
L5B --> L7C
4.2 توضیح لایهها
| لایه | مسئولیت | فناوریهای کلیدی |
|---|---|---|
| Layer 1: Client | تعامل کاربر نهایی | Browser, Mobile App |
| Layer 2: Edge & Security | امنیت، DDoS Protection، TLS/SSL، Routing | Cloudflare, Traefik |
| Layer 3: Presentation | رابط کاربری، رندر صفحات | Next.js, Django Templates |
| Layer 4: API Gateway | نقطه ورود واحد، احراز هویت، Rate Limiting | Go, Gin Router |
| Layer 5: Business Services | منطق کسبوکار، پردازش تراکنشها | Go Microservices |
| Layer 6: Data Access | ذخیرهسازی داده، Cache، Message Queue | PostgreSQL, Redis, RabbitMQ |
| Layer 7: External Services | سرویسهای خارجی (بلاکچین، KYC، پرداخت) | Kuknos, Zohal, Banks |
5. اجزای نرمافزاری (Software Components)
5.1 API Gateway
نقش: نقطه ورود مرکزی برای تمام درخواستهای API
مسئولیتها:
- مسیریابی درخواستها به سرویسهای مناسب
- احراز هویت اولیه (JWT Validation)
- Rate Limiting و Throttling
- Request/Response Logging
- CORS Handling
- API Versioning
- Load Balancing بین نمونههای سرویسها
فناوری: Go, Gin Router, JWT Middleware
ارتباطات:
- ورودی: UI, Admin Panel
- خروجی: Auth Service, Wallet Service, Market Service
- کمکی: Redis (برای Rate Limiting), RabbitMQ
graph LR
UI[UI] --> APIGW[API Gateway]
ADMIN[Admin Panel] --> APIGW
APIGW --> REDIS[(Redis<br/>Rate Limit Cache)]
APIGW --> AUTH[Auth Service]
APIGW --> WAL[Wallet Service]
APIGW --> MKT[Market Service]
API Endpoints Groups:
/auth/*→ Auth Service/wallet/*→ Wallet Service/market/*→ Market Service/user/*→ Auth Service/admin/*→ Multiple Services (با RBAC)
5.2 Auth Service (سرویس احراز هویت)
نقش: مدیریت کاربران، احراز هویت و کنترل دسترسی
مسئولیتها:
- ثبتنام و ورود کاربران (OTP-based)
- صدور و اعتبارسنجی JWT Token
- مدیریت Refresh Token
- احراز هویت KYC (یکپارچگی با سرویسهای شخص ثالث)
- RBAC (Role-Based Access Control)
- ABAC (Attribute-Based Access Control)
- مدیریت نقشها و دسترسیها
- Session Management
- Password Reset (برای Admin Panel)
فناوری: Go, JWT, PostgreSQL, Redis
ارتباطات:
- ورودی: API Gateway
- خروجی: Database (PostgreSQL), Cache (Redis), KYC Services
- Event Publishing: User Created, KYC Verified
graph TB
APIGW[API Gateway] --> AUTH[Auth Service]
AUTH --> DB[(PostgreSQL<br/>Users + Roles + Permissions)]
AUTH --> CACHE[(Redis<br/>Sessions + Tokens)]
AUTH --> KYC[KYC Services<br/>Zohal/Ehraz/Jibit]
AUTH --> SMS[SMS Service<br/>OTP]
AUTH -.->|Events| MQ[(RabbitMQ)]
Data Models:
- User (اطلاعات کاربر)
- Role (نقشها)
- Permission (مجوزها)
- Session (نشستهای فعال)
- KYC_Record (رکورد احراز هویت)
- OTP_Record (کدهای یکبار مصرف)
5.3 Wallet Service (سرویس کیف پول)
نقش: مدیریت کیف پولهای توکنی و ریالی، تعامل با بلاکچین
مسئولیتها:
- ایجاد کیف پول برای کاربران جدید (HD Wallet)
- مدیریت کلیدهای خصوصی (با Vault/KMS)
- ارسال و دریافت توکن (On-Chain Transactions)
- استعلام موجودی (از بلاکچین)
- مدیریت Trust Line
- مدیریت کیف ریالی (Off-Chain Balance)
- واریز و برداشت ریال
- یکپارچگی با درگاههای پرداخت
- ایجاد و مدیریت Account های بلاکچین
- امضای دیجیتال تراکنشها
فناوری: Go, Stellar/Kuknos SDK, PostgreSQL, Redis, Vault
ارتباطات:
- ورودی: API Gateway, Market Service
- خروجی: Kuknos Blockchain, Database, Payment Gateways, Cache
- Event Publishing: Token Sent, Token Received, Balance Updated
graph TB
APIGW[API Gateway] --> WAL[Wallet Service]
MKT[Market Service] --> WAL
WAL --> DB[(PostgreSQL<br/>Wallet Metadata)]
WAL --> CACHE[(Redis<br/>Balance Cache)]
WAL --> VAULT[Vault/KMS<br/>Private Keys]
WAL --> GH[Kuknos Blockchain<br/>Transactions + Balance]
WAL --> PAY[Payment Gateways<br/>Fiat Deposit/Withdrawal]
WAL -.->|Events| MQ[(RabbitMQ)]
Data Models:
- Wallet (اطلاعات کیف پول)
- FiatBalance (موجودی ریالی)
- Transaction (تراکنشهای On-Chain - فقط Metadata)
- TrustLine (خطوط اعتماد)
- DepositRequest (درخواستهای واریز)
- WithdrawalRequest (درخواستهای برداشت)
توجه مهم: مالکیت توکنها کاملاً روی بلاکچین ذخیره میشود و دیتابیس فقط Metadata نگهداری میکند.
5.4 Market Service (سرویس بازار)
نقش: مدیریت بازار اولیه و ثانویه، سفارشها و معاملات
مسئولیتها:
- مدیریت پروژههای ICO/ITO (بازار اولیه)
- ثبت سفارش خرید و فروش (بازار ثانویه)
- Order Matching (P2P)
- قفل کردن توکنهای فروشنده
- محاسبه کارمزد (Maker/Taker Fee)
- مدیریت Order Book
- اجرای معاملات (با فراخوانی Wallet Service)
- مدیریت کدهای تخفیف
- مدیریت کدهای دعوت (Referral)
- گزارشگیری و آمار بازار
- مدیریت بازخرید (Buy-Back)
فناوری: Go, PostgreSQL, Redis, RabbitMQ
ارتباطات:
- ورودی: API Gateway
- خروجی: Database, Wallet Service, Cache, Message Queue
- Event Publishing: Order Created, Trade Executed, Order Cancelled
graph TB
APIGW[API Gateway] --> MKT[Market Service]
MKT --> DB[(PostgreSQL<br/>Orders + Trades + Projects)]
MKT --> CACHE[(Redis<br/>Order Book Cache)]
MKT --> WAL[Wallet Service<br/>Token Transfers]
MKT --> MQ[(RabbitMQ<br/>Trade Events)]
Data Models:
- Project (پروژههای ICO)
- Order (سفارشهای خرید/فروش)
- Trade (معاملات انجام شده)
- DiscountCode (کدهای تخفیف)
- ReferralCode (کدهای دعوت)
- BuyBackRequest (درخواستهای بازخرید)
- MarketConfig (تنظیمات بازار و کارمزدها)
5.5 Wallet Streamer (گوشدهنده بلاکچین)
نقش: رصد رویدادهای بلاکچین و همگامسازی با سیستم
مسئولیتها:
- Streaming تراکنشهای بلاکچین
- شناسایی تراکنشهای مرتبط با کاربران
- بهروزرسانی وضعیت تراکنشها
- اطلاعرسانی واریز توکن
- پیگیری تأییدات تراکنشها
- بازیابی در صورت قطع ارتباط (Stream Replay)
- Event Publishing برای سایر سرویسها
فناوری: Go, Stellar/Kuknos Horizon API, PostgreSQL, RabbitMQ
ارتباطات:
- ورودی: Kuknos Blockchain (Horizon API)
- خروجی: Database, Message Queue
- Event Publishing: Transaction Confirmed, Deposit Detected
graph TB
GH[Kuknos Blockchain<br/>Horizon API] -->|Stream| WSTR[Wallet Streamer]
WSTR --> DB[(PostgreSQL<br/>Transaction Status)]
WSTR --> MQ[(RabbitMQ<br/>Blockchain Events)]
MQ -.->|Notify| WAL[Wallet Service]
MQ -.->|Notify| APIGW[API Gateway]
ویژگیهای کلیدی:
- Real-time Monitoring
- Automatic Retry on Connection Loss
- Cursor-based Resumption
- Idempotent Processing (جلوگیری از پردازش مجدد)
5.6 Admin Panel (پنل مدیریت)
نقش: رابط مدیریتی برای اپراتورها و مدیران
مسئولیتها:
- مدیریت کاربران
- مدیریت KYC
- صدور و مدیریت توکنها
- مدیریت پروژههای ICO
- مدیریت سفارشها و معاملات
- ایجاد و مدیریت کدهای تخفیف
- گزارشگیری جامع
- تنظیمات سیستم
- مدیریت نقشها و دسترسیها (RBAC/ABAC)
- لاگهای امنیتی و Audit Trail
فناوری: Python, Django, PostgreSQL, Django REST Framework
ارتباطات:
- ورودی: Admin Users (via Browser)
- خروجی: Database (Direct), API Gateway (برای برخی عملیات)
graph LR
ADMIN[Admin Users] --> AP[Django Admin Panel]
AP --> DB[(PostgreSQL<br/>Direct Access)]
AP --> APIGW[API Gateway<br/>Business Operations]
APIGW --> AUTH[Auth Service<br/>RBAC/ABAC Check]
ماژولهای کلیدی:
- User Management
- KYC Management
- Token Issuance
- Market Management
- Discount & Referral Management
- Reporting & Analytics
- System Configuration
- Audit Logs
6. ارتباطات میان سرویسها
6.1 الگوهای ارتباطی
| نوع ارتباط | پروتکل | کاربرد |
|---|---|---|
| Synchronous RESTful | HTTP/HTTPS + JSON | درخواستهای مستقیم بین سرویسها |
| Asynchronous Messaging | RabbitMQ/AMQP | رویدادها و پیامهای غیرهمزمان |
| Blockchain RPC | HTTPS + JSON-RPC | تعامل با Kuknos Blockchain |
| Cache Access | Redis Protocol | دسترسی به Cache و Session |
| Database Access | PostgreSQL TCP | دسترسی به پایگاه داده |
6.2 دیاگرام ارتباطات سرویسها
graph TB
subgraph "Communication"
APIGW[API Gateway] -->|GRPC| AUTH[Auth Service]
APIGW -->|GRPC| WAL[Wallet Service]
APIGW -->|GRPC| MKT[Market Service]
MKT -->|GRPC| WAL
AP[Admin Panel] -->|REST| APIGW
end
InternalNetwork
subgraph "Blockchain Communication"
WAL -->|Transactions| GH[Kuknos Blockchain]
InternalNetwork -->|Stream API| GH
GH -.->|Events| InternalNetwork
end
subgraph "Shared Data Access"
AUTH --> DB[(PostgreSQL)]
WAL --> DB
MKT --> DB
InternalNetwork --> DB
AP --> DB
APIGW --> CACHE[(Redis)]
AUTH --> CACHE
WAL --> CACHE
MKT --> CACHE
end
6.3 ماتریس ارتباطات
| از / به | API GW | Auth | Wallet | Market | Streamer | DB | Redis | RabbitMQ | Blockchain |
|---|---|---|---|---|---|---|---|---|---|
| API GW | - | ✓ | ✓ | ✓ | - | - | ✓ | ✓ | - |
| Auth | - | - | - | - | - | ✓ | ✓ | ✓ | - |
| Wallet | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ |
| Market | - | - | ✓ | - | - | ✓ | ✓ | ✓ | - |
| Streamer | - | - | - | - | - | ✓ | - | ✓ | ✓ |
| Admin | ✓ | - | - | - | - | ✓ | - | - | - |
راهنما:
- ✓: ارتباط مستقیم وجود دارد
- -: ارتباط مستقیم وجود ندارد
7. جریان داده (Data Flow)
7.1 جریان احراز هویت (Authentication Flow)
sequenceDiagram
participant U as User
participant UI as UI
participant GW as API Gateway
participant AUTH as Auth Service
participant CACHE as Redis
participant DB as Database
U->>UI: Login Request
UI->>GW: POST /auth/login
GW->>AUTH: Forward Request
AUTH->>DB: Validate User
DB-->>AUTH: User Data
AUTH->>AUTH: Generate JWT
AUTH->>CACHE: Store Refresh Token
AUTH-->>GW: JWT + Refresh Token
GW-->>UI: Tokens
UI-->>U: Login Success
Note over U,DB: Subsequent Requests
U->>UI: API Request
UI->>GW: Request + JWT
GW->>GW: Validate JWT
GW->>CACHE: Check Token Validity
CACHE-->>GW: Valid
GW->>AUTH: Get User Permissions
AUTH-->>GW: Permissions
GW->>MKT: Forward Request
7.2 جریان خرید توکن (Token Purchase Flow)
sequenceDiagram
participant U as User
participant UI as UI
participant GW as API Gateway
participant MKT as Market Service
participant WAL as Wallet Service
participant GH as Kuknos Blockchain
participant DB as Database
participant MQ as RabbitMQ
U->>UI: Purchase Token
UI->>GW: POST /market/buy
GW->>GW: Validate JWT
GW->>MKT: Create Order
MKT->>DB: Check Availability
DB-->>MKT: Available
MKT->>WAL: Check Balance (Fiat)
WAL->>DB: Get Balance
DB-->>WAL: Balance OK
WAL-->>MKT: Sufficient Balance
MKT->>DB: Create Order
MKT->>WAL: Transfer Token
WAL->>GH: On-Chain Transfer
GH-->>WAL: Transaction Success
WAL->>DB: Update Balance
WAL->>MQ: Publish TokenTransferred Event
MKT->>DB: Complete Order
MKT-->>GW: Order Success
GW-->>UI: Purchase Complete
UI-->>U: Tokens Received
7.3 جریان معامله P2P (P2P Trading Flow)
sequenceDiagram
participant S as Seller
participant B as Buyer
participant GW as API Gateway
participant MKT as Market Service
participant WAL as Wallet Service
participant GH as Kuknos
participant DB as Database
S->>GW: Create Sell Order
GW->>MKT: POST /market/sell
MKT->>WAL: Lock Tokens
WAL->>DB: Lock Record
MKT->>DB: Create Order (Open)
MKT-->>GW: Order Created
B->>GW: Buy from Order
GW->>MKT: POST /market/buy
MKT->>DB: Match Order
MKT->>WAL: Check Buyer Balance
WAL-->>MKT: OK
MKT->>WAL: Execute Trade
WAL->>GH: Transfer Token (Seller→Buyer)
GH-->>WAL: Success
WAL->>DB: Unlock & Transfer
WAL->>DB: Update Fiat (Buyer→Seller)
MKT->>DB: Update Order (Filled)
MKT-->>GW: Trade Success
7.4 جریان رصد بلاکچین (Blockchain Monitoring Flow)
sequenceDiagram
participant GH as Kuknos Blockchain
participant WSTR as Wallet Streamer
participant DB as Database
participant MQ as RabbitMQ
participant WAL as Wallet Service
participant UI as UI
GH->>WSTR: Stream Transactions
WSTR->>WSTR: Filter Relevant Txs
loop For Each Transaction
WSTR->>DB: Check if Processed
alt Not Processed
WSTR->>DB: Save Transaction
WSTR->>MQ: Publish TxConfirmed Event
MQ->>WAL: Event Received
WAL->>DB: Update Balance Cache
WAL->>UI: Push Notification
end
end
Note over WSTR: Idempotent Processing
8. مدیریت داده (Data Management)
8.1 معماری داده
graph TB
subgraph "Source of Truth"
GH[Kuknos Blockchain<br/>Token Ownership<br/>🔒 Immutable]
end
subgraph "Application Database"
DB[(PostgreSQL<br/>Metadata + Config<br/>Users + Orders)]
end
subgraph "Cache Layer"
CACHE[(Redis<br/>Sessions + Temp Data<br/>Rate Limits)]
end
subgraph "Message Queue"
MQ[(RabbitMQ<br/>Events + Async Jobs)]
end
WAL[Wallet Service] --> GH
WAL --> DB
WAL --> CACHE
WSTR[Wallet Streamer] --> GH
WSTR --> DB
AUTH[Auth Service] --> DB
AUTH --> CACHE
MKT[Market Service] --> DB
MKT --> CACHE
ALL[All Services] -.->|Events| MQ
8.2 استراتژی ذخیرهسازی
| نوع داده | محل ذخیرهسازی | دلیل |
|---|---|---|
| مالکیت توکن | Blockchain | Source of Truth، غیرقابل تغییر، شفافیت کامل |
| اطلاعات کاربر | PostgreSQL | دادههای رابطهای، ACID |
| سفارشها و معاملات | PostgreSQL | پرسوجوهای پیچیده، Transaction Support |
| Session ها | Redis | سرعت بالا، TTL خودکار |
| Balance Cache | Redis | سرعت بالا برای Query های مکرر |
| Rate Limit | Redis | سرعت و TTL |
| رویدادها | RabbitMQ | Decoupling، Async Processing |
| Metadata تراکنش | PostgreSQL | رفرنس و جستجو (بلاکچین Source of Truth است) |
8.3 الگوی Stateless Ownership
اصل: مالکیت توکنها فقط روی بلاکچین ذخیره میشود.
❌ Shadow Ledger در Database وجود ندارد
✅ Database فقط Metadata نگهداری میکند
✅ موجودی واقعی همیشه از Blockchain خوانده میشود
✅ Cache فقط برای بهبود Performance است
مزایا:
- عدم Data Desync
- شفافیت کامل
- امنیت بالاتر
- قابلیت Audit
9. امنیت معماری (Security Architecture)
9.1 لایههای امنیتی
graph TB
subgraph "Layer 1: Network Security"
L1[Cloudflare WAF<br/>DDoS Protection<br/>TLS/SSL]
end
subgraph "Layer 2: Edge Security"
L2[Traefik<br/>TLS Termination<br/>Header Security]
end
subgraph "Layer 3: API Security"
L3[API Gateway<br/>JWT Validation<br/>Rate Limiting<br/>CORS]
end
subgraph "Layer 4: Service Security"
L4A[Auth Service<br/>RBAC + ABAC]
L4B[Business Services<br/>Input Validation]
end
subgraph "Layer 5: Data Security"
L5A[PostgreSQL<br/>Encryption at Rest<br/>SSL Connection]
L5B[Vault/KMS<br/>Private Key Management]
L5C[Blockchain<br/>Cryptographic Signing]
end
L1 --> L2
L2 --> L3
L3 --> L4A
L3 --> L4B
L4A --> L5A
L4B --> L5A
L4B --> L5B
L4B --> L5C
9.2 RBAC و ABAC
graph TB
subgraph "RBAC - Role Based"
ADMIN[Admin Role]
OPERATOR[Operator Role]
USER[User Role]
GUEST[Guest Role]
end
subgraph "ABAC - Attribute Based"
ATTR1[Project Owner]
ATTR2[KYC Level]
ATTR3[Account Age]
ATTR4[Transaction Volume]
end
subgraph "Permissions"
P1[Token Issuance]
P2[Market Management]
P3[User Management]
P4[Trading]
P5[View Public]
end
ADMIN --> P1
ADMIN --> P2
ADMIN --> P3
OPERATOR --> P2
USER --> P4
GUEST --> P5
ATTR1 --> P1
ATTR2 --> P4
10. مقیاسپذیری (Scalability)
10.1 استراتژیهای مقیاسپذیری
graph TB
subgraph "Horizontal Scaling"
LB[Load Balancer]
LB --> GW1[API Gateway 1]
LB --> GW2[API Gateway 2]
LB --> GW3[API Gateway N]
GW1 --> AUTH1[Auth Service 1]
GW1 --> AUTH2[Auth Service 2]
GW1 --> WAL1[Wallet Service 1]
GW1 --> WAL2[Wallet Service 2]
end
subgraph "Caching Strategy"
CACHE[(Redis Cluster<br/>Cache + Session)]
end
subgraph "Database Scaling"
MASTER[(PostgreSQL Master)]
REPLICA1[(Read Replica 1)]
REPLICA2[(Read Replica 2)]
MASTER -.->|Replication| REPLICA1
MASTER -.->|Replication| REPLICA2
end
GW1 --> CACHE
AUTH1 --> CACHE
WAL1 --> CACHE
AUTH1 -->|Write| MASTER
AUTH1 -->|Read| REPLICA1
WAL1 -->|Read| REPLICA2
10.2 مکانیزمهای بهبود Performance
| مکانیزم | کاربرد |
|---|---|
| Redis Caching | Balance Query، Session، Rate Limit |
| Database Indexing | بهبود Query Performance |
| Connection Pooling | کاهش overhead اتصال به DB |
| Async Processing | پردازشهای سنگین در پسزمینه |
| CDN | ارائه فایلهای استاتیک |
| Response Compression | کاهش حجم انتقال داده |
| API Response Caching | Cache کردن پاسخهای تکراری |
| Lazy Loading | بارگذاری تنها دادههای مورد نیاز |
11. تابآوری و Fault Tolerance
11.1 الگوهای تابآوری
graph TB
subgraph "Circuit Breaker Pattern"
CB[Circuit Breaker<br/>for Blockchain Calls]
CB -->|Closed| GH[Kuknos OK]
CB -->|Open| FALLBACK[Fallback Logic]
end
subgraph "Retry Pattern"
RETRY[Retry Logic<br/>with Exponential Backoff]
end
subgraph "Health Checks"
HC[Health Check Endpoints]
HC --> PROM[Prometheus Monitoring]
PROM --> ALERT[Alertmanager]
end
subgraph "Auto Recovery"
WSTR[Wallet Streamer]
WSTR -->|Connection Lost| RECONNECT[Auto Reconnect]
WSTR -->|Data Loss| REPLAY[Stream Replay]
end
11.2 مدیریت خرابی
| سناریو خرابی | راهکار |
|---|---|
| Blockchain Unavailable | Circuit Breaker + Retry + Fallback |
| Database Connection Lost | Connection Pool Retry + Health Check |
| Service Crash | Docker Auto-Restart |
| High Load | Auto Scaling (Horizontal) |
| Cache Miss | Fallback to Database |
| Message Queue Full | Backpressure + Dead Letter Queue |
| Network Partition | Timeout + Retry + Graceful Degradation |
12. مانیتورینگ و Observability
12.1 معماری مانیتورینگ
graph TB
subgraph "Application Services"
APIGW[API Gateway<br/>:8082/metrics]
AUTH[Auth Service<br/>:8082/metrics]
WAL[Wallet Service<br/>:8082/metrics]
MKT[Market Service<br/>:8082/metrics]
end
subgraph "Infrastructure Monitoring"
NODE[Node Exporter<br/>:9100]
CADV[cAdvisor<br/>:8080]
TFK[Traefik<br/>:8082/metrics]
GITEA[Gitea<br/>:3000/metrics]
end
subgraph "Blockchain Monitoring"
STELLAR[Stellar Core<br/>:9473]
end
subgraph "Metrics Collection"
PROM[Prometheus<br/>:9090<br/>Scrape: 15s]
APIGW -->|HTTP| PROM
AUTH -->|HTTP| PROM
WAL -->|HTTP| PROM
MKT -->|HTTP| PROM
NODE -->|HTTP| PROM
CADV -->|HTTP| PROM
TFK -->|HTTP| PROM
GITEA -->|HTTP| PROM
STELLAR -->|HTTP| PROM
end
subgraph "Visualization & Analysis"
GRAF[Grafana<br/>dash.darano.ir]
PROM --> GRAF
end
subgraph "Alerting Pipeline"
PROM -->|Alert Rules| ALERT[Alertmanager<br/>:9093]
ALERT --> SLACK[Slack<br/>Notifications]
ALERT --> EMAIL[Email<br/>Alerts]
end
subgraph "Multi-Server Monitoring"
N1[n1.mellatbam.com<br/>Node + cAdvisor + Stellar]
N2[n2.mellatbam.com<br/>Node + cAdvisor + Stellar]
N3[n3.mellatbam.com<br/>Node + cAdvisor + Stellar]
N1 --> PROM
N2 --> PROM
N3 --> PROM
end
12.2 اجزای سیستم مانیتورینگ
12.2.1 Prometheus (Metrics Collection)
نقش: جمعآوری و ذخیرهسازی Metrics از تمام سرویسها
پیکربندی:
global:
scrape_interval: 15s # هر 15 ثانیه یکبار
evaluation_interval: 15s # ارزیابی قوانین هشدار
external_labels:
monitor: 'darano-project'
rule_files:
- 'alert.rules' # قوانین هشدار
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093']
Jobs (منابع داده):
| Job Name | Target | Scrape Interval | توضیحات |
|---|---|---|---|
prometheus |
localhost:9090 | 15s | خود Prometheus |
cadvisor |
cadvisor:8080 n1/n2/n3.mellatbam.com:18080 |
15s | مانیتورینگ Container ها |
node-exporter |
node-exporter:9100 n1/n2/n3.mellatbam.com:9100 |
15s | متریکهای سیستم عامل |
traefik |
traefik:8082 | 10s | Reverse Proxy Metrics |
api:dev |
dev-api:8082 | 12s | API Gateway (Development) |
api:prod |
ktgateway:8082 | 12s | API Gateway (Production) |
gitea |
gitea:3000 | 15s | Git Server Metrics |
stellar-core |
n1/n2/n3.mellatbam.com:9473 | 10s | Kuknos Blockchain Nodes |
ذخیرهسازی:
- مسیر:
/mnt/hdd/prometheus(برای Persistence) - پیکربندی:
./prometheus/prometheus.yml
12.2.2 Grafana (Visualization)
نقش: نمایش بصری Metrics و ایجاد Dashboard
دسترسی:
- URL:
https://dash.darano.ir - Middleware: IP Allowlist (محدودیت دسترسی)
- Networks: db، gateway، back-tier، front-tier
Data Source:
datasources:
- name: Prometheus
type: prometheus
access: proxy
url: http://prometheus:9090
isDefault: true
editable: true
Dashboards موجود:
- Grafana_Dashboard.json: داشبورد اصلی سیستم
- Grafana_Dashboard_prom_2.json: داشبورد Prometheus نسخه 2
- System_Monitoring.json: مانیتورینگ سیستمی
- Grafana Dashboard With Service.json: داشبورد سرویسها
- HighLoadDashboard.json: داشبورد بار بالا
Provisioning:
- Datasources: خودکار از
/etc/grafana/provisioning/datasources/ - Dashboards: خودکار از
/etc/grafana/provisioning/dashboards/
12.2.3 Alertmanager (هشدار)
نقش: مدیریت و ارسال هشدارها
پیکربندی:
route:
receiver: 'slack'
receivers:
- name: 'slack'
# slack_configs:
# - send_resolved: true
# username: 'Darano Monitor'
# channel: '#alerts'
# api_url: 'WEBHOOK_URL'
قوانین هشدار فعال:
-
service_down (سرویس از دسترس خارج)
alert: service_down expr: up == 0 for: 2m severity: page description: "سرویس {{ $labels.instance }} از job {{ $labels.job }} بیش از 2 دقیقه Down است" -
high_load (بار بالای سیستم)
alert: high_load expr: node_load1 > 0.5 for: 2m severity: page description: "سرویس {{ $labels.instance }} تحت بار بالا است"
کانالهای اطلاعرسانی:
- Slack (پیکربندی شده اما غیرفعال)
- Email (قابل پیکربندی)
- Webhook (قابل توسعه)
12.2.4 Node Exporter (System Metrics)
نقش: جمعآوری متریکهای سیستم عامل
Metrics جمعآوری شده:
- CPU Usage (استفاده پردازنده)
- Memory Usage (مصرف حافظه)
- Disk I/O (ورودی/خروجی دیسک)
- Network I/O (ترافیک شبکه)
- Filesystem Usage (فضای دیسک)
- System Load (بار سیستم)
Deployment: Global mode (روی همه نودها)
Volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
12.2.5 cAdvisor (Container Metrics)
نقش: مانیتورینگ Container ها و منابع مصرفی
Metrics:
- Container CPU Usage
- Container Memory Usage
- Container Network I/O
- Container Filesystem Usage
- Container Process Count
Image: peytonyip/cadvisor (سازگار با سیستمهای جدید)
Deployment: Global mode
12.2.6 Stellar Core Monitoring
نقش: مانیتورینگ نودهای بلاکچین Kuknos
Targets:
- n1.mellatbam.com:9473
- n2.mellatbam.com:9473
- n3.mellatbam.com:9473
Metrics کلیدی:
- Node Health Status
- Ledger State
- Transaction Processing Rate
- Peer Connections
- Consensus State
12.3 معماری Multi-Server
graph TB
subgraph "Monitoring Server"
PROM[Prometheus<br/>Central Collector]
GRAF[Grafana<br/>Dashboards]
ALERT[Alertmanager<br/>Notifications]
end
subgraph "Server 1: n1.mellatbam.com"
N1_NODE[Node Exporter<br/>:9100]
N1_CAD[cAdvisor<br/>:18080]
N1_STELLAR[Stellar Core<br/>:9473]
end
subgraph "Server 2: n2.mellatbam.com"
N2_NODE[Node Exporter<br/>:9100]
N2_CAD[cAdvisor<br/>:18080]
N2_STELLAR[Stellar Core<br/>:9473]
end
subgraph "Server 3: n3.mellatbam.com"
N3_NODE[Node Exporter<br/>:9100]
N3_CAD[cAdvisor<br/>:18080]
N3_STELLAR[Stellar Core<br/>:9473]
end
N1_NODE -->|Scrape| PROM
N1_CAD -->|Scrape| PROM
N1_STELLAR -->|Scrape| PROM
N2_NODE -->|Scrape| PROM
N2_CAD -->|Scrape| PROM
N2_STELLAR -->|Scrape| PROM
N3_NODE -->|Scrape| PROM
N3_CAD -->|Scrape| PROM
N3_STELLAR -->|Scrape| PROM
PROM --> GRAF
PROM --> ALERT
12.4 Metrics کلیدی
12.4.1 Service-Level Metrics (SLI)
API Gateway:
http_requests_total- تعداد کل درخواستهاhttp_request_duration_seconds- زمان پاسخدهی (p50, p95, p99)http_requests_in_flight- درخواستهای در حال پردازشhttp_response_size_bytes- حجم پاسخها
Auth Service:
auth_login_attempts_total- تعداد تلاشهای ورودauth_login_success_total- ورودهای موفقauth_jwt_issued_total- JWT های صادر شدهauth_kyc_requests_total- درخواستهای KYC
Wallet Service:
wallet_transactions_total- تعداد تراکنشهاwallet_balance_queries_total- استعلام موجودیwallet_blockchain_calls_total- فراخوانیهای بلاکچینwallet_blockchain_latency_seconds- تأخیر بلاکچین
Market Service:
market_orders_total- تعداد سفارشهاmarket_trades_total- تعداد معاملاتmarket_order_book_depth- عمق Order Bookmarket_volume_total- حجم معاملات
12.4.2 Business Metrics (KPI)
users_registered_total- کاربران ثبتنام شدهusers_kyc_verified_total- کاربران احراز هویت شدهtokens_transferred_total- توکنهای منتقل شدهfiat_deposits_total- واریزهای ریالیfiat_withdrawals_total- برداشتهای ریالیrevenue_total- درآمد کل (کارمزد)
12.4.3 Infrastructure Metrics
System (Node Exporter):
node_cpu_seconds_total- استفاده CPUnode_memory_MemAvailable_bytes- حافظه در دسترسnode_filesystem_avail_bytes- فضای دیسکnode_network_receive_bytes_total- ترافیک ورودیnode_network_transmit_bytes_total- ترافیک خروجیnode_load1,node_load5,node_load15- بار سیستم
Containers (cAdvisor):
container_cpu_usage_seconds_total- استفاده CPU کانتینرcontainer_memory_usage_bytes- مصرف حافظه کانتینرcontainer_network_receive_bytes_total- ترافیک شبکه کانتینرcontainer_fs_usage_bytes- استفاده دیسک کانتینر
Blockchain (Stellar):
stellar_core_ledger_num- شماره Ledger فعلیstellar_core_peers- تعداد Peer هاstellar_core_tx_applied- تراکنشهای اعمال شدهstellar_core_sync_state- وضعیت همگامسازی
12.4.4 Database Metrics
pg_stat_database_numbackends- اتصالات فعالpg_stat_database_tup_returned- تعداد سطرهای خوانده شدهpg_stat_database_tup_inserted- سطرهای درج شدهpg_stat_database_conflicts- تعارضهاpg_database_size_bytes- حجم دیتابیس
12.5 Dashboards و Reports
12.5.1 System Overview Dashboard
- وضعیت کلی سرویسها (Up/Down)
- CPU، Memory، Disk usage
- Network traffic
- Active containers
12.5.2 Service Performance Dashboard
- Request rate per service
- Response time (latency)
- Error rate
- Throughput
12.5.3 Business Analytics Dashboard
- Daily active users
- Transaction volume
- Revenue (کارمزد)
- Conversion rates
12.5.4 Blockchain Monitoring Dashboard
- Stellar node health
- Ledger state
- Transaction processing
- Network consensus
12.6 Alert Rules و SLO
Service Level Objectives (SLO):
| Metric | SLO | Alert Threshold |
|---|---|---|
| API Availability | 99.5% | < 99.0% |
| API Latency (p95) | < 500ms | > 1000ms |
| Error Rate | < 0.5% | > 1% |
| Blockchain Sync | Real-time | Lag > 10 ledgers |
| Database Connections | < 80% | > 90% |
Alert Severity Levels:
- Critical (page): سرویس Down، Data Loss
- Warning (ticket): High Latency، High Load
- Info (log): Configuration Changes، Deployments
12.7 Logging Strategy
Log Levels:
- DEBUG: اطلاعات تفصیلی برای توسعه
- INFO: رویدادهای عادی
- ERROR: خطاهای قابل بازیابی
Log Storage:
- مسیر:
/var/log/یا./log/در هر سرویس - Format: JSON structured logs
- Rotation: روزانه
- Retention: 30 روز
Log Types:
debug-YYYY-MM-DD.loginfo-YYYY-MM-DD.logerrors-YYYY-MM-DD.log
12.8 Health Checks
هر سرویس یک endpoint برای Health Check دارد:
/health- وضعیت کلی سرویس/health/ready- آمادگی برای پذیرش ترافیک/health/live- زنده بودن سرویس
پاسخ نمونه:
{
"status": "healthy",
"timestamp": "2025-12-30T10:00:00Z",
"checks": {
"database": "ok",
"redis": "ok",
"blockchain": "ok"
}
}
13. نقشه راه معماری (Architecture Roadmap)
13.1 وضعیت فعلی (Current State)
معماری فعلی سامانه دارانو بر اساس الگوهای زیر پیادهسازی شده است:
✅ Microservices Architecture: سه سرویس اصلی (API Gateway، Auth، Wallet)
✅ Synchronous Communication: ارتباط RESTful/gRPC بین سرویسها
✅ Stateless Services: سرویسهای بدون وابستگی به Session
✅ Blockchain Integration: یکپارچگی کامل با Kuknos/Stellar
✅ Centralized Monitoring: Prometheus + Grafana + Alertmanager
✅ Scalable Infrastructure: Docker + Docker Compose
محدودیتهای فعلی: - ارتباط همزمان (Synchronous) بین تمام سرویسها - عدم وجود Event Bus مرکزی - Message Queue محدود (فقط یک queue در wallet service) - عدم پشتیبانی Event-Driven Architecture
استفاده محدود از RabbitMQ:
در حال حاضر، RabbitMQ به صورت بسیار محدود در Wallet Service پیادهسازی شده است:
- Queue Name:
transaction - Publisher: Wallet Service
- Consumer: هیچ consumer فعالی وجود ندارد
- Use Case: ذخیره metadata تراکنشها (اما عملاً استفاده نمیشود)
- Library:
github.com/streadway/amqp
// کد موجود در wallet/repository/queue/
type IQueue interface {
PublishTransactionMessage(ctx context.Context,
data *walletv1.InternalTransactionData) error
}
این پیادهسازی یک POC (Proof of Concept) برای آینده است و در حال حاضر تأثیر عملیاتی ندارد.
13.2 هدف آینده: Event-Driven Architecture
13.2.1 چرا Event-Driven؟
مزایای مورد انتظار:
- Loose Coupling: کاهش وابستگی مستقیم بین سرویسها
- Scalability: مقیاسپذیری بهتر با async processing
- Resilience: افزایش تابآوری در برابر خرابی
- Flexibility: امکان افزودن سرویسهای جدید بدون تغییر موجود
- Real-time Processing: پردازش بلادرنگ رویدادها
- Audit Trail: ثبت کامل تاریخچه رویدادها
Use Cases مناسب:
- اعلانرسانی (Notifications)
- پردازش تراکنشهای بلاکچین
- همگامسازی داده بین سرویسها
- Analytics و Reporting
- Workflow Automation
13.2.2 معماری هدف (Target Architecture)
graph TB
subgraph "Current: Synchronous"
UI1[UI] -->|REST| APIGW1[API Gateway]
APIGW1 -->|gRPC| AUTH1[Auth Service]
APIGW1 -->|gRPC| WAL1[Wallet Service]
APIGW1 -->|gRPC| MKT1[Market Service]
MKT1 -->|gRPC| WAL1
end
subgraph "Future: Event-Driven"
UI2[UI] -->|REST| APIGW2[API Gateway]
APIGW2 -->|gRPC| AUTH2[Auth Service]
APIGW2 -->|gRPC| WAL2[Wallet Service]
APIGW2 -->|gRPC| MKT2[Market Service]
subgraph "Event Bus"
KAFKA[Apache Kafka<br/>or RabbitMQ]
end
AUTH2 -.->|Events| KAFKA
WAL2 -.->|Events| KAFKA
MKT2 -.->|Events| KAFKA
WSTR2[Wallet Streamer] -.->|Events| KAFKA
KAFKA -.->|Subscribe| NOTIF[Notification Service]
KAFKA -.->|Subscribe| ANALYTICS[Analytics Service]
KAFKA -.->|Subscribe| AUDIT[Audit Service]
end
13.2.3 Event Types (انواع رویدادها)
Domain Events:
| Event | Publisher | Consumers | Priority |
|---|---|---|---|
UserRegistered |
Auth Service | Notification, Analytics | High |
UserKYCVerified |
Auth Service | Wallet, Market, Notification | High |
WalletCreated |
Wallet Service | Analytics, Audit | Medium |
TokenTransferred |
Wallet Service | Market, Notification, Analytics | High |
DepositConfirmed |
Wallet Streamer | Wallet, Notification | Critical |
OrderPlaced |
Market Service | Wallet, Notification | High |
TradeExecuted |
Market Service | Wallet, Analytics, Notification | High |
PaymentReceived |
Wallet Service | Market, Notification | High |
System Events:
| Event | Publisher | Consumers | Priority |
|---|---|---|---|
ServiceHealthChanged |
All Services | Monitoring | Critical |
ConfigurationChanged |
Admin Panel | All Services | High |
MaintenanceScheduled |
Admin Panel | All Services | Medium |
13.2.4 Technology Stack (فناوریهای پیشنهادی)
Option 1: Apache Kafka (توصیه میشود برای مقیاس بالا) - ✅ High Throughput - ✅ Distributed & Scalable - ✅ Event Sourcing Support - ✅ Strong Ordering Guarantees - ❌ Operational Complexity
Option 2: RabbitMQ (توصیه میشود برای شروع) - ✅ Easy to Setup - ✅ Multiple Messaging Patterns - ✅ Management UI - ✅ Good for SMB Scale - ❌ Lower Throughput vs Kafka
Option 3: NATS (سبکوزن) - ✅ Very Lightweight - ✅ Cloud Native - ✅ Low Latency - ❌ Limited Features
پیشنهاد: شروع با RabbitMQ و migration به Kafka در صورت نیاز
13.2.5 Migration Strategy (استراتژی مهاجرت)
Phase 1: Foundation (فاز ۱ - پایهگذاری) - 2-3 ماه - نصب و پیکربندی RabbitMQ در محیط توسعه - ایجاد Event Schema و Contracts - پیادهسازی Event Publisher Library - پیادهسازی Event Consumer Framework - مستندسازی Patterns و Best Practices
Phase 2: Pilot Implementation (فاز ۲ - پایلوت) - 1-2 ماه - انتخاب یک Use Case ساده (Notifications) - پیادهسازی Publisher/Consumer برای این Use Case - تست و ارزیابی Performance - مستندسازی Lessons Learned
Phase 3: Gradual Migration (فاز ۳ - مهاجرت تدریجی) - 4-6 ماه - مهاجرت تدریجی Use Case های دیگر - حفظ Backward Compatibility با Sync Calls - Dual-Mode Operation (هم Sync هم Async) - مانیتورینگ و بهینهسازی
Phase 4: Full Event-Driven (فاز ۴ - کامل) - 3-4 ماه - حذف تدریجی Sync Calls غیرضروری - افزودن سرویسهای جدید (Analytics، Audit، etc.) - Event Sourcing برای برخی سرویسها - CQRS Pattern در صورت نیاز
تایملاین کلی: 12-18 ماه
13.2.6 Challenges & Risks (چالشها و ریسکها)
چالشهای فنی: - Eventual Consistency (سازگاری نهایی) - Message Ordering (ترتیب پیامها) - Duplicate Message Handling (Idempotency) - Dead Letter Queue Management - Schema Evolution
ریسکهای عملیاتی: - Increased Complexity - Debugging Difficulty - Monitoring & Observability - Team Learning Curve
راهکارها: - استفاده از Saga Pattern برای Distributed Transactions - پیادهسازی Idempotent Consumers - استفاده از Message ID برای Deduplication - مانیتورینگ جامع با Distributed Tracing - آموزش تیم و مستندسازی کامل
13.3 سایر اهداف آینده
13.3.1 CQRS (Command Query Responsibility Segregation)
وضعیت: هدف آینده
کاربرد: - جداسازی مدل خواندن از نوشتن - بهینهسازی Query Performance - مقیاسپذیری مستقل Read/Write
تایملاین: پس از پیادهسازی Event-Driven
13.3.2 GraphQL API
وضعیت: هدف آینده
مزایا: - کاهش Over-fetching - بهبود Developer Experience - Strongly Typed Schema
تایملاین: Q2 آینده (اختیاری)
13.3.3 Service Mesh
وضعیت: هدف آینده
فناوری: Istio یا Linkerd
مزایا: - Traffic Management - Security (mTLS) - Observability بهتر
تایملاین: در صورت مقیاس بالا (>10 services)
13.3.4 Kubernetes Migration
وضعیت: هدف آینده
دلایل: - Auto-scaling - Self-healing - Better Resource Management
تایملاین: پس از رشد قابل توجه
13.4 Decision Matrix (ماتریس تصمیمگیری)
| Feature | Priority | Complexity | Impact | Timeline |
|---|---|---|---|---|
| Event-Driven Architecture | High | Medium | High | 6-12 months |
| RabbitMQ Implementation | High | Low | High | 2-3 months |
| Notification Service | Medium | Low | Medium | 1-2 months |
| Analytics Service | Medium | Medium | Medium | 3-4 months |
| CQRS Pattern | Low | High | Medium | 12+ months |
| GraphQL API | Low | Medium | Low | 6+ months |
| Service Mesh | Low | High | Medium | 18+ months |
| Kubernetes | Low | High | Low | 12+ months |