Tugas 6 (Studi kasus 1 - Desain Sistem Restauran)

 

Kelompok : 

1. Fathin Muhashibi Putra (5025211229)

1. M Armand Giovani (5025211054)

Kelas  : PPL - A


Studi Kasus 1 - Desain Sistem Restauran

     Tugas yang diberikan pada mata kuliah Perancangan Perangkat Lunak (A), yaitu terkait Studi kasus 1 - Desain Sistem Restauran. Berikut merupakan dokumentasinya :

Studi Kasus :

Dalam industri restoran modern, memberikan pengalaman bersantap yang luar biasa membutuhkan lebih dari sekedar masakan enak. Sistem Manajemen Restoran telah muncul sebagai bahan rahasia untuk operasi yang efisien dan kepuasan pelanggan.

Kami akan merancang sistem manajemen restoran di mana pengguna dapat dengan mudah menemukan restoran terdekat. Mereka dapat dengan mudah mendapatkan menu, menjelajahi peringkat, dan memesan secara online dengan mudah, dengan fleksibilitas tambahan dalam memilih antara makan di tempat atau pesan antar ke lokasi mana pun dalam rentang yang ditentukan.


HIGH LEVEL DESIGN (HLD)

A. Functionally Requirements    

    Berikut functionally requirements dari sistem restauran :

  1. Pencarian Restoran: Sistem harus memungkinkan pelanggan untuk mencari restoran berdasarkan lokasi, jenis masakan, atau nama restoran.
  2. Melihat Menu: Pelanggan harus dapat melihat menu restoran yang dipilih, dengan opsi untuk melihat deskripsi item, harga, dan foto.
  3. Pemesanan: Pelanggan harus dapat memesan makanan melalui platform, dengan opsi untuk menyesuaikan pesanan mereka (misalnya, menambah atau menghapus item).
  4. Manajemen Pesanan Restoran: Staf restoran harus dapat melihat pesanan yang ditempatkan, mengonfirmasi pesanan, dan memperbarui status pesanan (dalam proses, siap untuk pengiriman, selesai, dll.).
  5. Pembaruan Menu: Staf restoran harus dapat mengedit dan memperbarui menu mereka, termasuk menambahkan, menghapus, atau memperbarui item.
  6. Rating Restoran: Pelanggan harus dapat melihat dan memberi peringkat restoran berdasarkan pengalaman mereka.
  7. Pilihan Dine-In atau Pengiriman: Pelanggan harus dapat memilih apakah mereka ingin makan di tempat atau memesan pengiriman.
  8. Manajemen Pesanan Dapur: Staf dapur harus dapat melihat pesanan yang masuk, mempersiapkan makanan sesuai dengan pesanan, dan mengkonfirmasi ketika makanan sudah siap.
  9. Pengemudi Pengiriman: Pengemudi pengiriman harus dapat melihat pesanan pengiriman yang telah ditugaskan kepada mereka, serta navigasi menuju lokasi pengiriman.
  10. Pelacakan Pesanan: Pelanggan harus dapat melacak status pesanan mereka secara real-time, dari pemrosesan hingga pengiriman.
  11. Metode Pembayaran: Pelanggan harus dapat memilih dari berbagai metode pembayaran yang tersedia, seperti kartu kredit, transfer bank, atau pembayaran tunai saat pengiriman.
  12. Notifikasi Pesanan: Sistem harus mengirimkan notifikasi kepada pelanggan tentang konfirmasi pesanan, pembaruan status pesanan, dan estimasi waktu pengiriman.
  13. Manajemen Akun Pelanggan: Pelanggan harus dapat membuat dan mengelola akun mereka, termasuk informasi pribadi, alamat pengiriman, dan riwayat pesanan.
  14. Manajemen Akun Staf: Staf restoran harus memiliki akses terbatas ke sistem, dengan izin yang sesuai berdasarkan peran mereka (seperti manajer restoran, koki, pengemudi pengiriman).
  15. Laporan dan Analisis: Sistem harus dapat menghasilkan laporan tentang performa penjualan, popularitas item menu, dan kepuasan pelanggan untuk membantu restoran dalam pengambilan keputusan.


