Difference between revisions of "Manajemen transaksi terdistribusi"

From OnnoWiki
Jump to navigation Jump to search
(Created page with "Berikut adalah **Modul 11: Sistem Basis Data Terdistribusi** dengan fokus pada **Manajemen Transaksi Terdistribusi**, disertai contoh implementasi di **MySQL pada Ubuntu 24.04...")
 
 
Line 1: Line 1:
Berikut adalah **Modul 11: Sistem Basis Data Terdistribusi** dengan fokus pada **Manajemen Transaksi Terdistribusi**, disertai contoh implementasi di **MySQL pada Ubuntu 24.04**.
+
Berikut adalah '''Sistem Basis Data Terdistribusi''' dengan fokus pada '''Manajemen Transaksi Terdistribusi''', disertai contoh implementasi di '''MySQL pada Ubuntu 24.04'''.
  
---
+
==Manajemen Transaksi Terdistribusi==
  
## 📘 **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.
  
### 🎯 Tujuan Pembelajaran:
+
==1. Konsep Dasar Manajemen Transaksi Terdistribusi==
- 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.
 
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:**
+
'''Karakteristik transaksi terdistribusi:'''
- **Atomicity**: Semua bagian transaksi harus berhasil atau dibatalkan semua.
+
* '''Atomicity''': Semua bagian transaksi harus berhasil atau dibatalkan semua.
- **Consistency**: Data tetap konsisten sebelum dan sesudah transaksi.
+
* '''Consistency''': Data tetap konsisten sebelum dan sesudah transaksi.
- **Isolation**: Proses transaksi berjalan independen dari transaksi lain.
+
* '''Isolation''': Proses transaksi berjalan independen dari transaksi lain.
- **Durability**: Data tersimpan secara permanen setelah commit.
+
* '''Durability''': Data tersimpan secara permanen setelah commit.
  
**Contoh penerapan**:
+
'''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.
 
  
---
+
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**
+
==2. Arsitektur Transaksi Terdistribusi==
  
 
Biasanya melibatkan dua komponen utama:
 
Biasanya melibatkan dua komponen utama:
- **Transaction Coordinator**: mengatur alur transaksi antar node.
+
* '''Transaction Coordinator''': mengatur alur transaksi antar node.
- **Resource Managers (RM)**: masing-masing server database yang menangani bagian dari transaksi.
+
* '''Resource Managers (RM)''': masing-masing server database yang menangani bagian dari transaksi.
  
 
Protokol yang umum digunakan:
 
Protokol yang umum digunakan:
- **Two-Phase Commit (2PC)**: memastikan semua node menyetujui (prepare), baru commit.
+
* '''Two-Phase Commit (2PC)''': memastikan semua node menyetujui (prepare), baru commit.
  
---
+
==3. Contoh Simulasi di MySQL Ubuntu 24.04==
  
### 💡 **3. Contoh Simulasi di MySQL Ubuntu 24.04**
+
'''3.1 Persiapan Dua MySQL Server Lokal'''
 
 
#### ⚙️ 3.1 Persiapan Dua MySQL Server Lokal
 
  
 
Misal, dua instance MySQL berjalan di port berbeda:
 
Misal, dua instance MySQL berjalan di port berbeda:
- MySQL A (port 3306)
+
* MySQL A (port 3306)
- MySQL B (port 3307)
+
* MySQL B (port 3307)
  
#### 🔧 3.2 Instalasi MySQL Tambahan (opsional)
+
'''3.2 Instalasi MySQL Tambahan (opsional)'''
  
```bash
+
sudo apt install mysql-server
sudo apt install mysql-server
+
sudo cp -r /etc/mysql /etc/mysql2
sudo cp -r /etc/mysql /etc/mysql2
+
sudo nano /etc/mysql2/mysql.conf.d/mysqld.cnf
sudo nano /etc/mysql2/mysql.conf.d/mysqld.cnf
+
# Ubah port jadi 3307 dan datadir jadi /var/lib/mysql2
# 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 &
  
sudo mysqld --defaults-file=/etc/mysql2/mysql.conf.d/mysqld.cnf --initialize-insecure --user=mysql
+
'''3.3 Setup Database & Table'''
sudo mysqld_safe --defaults-file=/etc/mysql2/mysql.conf.d/mysqld.cnf &
 
```
 
  
---
+
'''Di MySQL A (port 3306)''':
  
#### 🗃️ 3.3 Setup Database & Table
+
CREATE DATABASE toko;
 +
USE toko;
 +
CREATE TABLE pembayaran (
 +
    id INT PRIMARY KEY AUTO_INCREMENT,
 +
    user VARCHAR(50),
 +
    jumlah INT
 +
);
  
**Di MySQL A (port 3306)**:
+
'''Di MySQL B (port 3307)''':
```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)**:
+
CREATE DATABASE gudang;
```sql
+
USE gudang;
CREATE DATABASE gudang;
+
CREATE TABLE stok (
USE gudang;
+
    id INT PRIMARY KEY AUTO_INCREMENT,
CREATE TABLE stok (
+
    barang VARCHAR(50),
    id INT PRIMARY KEY AUTO_INCREMENT,
+
    jumlah INT
    barang VARCHAR(50),
+
);
    jumlah INT
 
);
 
```
 
  
---
 
  
#### 🔄 3.4 Simulasi Manual Transaksi Terdistribusi
+
'''3.4 Simulasi Manual Transaksi Terdistribusi'''
  
Karena MySQL Community Edition **tidak mendukung 2PC**, kita simulasikan koordinasi dari **sisi aplikasi (Python)** menggunakan transaksi biasa.
+
Karena MySQL Community Edition '''tidak mendukung 2PC''', kita simulasikan koordinasi dari '''sisi aplikasi (Python)''' menggunakan transaksi biasa.
  
**Python Script (simulasi koordinasi 2 transaksi):**
+
'''Python Script (simulasi koordinasi 2 transaksi):'''
```python
 
import mysql.connector
 
  
# koneksi ke server A
+
import mysql.connector
conn_a = mysql.connector.connect(user='root', password='', host='localhost', port=3306, database='toko')
+
cursor_a = conn_a.cursor()
+
# 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()  
  
# koneksi ke server B
+
==Catatan==
conn_b = mysql.connector.connect(user='root', password='', host='localhost', port=3307, database='gudang')
+
* '''MySQL Community Edition''' tidak mendukung native 2PC. Jika ingin dukungan penuh transaksi terdistribusi, pertimbangkan:
cursor_b = conn_b.cursor()
+
** '''XA Transactions''' (partial support)
 +
** '''MySQL Cluster'''
 +
** '''Proxy-based approach'''
 +
** Atau sistem lain seperti '''PostgreSQL + pgpool''', '''Oracle''', '''MS SQL Server'''
  
try:
+
==Kesimpulan==
    # Mulai transaksi di kedua server
 
    conn_a.start_transaction()
 
    conn_b.start_transaction()
 
  
    # Proses pembayaran
+
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.
    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()
 
```
 
  
---
+
Jika kamu ingin, kita bisa lanjut ke simulasi '''XA Transactions''' di MySQL juga.
  
### ⚠️ 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==
  
--- 
+
* [[Database]]
Butuh versi PDF atau PowerPoint-nya juga, Dzaq?
+
* [[Database | Kuliah]]

Latest revision as of 11:23, 6 May 2025

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