ویرگول
ورودثبت نام
Akhtar Sabzi
Akhtar Sabzi
Akhtar Sabzi
Akhtar Sabzi
خواندن ۴ دقیقه·۴ ماه پیش

food

Food Ordering System Design (High-Level)

این طراحی برای یک سیستم مشابه Uber Eats، DoorDash یا SnappFood و در سطح مصاحبه Senior Java Developer / Software Architect تهیه شده است.


1. Requirements

Functional Requirements

  • User Registration/Login

  • Restaurant Management

  • Menu Management

  • Browse Restaurants

  • Search Food

  • Shopping Cart

  • Place Order

  • Payment

  • Restaurant Accept/Reject Order

  • Delivery Assignment

  • Driver Tracking

  • Order Status

  • Notification

  • Rating & Review


Non Functional Requirements

  • High Availability

  • Low Latency

  • Scalability

  • Fault Tolerance

  • Data Consistency

  • Security

  • Real-time Tracking

  • Horizontal Scaling


2. Capacity Estimation

Assume

20 Million Users 2 Million Daily Active Users 500K Orders/Day Peak 500 Orders/sec Average 50 Orders/sec

3. High-Level Architecture

+----------------------+ | Mobile/Web Client | +----------+-----------+ | HTTPS / REST | +------------v-------------+ | API Gateway / LoadBalancer| +------------+-------------+ | +-------------+-------------+-------------+--------------+ | | | | | | | | | | +-------v--+ +--------v---+ +-------v----+ +------v-----+ +------v------+ | UserSvc | |CatalogSvc | |OrderSvc | |PaymentSvc | |DeliverySvc | +-------+--+ +--------+---+ +-------+----+ +------+-----+ +------+------+ | | | | | +-------------+-------------+-------------+--------------+ | Kafka / Event Bus | +-------------------+---------------------+ | | | +---------v------+ +--------v------+ +---------v------+ |NotificationSvc | |InventorySvc | |AnalyticsSvc | +----------------+ +---------------+ +----------------+ | Redis Cache Cluster | +-------------------+----------------------+ | | | PostgreSQL Elasticsearch Object Storage

4. C4 Context Diagram

+----------------+ | Customer | +-------+--------+ | | Food Ordering Platform | +------------------+--------------------+ | | | +-----v-----+ +------v------+ +------v------+ |Restaurant | |Payment | |Delivery | |Owner | |Gateway | |Driver | +-----------+ +-------------+ +-------------+

5. C4 Container Diagram

+-------------------+ | API Gateway | +---------+---------+ | +----------+----------+----------+----------+ | | | | | +----v---+ +----v---+ +----v---+ +----v---+ +----v----+ |UserSvc | |MenuSvc | |OrderSvc| |CartSvc | |Payment | +----+---+ +----+---+ +----+---+ +----+---+ +----+----+ | | | | | +----------+----------+----------+----------+ | Kafka | +----------------+----------------+ | | +------v------+ +--------v------+ |Notification | |DeliverySvc | +-------------+ +---------------+

6. Entity Diagram

User ---- id name phone address Restaurant ------------ id name location status Menu ---- id restaurantId title MenuItem --------- id menuId name price Cart ---- id userId CartItem --------- id cartId menuItemId quantity Order ------ id userId restaurantId status totalPrice OrderItem --------- id orderId menuItemId quantity price Payment -------- id orderId status transactionId Driver ------- id name vehicle Delivery --------- id driverId orderId status

Relationship

User | |1 | |N Order Restaurant | |1 | |N Menu Menu | |1 | |N MenuItem Order | |1 | |N OrderItem Driver | |1 | |N Delivery

7. Sequence Diagram (Place Order)

Customer | | Browse Menu | v Catalog Service | | Add Cart | v Cart Service | | Checkout | v Order Service | | Validate Menu | v Inventory Service | | Reserve Items | v Payment Service | | Charge Customer | v Payment Gateway | | Success | v Kafka | +------------------------------+ | | v v Restaurant Service Notification Service | | Accept Order | v Delivery Service | | Assign Driver | v Driver | | Deliver | v Customer