B. Non-Functionally Requirements    

    Berikut non-functionally requirements dari sistem restauran :

  1. Skalabilitas (Scalability) : Sistem harus mampu menangani peningkatan jumlah pengguna, pesanan, dan restoran tanpa penurunan kinerja yang signifikan. Ini harus dapat diskalakan secara horizontal dengan menambahkan lebih banyak server atau sumber daya saat permintaan tumbuh. Selain itu, arsitektur harus mendukung pengembangan modular, memungkinkan penambahan fitur dan fungsionalitas baru dengan lancar.

  2. Keandalan (Reliability) : Keandalan memastikan pemrosesan pesanan yang konsisten dan akurat, meminimalkan risiko kesalahan atau kegagalan sistem. Ini termasuk mekanisme penanganan kesalahan yang kuat, proses validasi data, dan strategi failover untuk mengurangi gangguan yang mungkin terjadi. Pemeliharaan dan pemantauan sistem secara teratur harus dilakukan untuk mengidentifikasi dan memecahkan masalah secara proaktif.

  3. Ketersediaan Tinggi (High Availability): Sistem harus berusaha untuk uptime yang hampir kontinu untuk memastikan akses tanpa gangguan bagi pelanggan dan staf restoran. Ini membutuhkan infrastruktur redundan, mekanisme penyeimbangan beban, dan rencana pemulihan bencana untuk mengurangi dampak kegagalan perangkat keras, gangguan jaringan, atau peristiwa yang tidak terduga lainnya. Perjanjian Tingkat Layanan (SLA) harus dibuat untuk menentukan downtime yang dapat diterima dan waktu tanggapan.

  4. Konsistensi Kuat (Strong Consistency): Setiap pembaruan atau perubahan yang dibuat pada sistem, seperti pembaruan menu, penyesuaian harga, atau perubahan lokasi, harus tersebar dengan cepat dan konsisten di semua komponen yang relevan. Ini memastikan bahwa pelanggan, staf restoran, dan pengemudi pengiriman memiliki akses ke informasi terbaru setiap saat. Penggunaan basis data terdistribusi, mekanisme caching, dan teknik sinkronisasi real-time dapat membantu mempertahankan konsistensi kuat di seluruh sistem.

  5. Keamanan (Security): Perlindungan data sensitif, seperti informasi pelanggan, rincian pembayaran, dan riwayat pesanan, sangat penting. Sistem harus menerapkan mekanisme otentikasi, otorisasi, dan enkripsi yang kuat untuk mencegah akses atau pelanggaran data yang tidak sah. Kepatuhan dengan standar industri dan regulasi, seperti PCI DSS untuk pemrosesan pembayaran, harus dipastikan.

  6. Kinerja (Performance): Sistem harus dioptimalkan untuk penggunaan sumber daya yang efisien dan interaksi pengguna yang responsif. Ini termasuk meminimalkan laten dalam pengambilan informasi restoran, pemrosesan pesanan, dan pelacakan pengiriman. Pengujian kinerja harus dilakukan secara teratur untuk mengidentifikasi bottleneck dan mengoptimalkan komponen sistem secara sesuai.

  7. Kemudahan Penggunaan (Usability): Antarmuka pengguna harus intuitif dan ramah pengguna, memenuhi kebutuhan baik pelanggan maupun staf restoran. Navigasi yang jelas, pesan umpan balik informatif, dan desain responsif sangat penting untuk pengalaman pengguna yang positif. Fitur aksesibilitas juga harus dipertimbangkan untuk mengakomodasi pengguna dengan kecacatan.




C. Capacity Assumptions

    Berikut Capacity Assumptions dari sistem restauran :

