Komponen Utama dalam System Design yang Wajib Dipahami

Komponen Utama dalam System Design yang Wajib Dipahami

Ketika membuat aplikasi sederhana, kita mungkin cukup memikirkan tampilan, kode program, dan database. Namun, ketika aplikasi mulai memiliki banyak pengguna dan fitur, cara berpikir seperti itu sudah tidak cukup.

Developer perlu memikirkan bagaimana setiap bagian aplikasi saling terhubung, bagaimana data diproses, bagaimana server menangani banyak request, hingga bagaimana sistem tetap berjalan ketika terjadi masalah.

Inilah alasan System Design penting untuk dipahami.

System Design bukan hanya materi untuk software architect atau developer berpengalaman. Pemula yang mulai memahami konsep ini juga akan lebih mudah melihat sebuah aplikasi secara keseluruhan, bukan hanya dari potongan kode.

Pada artikel ini, kita akan membahas komponen utama dalam System Design dengan bahasa sederhana, lengkap dengan contoh agar lebih mudah dipahami.

Apa Itu System Design?

System Design adalah proses merancang struktur, komponen, hubungan, dan cara kerja sebuah sistem sebelum sistem tersebut dikembangkan.

Sederhananya, System Design bisa diibaratkan seperti membuat denah rumah.

Sebelum membangun rumah, kita perlu menentukan:

  • Di mana kamar berada?
  • Di mana dapur dibuat?
  • Bagaimana jalur listrik?
  • Bagaimana saluran air bekerja?
  • Bagaimana setiap ruangan saling terhubung?

Begitu juga dengan aplikasi.

Sebelum coding dimulai, developer perlu menentukan bagaimana frontend, backend, database, API, server, cache, dan komponen lainnya akan bekerja bersama.

Mengapa Komponen System Design Penting?

Setiap komponen dalam sistem memiliki tugas yang berbeda. Jika satu bagian tidak dirancang dengan baik, bagian lain juga bisa ikut terkena dampaknya.

Contohnya, sebuah aplikasi memiliki database yang lambat. Walaupun tampilan frontend sudah bagus dan server memiliki spesifikasi tinggi, pengguna tetap bisa merasakan aplikasi yang lambat.

Dengan memahami komponen System Design, developer bisa menentukan:

  • Teknologi yang sesuai
  • Alur data
  • Cara komunikasi antar sistem
  • Cara meningkatkan performa
  • Cara menangani banyak pengguna
  • Cara menjaga keamanan
  • Cara membuat sistem mudah dikembangkan

Komponen Utama dalam System Design

Berikut beberapa komponen penting yang biasanya perlu diperhatikan ketika merancang sebuah sistem.

1. Client atau Frontend

Client adalah bagian aplikasi yang digunakan langsung oleh pengguna.

Pada aplikasi web, client biasanya berupa browser seperti Chrome, Edge, atau Firefox.

Contohnya ketika membuka website toko online, pengguna dapat melihat:

  • Produk
  • Gambar
  • Harga
  • Keranjang
  • Form login
  • Tombol checkout

Bagian tersebut biasanya dibuat menggunakan teknologi seperti:

  • HTML
  • CSS
  • JavaScript
  • React
  • Vue
  • Angular

Secara sederhana, alurnya seperti ini:

User
  |
  v
Frontend
  |
  v
Backend

Frontend bertugas menampilkan informasi dan mengirimkan permintaan kepada backend.

2. Backend

Kalau frontend adalah bagian yang dilihat pengguna, backend adalah bagian yang bekerja di belakang layar.

Backend menangani berbagai proses seperti:

  • Login
  • Registrasi
  • Pengolahan data
  • Validasi
  • Perhitungan transaksi
  • Authentication
  • Authorization
  • Komunikasi dengan database

Beberapa teknologi yang sering digunakan untuk backend antara lain:

  • PHP
  • Laravel
  • Node.js
  • Python
  • Java
  • Go
  • C#

Contohnya ketika pengguna melakukan login:

User
 ↓
Frontend
 ↓
