Difference between revisions of "Manajemen transaksi terdistribusi"
Onnowpurbo (talk | contribs) (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...") |
Onnowpurbo (talk | contribs) |
||
Line 1: | Line 1: | ||
− | Berikut adalah | + | 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. | 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: | 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: | 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: | 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 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 & | ||
− | + | '''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 DATABASE gudang; | + | CREATE TABLE stok ( |
− | USE gudang; | + | id INT PRIMARY KEY AUTO_INCREMENT, |
− | CREATE TABLE stok ( | + | barang VARCHAR(50), |
− | + | jumlah INT | |
− | + | ); | |
− | |||
− | ); | ||
− | |||
− | |||
− | + | '''3.4 Simulasi Manual Transaksi Terdistribusi''' | |
− | Karena MySQL Community Edition | + | Karena MySQL Community Edition '''tidak mendukung 2PC''', kita simulasikan koordinasi dari '''sisi aplikasi (Python)''' menggunakan transaksi biasa. |
− | + | '''Python Script (simulasi koordinasi 2 transaksi):''' | |
− | |||
− | |||
− | # 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() | ||
− | + | ==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]] | |
− | + | * [[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.