abdibedaso / Order-Delivery-System-Microservices-Architecture

Food ordering and food delivery platform for online customers. Facilitate door-to-door delivery

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Order-Delivery-System-Microservices-Architecture

Food delivery system

  • Food ordering and food delivery platform for the online customers.
  • Facilitate door-to-door delivery

Main actors of the system

  • Customers/consumers
  • Restaurant
  • Drivers
  • Stripe

Architecture

Desktop

Functional Requirements

  • Customers can

    • Search for restaurants based on the restaurant name and menu items
    • Place an order
    • Receive notifications about the status of an order once placed
    • Track the status of the order on the app
    • Pay for the order.
  • Restaurant can

    • Create their profile (onboarding) and create/refresh/add new menu items,
    • Update the status of order
  • Driver can

    • Receive notifications about the available orders in the area, from which they can choose.
    • Know when the order is available for pickup.

Non-Functional Requirements

  • Latency: Hungry users will not like to wait to see the menu/ restaurant details, so the search functionality should be very fast. The ordering experience should also not have high latency and must be seamless and fast. 
  • Availability: High availability is desirable for the best experience of a customer and the restaurants that are processing the order
  • High Throughput: The system should be able to handle high peak load without problems or failures.

Back off envelope calculation

  • Let's assume we are getting users from 25M area codes
    • On average, each area code can have 100 restaurants.
    • Each restaurant can have 15 dishes that can be served.
    • Total records of dishes = 25M * 100 * 15 = 37.5B
    • Number of customers: 100M
  • If each customer on an average places 2 orders every day, number of orders in a day = 200M
  • The peak time of orders will vary usually based on the day of the week. For example, weekends might have more orders than on weekdays. Peak times could be somewhere around noon or at dinner time in each region.
  • In general, the searching of menus/restaurants will be read-heavy and the ordering functionality will be write-heavy.

Technologies

java spring kafka rabbitMQ nginx android flutter mysql mongodb cassandra kubernetes istio gcp docker git postman grafana keyclock

Deployment

Desktop

Security

Desktop Desktop

UI

Desktop Desktop Desktop

About

Food ordering and food delivery platform for online customers. Facilitate door-to-door delivery


Languages

Language:Java 99.3%Language:Dockerfile 0.7%