BAB V IMPLEMENTASI DAN PENGUJIAN Bab ini membahas mengenai implementasi dan pengujian perangkat lunak yang dibangun pada Tugas Akhir ini. Pembahasan mengenai implementasi dipaparkan pada subbab 5.1 sedangkan pembahasan mengenai pengujian akan disampaikan pada subbab 5.2.
5.1 Implementasi Bagian ini akan memuat penjelasan mengenai batasan implementasi, lingkungan perangkat keras dan perangkat lunak, serta implementasi yang dilakukan berdasarkan hasil pada tahap perancangan. Penjelasan pada subbab ini meliputi lingkungan pengembangan yang digunakan, batasan implementasi dan proses dan hasil implementasi
5.1.1 Lingkungan Pengembangan Aplikasi ini dikembangkan dengan spesifikasi perangkat keras dan perangkat lunak sebagai berikut : -
Sistem operasi Windows XP Professional Service Pack 2 (Version 2002)
-
Prosesor Intel Core Duo T2500 @2.0 GHz
-
RAM 1GB
-
Microsoft Visual Studio 2003(7.1)
-
Compiler VC++ versi 13.10
-
Source code mysql-5.0.33
5.1.2 Batasan Implementasi Batasan implementasi penerapan dukungan failover di middle tier pada DBMS MySQL adalah sebagai berikut: -
Implementasi yang sama belum tentu berjalan dengan baik untuk versi MySQL yang berbeda, terutama apabila terjadi banyak perubahan pada kelas THD.
V-1
V-2
5.1.3 Proses dan Hasil Implementasi Pengembangan aplikasi terdiri dari beberapa tahap yaitu implementasi koneksi backup pada modul penanganan koneksi, dan pemindahan state antar thread pada modul pemutusan koneksi.
5.1.3.1 Implementasi Penanganan Pembuatan Koneksi Baru Struktur data pada gambar IV-3 merupakan struktur data yang digunakan untuk mencatat informasi global mengenai koneksi. Apabila ada client yang membuat koneksi ke server, server akan memeriksa apakah struktur data tersebut mempunyai username yang bersesuain dengan key dari struktur data. Jika username sama dengan key, maka koneksi dengan username tersebut sudah mempunyai master yang telah dibentuk sebelumnya dan koneksi tersebut akan menjadi backup dari koneksi master, jika tidak maka koneksi yang baru terbentuk akan menjadi koneksi master. Implementasi fisik untuk implementasi ini dilakukan di file mysqld.cpp dan sql_parse.cpp
5.1.3.2 Implementasi Failover Saat Pemutusan Koneksi Dengan menggunakan informasi global yang tersimpan dalam struktur data seperti pada gambar IV-3, MySQL server dapat mengetahui status koneksi. Apabila pada koneksi tersebut terdapat koneksi backup, maka sebelum kode cleanup dieksekusi akan dilakukan transfer state dari objek THD master ke objek THD slave. State-state yang ditransfer adalah state mengenai database yang digunakan, lock terhadap tabel, tabel, transaksi, dan handler data yang berasosiasi dengan storage engine yang digunakan. Implementasi fisik untuk implementasi ini dilakukan di file mysqld.cpp yang merupakan main program dari MySQL server.
5.2 Pengujian Tujuan dilakukannya pengujian terhadap suatu perangkat lunak adalah untuk mengetahui apakah aplikasi telah berjalan sesuai dengan sasaran pembuatan aplikasi. Pengujian aplikasi ini dilakukan dengan menguji apakah failover berhasil dilakukan tanpa menghilangkan ACID dari transaksi. Hal-hal yang akan dibahas antara lain adalah kasus pengujian, lingkungan pengujian dan analisis hasil pengujian.
V-3
5.2.1 Tujuan Pengujian Terdapat beberapa hal yang menjadi tujuan pengujian terhadap perangkat lunak yang dikembangkan ini, yaitu: 1. Memeriksa apakah perubahan yang dilakukan pada MySQL server tidak mengganggu konsistensi dari basis data dan properti ACID dari transaksi. 2. Memeriksa apakah strategi replikasi primary-backup dapat dilakukan di middle-tier.
5.2.2 Lingkungan Pengujian Aplikasi ini diuji dengan spesifikasi perangkat keras dan perangkat lunak sebagai berikut : -
Sistem operasi Windows XP Professional Service Pack 2 (Version 2002)
-
Prosesor Intel Core Duo T2500 @2.0 GHz
-
RAM 1GB
-
Mysql client versi 14.12
5.2.3 Kasus Pengujian Pada bagian ini akan dipaparkan beberapa skenario untuk menguji dukungan failover di MySQL server untuk middle tier. Data yang digunakan untuk pengujian adalah tabel account dengan kondisi awal tabel seperti pada Tabel V-1. Tabel V-1 Tabel Account Number Balance 5
4000
6
5000
7
7000
5.2.3.1 Skenario Satu Primary,Satu Backup Pada skenario ini akan menggunakan tabel dan data awal pada tabel V-1. Kegagalan pada primary disimulasikan dengan perintah quit atau kill process MySQL client. Langkah-langkah yang dilakukan untuk menguji adalah sebagai berikut:
V-4
1. Client pertama login dengan menggunakan user nama1 (menjadi primary) 2. Client kedua login dengan nama user yang sama (menjadi backup) 3. Primary melakukan query berikut Start transaction; Insert into account(balance) value 1000; Update account set balance = 2000 where number=’5’;
4. Primary mengalami kegagalan 5. Backup melakukan query sebagai berikut Select * from account; Delete from account where number=’6’ Commit;
Tabel V-2 Hasil akhir skenario pertama Number Balance 5
4000
7
7000
8
1000
5.2.3.2 Skenario Failover Beruntun Pada skenario ini akan menggunakan tabel dan data awal pada tabel V-1. Kegagalan pada primary disimulasikan dengan perintah quit atau kill process MySQL client. Langkah-langkah yang dilakukan untuk menguji adalah sebagai berikut: 1. Client pertama login dengan menggunakan user nama1 (menjadi primary) 2. Client kedua login dengan nama user yang sama (menjadi backup satu) 3. Client ketiga login dengan nama user yang sama (menjadi backup dua) 4. Primary melakukan query berikut Start transaction; Insert into account(balance) value 1000; Update account set balance = 2000 where number=’5’;
5. Primary mengalami kegagalan 6. Backup pertama melakukan query sebagai berikut Select * from account; Delete from account where number=’6’
7. Backup pertama mengalami kegagalan
V-5
8. Backup kedua melakukan query commit
Tabel V-3 Hasil akhir skenario kedua Number Balance 5
4000
7
7000
8
1000
5.2.3.3 Skenario Failover Untuk Dua Grup Pada skenario ini akan menggunakan tabel dan data awal pada tabel V-1. Kegagalan pada primary disimulasikan dengan perintah quit atau kill process MySQL client. Langkah-langkah yang dilakukan untuk menguji adalah sebagai berikut: 1. Client pertama login dengan menggunakan user nama1 (menjadi primary pertama) 2. Client kedua login dengan nama user nama1 (menjadi backup dari primary pertama) 3. Client ketiga login dengan nama user nama2 (menjadi primary kedua) 4. Client keempat login dengan nama user nama2 (menjadi backup dari primary kedua) 5. Primary pertama melakukan query berikut Start transaction; Insert into account(balance) value 1000; Update account set balance = 2000 where number=’5’;
6. Primary kedua melakukan query Select * from account; Insert into account(balance) value 3000;
7. Primary pertama mengalami kegagalan 8. Backup dari primary pertama melakukan query sebagai berikut Delete from account where number=’6’; Rollback;
9. Primary kedua mengalami kegagalan 10. Backup dari primary kedua melakukan query “commit”
V-6
Tabel V-4 Hasil akhir skenario ketiga Number Balance 5
4000
6
5000
7
7000
8
3000
5.2.4 Analisis Hasil Pengujian Analisis hasil pengujian dilakukan terhadap ketiga skenario yang dipaparkan pada subbab 5.2.2 di atas. Skenario pertama digunakan untuk menguji failover sederhana dimana ada satu primary dan satu backup yang siap untuk melakukan failover apabila primary mengalami kegagalan. Query “select * from account” pada langkah kelima digunakan untuk mengecek apakah state transaksi yang belum di-commit oleh primary dapat dilihat oleh backup. Skenario ini juga menguji property consistency, durability, dan atomicity pada transaksi dimana data yang telah di-commit langsung tersimpan ke disk dan semua statement transaksi tereksekusi.
Skenario kedua digunakan untuk menguji failover beruntun pada satu grup replika. Pengujian ini perlu dilakukan untuk mengetes apakah strategi primary backup dapat berjalan dengan baik untuk kasus kegagalan yang beruntun. Skenario ini menggunakan tiga client yang melakukan koneksi ke server. Client pertama menjadi primary kemudian client kedua dan ketiga menjadi backup. Apabila client pertama mengalami kegagalan, maka client kedua menjadi primary dan client ketiga akan menjadi backup dari client kedua, kemudian apabila client kedua yang sekarang menjadi primary mengalami kegagalan, client ketiga dapat melakukan failover untuk menggantikan posisi client kedua. Hasil akhir skenario kedua pada tabel V-3 menunjukkan keberhasilan implementasi untuk skenario failover beruntun.
Skenario ketiga digunakan untuk menguji properti isolation dari transaksi. Skenario ini menggunakan empat client yang tergabung di dalam dua grup replika. Client pertama dan kedua menjadi primary dan backup untuk grup pertama sedangkan client ketiga dan keempat menjadi primary dan backup untuk grup kedua. Query “select *
V-7
from account” pada langkah keenam dari subbab 5.2.2.3 menunjukkan bahwa
primary dari grup kedua tidak dapat mengetahui state sementara dari grup pertama yang menandakan keberhasilan isolasi transaksi.