Implementasi Database Abstraction Layer untuk MySQL

advertisement
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
Download