Proposal Skripsi Analisa Kinerja Layer 4 dan Layer 7 Load balancer pada Protokol Websocket
-
Upload
husnul-anwari -
Category
Documents
-
view
228 -
download
1
description
Transcript of Proposal Skripsi Analisa Kinerja Layer 4 dan Layer 7 Load balancer pada Protokol Websocket
Analisa Kinerja Layer 4 dan Layer 7 Load balancer pada Protokol Websocket
Proposal Skripsi
Disusun oleh: Husnul Anwari
NIM: 125150200111051
INFORMATIKA
PROGRAM TEKNOLOGI INFORMASI DAN ILMU KOMPUTER UNIVERSITAS BRAWIJAYA
MALANG 2016
i
DAFTAR ISI
DAFTAR ISI ....................................................................................................................... i
DAFTAR TABEL ............................................................................................................... iii
DAFTAR GAMBAR ......................................................................................................... iv
BAB 1 PENDAHULUAN .................................................................................................... 1
1. 1 Latar Belakang................................................................................................. 1
1. 2 Rumusan Masalah ........................................................................................... 2
1. 3 Tujuan ............................................................................................................. 2
1. 4 Manfaat .......................................................................................................... 3
1. 5 Sistematika Penulisan ..................................................................................... 3
BAB 2 LANDASAN KEPUSTAKAAN................................................................................... 5
2. 1 Websocket ...................................................................................................... 5
2.2.1 Websocket Handshake ............................................................................ 6
2.2.2 Data Framing ........................................................................................... 6
2.2.3 Websocket API......................................................................................... 7
2. 2 Load balancing ................................................................................................ 7
2.3.1 Round-Robin DNS .................................................................................... 8
2.3.2 Layer Transport Load balancing (L4) ........................................................ 8
2.3.3 Layer Aplikasi Load balancing (L7) ........................................................... 8
2. 3 Linux Virtual Server ......................................................................................... 9
2.4.1 Metode IP load balancing...................................................................... 10
2.4.2 Algoritma Penjadwalan ......................................................................... 12
2. 4 Nginx ............................................................................................................. 12
2. 5 Node.js .......................................................................................................... 13
2. 6 Socket.io ....................................................................................................... 14
BAB 3 METODOLOGI PENELITIAN ................................................................................. 16
3.1 Studi Literatur ............................................................................................... 16
3.2 Analisa Kebutuhan ........................................................................................ 16
3.3 Perancangan ................................................................................................. 17
3.4 Implementasi ................................................................................................ 17
3.5 Pengujian dan Analisis .................................................................................. 17
3.6 Pengambilan Kesimpulan .............................................................................. 18
ii
DAFTAR PUSTAKA......................................................................................................... 19
iii
DAFTAR TABEL
Tabel 2.1 Grafik kuadratik Base-12 ............................................................................ 7
iv
DAFTAR GAMBAR
Gambar 2.1 Proses komunikasi websocket ............................................................... 6
Gambar 2.2 Websocket frames .................................................................................. 7
Gambar 2.3 Arsitektur LVS........................................................................................ 10
Gambar 2.4 LVS/NAT ................................................................................................. 11
Gambar 2.5 LVS/TUN ................................................................................................ 11
Gambar 2.6 LVS/DR ................................................................................................... 12
Gambar 2.7 Arrrsitektur Nginx ................................................................................. 13
Gambar 3.1 Diagram alur metodologi penelitian ................................................... 16
1
BAB 1. PENDAHULUAN
1. 1 Latar Belakang
Protokol HTTP kini telah menjadi standar untuk komunikasi pada web application. Cara kerja protokol HTTP sangat sederhana yaitu client mengirimkan request kemudian server memberikan balasan. Akan tetapi pada sistem yang lebih kompleks atau web application dengan update data secara real-time, proses komunikasi menggunakan HTTP dapat menyebabkan penumpukan beban pada server dan pada akhirnya menyebabkan latency yang tinggi. Peningkatan jumlah request yang dikirimkan client dengan membawa beban yang banyak juga bisa membuat server mengalami overload bahkan down untuk sesaat. Untuk kondisi tertentu, momen sesaat tersebut bisa menjadi vital dan dapat menimbulkan kerugian apabila tidak ditangani dengan baik.
Sebelumnya, banyak cara yang dilakukan untuk mengatasi kelemahan protokol HTTP pada saat pengiriman data secara real-time, akan tetapi tidak semua dilakukan penuh secara asynchronous melainkan dengan mensimulasikannya menggunakan metode long-poling dan server side push seperti Comet (Kulshrestha, 2013). Kelemahan dari hal ini adalah efisiensi yang rendah serta membutuhkan sumber daya yang besar (Zhang & Shen, 2013).
Protokol websocket dan websocket API dihadirkan bersamaan dengan HTML 5 sebagai upgrade dari protokol HTTP untuk komunikasi data secara real-time. websocket menjadi satu-satunya framework pada web yang mendukung komunikasi secara asynchronous dan full-duplex. Terdapat banyak riset yang sudah dilakukan tenang perbandingan performa websocket dengan teknologi sejenis dan hasilnya adalah semua riset tersebut menyimpulkan bahwa websocket merupakan terobosan baru dalam protokol komunikasi secara real-time (Skvorc, Horvat, & Srbljic, 2014). Sampai sekarang websocket sudah didukung oleh browser seperti Chrome, Safari, Opera, Firefox dan IE10 (Zhang & Shen, 2013).
Meskipun beban server dapat dikurangi dengan penerapan websocket, namun dengan pertumbuhan pengguna internet yang meningkat tajam, hal yang menjadi penting adalah menjaga layanan aplikasi berjalan dengan baik seiring dengan pertumbuhan pengguna. Teknik scaling out merupakan solusi yang banyak digunakan yaitu dengan menambahkan beberapa server untuk membentuk sebuah cluster. Metode ini merupakan solusi yang efektif dengan peningkatan availability, scalability, serta reliability secara eksponensial. ada sebuah cluster, pemilihan server diatur dengan mengimplementasikan load balancer. Ada banyak jenis load balancer dan tiap-tiap load balancer tersebut memiliki kelebihan dan kekurangan masing-masing serta kondisi-kondisi khusus dalam penerapannya. Akan tetapi tidak semua jenis load balancer dapat diterapkan pada protokol websocket dikarenakan proses komunikasi yang berbeda dan tergolong teknologi yang masih baru.
2
Beberapa jenis load balancer yang sudah mendukung websocket yaitu layer 4 dan layer 7 load balancer. Layer 4 load balancer dapat digunakan untuk websocket karena bekerja berdasarkan IP pada TCP atau UDP port dimana TCP adalah inti dari protokol websocket. Linux Virutal Server (LVS) merupakan Layer 4 Load balancer berbasis open source dengan tujuan membangun high-performance dan high-availabity server pada linux dengan menggunakan clustering untuk menyediakan layanan yang scalable dan reliable (Xu & Xie, 2009). Sedangkan layer 7 load balancer bekerja pada layer aplikasi dimana websocket diimplementasikan. Dikarenakan masih baru, tak semua Layer 7 load balancer mendukungi websocket, salah satu yang sudah adalah Nginx. Nginx merupakan web server paling banyak digunakan kedua di dunia, berdasarkan NetCraft. Nginx sudah digunakan sebanyak 15% dari jutaan website di dunia. Nginx merupakan modular, event-driven, asynchronous dan dibangun berdasarkan non-blocking arsitektur (Prakash, Biju, & Sowmya, 2015). Berdasarkan uraian di atas, penulis hendak melakukan penelitian untuk menganalisa kinerja dua jenis load balancer tersebut untuk protokol websocket.
Pengujian kinerja dari sistem load balancing yang dibangun dilakukan dengan membuat koneksi dalam jumlah banyak dalam satu waktu pada alamat load balancer. Kinerja dari load balancer dapat dilihat dari CPU utilization pada tiap server, troughput dari server ke client, latency, dan jumlah client yang bisa dilayani oleh server secara bersamaan atau concurrency. Dengan demikian akan diketahui metode load balancing yang paling efektif dan efisien dan bisa diterapkan pada protokol websocket.
1. 2 Rumusan Masalah
Berdasarkan latar belakang yang dibahas, maka rumusan masalah yang dapat
dikaji adalah sebagai berikut :
1. Bagaimana kinerja Layer 4 load balancer (LVS) dan Layer 7 load balancer
(Nginx) pada websocket server dari segi :
a. Penggunaan CPU pada tiap server (CPU utilization)
b. Data yang berhasil dikirimkan dalam satuan waktu (troughput)
c. Waktu dari client mengirim request hingga menerima balasan dari
server (latency)
d. Jumlah client yang dapat dilayani oleh server (concurrency)
2. Jenis load balancer manakah yang paling efektif dan efisien pada
websocket server.
3. Seberapa besar peningkatan kinerja websocket server setelah
menggunakan cluster dan load balancer.
1. 3 Tujuan
Tujuan dari penelitian ini yaitu :
3
1. Merancang peningkatan kinerja websocket server dengan menerapkan
load balancing dan membuat cluster.
2. Menguji kinerja Layer 4 load balancer (LVS) dan Layer 7 load balancer
(Nginx) pada websocket server.
3. Mengetahui jenis load balancer yang paling efektif dan efisien untuk pada
protokol websocket.
1. 4 Manfaat
Dari penelitian ini diharapkan manfaat yang didapatkan nantinya adalah
menyediakan data yang teruji dan terukur tentang kinerja Layer 4 dan Layer 7 load
balancer untuk websocket server, menyediakan saran dalam memilih teknologi
yang tepat dalam membangun websocket server yang scalable dan reliable.
Terakhir adalah membantu penulis untuk lebih memahami teknologi websocket,
load balancing dan komponen terkait dalam sistem terdistribusi.
1. 5 Sistematika Penulisan
Sistematika penulisan ditujukan untuk memberikan gambaran dan uraian dari penulisan skripsi secara garis besar yang meliputi beberapa bab, sebagai berikut :
BAB I PENDAHULUAN
Pada bab ini akan dijelaskan mengenai latar belakang pembuatan skripsi, rumusan
masalah, tujuan dan manfaat, serta sistematika penulisan.
BAB II LANDASAN KEPUSATAKAAN
Landasan kepustakaan berisi uraian dan pembahasan tentang teori, konsep,
model, metode, atau sistem dari literatur ilmiah, yang berkaitan dengan topik
skripsi dan pertanyaan penelitian. Landasan kepustakaan ini digunakan sebagai
dasar perancangan, implementasi dan analisa hasil pada penelitian ini.
BAB III METODOLOGI PENELITIAN
Dalam bab metode penelitian terdapat metode dan langkah kerja dalam analisa
kinerja load balancer pada websocket server. Langkah-langkah yang dijelaskan di
sini meliputi studi literatur, perancangan, implementasi, pengujian dan analisis,
serta pengambilan kesimpulan dan saran.
BAB IV ANALISA KEBUTUHAN DAN PERANCANGAN
Bab ini membahas analisa kebutuhan sistem seperti sistem operasi, jenis load
balancer, lingkungan pengujian serta apa saja metrik yang digunakan. Bab ini juga
berisi bagaimana skema perancangan sistem yang akan dibangun, serta dijelaskan
juga bagaimana skenario pengujian sistem untuk mendapatkan hasil yang akurat
dan bisa diuji kembali validitasnya.
4
BAB V IMPLEMENTASI
Bab implementasi membahas bagaimana mengimplementasikan rancangan yang
sudah dibuat sebelumnya agar bisa berjalan dengan baik sehingga bisa didapatkan
data yang akurat sesuai metrik yang sudah ditentukan. Bab ini juga membahas
permasalahan-permasalahan yang mungkin ditemui saat implementasi dan
bagaimana solusi untuk masalah tersebut.
BAB VI PENGUJIAN DAN ANALISIS
Bab ini meliputi tahap pengujian dari sistem berdasarkan skenario yang sudah
dibuat untuk mengambil data sesuai metrik. Selanjutnya data tersebut akan
dianalisa dan diubah menjadi bentuk yang lebih mudah dipahami seperti tabel dan
grafik.
BAB VII PENUTUP
Pada bab ini terdapat kesimpulan yang diambil berdasarkan analisa data-data
sesuai metrik dari hasil hasil pengujian. Kesimpulan ini akan menjawab
pertanyaan-pertanyaan pada rumusan masalah. Bab ini juga menampung saran-
saran untuk penelitian selanjutnya.
5
BAB 2. LANDASAN KEPUSTAKAAN
Kajian pustaka membahas penelitian yang telah ada dan yang diusulkan serta
dijelakan mengenai konsep teori yang dijadikan landasan dalam penelitian ini.
Teori yang dibahas adalah websocket, Load balancing, Linux Virtual Server, Nginx,
Node.Js serta Socket.io.
2. 1 Websocket
Websocket merupakan protokol pada layer aplikasi yang dibangun di atas
koneksi TCP. Hal ini memungkinkan komunikasi secara dua arah pada web.
websocket merupakan alternatif dari teknologi sebelumnya yaitu HTTP polling
dengan membawa peningkatan dalam kehandalan, kinerja, serta efisiensi (Skvorc,
Horvat, & Srbljic, 2014). Dari uraian di atas maka websocket sangat tepat
digunakan untuk web dengan update data real-time seperti game, chat, Internet
of Things (IoT) dan masih banyak lagi.
Meskipun memiliki fungsi yang hampir sama dan performanya tidak sebaik
protokol TCP dalam komunikasi, namun websocket mendukung teknologi
sebelumnya (backward compatible) untuk infrastruktur web saat ini (Skvorc,
Horvat, & Srbljic, 2014). Websocket handshake masih menggunakan standar HTTP
1.1, terlebih lagi komunikasi dengan websocket mendukung fitur-fitur yang sudah
ada seperti :
1. Dukungan penuh secara native pada web browser, termasuk SSL untuk
keamanan.
2. Proxy dan firewall.
3. URL-based endpoint yang memungkinkan banyak atau bahkan layanan
tidak terbatas pada satu TCP port.
4. Tidak ada batasan panjang data seperti yang ada pada protokol TCP.
Gambar di bawah ini menjelaskan sequence diagram dari webscoket protokol
serta perbandingan dengan protokol TCP. Karena dibangun menggunakan TCP,
maka websocket juga membutuhkan handshake terlebih dahulu untuk membuat
koneksi, bedanya pada TCP diperlukan 3-way-handsake sedangkan pada
websocket client mengirim upgrade request dan server membalasnya dengan
upgrade respond. Dari sini maka terbentuklah koneksi antara server yang
mendukung komunikasi secara asynchronous dan full-duplex.
6
Gambar 2.1 Proses komunikasi websocket
2.2.1 Websocket Handshake
Spesifikasi standar protokol websocket didefinisikan dalam RFC6455. Untuk
menjaga protokol ini bisa bekerja pada teknologi web yang sudah ada, spesifikasi
tersebut mengatur bahwa koneksi websocket diawali dengan melakukan
handshake untuk perpindahan dari HTTP ke websocket. Bowser mengirim
websocket request ke server (ws:// atau wss://), menandakan bahwa browser
ingin berpindah protokol dari HTTP menjadi websocket. Server menangkap
informasi ini berdasarkan Upgrade header yang dikirim seperti request berikut:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-websocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-websocket-Protocol: chat, superchat
Sec-websocket-Version: 13
Apabila server mendukung websocket maka ia akan mengirimkan balasan
untuk berpindah protokol. Dari sini hingga ke depannya, segala koneksi dengan
HTTP selesai dan pengiriman data dilakukan berdasarkan websocket frames.
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-websocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-websocket-Protocol: chat
2.2.2 Data Framing
Unit data yang ditransfer melalui websocket disebut websocket frames.
websocket frames mendukung binary data, text dalam UTF-8 encoded, dan control
frames. Beberapa informasi sengaja ditambahkan dalam tiap-tiap frame seperti
pada gambar berikut :
7
Gambar 2.2 Websocket frames
2.2.3 Websocket API
Selain protokol, spesifikasi websocket juga mengatur API untuk berinteraksi
dengan protokol. Websoket API merupakan event-based, meliputi kesiapan
protokol, respons untuk jaringan dan pesan serta jenis data yang ditransfer antara
client dan server. Tabel di bawah ini merupakan ringkasan dari websocket API :
Callback Deskripsi
onOpen Dijalankan ketika sesi websocket terbentuk, memberitahukan bahwa protokol siap digunakan untuk transfer data.
onError Dijalankan ketika terjadi kesalahan.
onClose Dijalankan ketika salah satu peer (client atau server) mengakhiri sebuah sesi.
onMessage Dijalankan ketika semua pesan diterima dari salah satu peer.
Tabel 2.1 Grafik kuadratik Base-12
2. 2 Load balancing
Ketika sebuah layanan dikembangkan dengan menggunakan server
terdistribusi, satu masalah akan timbul yaitu bagaimana mendistribusikan koneksi
dari client pada server. Client bisa saja memilih secara acak sebuah server untuk
melayani mereka. Akan tetapi hal ini dapat menyebabkan ketidakseimbangan
dalam pendistribusian. Oleh karena itu mekanisme load balancing diperlukan
(Qveflander, 2010).
Load balancing merupakan kemampuan untuk menyebarkan beban dari
proses untuk sebuah aplikasi kepada beberapa sistem yang berbeda untuk
meningkatkan kemampuan pemrosesan pada permintaan yang datang. Sehingga
8
dengan load balancing akan mengirimkan beberapa porsi pemrosesan dari
permintaan ke sebuah sistem kepada sistem independen lain yang akan ditangani
secara bersamaan. Keuntungannya adalah menurunkan jumlah pemrosesan yang
harus dilakukan oleh server penerima utama, memungkinkan server penerima
utama untuk menangani permintaan yang lebih banyak dan meningkatkan
kinerjanya dikarenakan berkurangnya kompetisi sumber daya pada server
penerima utama, dan lebih banyak perangkat yang memproses keseluruhan
beban (Kurniawan, 2013).
2.3.1 Round-Robin DNS
Metode load balancing yang paling sederhana yaitu menggunakan DNS.
Pendekatan ini menggunakan DNS A records dengan penjadwalan round-robin
untuk memilih server. Salah satu contoh pengunaan round-robin DNS adalah
Google. Dengan mengetikkan perintah host –t a
google.comhttp://www.google.co.id/ pada terminal maka akan didapatkan datar
DNS A untuk Google.com.
Penggunaan DNS untuk load balancing sangat sederhana, tetapi memiliki
kekurangan. Metode ini tidak dapat mengetahui keadaan server, apabila salah
satu server down, paket akan tetap dikirimkan pada server tersebut. IP dari DNS
juga bisa tersimpan di cache sehingga setiap kali client melakukan request, dia
akan mendapatkan server yang sama.
2.3.2 Layer Transport Load balancing (L4)
Layer 4 pada OSI model merupakan layer tansport. Penggunaan paling umum
dari protokol di layer 4 adalah TCP (Transmission Control Protocol) dan UDP (User
Datagram Protocol). Di sinilah biasanya hardware-based load balancer bekerja.
Load balancer ini menggunakan ASICs (Application Specific Integrated Circuits)
khusus untuk dapat mengerjakan sesuatu (modifikasi paket jaringan) dengan
sangat cepat dibandingkan dengan sistem lainnya. Sebagai gantinya, penggunaan
sistem ini memakan biaya yang tinggi.
IPVS (IP Virtual Server) merupakan software-based load balancer pada layer 4
yang ditanamkan pada Linux Kernel. Server IPVS yang bekerja sebagai load
balancer untuk mengatur beberapa server utama. Dari sisi client, hanya tahu satu
alamat IP (VIP) dan melakukan request pada alamat tersebut tanpa mengetahui
adanya server dalam cluster. Salah satu contoh penggunaan IPVS ini adalah Linux
Virtual Server (LVS) yang akan dijelaskan pada sub-bab berikutnya.
2.3.3 Layer Aplikasi Load balancing (L7)
Load balancing pada layer transport hanya mendistribusikan paket melalui
protokol TCP/UDP pada beberapa server dalam cluster tanpa mengetahui data
9
yang dibawa paket tersebut. Dengan aplikasi yang bergantung pada client session,
load balancing pada layer aplikasi menjadi krusial.
Load balancing pada layer aplikasi mampu memeriksa isi paket yang
dikirimkan dan melakukan load balancing berdasarkan isi paket jika diperlukan.
Kelemahan dari hal ini adalah overhead yang besar sehingga mengurangi
scalability jika dibandingkan load balancing pada layer transport.
Tidak seperti L4 load balancing yang masih terbatas, aplikasi untuk L7 load
balancing sangat banyak sperti Nginx, HAProxy, Apache, Pound dan masih banyak
lagi. Semuanya memiliki kelebihan, kelemahan dan karakteristik masing-masing
untuk menangani paket dan mendistribusikannya pada server.
2. 3 Linux Virtual Server
Linux Virtual Server (LVS) merupakan aplikasi yang mengarahkan koneksi
jaringan ke beberapa server untuk membagi beban, hal ini dapat digunakan untuk
membangun layanan dengan availability dan scalability yang tinggi. LVS
mengarahkan koneksi ke server menggunakan algoritma penjadwalan tertentu
dan bertindak sebagai layanan virtual pada satu alamat IP (Zhang W. , 1999).
Pengguna berinteraksi dengan cluster seolah-olah adalah server tunggal dan
tidak terpengaruh oleh interaksi yang terjadi dalam cluster. Scalability dicapai
dengan menambahkan atau menghapus sebuah node di cluster. High availability
disediakan dengan mendeteksi kegagalan node atau daemon dan konfigurasi
ulang sistem yang tepat.
Tiga pilar utama dalam arsitektur LVS digambarkan pada diagram di bawah ini
dan meliputi :
1. Load balancer, berada pada front-end sebagai layanan yang dapat diakses
oleh dunia luar. Load balancer mengarahkan koneksi jaringan dari client
yang hanya mengetahui satu IP ke beberapa server yang sebenarnya
untuk pemrosesan selanjutnya.
2. Server pool, merupakan cluster dan beberapa server yang menjadi back-
end dan melakukan tugas sebenarnya seperti web, ftp, mail, DNS, dsb.
3. Back-end storage, menyediakan ruang penyimpanan yang dapat
digunakan bersamaan oleh server dalam cluster, sehingga memudahkan
server untuk menyediakan konten dan layanan yang sama.
10
Gambar 2.3 Arsitektur LVS (LVS, 2016)
Load balancer menangani koneksi yang masuk menggunakan metode IP load
balancing. LVS akan memilih server dari server pool, mempertahankan koneksinya
dan mengarahkan paket ke server, dan semua ini dilakukan di dalam Kernel
sehingga overhead pada load balancer menjadi rendah. Selain itu LVS dapat
digunakan untuk koneksi dalam jumlah yang sangat besar dan menangani banyak
server sehingga tidak akan menyebabkan terjadi masalah bottleneck.
2.4.1 Metode IP load balancing
IP load balancing pada LVS mendukung tiga metode load balancing untuk
menyediakan layanan dengan scalability tinggi. Ketiga metode tersebut yaitu :
1. Linux Virtual Server via NAT
Seiring dengan berkurangnya Ipv4 dan beberapa masalah keamanan, semakin
banyak jaringan menggunakan private IP address yang tak bisa digunakan untuk
mengakses internet. Dari dasar inilah Network AdressTranslation (NAT) sangat
dibutuhkan.
NAT bekerja dengan menyesuaikan header paket sehingga client beranggapan
bahwa mereka menghubungi satu server (Virtual IP address), tetapi server
mengetahui bahwa mereka dihubungi langsung oleh client.
Alur kerja dari LVS/NAT adalah sebagi berikut ketika client mengakses
layanan, paket request yang ditujukan untuk virtual IP address diterima oleh load
balancer. Load balancer akan memeriksa IP dan port tujuan paket apakah ada
dalam rule table, memilih sebuah server berdasarkan algoritma penjadwalan dan
menulis koneksi yang terjadi pada hash table. Selanjutnya IP dan port pada paket
ditulis kembali menggunakan alamat server sesungguhnya dan paket diteruskan
ke sever. Selanjutnya ketika respon sampai, load balancer menuliskan kembali IP
dan port virtual server pada paket. Ketika koneksi berakhir atau timeout, koneksi
dalam hash table juga akan dihapus.
11
Gambar 2.4 LVS/NAT
2. Linux Virtual Server via IP Tunneling
IP tunneling (IP encapsulation) merupakan teknik untuk melakukan
enkapsulasi IP datagram dalam IP datagram, sehingga memungkinkan datagram
untuk satu IP dialihkan ke IP lainnya.
Alur kerja dari LVS/TUN hampir sama dengan LVS/NAT. Dalam LVS/TUN setiap
data yang sampai pada load balancer dari client akan dienkapsulapsi untuk
diarahkan ke server, sedangkan paket dari server akan didekapasulasi untuk
dikirim kembali ke client.
Gambar 2.5 LVS/TUN
3. Linux Virtual Server via Direct Routing
Pada LVS/DR server dan load balancer harus dihubungkan secara fisik tanpa
ada perantara di tengahnya menggunakan LAN seperti Hub/Switch. Virtual IP
address dibagi pada server dan load balancer. Semua server mempunyai loopback
12
interface dengan virtual IP address sedangkan load balancer menggunakan virtual
IP address untuk menerima paket.
Alur kerja dari LVS/DR yaitu load balancer memilih server dan meneruskan
paket dari client. Ketika server menerima paket tersebut dan memeriksa bahwa
tujuannya adalah dia, maka server tersebut bisa memberikan respon secara
langsung ke client tanpa melalui load balancer lagi.
Gambar 2.6 LVS/DR
2.4.2 Algoritma Penjadwalan
LVS menerapkan setidaknya 10 algoritma penjadwalan untuk memilih server
dari cluster untuk tiap koneksi. Algoritma tersebut yaitu : Robin Robin, Weighted
Round Robin, Least-Connection, Weighted Least-Connection, Locality-Based Least-
Connection, Locality-Based Least-Connection with Replication, Destination
Hashing, Source Hashing, Shortest Expected Delay, dan Never Queue.
2. 4 Nginx
Nginx merupakan aplikasi open source sebagai HTTP server, reverse proxy dan
juga IMAP/POP3 proxy server. Nginx terkenal dengan performa tinggi, stabil, kaya
fitur, konfigurasi yang sederhana dan penggunaan resource yang rendah (Zubayr,
2016). Dikarenakan kinerja yang sangat bagus, Nginx sudah banyak digunakan
diseluruh dunia dalam beberapa tahun terakhir (Yuan, Sun, Wang, & Liu, 2013).
Nginx merupakan server yang dibuat khusus untuk aplikasi dengan banyak
user, komunikasi data yang tinggi serta mengatasi masalah C10K. Tidak seperti
server biasanya, Nginx merupakan modular, event-driven, single-thread dan
menggunakan non-blocking arsitektur. Sebuah penelitian menyimpulkan bahwa
Nginx mempunya performa yang lebih baik dalam hal responsiveness, scalability
dan efisiensi dalam menangani beban berat (Prakash, Biju, & Sowmya, 2015). Hal
13
ini menjadikan Nginx sebagai alat yang efektif untuk diterapkan pada semua jenis
server, mulai dari VPS kecil hingga server cluster.
Seperti uraian di atas, Nginx dapat berperan sebagai HTTP reverse proxy load
balancer untuk membagi traffic pada beberapa server guna meningkatkan
performa, scalabiity dan reliability dari web aplikasi (Nginx, 2016). Secara default
Nginx menyediakan modul khusus sebagai load balancer (upstream module)
dengan tiga metode penjadwalan yaitu :
1. Round-robin — Request yang diterima oleh server di distribusikan
menggunakan round-robin yaitu dari server pertama, kemudian server
berikutnya, hingga server terakhir dan kembali lagi ke server pertama.
2. Least-connected — Request akan diberikan pada server yang paling
sedikit menangani client.
3. IP-hash — Alamat IP dari client di-hash untuk menentukan server yang
digunakan. Dengan IP-hash, client akan dilayani oleh server yang sama
setiap kali request.
Metode penjadwalan lain juga tersedia dengan menambahkan third-party
module pada Nginx. Hal yang terpenting adalah load balancing menggunakan
Nginx sudah mendukung protokol websocket pada versi 1.3 ke atas.
Gambar 2.7 Arrrsitektur Nginx (Alexeev, 2016)
2. 5 Node.js
Node.js merupakan sebuah environment yang mengalami peningkatan trend
cukup tinggi di tahun 2014. Environment ini dirilis pertama kali pada 27 Mei 2009
dengan dipelopori oleh Ryan Dahl, sebuah environment client-server berbasis
JavaScript yang melandaskan operasinya pada mesin V8 yang dikembangkan
perusahaan bernama Google untuk melakukan parsing bahasa JavaScript dalam
browser besutan mereka, Google Chrome.
14
Konsep dasar yang diusung Node.js adalah konsep pemrograman non-
blocking yang ekstensif. Konsep ini benar-benar cocok digunakan di atas sistem
mesin V8 besutan Google yang memang dirancang dan diciptakan untuk
melakukan pekerjaan lokal yang berhubungan dengan manipulasi tampilan
website bersamaan dengan input dari interaksi yang dilakukan pengguna terhadap
tampilan tersebut. Untuk mewujudkan hal tersebut, konsep non-blocking yang
memungkinkan operasi dapat berjalan asynchronous tanpa melakukan blocking
terhadap input akhirnya ditunjuk untuk menjadi dasar konsep V8 Engine. V8
Engine inilah yang kemudian digunakan sebagai dasar pengembangan
environment pemrograman dengan konsep yang sama namun tidak dalam
lingkungan lokal, melainkan dalam lingkungan server-client.
Secara fundamental, keunggulan environment Node.js sebenarnya terletak
pada dukungan engine Node.js untuk melakukan proses asynchronous melalui
functional programming secara ekstensif. Dengan memberikan dukungan
melakukan proses secara asynchronous atau interrupt-based, Node.js
menawarkan potensi performa layanan yang lebih baik dengan pemangkasan
waiting-time yang dapat di minimalkan menggunakan konsep interrupt-based
operation.
Namun disamping konsep operasi yang didasarkan pada sistem interupsi
kode, keunggulan lain Node.js terdapat pada sistem package manager bernama
npm yang sebenarnya dihadirkan sebagai fitur tambahan namun berubah menjadi
sebuah kelengkapan wajib yang diperlukan ketika melakukan pengembangan
dalam lingkungan Node.js. Dengan adanya dihadirkannya npm sebagai media
distribusi package terintegrasi, perkembangan Node.js melesat tinggi. Dengan
npm yang mempermudah developer mendistribusikan komponen mereka, banyak
muncul komponen/package penting yang kemudian menjadi komponen yang
terhitung vital dalam pengembangan sistem dalam environment Node.js.
2. 6 Socket.io
Socket.io merupakan JavaScript library yang berjalan pada server dengan
runtime Node.js dan juga browser. Selain menyediakan abstraksi protokol
websocket untuk komunikasi, Socket.io juga mendukung skema lainnya sebagai
fallback apabila browser atau client tidak mendukung websocket. (Cheng, 2013)
Fallback yang didukung oleh Socket.io yaitu (berdasarkan prioritas) :
1. Websocket
2. Adobe® Flash® Socket
3. AJAX long polling
4. AJAX multipart streaming
5. Forever Iframe
6. JSONP Polling
15
Socket.io memiliki fitur utama seperti broadcast dan multicast yang tidak
dimiliki oleh websocket biasa (Wikipedia, 2016). Socket.io sudah dikembangkan
dalam beberapa bahasa lainnya seperti Python, Java, Golang, Erlang dan Perl
menggunakan paradigma asynchronus, event-driven dan non-blocking I/O (Cheng,
2013).
Dikarenakan Socket.io mampu bekerja pada server dan client maka
pengiriman pesan menjadi lebih mudah, client hanya perlu membuat event untuk
mengirim pesan pada sever dan event handler pada sisi client. Berikut merupakan
contoh implementasi Socket.io pada Node.js :
var server = require('http').createServer();
var io = require('socket.io')(server);
io.on('connection', function(socket){
socket.on('event', function(data){});
socket.on('disconnect', function(){});
});
server.listen(3000);
16
BAB 3. METODOLOGI PENELITIAN
Metodologi penelitian menggambarkan metode serta langkah-langkah yang
digunakan dalam penelitian ini mulai dari awal hingga akhir. Tahapan penelitian
ini dapat dilihat pada diagram di bawah ini :
Studi Literatur
Analisa Kebutuhan
Perancangan
Implementasi
Pangujian dan Analisa
Kesimpulan
Gambar 3.1 Diagram alur metodologi penelitian
3.1 Studi Literatur
Pada tahap studi literatur ini akan dilakukan kajian terhadap teori yang
berhubungan dengan bidang penelitian, seperti pengumpulan serta analisis data
dari buku, jurnal, artikel dan referensi lainnya. Hal tersebut dilakukan untuk
memperkaya pengetahuan secara teori dan juga sebagai acuan dalam melakukan
perancangan sistem dan penarikan kesimpulan nantinya. Referensi yang
digunakan terdiri dari segala pustaka yang berhubungan dengan websocket, Load
balancing, Linux Virtual Server, Nginx, Node.Js serta Socket.io.
3.2 Analisa Kebutuhan
Tujuan dari analisa kebutuhan adalah mendapatkan daftar kebutuhan yang diperlukan untuk membangun sistem, jenis data yang diambil serta prosedur penelitian. Analisa kebutuhan dilakukan dengan melakukan studi literatur kemudian mengolah informasi yang didapatkan dan merumuskannya menjadi sebuah objek penelitian. Kebutuhan yang akan dianalisa antara lain :
1. Spesifikasi hardware dan software yang digunakan dalam sistem.
2. Kebutuhan fungsional dan non-fungsional sistem.
3. Metrik yang digunakan dalam pengujian.
4. Metode serta skenario pengujian.
17
3.3 Perancangan
Perancangan sistem dilakukan setelah hasil analisa kebutuhan terkumpul.
Dari hasil analisa tersebut, nantinya akan dibangun arsitektur sistem. Hal-hal yang
akan dirancang pada tahap ini yaitu websocket server, websocket client (tunggal),
websocket server cluster menggunakan layer 4 dan layer 7 load balancer, serta
client untuk webscoket server cluster. Perancangan sistem diwujudkan dalam
gambar arsitektur sistem serta interaksi antar sistem.
Selain perancangan sistem, dalam tahap ini juga digambarkan diagram alur
dari tahapan-tahapan pengujian, menggunakan skenario yang sudah ditentukan.
3.4 Implementasi
Pada tahap ini, seluruh analisa kebutuhan dan perancangan yang telah dibuat
akan diimplementasikan menjadi sistem yang dapat berjalan secara keseluruhan.
Implementasi terdiri dari dua bagian utama, pertama yaitu implementasi topologi
jaringan dalam sistem dan kedua yaitu implementasi websocket menggunakan
Node.js dan Socket.io.
3.5 Pengujian dan Analisis
Pada tahap ini, sistem yang sudah dibangun dijalankan sesuai dengan
fungsinya sebagai bagian inti dari tahap pengujian. Ada tiga jenis pengujian yang
dilakukan yaitu :
1. Pengujian websocket server dan client dengan Node.js dan Socket.io
2. Pengujian websocket cluster menggunakan layer 4 dan layer 7 load
balancer. Pengujian ini dibagi lagi menjadi dua yaitu :
a. Pengujian kebutuhan fungsional dan non-fungsional sistem.
b. Pengujian kinerja tiap-tiap load balancer dengan skenario yang sudah
ditentukan pada tahap sebelumnya.
3. Pengujian validitas data.
Pengujian websocket server dan client dilakukan dengan menggunakan
pengujian teknik menggunakan white box testing, sedangkan pengujian laiinya
menggunakan black box testing karena pengujian ini berfokus pada data yang
dihasilkan sistem bukan cara kerja sistem. Pengujian dilakukan beberapa kali
untuk mendapatkan hasil yang optimal.
Sedangkan tahap analisa akan dilakukan setelah tahap pengujian selesai dan
semua data terkumpul. Data tersebut nantinya akan dianalisa secara matematis
kemudian diubah menjadi bentuk visual supaya mudah untuk dipahami. Data-data
yang direkam pada saat pengujian yaitu :
1. Penggunaan CPU pada tiap server (CPU utilization)
2. Data yang berhasil dikirimkan dalam satuan waktu (troughput)
18
3. Waktu dari client mengirim request hingga menerima balasan dari server
(latency)
4. Jumlah client yang dapat dilayani oleh server (concurrency)
Selanjutnya yaitu pengujian validitas data yang dibuktikan dengan
memberikan screenshot hasil pengujian sebagai bukti bahwa tak ada data yang
direkayasa.
3.6 Pengambilan Kesimpulan
Setelah semua tahapan analisa kebutuhan, perancangan, implementasi dan
pengujian sistem telah selesai dilakukan, Pengambilan kesimpulan dilakukan
berdasarkan data-data yang sudah terkumpul dari tahap pengujian. Kesimpulan
yang diambil adalah jawaban atas pertanyaan-pertanyaan pada rumusan masalah.
Setelah mengambil kesimpulan maka tahap terakhir dari penulisan skripsi ini
adalah saran. Saran dimaksudkan untuk memperbaiki kesalahan-kesalahan yang
terjadi dan menyempurnakan tulisan serta sebagai pertimbangan dalam
mengembangkan sistem ini lebih lanjut.
19
DAFTAR PUSTAKA
Alexeev, A. (2016). Nginx. Dipetik Februari 1, 2016, dari Back to The Architecture
of Open Source Applications: http://www.aosabook.org/en/nginx.html
Cheng, C. (2013). Learn Gevent Socket.io. Dipetik Januari 2016, 2016, dari
Readthedocs.org: http://learn-gevent-socketio.readthedocs.org/en/latest
/socketio.html
Kulshrestha, A. (2013). An Empirical Study of HTML5 Websockets and their Cross
Browser Behaviour for Mixed Content and Untrusted Certificates.
International Journal of Computer Applications.
Kurniawan, Y. (2013). Analisis Kinerja Algoritma Load Balancer dan Implementasi
pada Layanan Web. Malang: Universitas Brawijaya.
LVS. (2016). What is virtual server? Dipetik Januari 28, 2016, dari Linux Virtual
Server Official Website: http://www.linuxvirtualserver.org/whatis.html
Nginx. (2016). Load Balancing with Nginx. Dipetik Januari 28, 2016, dari Nginx
Official Website: http://nginx.org/en/docs/http/load_balancing.html
Prakash, Biju, & Sowmya, K. M. (2015). Performance Analysis of Process Driven and
Event Driven Web Servers. Surathkal: Dept. of Information Technology
NITK.
Qveflander, N. (2010). Pushing real time data using HTML5 Web Sockets. Umea:
Umea University.
Skvorc, D., Horvat, M., & Srbljic, S. (2014). Performance Evaluation of Websocket
Protocol for Implementation of Full-Duplex Web Streams. Zagreb:
University of Zagreb/School of Electrical Engineering and Computing.
Wikipedia. (2016). Socket.io Wikipedia. Dipetik Januari 28, 2016, dari Wikipedia:
https://en.wikipedia.org/wiki/Socket.IO
Xu, Y., & Xie, X. (2009). Research and Design on LVS Cluster System. Guiyang:
School of Computer Science and Technology Guizhou University.
Yuan, W., Sun, H., Wang, X., & Liu, X. (2013). Towards Efficient Deployment of
Cloud Applications. Beijing: School of Computer Science and Engineering.
Zhang, L., & Shen, X. (2013). Research and Development of Real-time Monitoring
System Based on WebSocket Technology. Shenyang: International
Conference on Mechatronic Sciences, Electric Engineering and Computer
(MEC).
20
Zhang, W. (1999). Linux Virtual Server for Scalable Network Services. Changsha:
National Laboratory for Parallel & Distributed Processing.
Zubayr. (2016). Setting up NGINX for HTTP load balancing. Dipetik Januari 28,
2016, dari zubayr.github.io: https://zubayr.github.io/pdf/2015-01-03-
nginx-setup.pdf