8. Database Design

DataStorageUserPostgreSQLRestaurantPostgreSQLMenuPostgreSQLOrdersPostgreSQLCartRedisSearchElasticsearchImagesObject Storage


9. Kafka Topics

order-created payment-success payment-failed restaurant-accepted restaurant-rejected driver-assigned driver-location delivery-started delivery-completed notification-event

10. Cache Strategy

Redis

Restaurant Cache Menu Cache Popular Foods Shopping Cart Session Rate Limiter Driver Location

11. Sharding Strategy

Shard = hash(userId)

Orders

Shard = hash(orderId)

Restaurants

Shard = City

12. Order State Machine

Created ↓ Payment Pending ↓ Paid ↓ Restaurant Accepted ↓ Preparing ↓ Driver Assigned ↓ Picked Up ↓ On The Way ↓ Delivered ↓ Completed

Failure Path

Created ↓ Payment Failed ↓ Cancelled

13. ADR (Architecture Decision Records)

ADR-001

Decision: استفاده از Microservices.

Reason: جداسازی دامنه‌های کسب‌وکار (کاربر، منو، سفارش، پرداخت و ارسال)، استقرار مستقل و مقیاس‌پذیری بهتر.


ADR-002

Decision: استفاده از PostgreSQL برای سفارش‌ها.

Reason: سفارش و پرداخت نیازمند تراکنش‌های ACID و سازگاری قوی هستند.


ADR-003

Decision: استفاده از Redis برای سبد خرید.

Reason: داده‌های Cart موقتی هستند و نیاز به دسترسی بسیار سریع دارند.


ADR-004

Decision: استفاده از Kafka برای رویدادها.

Reason: جداسازی سرویس‌ها، پردازش غیرهمزمان و قابلیت Retry.


ADR-005

Decision: استفاده از Elasticsearch برای جستجو.

Reason: جستجوی سریع بر اساس نام غذا، رستوران، دسته‌بندی و فیلترها.


ADR-006

Decision: ذخیره تصاویر در Object Storage.

Reason: کاهش بار پایگاه داده، ادغام با CDN و مقیاس‌پذیری بالا.


14. Failure Scenarios

FailureSolutionPayment Gateway DownRetry + Circuit Breaker + Outbox PatternRestaurant OfflineCancel Order یا پیشنهاد رستوران جایگزینDriver CancelledReassign DriverKafka FailureReplication + Dead Letter QueueRedis FailureCache Rebuild + Fallback to DBDatabase FailureReplication + Automatic FailoverDuplicate OrderIdempotency KeyInventory Race ConditionOptimistic Lock یا Reservation Mechanism


15. Trade-offs

ChoiceProsConsPostgreSQLACID، تراکنش قویمقیاس‌پذیری افقی دشوارترRedis Cartسرعت بسیار بالاداده‌ها موقتی هستندKafkaپردازش غیرهمزمان، مقیاس‌پذیریپیچیدگی عملیاتیElasticsearchجستجوی سریع و انعطاف‌پذیرنیاز به همگام‌سازی با دیتابیسMicroservicesتوسعه و استقرار مستقلپیچیدگی ارتباطات و مانیتورینگEvent-Drivenانعطاف‌پذیری و توسعه‌پذیریاشکال‌زدایی و ردیابی رویدادها دشوارتر

این سند، اجزای کلیدی مورد انتظار در یک مصاحبه طراحی سیستم را پوشش می‌دهد: نیازمندی‌ها، معماری سطح بالا، نمودارهای C4، ERD، Sequence Diagram، طراحی پایگاه داده، استراتژی کش، شاردینگ، ماشین حالت سفارش، ADRها، سناریوهای خطا و تحلیل Trade-offها.

api gateway
۰
۰
Akhtar Sabzi
Akhtar Sabzi
شاید از این پست‌ها خوشتان بیاید