Implementasi Database Abstraction Layer untuk MySQL Menggunakan Google Go Isar Norwandi, Wahyu Suadi, Baskoro Adi Pratomo Jurusan Teknik Informatika, Fakultas Teknologi Informasi, Institut Teknologi Sepuluh Nopember 1 [email protected] 2 [email protected] 3 [email protected] pemrograman yang mengkombinasikan antara performa dan keamanan yang merupakan keuntungan dalam penggunaan bahasa compiler seperti C++ dan kecepatan dari bahasa yang dinamis seperti pyton. Untuk saat ini bahasa Google Go hanya dapat berjalan di FreeBSD, Linux, dan OS X. Berikut ini adalah beberapa keistimewaan dari Google Go, yaitu fast, safe, concurrent, dan open source. JSON singkatan JavaScript Object Notation adalah sebuah format ringkas pertukaran data computer. Formatnya berbasis teks dan terbaca manusia serta digunakan untuk merepresentasikan struktur data sederhana dan larik asosiatif (disebut objek). JSON dianggap sebagai format data yang tidak bergantung pada suatu bahasa dan kode pengolahan dan pembuatan JSON telah tersedia untuk banyak bahasa pemrograman. Database abstraction layer atau lapisan abstraksi database adalah sebuah interface aplikasi pemrograman yang menyatukan komunikasi antara sebuah aplikasi komputer dengan database seperti MySQL, PostgreSQL, dan lain-lain. Database abstraction layer merupakan sebuah pendekatan penyederhanaan atau sebuah penyeragamaan fungsi dari setiap database engine yang ada, jadi tidak perlu mengetahui fungsi API dari database spesifik yang digunakan, yang perlu diketahui hanya fungsi API dari database abstraction layer. Abstract— DBaccesslayer atau DBSlayer adalah sebuah database abstraction layer ringan yang sesuai untuk kebutuhan high-load website yang membutuhkan connection pooling. Ditulis dengan menggunakan bahasa C, DBSlayer berkomunikasi dengan client dengan format data JSON melalui HTTP. Pada tugas akhir ini, dilakukan implementasi awal API DBSlayer dan beberapa fitur yang ada di DBSlayer ke dalam sebuah aplikasi database abstraction layer dengan menggunakan bahasa Google Go. Implementasi fitur yang telah dilakukan adalah komunikasi dengan client dengan JSON melalui HTTP, MySQL adapter, round-robin distribution, automatic failover dan multiple connection databases. Hasil uji coba terhadap perfoma aplikasi GoSlayer, dengan melakukan query SELECT, INSERT, UPDATE, dan DELETE dalam jumlah tertentu, menunjukkan bahwa aplikasi GoSlayer memiliki waktu eksekusi yang hampir sama dengan aplikasi DBSLayer. . Keywords— DBSlayer, Google Go, database abstraction layer, JSON, automatic failover, round-robin distribution I. PENDAHULUAN 1.1 Latar belakang masalah DBaccesslayer atau DBSlayer adalah sebuah database abstraction layer ringan yang sesuai untuk kebutuhan high-load website yang membutuhkan connection pooling. Ditulis dengan menggunakan bahasa C untuk kecepatan, DBSlayer berkomunikasi dengan client dengan JSON melalui HTTP. Beberapa fitur yang dimiliki oleh DBSlayer antara lain, interface HTTP yang sederhana, menggunakan format pertukaran data JSON, MySQL adapter, connection pooling, round-robin distribution, automatic failover, dan multiple connection databases. Dengan berkomunikasi dengan client menggunakan HTTP sebagai protokol dan JSON sebagai sebuah encoding, menyebabkan DBSlayer mudah digunakan oleh berbagai bahasa pemrograman yang dapat berkomunikasi dengan HTTP dan JSON. Pada tugas akhir ini, diimplementasikan API DBSlayer dan beberapa fitur yang dimiliki oleh DBSlayer ke dalam sebuah aplikasi database abstraction layer dengan menggunakan bahasa pemrograman Google Go. Beberapa fitur DBSlayer yang diimplementasikan adalah komunikasi dengan client dengan JSON melalui HTTP, MySQL adapter, round-robin distribution, automatic failover dan multiple connection database. Google Go adalah sebuah bahasa eksperimental yang dikeluarkan oleh Google inc. Google Go merupakan bahasa 1.2 Tujuan Tujuan dari pembuatan tugas akhir ini adalah untuk mengimplementasikan API DBSlayer dan beberapa fitur dari DBSlayer, yaitu komunikasi dengan client dengan JSON melalui HTTP, MySQL adapter, round-robin distribution, automatic failover, dan multiple connection dengan menggunakan bahasa pemrograman Google Go. 1.3 Batasan masalah Batasan akhir dalam pembuatan tugas akhir ini adalah sebagai berikut : Bahasa pemrograman yang digunakan adalah Google Go. Database yang digunakan adalah MySQL. Hanya dapat berjalan di komputer yang berbasis OS Linux. Aplikasi yang telah menggunakan DBSlayer sebagai aplikasi database abstraction layer, dapat menggunakan aplikasi database abstraction layer tanpa mengubah source code yang ada. Aplikasi database abstraction layer ini tidak perlu 1 melakukan proses installasi Aplikasi database abstraction layer ini memiliki fitur: - Komunikasi dengan client melalui HTTP dengan JSON - Menangani single database server maupun multiple database server - Automatic failover - Round-robin distribution II. diberikan. Web.go menyediakan beberapa methods untuk penangan url ayng didasarkan pada route, antara lain : - Web.Get(pattern, handler) - Web.Post(pattern,handler) - Web.Delete(pattern,handler) - Web.Put(pattern,handler) Web.go menyediakan metode untuk menjalankan aplikasi web dengan menggunakan protocol SCGI atau FastCGI. Hal ini memungkinkan aplikasi web.go berjalan dengan lingkungan shared host. TINJAUAN PUSTAKA A. Google Go Go adalah sebuah bahasa pemrograman yang dikembangkan oleh Google inc. desain awal dari Go dimulai pada bulan September 2007 oleh Robert Griesemer, Rob Pike, dan Ken Thompson. Go secara resmi diumumkan pada November 2009, dengan implementasi pada platform Linux dan Mac OS X. Google Go merupakan bahasa pemrograman yang mengkombinasikan antara performa dan keamanan yang merupakan keuntungan dalam bahasa compiler seperti C++ dan kecepatan dari bahasa yang dinamis seperti Python. Go diproyeksikan menjadi bahasa yang dipergunakan untuk system programming dengan dukungan terhadap multiprocessing dan ringan untuk object-oriented design. Berikut ini adalah keistimewaan Google Go, yaitu - Fast Compiler Go menghasilkan code secara cepat. Build hanya memakan waktu hitungan detik dan hasil programnya berjalan secepat C atau C++ code. - Safe Go aman terhadap penggunaan memori - Concurrent Go memperkenalkan lightweight communicating process, yang disebut goroutines. - Fun Go build secara cepat, clean syntax, garbage collection, methods for any type, and run time reflection. Seperti dynamic language tetapi memiliki kecepatan dan keamanan seperti static language. - Opensource Go adalah sebuah proyek open source yang didistribusikan dibawah BSD-style license. C. GoMySQL GoMySQL adalah MySQL client library yang lengkap dan stabil yang ditulis dengan menggunakan bahasa pemrograman Go. Tujuan dari project ini adalah menyediakan sebuah library dengan kegunaan yang tinggi, penanganan internal error yang baik, meniru library yang tersedia untuk bahasa pemrograman lain untuk memberikan kemudahan migrasi system berbasis MySQL ke dalam bahasa Go. D. Goconf Goconf adalah sebuah parser file konfigurasi untuk bahasa pemrograman Google Go. Goconf memiliki beberapa fitur, antara lain : - Memberikan pesan error secara rinci - Tidak perlu menentukan nama bagian (section name), dalam file konfigurasi (―def ault‖ diasumsikan sebagai nama bagian (section name)) - Dapat dibaca dengan menggunakan byte slice atau io.reader - Dapat menulis dengan menggunakan byte slice atau io.writer E. Opts-go Opts.go adalah paket ringan untuk opsi POSIX dan GNU-style untuk bahasa pemrograman Go. Berikut ini adalah fitur-fitur yang dimiliki oleh opts go: - Memiliki layar layanan help otomatis - Dukungan untuk kedua opsi pendek dan panjang (-o dan -opt) - Secara otomatis memungkinkan penggunaan format –l files dan –lfiles - Dukungan untuk opsi yang ditentukan beberapa kali dengan nilai yang berbeda - Dukungan argumen opsional Berikut kekurangan dari opts.go - Semua argumen opsi adalah string - Opts.go tidak mendukung beberapa argumen wajib untuk satu opsi B. Web.go Web.go adalah jalan yang paling simple untuk membuat sebuah aplikasi web dengan menggunakan bahasa pemrograman Go. Web.go mudah dikenali oleh yang melakukan pengembangan website dengan menggunakan higher-level web frameworks seperti Sinatra atau web.py. web.go didesain untuk menjadi web framework yang ringan yang memiliki beberapa fitur antara lain : - Routing untuk menangani url berdasarkan regex (regular exspressions) - Cookies yang aman - Dukungan untuk FastCGI dan SCGI - Aplikasi web dikompilasi ke kode asli, berarti waktu eksekusi dan render halaman lebih cepat. - Melayani file statis Bagian pentng dari sebuah aplikasi web adalah mengetahui apa yang harus dilakukan terhadap url yang F. Opts-go Tujuan dari log4go adalah menjadi paket logging yang kuat, mudah dikonfigurasi untuk mempermudah pengembang Go dalam melakukan debug terhadap program mereka lebih efektif, cepat dan mendiagnosa permasalah tanpa menghambat efektifitas mereka selama pengembangan atau menghambat kinerja dari aplikasi mereka. Paket ini adalah paket pengganti sekaligus ekstensi untuk fungsi logging yang ada di dalam Go. Fitur-fitur yang dimiliki oleh log4go adalah sebagai berikut : 2 - File log denga rotasi (ukuran, jumlah baris, dan perhari) dan format output yang bias dirubah Network logging melalui JSON dan TCP/UDP XML logger Konfigurasi XML tersedia untuk perubahan logging tanpa melakukan compile ulang Kompatibilitas dengan kode yang menggunakan paket log standart Penyaringan log otomatis berdasarkan tnigkat log pada tiap basis output - MySQL memiliki ragam tipe data yang banyak, seperti signed / unsigned integer, float, double, char, date, dan lain-lain. Keamanan MySQL memiliki keamanan seperti level subnetmask, namahost, dan izin akses user dengan sistem yang mendetail serta password yang terenkripsi. I. Database abstraction layer Abstraction layer atau lapisan abstraksi adalah suatu lapisan untuk menyembunyikan kerumitan yang ada pada fungsi-fungsi yang serupa. Begitu pula dengan database abstraction layer, suatu pendekatan penyederhanaan/penyeragaman fungsi dari setiap database engine yang ada, jadi tidak perlu mengetahui fungsi API database spesifik yang digunakan, tetapi hanya perlu mengetahui fungsi dari API database abstraction layer yang digunakan. ODBC adalah salah satu dari berbagai jenis database abstraction layer yang ada. Jenis lainnya adalah ORM, di PHP tersedia ActiveRecord, Doctrine, dll; di Java ada Hibernate, dll. Juga ada yang lebih sederhana, seperti pada PHP ada PDO(PECL), atau PEAR DB(PEAR). Kekurangan dari database abstraction layer sebagai berikut : - Waktu Karena database abstraction layer menjalankan rutin fungsi yang lebih banyak daripada fungsi native yang disediakan, terntunya waktu query lebih lambat - Fungsi kompleks spesifik engine Database abstraction layer hanya menyeragamkan fungsi dan hasil, tidak menyediakan kelebihan spesifik (fungsi kompleks) dari engine database. Missal : pengoptimasian query, karena tidak semu database engine menyediakan cara untuk optimasi query (lewat index). G. JSON JSON, singkatan dari JavaScript Object Notation (notasi objek JavaScript). JSON adalah suatu format ringkas pertukaran data.Formatnya berbasis teks dan terbaca oleh manusia serta digunakan untuk merepresentasikan struktur data sederhana dan objek. Format JSON sering digunakan untuk mentransmisikan data terstruktur melalui suatu koneksi jaringan pada suatu proses yang disebut serialisasi. Aplikasi utamanya adalah pada pemrograman aplikasi web AJAX dengan berperan sebagai alternative terhadap penggunaan tradisional format XML. Walaupun JSON didasarkan pada subset bahasa pemrograman JavaScript dan umumnya digunakan dengan bahasa tersebut, JSON dianggap sebagai format data yang tak tergantung pada suatu bahasa. Kode untuk pengolahan dan pembuatan data JSON telah tersedia untuk banyak jenis bahasa pemrograman. H. MySQL MySQL adalah sebuah perangkat lunak yang menangani sistem manajemen basis data (database management system) atau DBMS yang multiuser dan multithread. MySQL adalah sebuah implementasi dari system manajemen basis data relasional (RDBMS) yang didistribusikan secara gratis di bawah lisensi GPL (General Public License).Setiap pengguna dapat secara bebas menggunakan MySQL, namun dengan batasan perangkat lunak tersebut tidak boleh dijadikan produk turunan yang bersifat komersial. MySQL memiliki beberapa keistimewaan, antara lain: - Portabilitas MySQL dapat berjalan stabil pada berbagai sistem operasi seperti Windows, Linux, FreeBSD, Mac OS, dan masih banyak lainnya. - Open Source MySQL didistribusikan sebagai perangkat lunak open source dibawah lisensi GPL. - Multi-user MySQL dapat digunakan oleh beberapa pengguna dalam waktu yang bersamaan tanpa mengalami permasalahan. - Performance tuning MySQL memiliki kecepatan yang menakjubkan dalam menangani query sederhana, dengan kata lain dapat memproses lebih banyak SQL per satuan waktu. - Ragam tipe data J. HTTP Merupakan sebuah protokol jaringan untuk sistem informasi yang terdistribusi, kolaboratif dan hypermedia. HTTP merupakan landasan dasar dari komunikasi data pada WWW (World Wide Web). Standar pengembangan HTTP dipegang oleh IETF (Internet Engineering Task Force) dan W3C (World Wide Web Consortium) yang berujung pada publikasi serangkaian RFC (Request For Comments), terutama RFC 2616 yang berisi standar atas versi HTTP yang umum digunakan, yaitu HTTP/1.1. HTTP berfungsi sebagai protokol request-response pada model komputasi client-server. Dalam HTTP, web browser akan bertindak sebagai client, sementara aplikasi yang dijalankan pada komputer yang melakukan hosting resource bertindak sebagai server. Client akan mengiriman sebuah request message HTTP ke server. Server yang menyimpan resource atau menyediakan resource mengirimkan response message ke client. HTTP merupakan salah satu protokol pada layer aplikasi pada framework Internet Protocol Suite atau yang biasa dikenal dengan TCP/IP yang dinamakan berdasarkan dua protokol penting yang digunakan untuk protokol 3 komunikasi internet dan jaringan lainnya yaitu protokol TCP (Transmission Control Protocol) dan IP (Internet Protocol). Resource dari HTTP diidentifikasi dan dilokasikan pada jaringan dengan menggunakan URI (Uniform Resource Identifiers) atau secara lebih mendetail yaitu URLs (Uniform Resource Locators) dan menggunakan skema http atau https. URIs dan HTML menghasilkan sebuah sistem sumber yang saling terhubung yang dinamakan dokumen hypertext pada internet yang kemudian menghasilkan terbentuknya World Wide Web pada tahun 1990. III. Apabila aplikasi GoSlayer terhubung dengan multiple database server, maka aplikasi GoSlayer secara otomatis melakukan round-robin distribution dan automatic failover. Berikut ini adalah diagram alir dari sistem aplikasi yang ditunjukkan pada Gambar 4. Client application Send request Client request via JSON over HTTP Result via JSON over HTTP PERANCANGAN PERANGKAT LUNAK Pengerjaan tugas akhir ini membangun aplikasi yang diberi nama GoSlayer. Dimana aplikasi ini merupakan aplikasi database abstraction layer yang mengimplementasikan API DBSlayer dan beberapa fitur DBSlayer dengan menggunakan bahasa pemrograman Google Go. Aplikasi ini berkomunikasi dengan client melalui HTTP dengan format data JSON. Aplikasi GoSlayer mengimplementasikan beberapa fitur yang ada di DBSLayer yaitu MySQL adapter, distribution, automatic failover, dan multiple connection database. Arsitektur sistem secara keseluruhan dari sistem yang dibangun dalam tugas akhir ini ditunjukkan pada Gambar 1 : Send result Application GoSlayer Pass the processesed request Distribusi roundrobin Automatic failover MySQL server Send result Gambar 4 diagram alir sistem Aplikasi IV. IMPLEMENTASI PERANGKAT LUNAK Spesifikasi perangkat keras dan perangkat lunak yang digunakan dalam implementasi perangkat lunak untuk aplikasi tugas akhir ini ditampilkan pada Tabel 1. Gambar 1 Arsitektur system Tabel 1 Lingkungan implementasi perangkat lunak intel® Pentium 4 @ 3.00 GHz Perangkat Prosesor : Keras Memori : 1,5 GB Sistem Linux Debian Squeeze Perangkat Operasi : Lunak Perangkat Aplikasi GoSlayer berkomunikasi dengan client dengan menggunakan JSON melalui HTTP. Berikut ini adalah beberapa skenario arsitektur sistem yang bisa digunakan oleh aplikasi GoSlayer. Pengembang: Gambar 2 Arsitektur sistem dengan single database server Communication via JSON over HTTP MySQL Server Implementasi yang telah dilakukan adalah menjalankan aplikasi GoSLayer, komunikasi dengan client, round-robin distribution, automatic failover, multiple connection databases, multiple queries dan log. connected MySQL master server Application GoSlayer V. Round-robin distribution & Automatic failover UJI COBA DAN EVALUASI Lingkungan uji coba terbagi kedalam dua bagian, yaitu lingkungan uji coba fungsionalitas dan uji coba performa. Lingkungan uji coba yang digunakan dalam uji coba fungsionalitas dan uji coba performa terdiri atas : - Menggunakan 4 komputer dengan spesifikasi berikut o Processor intel® core ™ 2 duo cpu E7200 @ 2.53GHz dengan memory 2 GB - Menggunakan komputer yang berjalan dengan sistem operasi GNU/Linux untuk aplikasi GoSlayer. - Menggunakan komputer yang berjalan dengan sistem operasi Windows untuk komputer aplikasi client dan untuk database server. MySQL slave server Application client Communication via JSON over HTTP IDE Eclipse Google Go Plugin Round-robin distribution & Automatic failover Application GoSlayer MySQL slave server Gambar 3 Arsitektur sistem dengan master slave database server 4 - Menggunakan database server MySQL ./GoSlayer –c GoSlayer.cnf –s db-1:db-2 –p 8888 Gambar 7 menjalankan aplikasi GoSlayer Isi dari file konfigurasi database adalah nama database server, username database, ip host database server, password database dan nama database yang digunakan. Seperti yang ditunjukkan pada Gambar 8 Single connection database Application GoSlayer 10.151.36.21 Database server 1 10.151.36.19 #GoSlayer.cnf [db-1] user=world host=10.151.36.19 password=world database=slayer [db-2] user=world host=10.151.36.27 password=world database=slayer application client 10.151.36.33 Multiple connection databases Application GoSlayer 10.151.36.21 Database server 1 10.151.36.19 Gambar 8 isi file konfigurasi database Multiple connection databases Apabila opsi port aplikasi tidak di isi, maka aplikasi secara otomatis menggunakan port 9999. Database server 2 10.151.36.27 1.2. API aplikasi GoSlayer Gambar 5 Topologi lingkungan uji coba API aplikasi GoSlayer Uji coba ini bertujuan untuk melihat hasil implementasi API GoSlayer yang mengimplementasikan API DBSlayer. API yang diimplementasikan oleh aplikasi GoSlayer adalah db dan shutdown. Gambar 9, Gambar 10 , Gambar 11 dan Gambar 12 menunjukkan hasil uji coba API db. Client mengirimkan request terhadap aplikasi GoSlayer. Sesuai dengan API yang disediakan oleh aplikasi GoSlayer, maka aplikasi akan mengembalikan result ke dalam bentuk format data JSON melalui HTTP. Maka dilakukan uji coba mengirimkan request Query, baik dalam perintah SELECT, INSERT, UPDATE, DELETE. 1. Uji Coba Fungsionalitas Uji coba fungsionalitas dilakukan untuk melihat apakah fungsi-fungsi dasar dari sistem ini berjalan secara maksimal. Uji coba fungsionalitas dilakukan terhadap aplikasi GoSlayer. Karena bertujuan untuk menguji fungsi sistem berjalan sesuai dengan sistem. Uji coba fungsionalitas ini meliputi beberapa pengujian fungsi-fungsi pokok, seperti menjalankan aplikasi GoSlayer, komunikasi dengan client, round-robin distribution, automatic failover, multiple connection databases, multiple queries. Sehingga skenario yang disusun untuk uji coba antara lain : - Uji coba menjalankan aplikasi GoSlayer - Uji coba API aplikasi GoSlayer - Uji coba round-robin distribution - Uji coba automatic failover - Uji coba multiple connection databases - Uji coba multiple queries Pada uji coba ini, client yang digunakan berupa web browser, karena request yang dikirimkan melalui HTTP dan dalam bentuk format data JSON Gambar 9 hasil ujicoba API db dengan query SELECT pada client 1.1. Menjalankan aplikasi GoSlayer Uji coba ini bertujuan untuk melihat bagaimana aplikasi GoSlayer dijalankan. Untuk menjalankan aplikasi GoSlayer, dibutuhkan beberapa opsi, yaitu opsi path file konfigurasi database, opsi nama database server, dan opsi port aplikasi. Seperti ditunjukkan pada Gambar 6, perintah untuk menjalankan aplikasi GoSlayer. Gambar 10 hasil ujicoba API db dengan query INSERT pada client ./GoSlayer –c path file konfigurasi –s nama database –p port Gambar 6 perintah menjalankan aplikasi GoSlayer Gambar 11 hasil ujicoba API db dengan query UPDATE pada client Gambar 7 menunjukkan prose menjalankan aplikasi GoSlayer ./GoSlayer –c GoSlayer.cnf –s db-1 5 Dapat dilihat dari Gambar 15, terdapat pembagian kerja database server, di mana request ke-1 ditangani oleh db1 dan request ke-2 ditangani oleh db-2. 1.4. Automatic failover Uji coba ini bertujuan untuk melihat bagaimana aplikasi GoSlayer melakukan automatic failover terhadap database server yang tidak mampu menangani request. Untuk itu dilakukan uji coba dengan mematikan salah satu database server yang ada. Sehingga apabila ada request yang menuju ke database server yang mati, secara otomatis di arahkan ke database server yang lain. Lalu kita mematikan salah satu database server yang ada, dalam ujicoba ini db-2. Apabila ada request yang menuju ke db-2, maka secara otomatis di arahkan meuju db-1, seperti yang ditunjukkan pada gambar dan Gambar 17 Gambar 12 hasil ujicoba API db dengan query DELETE pada client Hasil uji coba implementasi API shutdown ditunjukkan pada Gambar 13 dan Gambar 14. Gambar 13 menunjukkan bahwa aplikasi berhasil dimatikan dengan menggunakan API shutdown. Perintah API shutdown, hanya bisa dilakukan dari komputer dimana aplikasi GoSlayer dijalankan. Gambar 16 tampilan log saat db-2 hidup Gambar 13 aplikasi GoSlayer berhasil dimatikan Gambar 14 menunjukkan aplikasi GoSlayer gagal di matikan, karena tidak dilakukan dari komputer tempat aplikasi GoSlayer berada. Gambar 17 tampilan log saat db-2 dimatikan Apabila database server tersebut sudah bisa menerima request lagi, maka secara otomatis aplikasi GoSlayer akan mengirimkan request kembali ke database server tersebut. Gambar 18 menunjukkan tampilan log setelah db-2 dihidupkan kembali. Gambar 14 aplikasi GoSlayer gagal dimatikan Gambar 18 tampilan log saat db-2 dihidupkan kembali 1.3. Round-robin distribution Uji coba ini bertujuan untuk melihat bagaimana aplikasi GoSlayer melakukan pembagian beban kerja terhadap beberapa database server secara round-robin distribution. Gambar 15 menunjukkan log yang pada aplikasi GoSlayer. 1.5. Multiple Connection Databases Uji coba ini bertujuan untuk melihat bagaimana aplikasi GoSlayer dapat melakukan koneksi dengan single database server ataupun multiple databaser server. Gambar 19 menunjukkan aplikasi GoSlayer berjalan dengan single database server. Gambar 15 tampilan log pada request ke -1 dan ke-2 6 bahwa dari 50 request concurrent yang dikirim, terdapat 1 error. 100 request concurrent Gambar 19 aplikasi berjalan dengan menggunakan satu database server Gambar 25 hasil web stress tool dengan 100 request Gambar 25 menunjukkan hasil web stress tool terhadap Aplikasi GoSlayer. Dapat dilihat pada gambar, bahwa dari 100 request concurrent yang dikirim, terdapat 1 error. Gambar 20 menunjukkan aplikasi berjalan dengan multiple database server. 200 request concurrent Gambar 20 aplikasi berjalan dengan menggunakan 2 database server Gambar 26 hasil web stress tool dengan 200 request Gambar 26 menunjukkan hasil web stress tool terhadap Aplikasi GoSlayer. Dapat dilihat pada gambar, bahwa dari 200 request concurrent yang dikirim, terdapat 7 error. 1.6. Multiple queries Uji coba ini bertujuan untuk melihat bagaimana aplikasi GoSlayer dapat menangani single query maupun multiple queries dalam request yang dikirimkan oleh client. Tampilan hasil single query ditunjukkan pada Gambar 21. 3. Uji Performa Uji coba ini dilakukan dengan tujuan untuk mengetahui sejauh mana kemampuan aplikasi ini bekerja dan apa batasan atau kekurangan dari aplikasi ini sehingga dapat dikembangkan lebih lanjut. Adapun performa yang diukur dalam pengujian ini adalah waktu yang diperlukan untuk query pada database dalam satuan detik. File sumber yang dipakai adalah hasil keluaran tabel data dalam bentuk csv dengan nama data.csv Gambar 21 hasil single query pada client Gambar 22 menunjukkan tampilan hasil multiple queries, Tabel 2 Deskripsi tabel data Name DataType Length id_num Int 11 num_rand int 11 say_num varchar 100 Uji coba ini dilakukan dengan menggunakan DBSlayer dan GoSlayer. Pada pengujian query Insert, dilakukan langkahlangkah sebagai berikut : 1. Kosongkan tabel data. 2. Buka file data.csv. 3. Catat waktu mulai. 4. Ambil baris. 5. Data dimasukkan dengan perintah insert into SQL 6. Cek apakah jumlah baris yang diset telah tercukupi? Jika tidak, kembali ke langkah 3. 7. Catat waktu akhir. 8. Hitung waktu yang diperlukan dengan mengurangi waktu akhir dengan waktu awal. 9. Tutup file data.csv Gambar 22 hasil multiple queries pada client 2. Uji Concurrency uji concurrency yang dilakukan terhadap aplikasi GoSLayer ini dilakukan dengan menggunakan aplikasi web stress tool dan melakukan sejumlah multiple request. Untuk lebih terarah dalam uji coba concurrency ini, perlu didefinisikan query yang berfungsi sebagai inputan aplikasi GoSlayer. Query dalam syntax SQL didefinisikan pada Gambar 23. SELECT * FROM data limit 2; Gambar 23 query untuk uji concurrency Uji concurrency dilakukan dengan memberikan request concurrent terhadap aplikasi GoSlayer. Request concurrent yang diberikan ke aplikasi GoSlayer adalah sebagai berikut Pada pengujian query Select, dilakukan 2 jenis skenario, yaitu query Select melalui pembacaan file csv dan query Select menggunakan sql. 1. Pada pengujian query Select menggunakan sql dilakukan langkah-langkah sebagai berikut : 2. Catat waktu mulai. 3. Lakukan query select * dengan menggunakan beberapa format limit, antara lain limit 10, 100 dan 1000. 4. Catat waktu akhir. 50 request concurrent Gambar 24 hasil web stress tool dengan 50 request Gambar 24 menunjukkan hasil web stress tool terhadap Aplikasi GoSlayer. Dapat dilihat pada gambar, 7 5. Hitung waktu yang diperlukan dengan mengurangi waktu akhir. 12. Catat waktu akhir 13. Hitung waktu yang diperlukan dengan mengurangi waktu akhir dengan waktu awal. 14. Tutup file data.csv Pada pengujian query Select melalui file csv dilakukan langkah-langkah sebagai berikut : 1. Kosongkan tabel data. 2. Buka file data.csv. 3. Ambil baris. 4. Data dimasukkan dengan perintah insert into SQL 5. Cek apakah jumlah baris yang diset telah tercukupi? Jika tidak, kembali ke langkah 3. 6. Tutup file data.csv 7. Buka file data.csv 8. Catat waktu mulai. 9. Ambil baris. 10. Lakukan query select dengan criteria (where clause) sesuai dengan baris yang diambil. 11. Cek apakah jumlah baris yang diset telah tercukupi? Jika tidak, kembali ke langkah 9. 12. Catat waktu akhir. 13. Hitung waktu yang diperlukan dengan mengurangi waktu akhir dengan waktu awal. 14. Tutup file data.csv Pada pengujian query Select, Insert, Update, dan Delete, dilakukan di db-1. a) Query Insert Tabel 3 Performa Query Insert jumlah DBSlayer GoSlayer 1 0.0229 0.0253 10 0.2828 0.2986 100 2.3507 2.2612 1000 25.8861 25.9406 Data dalam satuan detik Pada pengujian query Update , dilakukan langkahlangkah sebagai berikut : 1. Kosongkan tabel data. 2. Buka file data.csv. 3. Ambil baris 4. Data dimasukkan dengan perintah Insert into SQL. 5. Cek apakah jumlah baris yang diset telah tercukupi? Jika tidak, kembali ke langkah 3. 6. Tutup file data csv. 7. Buka file data.csv 8. Catat waktu mulai 9. Ambil baris 10. Lakukan query Update dengan kriteria (where clause) sesuai dengan baris yang diambil. 11. Cek apakah jumlah baris yang diset telah tercukupi? Jika tidak, kembali ke langkah 9. 12. Catat waktu akhir 13. Hitung waktu yang diperlukan dengan mengurangi waktu akhir dengan waktu awal. 14. Tutup file data.csv Gambar 27 Grafik performa Query Insert Tabel 3 merupakan tabel hasil pengujian performa waktu query Insert untuk sejumlah data. Hasil pengujian dalam bentuk grafik dapat dilihat pada Gambar 27. Dari data-data pengujian query Insert dapat dilihat bahwa performa GoSlayer dan DBSlayer hampir sama disetiap waktunya. b) Query Select Pengujian dengan menggunakan sql Tabel 4 Performa Query Select dengan sql Jumlah DBSlayer GoSlayer 10 0.0031 0.0033 100 0.0069 0.0072 1000 0.0245 0.0506 Pada pengujian query Delete , dilakukan langkahlangkah sebagai berikut : 1. Kosongkan tabel data. 2. Buka file data.csv. 3. Ambil baris 4. Data dimasukkan dengan perintah Insert into SQL. 5. Cek apakah jumlah baris yang diset telah tercukupi? Jika tidak, kembali ke langkah 3. 6. Tutup file data csv. 7. Buka file data.csv 8. Catat waktu mulai 9. Ambil baris 10. Lakukan query Delete dengan kriteria (where clause) sesuai dengan baris yang diambil. 11. Cek apakah jumlah baris yang diset telah tercukupi? Jika tidak, kembali ke langkah 9. 8 Data dalam satuan detik c) Query Update Tabel 6 Performa Query Update Jumlah DBSlayer GoSlayer 1 0.0256 0.0206 10 0.25 0.2082 100 2.7342 2.3734 1000 26.5417 23.6641 Data dalam satuan detik Gambar 28 Grafik performa Query Select dengan sql Tabel 4 merupakan tabel hasil pengujian performa waktu query Select untuk sejumlah data dengan menggunakan sql. Hasil pengujian dalam bentuk grafik dapat dilihat pada Gambar 28. Dari data-data pengujian query Select dengan sql dilihat bahwa performa GoSlayer lebih unggul dibanding dengan DBSlayer. Gambar 30 Grafik performa Query Update Tabel 6 merupakan tabel hasil pengujian performa waktu query Update untuk sejumlah data. Hasil pengujian dalam bentuk grafik dapat dilihat pada Gambar 30. Dari data-data pengujian query Update dapat dilihat bahwa performa GoSlayer lebih sedikit unggul dibanding dengan DBSlayer. Pengujian dengan menggunakan file csv Tabel 5 Performa Query Select dengan file csv Jumlah DBSlayer GoSlayer 1 0.0045 0.0038 10 0.0467 0.0335 100 0.4138 0.2545 1000 4.1572 2.6212 d) Query Delete Tabel 7 Performa Query Delete Jumlah DBSlayer GoSlayer 1 0. 0201 0.0229 10 0. 2667 0.2459 100 2. 2897 2.2295 1000 24.4969 23.7384 Data dalam satuan detik Data dalam satuan detik Gambar 29 Grafik performa Query Select dengan file csv Tabel 5 merupakan tabel hasil pengujian performa waktu query Select untuk sejumlah data. Hasil pengujian dalam bentuk grafik dapat dilihat pada Gambar 29. Dari data-data pengujian query Select dengan file csv dapat dilihat bahwa performa GoSlayer lebih unggul dibanding dengan DBSlayer. Gambar 31 Grafik performa Query Delete Tabel 7 merupakan tabel hasil pengujian performa waktu query Delete untuk sejumlah data. Hasil pengujian dalam bentuk grafik dapat dilihat pada Gambar 31. 9 Dari data-data pengujian query Insert dapat dilihat bahwa performa GoSlayer dan DBSlayer hampir sama disetiap waktunya. VI. KESIMPULAN DAN SARAN Kesimpulan yang dapat diambil dari tugas akhir ini antara lain sebagai berikut : 1. Perangkat lunak yang dibuat sudah mampu mengimplementasikan API aplikasi DBSlayer dan beberapa fitur yang dimilliki oleh aplikasi DBSlayer. 2. Perangkat lunak yang dibuat sudah mampu berkomunikasi dengan client melalui HTTP dengan JSON. 3. Perangkat lunak yang dibuat sudah mampu menangani single database server maupun multiple database server. 4. Perangkat lunak yang dibuat sudah mampu melakukan automatic failover. 5. Perangkat lunak yang dibuat sudah mampu melakukan round-robin distribution. 6. Hasil uji coba menunjukkan bahwa dalam segi performa, dengan melakukan query SELECT, INSERT, UPDATE, DELETE dalam jumlah tertentu dan di lakukan pencatatan waktu kecepatan waktu eksekusi, didapatkan koneksi menggunakan GoSlayer memiliki kecepatan eksekusi yang hampir sama dengan aplikasi DBSlayer. 7. Hasil uji coba menunjukkan bahwa dalam segi concurrency, aplikasi GoSlayer masih belum bisa menangani request concurrent secara sempurna. 8. Aplikasi ini dapat dijalankan pada komputer berbasis sistem operasi GNU/Linux tanpa melalui proses installasi. Beberapa saran perbaikan untuk pengembangan Tugas Akhir ini adalah : 1. Mengubah arsitektur sistem aplikasi menjadi asynchronus sehingga mampu menangani request concurrent secara sempurna VII. DAFTAR PUSTAKA 1 The Go Programming Language – Documentation, source, and other for Google’s Go language. http://golang.org 2 Go Programming Language Resources. http://golang.cat-v.org 3 Philio. GoMySQL – MySQL client library. https://github.com/Philio/GoMySQL/ 4 Hoisie. Web.go – a web framework for Go. http://www.getwebgo.com/ 5 Anonim. Goconf – Go configuration file parser – Project hosting on Google Code. http://code.google.com/p/goconf/ 6 Anonim. Opts-go – Posix- and GNU-style options fo goProject hosting on Google Code. http://code.google.com/p/opts-go/ 7 Anonim. Log4go – logging package similar to log4j for the Go programming. http://code.google.com/p/log4go/ 10