BAB 2 Arsitektur Sistem¶
Arsitektur sistem adalah kerangka kerja yang mendefinisikan bagaimana sebuah komponen atau modul dalam sebuah sistem akan berinteraksi satu sama lain. Bagaimana data mengalir antar bagian, dan bagaimana aplikasi dikelola secara keseluruhan. Pemilihan arsitektur yang tepat sangat penting karena akan mempengaruhi cara sistem dibangun, dipelihara, dan dikembangkan di masa depan. Beberapa konsep arsitektur sistem yang dapat dipilih sebagai dasar struktur sistem sebelum pengembangan dimulai, masing-masing dengan kelebihan dan kekurangan yang perlu dipertimbangkan.
2.1. Pertimbangan Memilih Arsitektur¶
Dalam memilih arsitektur sistem, biasanya mempertimbangkan beberapa faktor seperti berikut:
- Kompleksitas aplikasi
- Apakah aplikasi ini relatif sederhana atau kompleks ?
- Apakah sistem akan terus berkembang ?
- Kebutuhan kinerja dan skalabilitas
- Seberapa penting aplikasi dapat berkembang secara horizontal atau menangani lonjakan permintaan pengguna ?
- Apakah aplikasi akan besar dengan ribuan pengguna atau cukup untuk pengguna internal ?
- Kemudahan pemeliharaaan
- Apakah aplikasi akan dikembangkan dan dikelola oleh tim yang kecil atau besar ?
- Seberapa terampil tim pengembangan ?
- Waktu dan biaya pengembangan
- Seberapa cepat aplikasi perlu diluncurkan ?
- Bagaimana anggaran untuk pengembangan ?
- Kebutuhan fleksibilitas
- Apakah aplikasi mungkin akan berkembang atau diubah fungsinya di masa depan ?
- Jika akan diubah, seberapa sering aplikasi perlu diperbaruhi ?
- Integrasi dengan sistem lain
- Apakah aplikasi memerlukan integrasi dengan sistem lain ?
- Fitur apa saja yang akan diintegrasikan ?
2.2 Pilihan Arsitektur Sistem¶
Berikut beberapa arsitektur sistem yang populer saat ini:
2.2.1. Monolitik¶
Arsitektur monolitik merupakan arsitektur klasik dalam pengembangan aplikasi, dimana seluruh aplikasi dikembangkan dalam satu unit kode dasar yang mencakup seluruh fungsionalitas aplikasi. Antarmuka pengguna, logika bisnis, dan lapisan data digabung dalam satu kesatuan aplikasi yang dijalankan. Setiap perubahan atau pembaruan akan mempengaruhi seluruh aplikasi.
Kelebihan dari arsitektur monolitik ini adalah :
- Mudah dikembangkan dan dideploy sehingga ideal untuk aplikasi kecil atau sederhana dan tim kecil.
- Biaya lebih rendah karena membutuhkan lebih sedikit sumber daya dan mudah dikelola.
- Peforma terpusat karena semua bagian jadi satu kesatuan.
Sedangkan untuk kekurangannya:
- Kurang fleksibel, dalam hal ini kaitannya saat melakukan perubahan atau peningkatan pada sebagian aplikasi akan berpengaruh pada seluruh aplikasi.
- Tidak cocok untuk skalabilitas horizontal, skalabilitas terbatas karena biasanya hanya dapat meningkatan kapasitas vertikal dengan meningkatkan spesifikasi server. Bisa horizontal apabila menggunakan load-balancing.
- Pemeliharaan semakin kompleks seiring pertumbuhan aplikasi. Misalnya untuk menambah atau memperbaiki fitur akan semakin sulit ketika kode menjadi semakin besar dan rumit.
Arsitektur monolitik cocok digunakan pada:
- Aplikasi sederhana atau Minimum Viable Product (MVP).
- Tim kecil dan belum memiliki banyak kebutuhan integrasi eksternal.
- Aplikasi yang tidak memerlukan skalabilitas tinggi.
2.2.2. Modular Monolitik¶
Modular monolitik merupakan variasi dari arsitektur monolitik yang mengedepankan pembagian aplikasi menjadi modul-modul terpisah. Setiap modul memiliki tanggung jawab tertentu, namun tetap berada dalam satu kesatuan aplikasi yang besar. Pendekatan ini menggabungkan kelebihan dari modularisasi (memudahkan pemeliharaan dan pengembangan) dengan kesederhanaan implementasi dalam satu aplikasi monolitik.
Modular monolitik memiliki kelebihan, diantaranya:
- Lebih fleksibel dibandingkan monolitik biasa, karena modul-modul yang berbeda dapat dikembangkan, diuji, dan dikelola secara terpisah.
- Mudah dideploy dan lebih mudah dikelola dalam hal koordinasi antara tim.
- Kinerja tetap terpusat dalam satu kesatuan aplikasi.
Adapun untuk kekurangannya:
- Meskipun lebih modular, tetap saja aplikasi akan lebih sulit untuk berkembang seiring waktu jika tidak direncanakan dengan baik.
- Skalabilitas horizontal masih terbatas, karena seluruh aplikasi berjalan dalam satu unit besar.
Modular monolitik digunakan pada:
- Aplikasi yang membutuhkan struktur modular namun tidak terlalu kompleks.
- Tim pengembangan yang relatif kecil namun memiliki pembagian tugas yang jelas.
- Sistem yang membutuhkan fleksibilitas tanpa kehilangan kesederhanaan dalam pengelolaan.
2.2.3. Microservices¶
Microservice merupakan suatu layanan kecil dan independen, yang dapat dideploy dan diubah tanpa tergantung dengan aplikasi lain. Setiap microservice memiliki tanggung jawab serta fokus pekerjaan tersendiri, dan dapat saling berkomunikasi dengan microservice lain melalui network-call. Kumpulan dari microservices yang saling terhubung ini disebut dengan Microservices Architectures (MSA).
Kelebihan dari microservice adalah:
- Skalabilitas yang baik
- Fault Tolerance yang tinggi
- Pengembangan dan penerapan yang mudah
- Fleksibilitas
- Kemudahan pemeliharaan
Adapun untuk kekurangannya adalah sebagai berikut:
- Kompleksitas yang tinggi karena banyak komponen yang dikoordinasikan
- Overhead komunikasi antar microservice dapat mempengaruhi kinerja aplikasi
- Tantangan debugging
- membutuhkan keahlian yang lebih tinggi untuk membangun dan mengelila aplikasi microservices
2.2.4. API-First atau Headless¶
API-First adalah sebuah pendekatan dalam pengembangan perangkat lunak yang memprioritaskan pengembangan API (Application Programming Interface) sebelum mengembangkan aplikasi atau antarmuka pengguna. Dalam pendekatan ini, API dianggap sebagai produk utama yang harus dikembangkan terlebih dahulu, kemudian aplikasi atau antarmuka pengguna dibangun di atasnya.
Ilustrasi sederhana untuk memahami API-First adalah dengan membandingkannya dengan pembangunan sebuah rumah. Dalam pendekatan tradisional, kita membangun rumah terlebih dahulu, kemudian memasang sistem listrik, air, dan lain-lain. Namun, dalam pendekatan API-First kita membangun sistem listrik, air, dan lain-lain terlebih dahulu baru kemudian membangun rumah di atasnya. Dengan demikian, kita dapat memastikan bahwa sistem yang kita bangun dapat berfungsi dengan baik dan dapat diintegrasikan dengan aplikasi atau antarmuka pengguna yang akan dibangun di atasnya.
Keuntungan utama dari pendekatan API-first adalah mempermudah integrasi antar sistem yang berbeda, baik untuk pengembangan aplikasi front-end maupun back-end. Dengan API yang sudah ada sejak awal, pengembang dapat lebih fokus pada fungsionalitas dan keamanan API serta memastikan bahwa berbagai layanan dapat berkomunikasi secara efektif tanpa adanya ketergantungan pada bagian lain dari sistem.
Selain itu, API-first juga mendukung pengembangan yang lebih cepat dan lebih efisien. Tim pengembang dapat bekerja secara paralel, tim front-end dapat mengembangkan UI sambil menggunakan API yang sudah didefinisikan sementara tim back-end dapat fokus pada implementasi dan pengelolaan server dan database. Dengan demikian, pendekatan ini meningkatkan kolaborasi antar tim dan mempercepat waktu pengembangan secara keseluruhan.
2.2.5. Serverless¶
Arsitektur serverless adalah pendekatan desain software yang memungkinkan developer membangun dan mengelola aplikasi tanpa perlu mengelola arsitektur dasarnya. Aplikasi serverless tetap berjalan di server, tetapi penyedia layanan cloud bertanggung jawab menyediakan, mengelola, dan menskalakan semua infrastruktur cloud tersebut.
Bagaimana cara kerja arsitektur serverless?
Arsitektur serverless dirancang untuk mengabstraksi server dan pengelola server dari tim pengembangan. “Serverless” tidak berarti tanpa server; istilah ini mengacu pada pengalaman pengembangan secara keseluruhan.
Developer hanya perlu menulis kode dan menjalankannya tanpa perlu memikirkan apa pun lainnya. Seluruh tugas penyediaan, pemeliharaan hardware, update software dan keamanan server, serta tugas pengelolaan server lainnya ditangani oleh penyedia cloud. Selain itu, arsitektur serverless secara otomatis meningkatkan atau memperkecil skala sesuai dengan traffic.
Berikut ini beberapa kasus penggunaan arsitektur serverless yang umum:
- Tindakan berbasis pemicu atau menjalankan tugas terjadwal (misalnya laporan harian, pencadangan, logika bisnis, dll.)
- Membangun API RESTful untuk aplikasi web dan seluler
- Pemrosesan asinkron (misalnya transcoding video)
- Otomatisasi proses IT, seperti menghapus akses secara otomatis, memulai pemeriksaan keamanan kepatuhan, atau mengirim persetujuan
- Mengotomatiskan pipeline continuous integration dan continuous delivery (CI/CD) (misalnya commit kode yang memicu build, permintaan pull yang memicu pengujian otomatis)
- Berintegrasi dengan API dan layanan pihak ketiga
- Menjalankan tugas terjadwal (misalnya laporan harian, pencadangan, logika bisnis, dll.)
- Pemrosesan data real-time untuk data terstruktur dan tidak terstruktur
2.3 Modular Monolitik dengan API-first Desain¶
Di UGM, pendekatan modular monolitik dengan API-first desain dipilih untuk membangun arsitektur sistem yang lebih fleksibel namun tetap sederhana untuk pengelolaan dan pengembangan aplikasi. Pendekatan ini memungkinkan aplikasi dibangun dengan struktur modular yang terpisah namun tetap dalam satu kesatuan monolitik. Setiap modul dapat berinteraksi melalui API, memungkinkan pengembangan dan pemeliharaan yang lebih efisien, serta meningkatkan kemampuan untuk mengintegrasikan sistem eksternal di masa depan.
Keunggulan pendekatan ini adalah:
- Memungkinkan pengembangan yang lebih terstruktur dan terpisah antar modul.
- Dapat dengan mudah diintegrasikan dengan sistem lain melalui API, memudahkan kolaborasi antar tim pengembang.
- Skalabilitas lebih baik karena modul-modul dapat berkembang secara terpisah tanpa merusak seluruh sistem.
Untuk implementasi vNext di UGM, kami telah mengembangkan sistem modular dengan desain API-First yang memanfaatkan API untuk komunikasi antar modul dan layanan. Ini juga mendukung berbagai perangkat dan platform, memastikan pengembangan yang lebih cepat dan kolaborasi yang lebih lancar antara tim front-end dan back-end. Kami juga telah mengimplementasikan sistem API untuk mendukung integrasi yang lebih mudah dengan layanan eksternal dan membangun infrastruktur yang siap untuk pengembangan berkelanjutan.