Manajemen transaksi terdistribusi

From OnnoWiki
Jump to navigation Jump to search

Berikut adalah **Modul 11: Sistem Basis Data Terdistribusi** dengan fokus pada **Manajemen Transaksi Terdistribusi**, disertai contoh implementasi di **MySQL pada Ubuntu 24.04**.

---

    1. 📘 **Modul 11.3: Manajemen Transaksi Terdistribusi**
      1. 🎯 Tujuan Pembelajaran:

- Memahami konsep manajemen transaksi terdistribusi. - Memahami bagaimana commit dan rollback bekerja dalam sistem database terdistribusi. - Menerapkan simulasi transaksi terdistribusi sederhana di MySQL.

---

      1. 🧠 **1. Konsep Dasar Manajemen Transaksi Terdistribusi**

Transaksi terdistribusi adalah transaksi yang melibatkan lebih dari satu database atau lebih dari satu server database. Tantangannya adalah menjaga konsistensi data antar node meskipun terjadi kegagalan jaringan atau sistem.

    • Karakteristik transaksi terdistribusi:**

- **Atomicity**: Semua bagian transaksi harus berhasil atau dibatalkan semua. - **Consistency**: Data tetap konsisten sebelum dan sesudah transaksi. - **Isolation**: Proses transaksi berjalan independen dari transaksi lain. - **Durability**: Data tersimpan secara permanen setelah commit.

    • Contoh penerapan**:

> Misal, sistem e-commerce menyimpan data **pembayaran** di server A dan data **stok barang** di server B. Jika transaksi pembelian dilakukan, keduanya harus update secara konsisten.

---

      1. 🛠️ **2. Arsitektur Transaksi Terdistribusi**

Biasanya melibatkan dua komponen utama: - **Transaction Coordinator**: mengatur alur transaksi antar node. - **Resource Managers (RM)**: masing-masing server database yang menangani bagian dari transaksi.

Protokol yang umum digunakan: - **Two-Phase Commit (2PC)**: memastikan semua node menyetujui (prepare), baru commit.

---

      1. 💡 **3. Contoh Simulasi di MySQL Ubuntu 24.04**
        1. ⚙️ 3.1 Persiapan Dua MySQL Server Lokal

Misal, dua instance MySQL berjalan di port berbeda: - MySQL A (port 3306) - MySQL B (port 3307)

        1. 🔧 3.2 Instalasi MySQL Tambahan (opsional)

```bash sudo apt install mysql-server sudo cp -r /etc/mysql /etc/mysql2 sudo nano /etc/mysql2/mysql.conf.d/mysqld.cnf

  1. Ubah port jadi 3307 dan datadir jadi /var/lib/mysql2

sudo mysqld --defaults-file=/etc/mysql2/mysql.conf.d/mysqld.cnf --initialize-insecure --user=mysql sudo mysqld_safe --defaults-file=/etc/mysql2/mysql.conf.d/mysqld.cnf & ```

---

        1. 🗃️ 3.3 Setup Database & Table
    • Di MySQL A (port 3306)**:

```sql CREATE DATABASE toko; USE toko; CREATE TABLE pembayaran (

   id INT PRIMARY KEY AUTO_INCREMENT,
   user VARCHAR(50),
   jumlah INT

); ```

    • Di MySQL B (port 3307)**:

```sql CREATE DATABASE gudang; USE gudang; CREATE TABLE stok (

   id INT PRIMARY KEY AUTO_INCREMENT,
   barang VARCHAR(50),
   jumlah INT

); ```

---

        1. 🔄 3.4 Simulasi Manual Transaksi Terdistribusi

Karena MySQL Community Edition **tidak mendukung 2PC**, kita simulasikan koordinasi dari **sisi aplikasi (Python)** menggunakan transaksi biasa.

    • Python Script (simulasi koordinasi 2 transaksi):**

```python import mysql.connector

  1. koneksi ke server A

conn_a = mysql.connector.connect(user='root', password=, host='localhost', port=3306, database='toko') cursor_a = conn_a.cursor()

  1. koneksi ke server B

conn_b = mysql.connector.connect(user='root', password=, host='localhost', port=3307, database='gudang') cursor_b = conn_b.cursor()

try:

   # Mulai transaksi di kedua server
   conn_a.start_transaction()
   conn_b.start_transaction()
   # Proses pembayaran
   cursor_a.execute("INSERT INTO pembayaran (user, jumlah) VALUES (%s, %s)", ("Andi", 50000))
   # Update stok
   cursor_b.execute("UPDATE stok SET jumlah = jumlah - 1 WHERE barang = %s", ("Laptop",))
   # Simulasi jika semua sukses
   conn_a.commit()
   conn_b.commit()
   print("Transaksi berhasil.")

except Exception as e:

   conn_a.rollback()
   conn_b.rollback()
   print("Transaksi gagal:", e)

finally:

   cursor_a.close()
   conn_a.close()
   cursor_b.close()
   conn_b.close()

```

---

      1. ⚠️ Catatan

- **MySQL Community Edition** tidak mendukung native 2PC. Jika ingin dukungan penuh transaksi terdistribusi, pertimbangkan:

 - **XA Transactions** (partial support)
 - **MySQL Cluster**
 - **Proxy-based approach**
 - Atau sistem lain seperti **PostgreSQL + pgpool**, **Oracle**, **MS SQL Server**

---

      1. ✅ Kesimpulan

Manajemen transaksi terdistribusi penting dalam sistem database multi-node. Meskipun MySQL Community Edition memiliki keterbatasan, kita bisa mensimulasikan transaksi atomik lintas server dengan pendekatan manual dari sisi aplikasi.

Jika kamu ingin, kita bisa lanjut ke simulasi **XA Transactions** di MySQL juga.

--- Butuh versi PDF atau PowerPoint-nya juga, Dzaq?