Manajemen transaksi terdistribusi
Berikut adalah Sistem Basis Data Terdistribusi dengan fokus pada Manajemen Transaksi Terdistribusi, disertai contoh implementasi di MySQL pada Ubuntu 24.04.
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)
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):
CREATE DATABASE toko; USE toko; CREATE TABLE pembayaran ( id INT PRIMARY KEY AUTO_INCREMENT, user VARCHAR(50), jumlah INT );
Di MySQL B (port 3307):
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):
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.