Manajemen transaksi terdistribusi
Berikut adalah **Modul 11: Sistem Basis Data Terdistribusi** dengan fokus pada **Manajemen Transaksi Terdistribusi**, disertai contoh implementasi di **MySQL pada Ubuntu 24.04**.
---
- 📘 **Modul 11.3: Manajemen Transaksi Terdistribusi**
- 🎯 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. 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.
---
- 🛠️ **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.
---
- 💡 **3. Contoh Simulasi di MySQL Ubuntu 24.04**
- ⚙️ 3.1 Persiapan Dua MySQL Server Lokal
Misal, dua instance MySQL berjalan di port berbeda: - MySQL A (port 3306) - MySQL B (port 3307)
- 🔧 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
- 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 & ```
---
- 🗃️ 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
); ```
---
- 🔄 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
- koneksi ke server A
conn_a = mysql.connector.connect(user='root', password=, host='localhost', port=3306, database='toko') cursor_a = conn_a.cursor()
- 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()
```
---
- ⚠️ 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**
---
- ✅ 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?