Asumsi untuk desain sistem restoran :

  • 10 million restaurants
  • Daily active users = 100 million
  • Active users per second = 1160 users/sec (kurang lebih)
  • Average Orders per minute = 250,000/min
  • Average Orders per second = 4200 orders/second (kurang lebih)
  • Peak orders = 2 * Average orders per minute = 500,000 orders/minute
Estimasi Storage 

  • Each customer row in DB is 1 KB (with address, profile info etc.)
  • Each restaurant = 2 MB (details, menus, photos etc.)
  • Each order = 1 KB.

Total storage yang dibutuhkan:
  • 100 million customers x 1KB per user = 100 GB
  • 10 million restaurants x 2 MB per restaurant = 20 TB
  • 500,000 orders per minute = 72 million orders per day (kurang lebih)
  • 72 million orders per day x 1 KB per order = 72 GB per day

Dengan asumsi kami maintain pesanan selama 3 tahun terakhir:
72 GB per day x 365 days x 3 years = 77TB (kurang lebih)

D. Necessary Components  
    Berikut necessary components dari sistem restauran :

  1. Antarmuka Klien (Client Interface)

Pelanggan berinteraksi dengan sistem melalui aplikasi seluler, antarmuka web, atau aplikasi desktop.


  1. Pembebanan Seimbang (Load Balancer)

Dengan mendistribusikan lalu lintas masuk secara merata ke beberapa server, pembebanan seimbang meningkatkan ketersediaan tinggi dan mengoptimalkan kinerja keseluruhan.


  1. Layanan Otentikasi dan Registrasi (Authentication and Registration Services)

Layanan ini menangani otentikasi dan registrasi pengguna. Semua pengguna, termasuk pelanggan, admin restoran, dan agen pengiriman, menjalani proses otentikasi dan registrasi.


  1. Basis Data (Database)

Menyimpan data pengguna, detail restoran, menu, pesanan, dan metadata, basis data berfungsi sebagai repositori sentral untuk sistem.


  1. Layanan Pembayaran (Payment Services)

Bertanggung jawab atas pengelolaan semua data dan layanan terkait pembayaran.


  1. Layanan Penempatan Pesanan (Order Placement Services)

Layanan ini bertugas menempatkan pesanan di restoran dan mengelola semua proses terkait pesanan.


  1. Layanan Pengiriman (Delivery Services)

Difokuskan pada operasi terkait pengiriman, layanan ini menemukan agen pengiriman dan memfasilitasi pelacakan paket real-time menggunakan Layanan Peta.


  1. Layanan Admin Restoran (Restaurant Admin Services)

Memungkinkan restoran untuk melihat dan mengelola pesanan yang ditempatkan, layanan ini juga memungkinkan admin untuk memodifikasi menu, harga, dan gambar makanan.


  1. Layanan Peta (Map Services)

Melacak lokasi pengguna dan agen pengiriman, Layanan Peta berkolaborasi dengan Layanan Pengiriman dan pelanggan untuk pelacakan lokasi real-time.




D. Secara Global/Umum
    Berikut gambaran High Level Design dari sistem restauran secara global/umum:



LOW LEVEL DESIGN (LLD) 


A. Database   

    Pada sistem ini kami menggunakan MySQL untuk databse. Berikut database dari sistem restauran : 

  • CDM dan PDM 
  • SQL code :