Backend
 ↓
Database

Backend menerima username dan password, kemudian memeriksa data tersebut ke database.

3. API

API (Application Programming Interface) menjadi penghubung antara satu bagian sistem dengan bagian lainnya.

Misalnya frontend membutuhkan daftar produk dari backend.

Frontend dapat mengirim request:

GET /api/products

Kemudian backend mengambil data dari database dan memberikan response.

Frontend
    |
    | Request
    v
   API
    |
    v
 Backend
    |
    v
Database

API sangat penting dalam System Design karena memungkinkan berbagai aplikasi atau layanan berkomunikasi tanpa harus mengetahui cara kerja internal masing-masing.

Contohnya:

  • Website menggunakan API pembayaran
  • Aplikasi mobile menggunakan API backend
  • Sistem toko menggunakan API untuk mengambil data produk
  • Website menggunakan API untuk mengirim notifikasi

4. Database

Database adalah tempat sistem menyimpan data.

Hampir semua aplikasi membutuhkan database, terutama aplikasi yang memiliki data pengguna dan transaksi.

Contohnya aplikasi toko online dapat menyimpan:

users
products
orders
payments
customers

Beberapa database yang populer antara lain:

  • MySQL
  • PostgreSQL
  • MariaDB
  • MongoDB
  • Redis
  • Microsoft SQL Server

Dalam System Design, tidak cukup hanya menentukan database yang digunakan.

Developer juga perlu memikirkan:

  • Struktur tabel
  • Relasi antar tabel
  • Index
  • Backup
  • Replication
  • Kapasitas penyimpanan
  • Kecepatan query

Database yang dirancang dengan baik dapat membantu aplikasi tetap cepat dan mudah dikembangkan.

5. Server

Server merupakan komputer atau lingkungan komputasi yang menjalankan aplikasi dan melayani request dari pengguna.

Ketika pengguna membuka sebuah website, browser mengirim request ke server.

Secara sederhana:

User
 ↓
Internet
 ↓
Server
 ↓
Application
 ↓
Database

Server dapat berupa server fisik maupun cloud server.

Dalam sistem yang masih kecil, satu server mungkin sudah cukup.

Namun, ketika pengguna bertambah, kebutuhan server juga dapat meningkat.

6. Load Balancer

Ketika sebuah aplikasi memiliki banyak pengguna, satu server mungkin tidak mampu menangani seluruh request.

Solusinya adalah menggunakan beberapa server.

Masalahnya, bagaimana request pengguna dibagi ke server-server tersebut?

Di sinilah Load Balancer digunakan.

Contohnya:

              User
                |
                v
          Load Balancer
          /     |      \
         v      v       v
     Server 1 Server 2 Server 3

Load balancer bertugas mendistribusikan traffic ke beberapa server.

Manfaatnya antara lain:

  • Mengurangi beban server
  • Meningkatkan availability
  • Membantu scalability
  • Menghindari satu server menjadi terlalu sibuk

7. Cache

Cache adalah penyimpanan sementara yang digunakan untuk menyimpan data yang sering diakses.

Tujuannya adalah mempercepat proses pengambilan data.

Misalnya halaman website sering menampilkan daftar produk populer.

Tanpa cache:

User
 ↓
Backend
 ↓
Database
 ↓
Backend
 ↓
User

Jika menggunakan cache:

User
 ↓
Backend
 ↓
Cache
 ↓
User

Jika data tersedia di cache, backend tidak perlu selalu mengambilnya dari database.

Teknologi yang sering digunakan untuk caching antara lain:

  • Redis
  • Memcached

Cache sangat berguna untuk meningkatkan performa aplikasi, terutama ketika data yang sama sering diminta oleh banyak pengguna.

8. Storage

Selain database, aplikasi terkadang membutuhkan storage untuk menyimpan file.

Contohnya:

  • Foto profil
  • Dokumen
  • Video
  • File PDF
  • Gambar produk
  • Backup

Database biasanya tidak menjadi pilihan utama untuk menyimpan file berukuran besar.

