Manajemen transaksi terdistribusi

From OnnoWiki
Jump to navigation Jump to search

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.


Pranala Menarik