Apa Itu System Design
System design adalah sebuah proses merancang sistem yang mencakup aspek-aspek seperti kebutuhan bisnis atau pengguna, skalabilitas, keamanan, keandalan, ketersediaan, dan performa. Dalam melakukan system design, kita harus melakukan evaluasi atas persyaratan dan kebutuhan bisnis atau pengguna dan memilih teknologi dan arsitektur yang tepat untuk membangun solusi yang efektif dan efisien.
Dalam merancang sistem yang baik, kita juga perlu mempertimbangkan faktor-faktor penting seperti bagaimana sistem dapat diakses dengan aman, mudah diandalkan, dan cepat. Dengan merancang sistem secara baik, kita dapat menyelesaikan masalah dengan cara yang lebih sistematis dan memilih solusi terbaik untuk mengembangkan sistem yang efektif dan efisien.
Selain itu, perlu diperhatikan juga bagaimana sistem dapat diakses dan dimengerti oleh tim teknis dan non-teknis, serta bagaimana sistem dapat dikembangkan dan dipelihara dalam jangka panjang. Oleh karena itu, system design haruslah menjadi proses yang matang dan terorganisir untuk menghasilkan sistem yang berkualitas dan dapat memenuhi kebutuhan bisnis atau pengguna.
Ada beberapa komponen dasar yang di gunakan atau di bahas dalam system design. Beberapa diantaranya adalah sebagai berikut:
1. Load Balancer
Sebuah load balancer membagi lalu lintas masuk ke beberapa server, membantu mendistribusikan beban kerja dan mencegah satu server menjadi terlalu terbebani.
Contoh: Nginx, HAProxy, F5
2. Web Server
Sebuah web server meng-handle permintaan HTTP yang masuk dan memberikan respons kepada klien.
Contoh: Apache HTTP Server, Microsoft IIS, Nginx
3. Application Server
Sebuah application server menyediakan platform untuk menjalankan logika bisnis tertentu, seperti mengeksekusi permintaan pengguna dan berinteraksi dengan database.
Contoh: Apache Tomcat, JBoss/Wildfly, IBM WebSphere, NodeJS/ExpressJS
4. Database Server
Sebuah database server menyimpan dan mengambil data yang dibutuhkan oleh aplikasi.
Contoh: MySQL, PostgreSQL, Oracle Database. Lihat lebih banyak disini.
5. Caching Server
Sebuah caching server menyimpan data yang sering diakses di memori, membantu meningkatkan performa dan mengurangi beban pada database.
Contoh: Redis, Memcached, Varnish. Lihat lebih banyak disini.
6. Message Queue
Sebuah message queue memungkinkan komunikasi asynchronous antara bagian-bagian berbeda pada sistem, membantu memisahkan komponen dan meningkatkan skalabilitas.
Contoh: RabbitMQ, Apache Kafka, ActiveMQ
7. Distributed File System
Sebuah distributed file system menyediakan sistem berkas bersama di beberapa server, memungkinkan manajemen data yang lebih mudah dan redundansi.
Contoh: Hadoop HDFS, GlusterFS, Ceph
8. Content Delivery Network (CDN)
Sebuah CDN adalah jaringan server yang terdistribusi di seluruh dunia yang menyimpan cache dan mengirimkan konten, membantu meningkatkan kecepatan dan keandalan pengiriman konten. Platform pengiriman konten memungkinkan pengiriman konten yang efisien, seperti aliran video atau audio, di seluruh sistem yang didistribusikan, seringkali menggunakan alat seperti Wowza atau Layanan Media Elemental AWS.
Contoh: Akamai, Cloudflare, Amazon CloudFront
9. Identity and Access Management (IAM) system
Sebuah sistem IAM mengelola otentikasi dan otorisasi pengguna, membantu memastikan bahwa hanya pengguna yang diotorisasi yang memiliki akses ke sistem.
Contoh: Okta, Ping Identity, Auth0
10. API gateway
Sebuah API gateway menyediakan satu titik masuk untuk aplikasi klien mengakses API sistem, membantu memastikan implementasi kebijakan keamanan dan mengelola lalu lintas.
Contoh: Amazon API Gateway, Kong, Apigee
11. Service Mesh
Sebuah service mesh adalah lapisan infrastruktur jaringan yang mengelola komunikasi layanan-ke-layanan pada sistem terdistribusi, menyediakan fitur seperti pengelolaan lalu lintas, penyeimbangan beban, penemuan layanan, dan keamanan.
Contoh: Istio, Linkerd, Consul
Kesimpulan
Seperti itulah beberapa komponen dasar yang sering kali di bahas dalam System Design Interview maupun dalam praktiknya ketika akan membangun sistem yang scalable, tahan lama, aman, dan juga bisa memiliki performa yang cepat. Pada dasarnya komponen-komponen tersebut dipadukan dengan pemahaman bisnis, pengguna, sistem terdistribusi, computer networking, computer organization, dan sistem operasi. Untuk mempelajari lebih lanjut System Design kita bisa belajar dari https://github.com/donnemartin/system-design-primer