```

CREATE TABLE customer (

    customer_id INT AUTO_INCREMENT PRIMARY KEY,

    customer_name VARCHAR(255),

    email VARCHAR(255),

    phone_number VARCHAR(20),

    address TEXT

);


CREATE TABLE restaurant (

    restaurant_id INT AUTO_INCREMENT PRIMARY KEY,

    rating INT

);


CREATE TABLE delivery_agent (

    agent_id INT AUTO_INCREMENT PRIMARY KEY,

    payment_details_id INT,

    phone_no VARCHAR(20),

    email VARCHAR(255),

    vehicle_number VARCHAR(20),

    address TEXT

);


CREATE TABLE orders (

    order_id INT AUTO_INCREMENT PRIMARY KEY,

    customer_id INT,

    restaurant_id INT,

    agent_id INT,

    time_stamp TIMESTAMP,

    is_delivery INT,

    delivery_location TEXT,

    items_id INT,

    delivery_price DECIMAL(10,2),

    items_price DECIMAL(10,2),

    transaction_id INT,

    order_status INT,

    FOREIGN KEY (customer_id) REFERENCES customer(customer_id),

    FOREIGN KEY (restaurant_id) REFERENCES restaurant(restaurant_id),

    FOREIGN KEY (agent_id) REFERENCES delivery_agent(agent_id)

);


CREATE TABLE restaurant_rating (

    restaurant_id INT PRIMARY KEY,

    rating INT,

    FOREIGN KEY (restaurant_id) REFERENCES restaurant(restaurant_id)

);


CREATE TABLE agent_rating (

    agent_id INT PRIMARY KEY,

    rating INT,

    FOREIGN KEY (agent_id) REFERENCES delivery_agent(agent_id)

);


```


Communicating with the server   

    Dalam sistem ini menggunakan API RESTful untuk Sistem Manajemen Restoran memiliki banyak keuntungan karena kesederhanaan, antarmuka yang seragam, dan keadaan tanpa keadaan. Desain REST yang langsung ke depan, menggunakan metode HTTP standar, memudahkan penggunaan dan pengembangan, mempromosikan interoperabilitas di berbagai platform dan bahasa pemrograman.


    Pendekatan berbasis sumber daya (resource-centric) sangat cocok dengan entitas dalam sistem, dan keadaan tanpa keadaan memungkinkan skalabilitas horizontal, yang penting untuk menangani lalu lintas tinggi yang diantisipasi dalam sistem manajemen restoran. Selain itu, API RESTful mendukung fleksibilitas dalam format data, penanganan kesalahan yang terstandarisasi melalui kode status HTTP, dan mekanisme penyimpanan sementara, yang berkontribusi pada komunikasi yang efisien, identifikasi kesalahan, dan peningkatan kinerja.



1. User Registration

  • Endpoint:

POST /api/users/register

  • Request:

{

“username”: “salik”,

“password”: “secure_password”,

“email”: “”xyz@gmail.com”,

“address”: “123 Main St, City”,

“phone”: “+1234567890”

}

  • Response:

{


“message”: “User registered successfully”,

“userId”: “12345”,

“token”: “authentication_token”


}



2. User Registration

  • Endpoint:

POST /api/users/login

  • Request:

{


“username”: “salik”,

“password”: “secure_password”


}

  • Response:

{


“message”: “Login successful”,

“userId”: “12345”,

“token”: “authentication_token”


}



3. Restaurant Search and Order Placement


a. Search Nearby Restaurants

  • Endpoint:

GET /api/restaurants/search?location=City&cuisine=Italian&rating=4

  • Response:

[


{


“restaurantId”: “abc123”,


“name”: “Italian Delight”,


“location”: “456 Main St, City”,


“cuisine”: “Italian”,


“rating”: 4.5


},


{


“restaurantId”: “def456”,


“name”: “Pizza Palace”,


“location”: “789 Main St, City”,


“cuisine”: “Italian”,


“rating”: 4.2


}


]



b.  Place an Order

  • Endpoint:

POST /api/orders/place

  • Request:

{


“userId”: “12345”,


“restaurantId”: “abc123”,


“items”: [


{


“itemId”: “item1”,


“quantity”: 2


},


{


“itemId”: “item2”,


“quantity”: 1


}


],


“deliveryPreference”: “delivery”,


“paymentMethod”: “credit_card”


}

  • Response:

{


“orderId”: “order123”,

“message”: “Order placed successfully”,

“totalAmount”: 25.99


}



