Back to IF3130 Sistem Paralel dan Terdistribusi
Topic
Questions/Cues
Apa definisi arsitektur (IEEE)?
Apa itu aplikasi terdistribusi?
Apa 5 hal penting?
Apa itu ‘abstraction leak’?
Apa 3 perspektif anatomi?
Beda Service vs Instance?
Apa itu Adapter?
Apa itu komunikasi sinkronus?
Reference Points
Slides 1-9 (10 - IF3130-09-Architecture-2022.pdf)
Kuliah Arsitektur Sistem Terdistribusi
1. Definisi Arsitektur (IEEE)
Menurut IEEE, arsitektur adalah konsep level tertinggi dari sebuah sistem di lingkungannya.
Ini adalah tentang organisasi atau struktur dari komponen-komponen penting yang berinteraksi melalui antarmuka (interfaces). Komponen-komponen itu sendiri bisa jadi tersusun atas komponen dan antarmuka yang lebih kecil lagi.
Analogi: Arsitektur adalah seperti denah bangunan. Ia tidak menunjukkan warna cat atau merek furnitur, tapi menunjukkan ruangan utama (komponen), di mana letaknya, dan bagaimana pintu/koridor (interface) menghubungkan ruangan-ruangan tersebut.
2. Aplikasi Terdistribusi
Sebuah aplikasi terdistribusi terdiri dari beberapa proses (multiple processes) yang berjalan di satu atau lebih komputer/node.
Fitur utamanya adalah:
Komunikasi Jaringan: Proses-proses ini berkomunikasi satu sama lain menggunakan infrastruktur jaringan (misal: Socket, TCP/UDP, HTTP, WebSocket).
Heterogen: Seringkali berjalan di lingkungan yang berbeda-beda. Contoh:
Perangkat Keras/OS: Sebagian di mobile (Android/iOS), sebagian di server (Linux), sebagian di PC (Windows).
Jaringan: Ada yang di LAN (jaringan lokal), ada yang lewat Internet.
Teknologi: Bisa dikembangkan dengan bahasa yang berbeda (Python, C, Javascript) yang saling berkomunikasi.
3. Hal yang Perlu Diperhatikan (Concerns)
Saat membangun sistem terdistribusi, ada 5 tantangan utama yang harus selalu diperhatikan:
Komunikasi:
Mekanisme pengiriman data antar node (request/response via HTTP, TCP, dll).
Waspada terhadap Abstraction Leak (Kebocoran Abstraksi): Meskipun kita pakai library canggih, kita tetap harus paham stack komunikasi di bawahnya. Contoh: Library HTTP mungkin menyembunyikan kompleksitas TCP, tapi saat terjadi network timeout, kita tetap harus menanganinya. Abstraksi itu “bocor” dan mengingatkan kita ada jaringan di baliknya.
Koordinasi:
Mengatur siapa melakukan apa.
Bagaimana sistem menangani jika ada salah satu node yang gagal (gagal failover, consensus).
Skalabilitas:
Efisiensi sistem dalam menangani beban kerja yang meningkat.
Diukur dari:
Throughput: Berapa banyak pekerjaan yang bisa diselesaikan per satuan waktu (misal: 1000 transaksi per detik).
Latency/Response Time: Waktu yang dibutuhkan untuk merespons sebuah request.
Resiliensi:
Kemampuan sistem untuk tetap beroperasi (meskipun mungkin dengan performa berkurang) walaupun terjadi kegagalan di beberapa bagiannya.
Operations (Operasional):
Seluruh proses pengelolaan siklus hidup aplikasi, mulai dari development (pengembangan), testing (pengujian), deployment (pemasangan ke server), hingga maintain (pemeliharaan).
4. Anatomi Sistem Terdistribusi
Kita bisa melihat anatomi sistem terdistribusi dari tiga perspektif:
Fisik: Secara fisik, ini adalah sekumpulan mesin (komputer, server) yang terhubung melalui jaringan.
Runtime (Saat Berjalan): Saat berjalan, ini adalah sejumlah proses software yang berkomunikasi satu sama lain melalui mekanisme IPC (Inter-Process Communication), seperti HTTP.
Implementasi (Kode): Dari perspektif kode, ini adalah sekumpulan komponen loosely-coupled (tidak terikat erat) yang bisa di-deploy dan di-scale (ditingkatkan kapasitasnya) secara independen. Komponen-komponen inilah yang disebut Services (Layanan).
5. Service, Instance, dan Interface
Service: Bagian fungsionalitas dari sistem. Service mengimplementasikan business logic (aturan bisnis) tertentu. Contoh: Service-Otentikasi, Service-Pembayaran.
Service Instance: Service adalah ‘kode’ atau ‘desain’. Saat service itu dijalankan, ia berjalan sebagai sebuah proses. Proses yang sedang berjalan inilah yang disebut Service Instance. Bisa ada banyak instance dari service yang sama untuk menangani beban tinggi.
- Analogi: Service adalah resep masakan. Service Instance adalah koki yang sedang memasak resep itu. Anda bisa punya banyak koki (instance) yang memasak resep yang sama (service).
Interface (Antarmuka): Cara service berkomunikasi dengan dunia luar.
Inbound Interface: Menerima permintaan dari luar (misal: API yang diekspos).
Outbound Interface: Melakukan panggilan ke komponen lain (misal: memanggil API service lain atau query ke database).
6. API dan Adapter
API (Application Programming Interface): Ini adalah Service Interface itu sendiri, kontrak yang mendefinisikan cara service bisa diakses.
Adapter: Komponen yang “menerjemahkan” teknologi komunikasi spesifik menjadi panggilan ke Service Interface.
Contoh: Sebuah Service punya interface
GetUser(id). Adapter HTTP Controller akan mengambil request HTTPGET /users/123, mengekstrak123, lalu memanggilGetUser(123). Adapter lain bisa berupa gRPC atau Kafka Consumer yang melakukan hal serupa.Data yang dikirimkan (request/response) biasanya di-serialisasi ke format yang language-agnostic (tidak tergantung bahasa), seperti JSON atau Protobuf.
7. Komunikasi Sinkronus (Synchronous)
Ini adalah model komunikasi di mana client mengirim request ke server dan kemudian terblokir (menunggu) sampai server mengirim response.
Kekurangan: Dianggap tidak efisien karena thread (jalur eksekusi) client “menganggur” selama menunggu, padahal bisa digunakan untuk pekerjaan lain.
Teknologi Umum: gRPC, REST, GraphQL sering diimplementasikan dengan pola sinkronus.
Arsitektur sistem terdistribusi adalah konsep level tertinggi tentang bagaimana komponen-komponen (services) yang independen diatur, berjalan sebagai instances di banyak mesin, dan berinteraksi melalui interface (API) untuk mencapai tujuan bersama. Pengembangan sistem ini harus mempertimbangkan tantangan utama seperti Komunikasi (misal: sinkronus/asinkronus dan abstraction leak), Koordinasi, Skalabilitas (throughput/latency), Resiliensi (toleransi gagal), dan Operations.
Additional Information
Pendalaman: The Law of Leaky Abstractions (Slide 5)
Istilah ini dipopulerkan oleh Joel Spolsky. Intinya adalah semua abstraksi (penyederhanaan) yang non-trivial pasti ‘bocor’. Dalam konteks sistem terdistribusi, library HTTP adalah abstraksi. Ia menyembunyikan kompleksitas TCP/IP, DNS, dll. Namun, abstraksi ini “bocor” ketika Anda mengalami masalah dunia nyata:
Latency: Panggilan fungsi lokal instan, panggilan HTTP butuh waktu.
Network Failure: Jaringan bisa putus. Panggilan library Anda akan timeout atau error.
Data Serialization: Anda harus mengubah data (misal: objek) menjadi format lain (JSON/XML) untuk dikirim.
Seorang engineer yang baik paham bahwa meskipun pakai library, mereka tidak bisa mengabaikan fakta bahwa ada jaringan yang tidak bisa diandalkan di baliknya.
Perbandingan: gRPC vs. REST (Disebut di Slide 9)
Keduanya adalah cara populer untuk membuat API, tapi punya filosofi berbeda:
REST (REpresentational State Transfer): Pola arsitektur. Biasanya menggunakan HTTP + JSON. Berfokus pada resource (sumber daya) dan verb (kata kerja HTTP: GET, POST, PUT, DELETE). Contoh:
GET /users/123. Sangat fleksibel dan mudah dipahami manusia.gRPC (Google Remote Procedure Call): Sebuah framework. Menggunakan HTTP/2 untuk performa tinggi dan streaming dua arah. Menggunakan Protocol Buffers (Protobuf) untuk serialisasi data, yang lebih ringkas dan cepat daripada JSON. Modelnya adalah pemanggilan fungsi (RPC) secara langsung (e.g.,
client.GetUser({id: 123})).Eksplorasi Mandiri
Coba buat dua program sederhana (misal: dengan Python) yang berkomunikasi menggunakan:
Socket TCP biasa (untuk merasakan level rendahnya).
HTTP (misal: menggunakan library Flask/FastAPI) (untuk merasakan abstraksi REST).
Baca artikel asli “The Law of Leaky Abstractions” oleh Joel Spolsky.
Sumber & Referensi Lanjutan:
Buku: Understanding Distributed Systems oleh Roberto Vitillo (disebut di slide).
Buku: Designing Data-Intensive Applications oleh Martin Kleppmann (dianggap buku “emas” untuk topik ini).
Artikel: “Who Needs an Architect?” oleh Martin Fowler (disebut di slide 2).