Karena itu, sistem dapat menggunakan object storage atau media penyimpanan khusus.

Contoh sederhananya:

User
 ↓
Backend
 ├──> Database
 |
 └──> File Storage

Database menyimpan informasi file, sedangkan file sebenarnya disimpan di storage.

9. Message Queue

Tidak semua proses harus dilakukan secara langsung.

Beberapa pekerjaan bisa diproses secara asynchronous menggunakan Message Queue.

Contohnya ketika pengguna melakukan pembelian.

Sistem mungkin perlu:

  1. Menyimpan pesanan
  2. Mengirim email
  3. Mengirim notifikasi
  4. Membuat invoice
  5. Memproses pekerjaan lainnya

Daripada semuanya dilakukan dalam satu request, beberapa pekerjaan dapat dimasukkan ke queue.

User
 ↓
Backend
 ↓
Message Queue
 ↓
Worker
 ↓
Proses

Dengan pendekatan ini, pengguna tidak harus menunggu semua pekerjaan selesai sebelum mendapatkan response.

Contoh teknologi message queue:

  • RabbitMQ
  • Apache Kafka
  • Amazon SQS

10. Authentication dan Authorization

Keamanan merupakan bagian penting dalam System Design.

Ada dua konsep yang sering digunakan, yaitu Authentication dan Authorization.

Authentication

Authentication digunakan untuk memastikan siapa pengguna yang sedang mengakses sistem.

Contohnya:

Username + Password
        ↓
Authentication
        ↓
User berhasil login

Authorization

Authorization menentukan apa saja yang boleh dilakukan oleh pengguna.

Contohnya:

Admin
 ├── Kelola user
 ├── Kelola produk
 └── Lihat laporan

Operator
 ├── Kelola transaksi
 └── Lihat produk

Dengan demikian, pengguna tidak otomatis bisa mengakses semua fitur hanya karena sudah login.

11. Monitoring dan Logging

Aplikasi yang sudah berjalan tetap perlu dipantau.

Monitoring membantu developer mengetahui kondisi sistem.

Misalnya:

  • CPU terlalu tinggi
  • RAM hampir penuh
  • Database lambat
  • Server down
  • Jumlah request meningkat

Sedangkan logging digunakan untuk mencatat kejadian yang terjadi di dalam sistem.

Contohnya:

[10:20] User login
[10:21] Order dibuat
[10:22] Payment berhasil
[10:23] Email dikirim

Ketika terjadi error, log dapat membantu developer mencari penyebab masalah.

12. Security

Keamanan tidak boleh hanya dipikirkan setelah aplikasi selesai dibuat.

Dalam System Design, security perlu dipertimbangkan sejak awal.

Beberapa hal yang perlu diperhatikan antara lain:

  • HTTPS
  • Password hashing
  • Access control
  • Input validation
  • API authentication
  • Rate limiting
  • Perlindungan terhadap SQL Injection
  • Perlindungan terhadap XSS
  • Pengelolaan secret dan credential

Tujuannya adalah melindungi sistem dan data pengguna.

Contoh System Design Sederhana

Sekarang kita coba gabungkan beberapa komponen tadi dalam sebuah aplikasi toko online.

Arsitekturnya bisa dibuat seperti berikut:

                    USER
                      |
                      v
                 FRONTEND
                      |
                      v
                LOAD BALANCER
                  /       \
                 v         v
             SERVER 1   SERVER 2
                  \       /
                   \     /
                    v   v
                     API
                      |
          +-----------+-----------+
          |                       |
          v                       v
      DATABASE                  CACHE
          |
          v
       STORAGE

             API
              |
              v
        MESSAGE QUEUE
              |
              v
            WORKER

Masing-masing komponen mempunyai tugas sendiri.

Frontend menampilkan aplikasi kepada pengguna.

Load Balancer membagi request ke beberapa server.

Backend/API menjalankan proses aplikasi.

Database menyimpan data terstruktur.

Cache mempercepat akses data tertentu.

Storage menyimpan file.

