SISTEM TERDISTRIBUSI DISTRIBUTED TRANSACTIONS Willy Sudiarto Raharjo
Distributed Transactions Proses transaksi (flat / nested) yang mengakses object yang dikelola oleh beberapa server Konsep atomicity tetap berlaku (all or nothing) Diperlukan sebuah coordinator untuk memastikan konsep atomicity Menggunakan protokol yang sudah disepakati sejak awal (two phase commit protocol) Memerlukan concurrency control
Flat Transaction (1) Sebuah client melakukan request pada lebih dari satu server Sebuah transaksi diselesaikan dahulu sebelum meminta ke server berikutnya (sequential) Jika menggunakan konsep locking, maka sebuah transaksi hanya bisa menunggu satu obyek saja
Flat Transaction (2) X T T Y Client Z
Nested Transactions (1) Top level transaction bisa membuat sub transaksi Sub transaksi pada level yang sama bisa berjalan secara concurrent (parallel) Mampu memanfaatkan utilitas prosessor (pada kasus multi processor)
Nested Transactions (2) M T 11 X Client T 1 N T T 12 T 2 T 21 Y P T 22
CONTOH TRANSAKSI BANK (1) X Client T 1 A a.withdraw(10) T T = opentransaction Y opensubtransaction a.withdraw(10); T 2 B b.withdraw(20) opensubtransaction b.withdraw(20); opensubtransaction c.deposit(10); opensubtransaction d.deposit(20); T 3 T 4 Z C D c. deposit(10) d.deposit(20) closetransaction
CONTOH TRANSAKSI BANK (2) opentransaction closetransaction. join join participant A a.withdraw(4); BranchX T participant Client b.withdraw(t, 3); B b.withdraw(3); T = opentransaction a.withdraw(4); join BranchY c.deposit(4); b.withdraw(3); d.deposit(3); closetransaction Note: the coordinator is in one of the servers, e.g. BranchX participant C D BranchZ c.deposit(4); d.deposit(3);
PROSES TRANSAKSI Client mengirimkan request opentransaction pada coordinator pada sembarang server Coordinator yang dituju mengembalikan identifier transaction yang unik pada client Client bekerjasama dengan coordinator dengan commit protocol
Coordinator (1) Sebuah host/system yang menjadi mandor untuk menyelesaikan sebuah transaksi terdistribusi Bertanggung jawab untuk mengambil keputusan commit/abort Selama terjadi transaksi, coordinator mencatat daftar referensi dari partisipan dan vice versa Coordinator tahu semua daftar peserta dan vice versa
Coordinator (2)
Atomic Commit Protocols Dikembangkan awal 1970an Bertujuan untuk memastikan bahwa setiap perubahan terjadi pada semua system atau tidak sama sekali (all or nothing) Terdapat tiga jenis One phase commit protocol Two phase commit protocol Three phase commit protocol Berakhir setelah transaksi di commit/abort
One Phase Commit Protocol Coordinator mengirimkan pesan commit atau abort pada semua partisipan Proses diulang terus menerus sampe semua sudah membalas Masalah : Tidak mungkin melakukan abort setelah ada permintaan untuk commit Solusi : Two Phase Commit
Two Phase Commit Protocol (1) Fase 1 (voting) Coordinator mengirimkan request cancommit pada setiap partisipan Partisipan memilih yes/no dan mengirim balik pada coordinator. Jika yes, maka menyimpan obyek pada penyimpanan permanen. Jika tidak, abort
Two Phase Commit Protocol (2) Fase 2 Coordinator mengumpulkan hasil voting Jika semua setuju, coordinator memutuskan commit dan mengirimkan docommit pada semua partisipan Selain itu, coordinator memutuskan abort dan mengirimkan doabort pada semua partisipan yang memilih yes Partisipan yang memilih yes menunggu docommit/ doabort dari coordinator
Two Phase Commit Protocol (3) Setelah menerima salah satu dari pesan diatas, partisipan menjalankan perintah sesuai dengan pesan yang diterima Jika dilakukan perintah commit, maka partisipan mengirimkan pesan havecommitted pada coordinator sebagai konfirmasi bahwa proses sudah dilaksanakan
Two Phase Commit Protocol (4) Coordinator Participant step status step status 1 prepared to commit cancommit? (waiting for votes) Yes 2 prepared to commit 3 committed docommit (uncertain) havecommitted 4 committed done
Masalah pada Two Phase Commit Susah memastikan semua partisipan sudah melakukan vote dan mendapatkan hasil yang sama Jika proses mengalami kegagalan (terjadi network partitioning), maka tidak akan didapatkan konsensus, karena partisipan yang lain akan saling menunggu (blocking) Solusi : three phase commit
Three Phase Commit Mencoba mengatasi masalah blocking Menggunakan asumsi tidak lebih dari k site fail (k adalah angka yang sudah disetujui) Coordinator memastikan bahwa paling tidak k site lain tahu bahwa coordinator akan melakukan commit Jika coordinator fail, site yang lain melakukan election coordinator baru dan melihat status terakhir dan menentukan aksi (commit/abort)
Masalah pada Three Phase Commit Susah implementasinya Harus memastikan bahwa state harus tetap konsisten meskipun terdapat perbedaan hasil (transaksi di commit di satu site dan abord di site yang lain sebagai akibat dari network partitioning) Terlalu banyak overhead
Concurrency Control Setiap server mengelola sekumpulan obyek dan bertanggung jawab untuk memastikan tetap konsisten ketika diakses oleh transaksi concurrent Jenis Locking Timestamp ordering concurrency control Optimistic concurrency control Baca materi minggu kemarin
Distributed Locking (1) Lock pada obyek dikendalikan secara lokal oleh local lock manager Memberikan akses untuk lock Membuat transaksi yang meminta request menunggu Tidak bisa melepas lock sampai ada kepastian abort/commit pada semua server Bisa menimbulkan distributed deadlock
Distributed Locking (2) d.deposit(10) U V W lock D b.deposit(10) lock B a.deposit(20) lock A at Y at X c.deposit(30) lock C b.withdraw(30) wait at Y at Z c.withdraw(20) wait at Z a.withdraw(20) wait at X
Distributed Locking (3) Held by W Waits for W C D A Z X V Waits for V Held by Held by U U Held by B Waits for Y
Phantom Deadlock (1) Deadlock yang terdeteksi tetapi bukan merupakan sebuah deadlock Terjadi karena adanya delay pada saat pengiriman informasi deadlock pada jaringan local wait for graph local wait for graph global deadlock detector T U V T T X Y U V
Phantom Deadlock (2) Transaksi U melepas obyek pada server X Transaksi U meminta V pada server Y Asumsi Server Y diterima terlebih dahulu dibandingkan server X T > U > V > T T > U sudah tidak ada lagi
Transaction Recovery Proses pemulihan dengan menggunakan versi terakhir dari obyek yang sudah di commit dari media penyimpanan permanen Dilakukan oleh recovery manager Menyimpan obyek pada storage permanen Restore obyek server setelah crash Mengorganisasi ulang file recovery untuk meningkatkan performa dari recovery Reclaim storage space
Intention List Berisi daftar obyek aktif yang diakses oleh client selama transaksi (termasuk yang mengalami perubahan selama transaksi) Digunakan untuk melihat obyek mana yang terkena efek perubahan setelah commit Jika commit, maka nilai baru disimpan pada storage. Jika abort, data dari intention list digunakan untuk membatalkan perubahan dan melakukan rollback ke data lama
Logging Semua transaksi yang commit dicatat pada log Urutan entry menggambarkan urutan transaksi Setelah crash, semua transaksi yang tidak memiliki status committed akan dibatalkan P0 P1 P2 P3 P4 P5 P6 P7 Object: A Object: B Object: C Object: A Object: B Trans: T Trans: T Object: C Object: B Trans: U 100 200 300 80 220 prepared committed 278 242 prepared <A, P1> < C, P5> <B, P2> <B, P6> P0 P3 P4 Checkpoint End of log
Contoh pada 2PC Trans: T Coord r: T Trans: T Trans: U Part pant: U Trans: U Trans: U prepared intentions list part pant list:... committed prepared Coord r:.. uncertain committed Intention s list
Recovery pada 2PC Role Status Action of recovery manager Coordinator prepared No decision had been reached before the server failed. It sends aborttransaction to all the servers in the participant list and adds the transaction status aborted in its recovery file. Same action for state aborted. If there is no participant list, the participants will eventually timeout and abort the transaction. Coordinator committed A decision to commit had been reached before the server failed. It sends a docommit to all the participants in its participant list (in case it had not done so before) and resumes the two phase protocol at step 4 Participant committed The participant sends a havecommitted message to the coordinator (in case this was not done before it failed). This will allow the coordinator to discard information about this transaction at the next checkpoint. Participant uncertain The participant failed before it knew the outcome of the transaction. It cannot determine the status of the transaction until the coordinator informs it of the decision. It will send a getdecision to the coordinator to determine the status of the transaction. When it receives the reply it will commit or abort accordingly. Participant prepared The participant has not yet voted and can abort the transaction. Coordinator done No action is required.
Recovery Pada Oracle (1)
Recovery Pada Oracle (2)
Minggu Depan Replication