Restaurant Management:

View Orders for a Restaurant

  • Endpoint:

GET /api/restaurants/orders?restaurantId=abc123

  • Response:

[


{


“orderId”: “order123”,


“userId”: “user456”,


“items”: [


{


“itemId”: “item1”,


“quantity”: 2


},


{


“itemId”: “item2”,


“quantity”: 1


}


],


“totalAmount”: 25.99,


“status”: “pending”


},


// Additional orders…


]


Delivery and Real-time Tracking:

Track Delivery Order

  • Endpoint:

GET /api/delivery/track?orderId=order123


  • Response:

{


“orderId”: “order123”,


“status”: “in_transit”,


“location”: {


“latitude”: 37.7749,


“longitude”: -122.4194


}


}



B. Teknologi

    Salah satu teknologi yang digunakan dalam sistem restoran ini, yaitu teknologi microservise, sebagai berikut :

Microservice

1. Klien (Client)

    Pelanggan memulai permintaan ke pembebanan seimbang untuk berbagai layanan, seperti registrasi pengguna, pencarian restoran, dan penempatan pesanan. Selain itu, agen pengiriman dan admin restoran menggunakan pembebanan seimbang untuk mengirim permintaan registrasi atau otentikasi.

2. Pembebanan Seimbang (Load Balancer)

    Komponen penting ini memantau kesehatan server, mengalihkan lalu lintas dalam kejadian kegagalan untuk memastikan downtime minimal. Tidak hanya meningkatkan keamanan dengan mengurangi serangan DDoS, tetapi juga memainkan peran penting dalam penskalaan aplikasi. Tersedia dalam bentuk perangkat keras, perangkat lunak, dan berbasis awan, pembebanan seimbang berfungsi sebagai pengelola lalu lintas, mengarahkan aliran dalam infrastruktur TI modern.

3. Layanan API (API Services)

    Melayani dua fungsi utama, layanan API menangani otentikasi pengguna, memastikan hanya pengguna yang diotorisasi yang mengakses sistem. Setelah diotentikasi, layanan ini bertindak sebagai perantara untuk komunikasi dengan berbagai mikro layanan seperti penempatan pesanan, pembayaran, dan pencarian. Misalnya, mengimplementasikan Kafka untuk antrian pesan memastikan komunikasi yang dapat diandalkan antara mikro layanan.

4. Layanan Otentikasi (Authentication Services)

    Menawarkan fungsionalitas otentikasi pengguna yang kuat dan pendaftaran pengguna, layanan ini sangat penting untuk keamanan dan memasukkan pengguna baru. Proses registrasi memberikan ID pengguna unik dan menyimpan informasi pengguna yang penting, termasuk nama, alamat, dan rincian pembayaran, secara aman dalam basis data sistem.

5. Layanan Pembayaran (Payment Services)

    Menawarkan berbagai pilihan pembayaran, Layanan Pembayaran memastikan fleksibilitas dan kenyamanan dalam menyelesaikan tagihan. Mereka memvalidasi pembayaran, mengonfirmasi ketepatan transaksi dan ketersediaan dana. Proses ini mencegah kesalahan, penipuan, atau pembayaran yang gagal, memastikan pengalaman pembayaran yang lancar dan terpercaya. Misalnya, mengintegrasikan dengan gateway pembayaran seperti Stripe atau PayPal meningkatkan keamanan transaksi.

6. CDN

    Khusus dalam menyimpan aset statis seperti gambar hidangan dan menu, CDN mengurangi beban pada server utama, meningkatkan aksesibilitas konten. Ditempatkan secara strategis, CDN memastikan pengambilan data yang cepat, meminimalkan laten, dan mempercepat pengiriman konten. Misalnya, menggunakan Akamai atau Amazon CloudFront untuk layanan CDN mengoptimalkan waktu pengisian halaman menu, meningkatkan pengalaman pengguna secara keseluruhan.

