User Authentication
One-to-One Chat
Group Chat
Online Presence
Read/Delivered Status
Typing Indicator
Push Notification
Media Upload
Message History
Search Conversation
High Availability (99.99%)
Horizontal Scalability
Low Latency (<100ms)
Eventual Consistency
Fault Tolerance
Secure Communication
Multi Region
Millions of concurrent connections
فرض کنیم
100 Million Users 10 Million Daily Active Users 1 Million Concurrent Connections Average Message Size = 1 KB 100 Messages/User/Day
Traffic
10M ×100 =1 Billion Messages/Day ≈11,600 Message/sec Average Peak ≈100,000 Message/sec
بنابراین طراحی باید حداقل
100K Write/sec
را پاسخ دهد.
+----------------+ | Mobile/Web App | +-------+--------+ | HTTPS / WebSocket | +---------v---------+ | Global LoadBalancer| +---------+---------+ | +-------------------+------------------+ | | +-------v------+ +---------v-------+ | API Gateway | | WebSocket Gateway| +-------+------+ +---------+--------+ | | | | | Persistent Connections | | +-------v--------------------------------------v------+ | Chat Service Cluster | +--------+---------+----------+-----------+-----------+ | | | | | | | | | | | | +--------v+ +----v----+ +---v----+ +----v-----+ |Presence | |Message | |Group | |Media | |Service | |Service | |Service | |Service | +----+----+ +----+----+ +----+---+ +----+-----+ | | | | | | | | | +------v-----------v----------+ | | Kafka / Event Bus | | +-------------+---------------+ | | +----v-----+ +-----v------+ |Redis | |Notification| |Cluster | |Service | +----+-----+ +-----+------+ | | | APNS / FCM | +----v----------------------------+ | Cassandra / Scylla / DynamoDB | +---------------------------------+ Media | S3 / Object Storage
+----------------------+ | User | +----------+-----------+ | | Uses Chat System | +----------v-----------+ | Chat Platform | +----------+-----------+ | +--------------------+--------------------+ | | | | | | +-----v----+ +------v-----+ +-------v------+ |Push | |Object | |Identity | |Provider | |Storage | |Provider | |(FCM/APNS) | |(S3) | |OAuth/JWT) | +-----------+ +------------+ +--------------+
+------------------+ | API Gateway | +--------+---------+ | +-----------+-----------+-----------+ | | | | | | | | +-----v--+ +-----v---+ +-----v---+ +-----v-----+ |AuthSvc | |ChatSvc | |GroupSvc | |PresenceSvc| +-----+--+ +-----+---+ +-----+---+ +-----+-----+ | | | | +-----------+-----------+-----------+ | Kafka Cluster | +--------------+---------------+ | | +------v------+ +-------v------+ |Notification | |Analytics | +-------------+ +--------------+ | +-------v--------+ | Cassandra | +----------------+
User A | | Send Message | v Gateway | | Authenticate | v Chat Service | | Persist Message | v Database | | OK | v Kafka | +----------------------------+ | | v v Notification Presence Service | | | | v | Recipient Online? | | | |Yes | | | v | WebSocket Push | | | Recipient Offline | v Push Notification
+-------------+ | User | +-------------+ | id | | username | | status | | lastSeen | +------+------+ | |1 | |N +------v------+ |Conversation | +-------------+ | id | | type | | createdAt | +------+------+ | |1 | |N +------v------+ | Message | +--------------+ | id | | senderId | | content | | type | | sentAt | | status | +------+-------+ | | |N | |1 +------v------+ | Attachment | +-------------+ | id | | url | | size | | mimeType | +-------------+ Conversation 1 | N ConversationMember N | 1 User
DataStorageMessagesCassandra / ScyllaUser ProfilePostgreSQLPresenceRedisCacheRedis ClusterMediaS3SearchElasticsearch
message-created message-delivered message-read user-online user-offline typing-event notification-event media-uploaded
Redis
Online Users Conversation Cache Unread Counter Recent Messages Session Token Rate Limiter
Conversation Based
Shard = hash(conversationId)
مزایا
تمام پیامهای یک گفتگو روی یک شارد
Query ساده
ترتیب پیامها حفظ میشود
Client ↓ Gateway ↓ Chat Service ↓ Kafka ↓ Database ↓ Redis Update ↓ Notification ↓ Receiver
استفاده از WebSocket برای ارتباط Real-Time.
Reason
Full Duplex
Latency پایین
کاهش هزینه نسبت به Polling
ذخیره پیامها در Cassandra/ScyllaDB.
Reason
Write Throughput بسیار بالا
Horizontal Scaling
Partitioning داخلی
مناسب Time-Series Data
استفاده از Kafka برای Event Streaming.
Reason
Loose Coupling
Retry
Replay
Back Pressure
Event Driven Architecture
استفاده از Redis برای Presence.
Reason
عملیات In-Memory
TTL
سرعت بسیار بالا
Media در Object Storage.
Reason
کاهش حجم دیتابیس
CDN Integration
ارزانتر
Scalability بالا
Horizontal Scaling برای Chat Service.
Reason
Stateless Service
Auto Scaling
Load Distribution
FailureSolutionChat Service DownLoad Balancer + Auto ScalingKafka DownReplication + ISRRedis DownRedis Cluster + ReplicaDatabase Node DownMulti ReplicaGateway FailureMultiple Gateway InstancesRegion FailureMulti-Region DeploymentMessage DuplicationIdempotency KeyMessage OrderingPartition by ConversationId
ChoiceProsConsWebSocketReal-time، تأخیر کممدیریت Connection دشوارCassandraنوشتن بسیار سریع، مقیاسپذیرJoin محدود، Consistency نهاییKafkaجداسازی سرویسها، تحمل بارپیچیدگی عملیاتیRedisسرعت بالادادهها عمدتاً در حافظهMicroservicesمقیاسپذیری و استقلالپیچیدگی شبکه و مانیتورینگEvent-Drivenانعطافپذیری و توسعهپذیریDebug و Trace دشوارتر
این طراحی در سطح مصاحبههای Senior Java Developer / Software Architect جامع است و تقریباً تمام نمودارهای کلیدی مورد انتظار (High-Level Architecture، C4 Context، C4 Container، Sequence Diagram، Entity Diagram، ADR، سناریوهای خطا و Trade-offها) را پوشش میدهد.