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:

  1. 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.

  2. Koordinasi:

    • Mengatur siapa melakukan apa.

    • Bagaimana sistem menangani jika ada salah satu node yang gagal (gagal failover, consensus).

  3. 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.

  4. Resiliensi:

    • Kemampuan sistem untuk tetap beroperasi (meskipun mungkin dengan performa berkurang) walaupun terjadi kegagalan di beberapa bagiannya.

  5. 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:

  1. Fisik: Secara fisik, ini adalah sekumpulan mesin (komputer, server) yang terhubung melalui jaringan.

  2. Runtime (Saat Berjalan): Saat berjalan, ini adalah sejumlah proses software yang berkomunikasi satu sama lain melalui mekanisme IPC (Inter-Process Communication), seperti HTTP.

  3. 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 HTTP GET /users/123, mengekstrak 123, lalu memanggil GetUser(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.

Summary

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.