7. Layanan Pencarian Restoran (Restaurant Search Services)

    Memungkinkan pengguna untuk mencari restoran berdasarkan kriteria seperti rating dan masakan, layanan ini memanfaatkan ElasticSearch untuk pengambilan data yang cepat dalam basis data terdistribusi. Misalnya, pengguna dapat dengan mudah menemukan restoran Italia terbaik di sekitar mereka dengan memanfaatkan kemampuan pencarian yang kuat dari ElasticSearch.

8. Layanan Penempatan Pesanan (Order Placement Services)

    Mengelola seluruh siklus hidup pesanan, layanan ini memberikan informasi kepada restoran dan memperbarui pelanggan tentang status pesanan. Antrian Pesanan memfasilitasi komunikasi dengan Layanan Restoran, sementara permintaan pengiriman termasuk interaksi dengan Layanan Pengiriman. Mengimplementasikan Apache Kafka sebagai pialang pesan memastikan pemrosesan pesanan yang efisien dan komunikasi antara layanan.

9. Layanan Pengiriman (Delivery Services)

    Memfasilitasi pengambilan pesanan, layanan ini membentuk komunikasi yang lancar antara agen dan pelanggan, memungkinkan pelacakan pesanan secara real-time. Mereka sangat penting dalam memastikan pengiriman yang berhasil dan mengumpulkan umpan balik pelanggan. Misalnya, Layanan Pengiriman dengan efisien mengkoordinasikan pengiriman makanan dari restoran ke pelanggan menggunakan alat pelacakan real-time seperti Google Maps.

10. Layanan Peta (Map Services)

    Mencari agen terdekat dan melacak pesanan, Layanan Peta memberikan pembaruan lokasi real-time kepada pelanggan. Menggunakan teknologi seperti Google Maps, ini menghubungkan pengguna ke layanan untuk pelacakan pesanan melalui long polling, meminimalkan lalu lintas sambil memberikan pembaruan tepat waktu.

11. Antrian Pemberitahuan (Notification Queue)

    Layanan yang ingin mengirim pemberitahuan kepada pengguna mendorong pesan ke Antrian Pemberitahuan, dengan Layanan Pemberitahuan mengonsumsi permintaan tersebut, kemudian mengirimkan pemberitahuan kepada pengguna. Misalnya, Kafka dapat digunakan untuk mengimplementasikan antrian pemberitahuan yang kuat dan dapat diskalakan.

12. Cache

    Menyimpan permintaan yang sedang berlangsung untuk pengambilan cepat, cache memberikan akses yang cepat kepada pelanggan dan layanan mikro lainnya. Cache Redis, misalnya, secara efisien menyimpan dan mengambil data yang sering diakses, meningkatkan kinerja sistem secara keseluruhan.

13. Basis Data (Database)

    Menyimpan data pengguna, informasi restoran, dan menu, basis data dibagi dan direplikasi di berbagai server. Sharding horizontal, yang diwakili oleh MySQL untuk konsistensi tinggi dalam data pengguna dan transaksi, dilengkapi oleh NoSQL untuk metadata non-kritis seperti rating restoran dan detail agen pengiriman. Misalnya, MongoDB dapat digunakan karena fleksibilitasnya dalam menangani data yang tidak terstruktur seperti rating dan informasi agen.



C. Interaksi user-interface

    Salah satu teknologi yang digunakan dalam sistem restoran ini, yaitu teknologi microservise, sebagai berikut :


  1. Pembayaran

  1. Home

  1. Menu

  1. Side Menu

                      5. Tracking Pesanan




REFERENSI :

Comments

Popular posts from this blog

Tugas 2: Membuat Aplikasi Hello World menggunakan Jetpack Compose (PPB - A)

Tugas 1: Review Perkembangan Teknologi Perangkat Bergerak (PPB - A)

ETS - Evaluasi Tengah Semester: Proyek - Mobile Front End