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
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
i
DAFTAR PUSTAKA......................................................................................................... 19
ii
DAFTAR TABEL Tabel 2.1 Grafik kuadratik Base-12 ............................................................................ 7
iii
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
iv
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.
1
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 highavailabity 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 :
2
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.
3
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 saransaran untuk penelitian selanjutnya.
4
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.
5
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 :
6
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 onOpen onError onClose onMessage
Deskripsi Dijalankan ketika sesi websocket terbentuk, memberitahukan bahwa protokol siap digunakan untuk transfer data. Dijalankan ketika terjadi kesalahan. Dijalankan ketika salah satu peer (client atau server) mengakhiri sebuah sesi. 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 7
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
8
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 backend 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.
9
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. 10
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
11
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 LeastConnection, 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
12
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.
13
Konsep dasar yang diusung Node.js adalah konsep pemrograman nonblocking 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. 2. 3. 4. 5. 6.
Websocket Adobe® Flash® Socket AJAX long polling AJAX multipart streaming Forever Iframe JSONP Polling
14
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);
15
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. 16
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) 17
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.
18
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).
19
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-03nginx-setup.pdf
20