Message Queue menangani pekerjaan asynchronous.

Worker memproses pekerjaan yang masuk ke queue.

Dengan pembagian seperti ini, sistem dapat dibuat lebih terstruktur dan lebih mudah dikembangkan.

Apakah Semua Aplikasi Membutuhkan Semua Komponen?

Tidak.

Ini merupakan hal penting yang sering disalahpahami ketika belajar System Design.

Aplikasi sederhana tidak harus langsung menggunakan:

  • Microservices
  • Load Balancer
  • Redis
  • Kafka
  • Kubernetes
  • Multiple Database
  • Message Queue

Misalnya aplikasi sekolah sederhana bisa saja hanya membutuhkan:

Browser
   ↓
PHP
   ↓
MySQL

Sudah cukup.

Ketika aplikasi berkembang, barulah komponen tambahan dapat digunakan sesuai kebutuhan.

Jadi, System Design bukan tentang membuat sistem serumit mungkin.

System Design adalah tentang membuat rancangan yang tepat untuk kebutuhan sistem.

Bagaimana Cara Menentukan Komponen yang Dibutuhkan?

Sebelum memilih teknologi, sebaiknya pahami kebutuhan aplikasinya terlebih dahulu.

Beberapa pertanyaan yang bisa digunakan:

1. Berapa banyak pengguna?

Aplikasi dengan 100 pengguna tentu berbeda dengan aplikasi yang memiliki jutaan pengguna.

2. Seberapa besar data?

Apakah hanya menyimpan data teks atau juga membutuhkan gambar, video, dan dokumen?

3. Seberapa cepat sistem harus merespons?

Jika aplikasi membutuhkan response cepat, caching mungkin diperlukan.

4. Apakah sistem harus selalu tersedia?

Untuk aplikasi yang sangat penting, availability perlu menjadi perhatian utama.

5. Apakah aplikasi akan berkembang?

Jika aplikasi diperkirakan memiliki banyak fitur di masa depan, struktur sistem perlu dibuat agar mudah dikembangkan.

Kesalahan yang Sering Dilakukan Saat Belajar System Design

Ada beberapa kesalahan yang sering dilakukan pemula.

Terlalu Cepat Memilih Teknologi

Jangan memilih teknologi hanya karena sedang populer.

Pahami dulu masalah yang ingin diselesaikan.

Membuat Sistem Terlalu Rumit

Aplikasi sederhana tidak harus menggunakan arsitektur yang sangat kompleks.

Gunakan teknologi sesuai kebutuhan.

Mengabaikan Database

Database sering dianggap hanya sebagai tempat menyimpan data.

Padahal desain database sangat memengaruhi performa dan scalability aplikasi.

Tidak Memikirkan Keamanan

Authentication, authorization, validasi input, dan perlindungan data harus dipikirkan sejak awal.

Tidak Memikirkan Pertumbuhan Sistem

Sistem yang berjalan baik hari ini belum tentu tetap baik ketika pengguna bertambah.

Karena itu, scalability perlu dipertimbangkan sesuai kebutuhan.

Kesimpulan

Komponen utama dalam System Design terdiri dari berbagai bagian yang bekerja bersama untuk membangun sebuah sistem yang baik. Beberapa komponen penting yang perlu dipahami adalah frontend, backend, API, database, server, load balancer, cache, storage, message queue, authentication, monitoring, dan security.

Tidak semua aplikasi membutuhkan seluruh komponen tersebut. Pemilihannya harus disesuaikan dengan kebutuhan, jumlah pengguna, ukuran data, performa, keamanan, serta rencana pengembangan aplikasi.

Bagi developer pemula, memahami komponen-komponen ini merupakan langkah penting sebelum masuk ke pembahasan System Design yang lebih kompleks.

Semakin terbiasa memahami hubungan antar-komponen, semakin mudah juga untuk melihat bagaimana sebuah aplikasi bekerja secara keseluruhan, bukan hanya dari sisi coding.

Leave a Reply

Your email address will not be published. Required fields are marked *