IMPLEMENTASI PENGENDALI ELASTISITAS SUMBER DAYA BERBASIS DOCKER UNTUK APLIKASI WEB

  TUGAS AKHIR - KI141502

  

IMPLEMENTASI PENGENDALI ELASTISITAS SUMBER DAYA

BERBASIS DOCKER UNTUK APLIKASI WEB MUHAMAD FAHRUL RAZI NRP 5113100105 Dosen Pembimbing I Henning Titi Ciptaningtyas, S.Kom., M.Kom Dosen Pembimbing II Bagus Jati Santoso, S.Kom., Ph.D JURUSAN TEKNIK INFORMATIKA Fakultas Teknologi Informasi Institut Teknologi Sepuluh Nopember Surabaya, 2017

  (Halaman ini sengaja dikosongkan) TUGAS AKHIR - KI141502

  

IMPLEMENTASI PENGENDALI ELASTISITAS SUMBER DAYA

BERBASIS DOCKER UNTUK APLIKASI WEB

  MUHAMAD FAHRUL RAZI NRP 5113100105 Dosen Pembimbing I Henning Titi Ciptaningtyas, S.Kom., M.Kom Dosen Pembimbing II Bagus Jati Santoso, S.Kom., Ph.D JURUSAN TEKNIK INFORMATIKA Fakultas Teknologi Informasi Institut Teknologi Sepuluh Nopember Surabaya, 2017

  (Halaman ini sengaja dikosongkan) UNDERGRADUATE THESIS - KI141502

IMPLEMENTATION OF DOCKER-BASED RESOURCE

  MUHAMAD FAHRUL RAZI NRP 5113100105 Supervisor I Henning Titi Ciptaningtyas, S.Kom., M.Kom Supervisor II Bagus Jati Santoso, S.Kom., Ph.D Department of INFORMATICS Faculty of Information Technology Institut Teknologi Sepuluh Nopember Surabaya, 2017

  (Halaman ini sengaja dikosongkan)

  

LEMBAR PENGESAHAN

  

IMPLEMENTASI PENGENDALI ELASTISITAS SUMBER

DAYA BERBASIS DOCKER UNTUK APLIKASI WEB

TUGAS AKHIR

  Diajukan Guna Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Komputer pada

  Bidang Studi Komputasi Berbasis Jaringan Program Studi S1 Jurusan Teknik Informatika

  Fakultas Teknologi Informasi Institut Teknologi Sepuluh Nopember

  Oleh :

  

MUHAMAD FAHRUL RAZI

NRP: 5113100105

  Disetujui oleh Dosen Pembimbing Tugas Akhir : Henning Titi Ciptaningtyas, S.Kom., M.Kom ........................ NIP: 198407082010122004 (Pembimbing 1) Bagus Jati Santoso, S.Kom., Ph.D ......................... NIP: 051100116 (Pembimbing 2)

  

SURABAYA

Juni 2017

  (Halaman ini sengaja dikosongkan)

  

IMPLEMENTASI PENGENDALI ELASTISITAS SUMBER

DAYA BERBASIS DOCKER UNTUK APLIKASI WEB

Nama : MUHAMAD FAHRUL RAZI NRP 5113100105

  :

  Jurusan : Teknik Informatika FTIf

Pembimbing I : Henning Titi Ciptaningtyas, S.Kom.,

M.Kom Pembimbing II : Bagus Jati Santoso, S.Kom., Ph.D

  

Abstrak

Saat ini, dengan didukung oleh konsep SaaS (Software as a

Service), aplikasi web berkembang dengan pesat. Para penyedia

layanan aplikasi web berlomba-lomba memberikan pelayanan

yang terbaik, seperti menjaga QoS (Quality of Service) sesuai

dengan perjanjian yang tertuang dalam SLA (Service Level

Agreement). Hal tersebut dikarenakan permintaan akses ke suatu

aplikasi web biasanya meningkat dengan seiring berjalannya

waktu. Keramaian akses sesaat menjadi hal yang umum dalam

aplikasi web saat ini. Saat hal tersebut terjadi, aplikasi web akan

di akses lebih banyak dari kebiasaan. Jika aplikasi web tersebut

tidak menyediakan kemampuan untuk menangani hal tersebut, bisa

menyebabkan aplikasi web tidak dapat berjalan dengan

semestinya yang sangat merugikan pengguna.

  Elastic cloud merupakan salah satu bagian dari komputasi

awan yang sedang populer, dimana banyak riset dan penelitian

yang berfokus di bidang ini. Elastic cloud bisa digunakan untuk

menyelesaikan permasalah di atas. Lalu sebuah perangkat lunak

bernama Docker dapat dapat diterapkan untuk mendukung elastic

cloud.

  Dalam tugas akhir ini akan dibuat sebuah rancangan sistem

  

Sistem ini bisa beradaptasi sesuai dengan kebutuhan dari aplikasi

yang sedang berjalan. Jika aplikasi membutuhkan sumber daya

tambahan, sistem akan menyediakan sumber daya berupa suatu

container baru secara otomatis dan juga akan mengurangi

penggunaan sumber daya jika aplikasi sedang tidak

membutuhkannya. Dari hasil uji coba, sistem dapat menangani

sampai dengan 57.750 request dengan error request yang terjadi

sebesar 7.83%.

  Kata-Kunci: aplikasi web, autoscale, docker, elastic cloud

  

IMPLEMENTATION OF DOCKER-BASED RESOURCE

ELASTICITY CONTROLLERS FOR WEB

APPLICATIONS

Name MUHAMAD FAHRUL RAZI

  :

  NRP : 5113100105 Major : Informatics FTIf Supervisor I Henning Titi Ciptaningtyas, S.Kom.,

  :

  M.Kom Supervisor II : Bagus Jati Santoso, S.Kom., Ph.D

Abstract

  Nowdays, with the concept of SaaS (Software as a Service),

web applications have developed a lot. Web service providers are

competing to provide the best service, such as QoS (Quality of

Service) requirements specified in the SLA (Service Level

Agreement). The load of web applications usually very drastically

along with time. Flash crowds are also very common in today’s

web applications world. When flash crowds happens, the web

application will be accessed more than usual. If the web

applications does not provide the ability to do so, it can make the

web application not work properly which is very disadvantegeous

to the users.

  Elastic cloud is one of the most popular part of cloud

computing, with much researchs in this subject. Elastic clouds can

be used to solve the above problems. Then a Docker can be applied

to support the elastic cloud.

  In this final task will be made an application system that allows

web applications running on top of Docker. This system can adjust

according to the needs of the running applications. If the

application requires additional resources, the system will

  

also reduce resource usage if the application is not needing it.

From the test results, the system can handle up to 57,750 requests

and error ratio of 7.83%.

  Keywords: autoscale, docker, elastic cloud, web application

  Alhamdulillahirabbil’alamin, segala puji bagi Allah SWT, yang telah melimpahkan rahmat dan hidayah-Nya sehingga penulis dapat menyelesaikan Tugas Akhir yang berjudul

  

IMPLEMENTASI PENGENDALI ELASTISITAS SUMBER

DAYA BERBASIS DOCKER UNTUK APLIKASI WEB

.

  Pengerjaan Tugas Akhir ini merupakan suatu kesempatan yang sangat baik bagi penulis. Dengan pengerjaan Tugas Akhir ini, penulis bisa belajar lebih banyak untuk memperdalam dan meningkatkan apa yang telah didapatkan penulis selama menempuh perkuliahan di Teknik Informatika ITS. Dengan Tugas Akhir ini penulis juga dapat menghasilkan suatu implementasi dari apa yang telah penulis pelajari. Selesainya Tugas Akhir ini tidak lepas dari bantuan dan dukungan beberapa pihak. Sehingga pada kesempatan ini penulis mengucapkan syukur dan terima kasih kepada:

  1. Allah SWT atas anugerahnya yang tidak terkira kepada penulis dan Nabi Muhammad SAW.

  2. Ibu Henning Titi Ciptaningtyas, S.Kom., M.Kom selaku pembimbing I yang telah membantu, membimbing, dan memotivasi penulis mulai dari pengerjaan proposal hingga terselesaikannya Tugas Akhir ini.

  3. Bapak Bagus Jati Santoso, S.Kom., Ph.D selaku pembimbing II yang juga telah membantu, membimbing, dan memotivasi penulis mulai dari pengerjaan proposal hingga terselesaikannya Tugas Akhir ini.

4. Darlis Herumurti, S.Kom., M.Kom., selaku Kepala Jurusan

  Teknik Informatika ITS pada masa pengerjaan Tugas Akhir, Bapak Radityo Anggoro, S.Kom., M.Sc., selaku koordinator TA, dan segenap dosen Teknik Informatika yang telah

  5. Serta semua pihak yang telah turut membantu penulis dalam menyelesaikan Tugas Akhir ini.

  Penulis menyadari bahwa Tugas Akhir ini masih memiliki banyak kekurangan. Sehingga dengan kerendahan hati, penulis mengharapkan kritik dan saran dari pembaca untuk perbaikan ke depannya.

  Surabaya, Juni 2017 Muhammad Fahrul Razi

  ABSTRAK vii ABSTRACT ix Kata Pengantar xi DAFTAR ISI xiii

  

DAFTAR TABEL xvii

DAFTAR GAMBAR xix

DAFTAR KODE SUMBER xxi

BAB I PENDAHULUAN

  1 1.2 Rumusan Masalah . . . . . . . . . . . . . . . . .

  8 2.1.4 Docker’s Remote API . . . . . . . . . . .

  13

  13 2.4 Flask . . . . . . . . . . . . . . . . . . . . . . . .

  12 2.3 Python . . . . . . . . . . . . . . . . . . . . . . . .

  11 2.2.3 Algoritma Skala . . . . . . . . . . . . . .

  9 2.2.2 Reactive Model . . . . . . . . . . . . . .

  9 2.2.1 Proactive Model . . . . . . . . . . . . . .

  8 2.2 Elasticity Controller . . . . . . . . . . . . . . . .

  2.1.3 Docker Registry . . . . . . . . . . . . . .

  3 1.3 Batasan Masalah . . . . . . . . . . . . . . . . . .

  7

  1 1.1 Latar Belakang . . . . . . . . . . . . . . . . . . .

  7

  7 2.1.1 Docker Images . . . . . . . . . . . . . . .

  7 2.1 Docker . . . . . . . . . . . . . . . . . . . . . . .

  4 BAB II TINJAUAN PUSTAKA

  4 1.5 Manfaat . . . . . . . . . . . . . . . . . . . . . . .

  4 1.4 Tujuan . . . . . . . . . . . . . . . . . . . . . . . .

  2.1.2 Docker Container . . . . . . . . . . . . .

  2.6 HAProxy . . . . . . . . . . . . . . . . . . . . . .

  39 4.2 Implementasi Docker Registry . . . . . . . . . . .

  51

  4.4.4 Implementasi Task Queue Menggunakan Redis . . . . . . . . . . . . . . . . . . . .

  50

  47 4.4.3 Menambahkan dan Menghapus Domain .

  4.4.2 Skema Basis Data Controller Menggunakan MySQL . . . . . . . . . .

  45

  45 4.4.1 Endpoint Docker Regsitry . . . . . . . . .

  43 4.4 Implementasi Server Controller . . . . . . . . . .

  4.2.3 Menambahkan dan memperbarui aplikasi . 42 4.3 Implementasi Master Host . . . . . . . . . . . . .

  41

  4.2.2 Melakukan Akses Terhadap Docker

Registry . . . . . . . . . . . . . . . . . .

  39

  39 4.2.1 Pengaturan Notification . . . . . . . . . .

  39 4.1 Lingkungan Implementasi . . . . . . . . . . . . .

  14 2.7 Nginx . . . . . . . . . . . . . . . . . . . . . . . .

  34 BAB IV IMPLEMENTASI

  31 3.2.6 Desain Dasbor . . . . . . . . . . . . . . .

  27 3.2.5 Desain Master Host . . . . . . . . . . . .

  26 3.2.4 Desain Server Controller . . . . . . . . .

  24 3.2.3 Desain Private Docker Registry . . . . . .

  23 3.2.2 Desain Load Balancer . . . . . . . . . . .

  23 3.2.1 Desain Umum Sistem . . . . . . . . . . .

  21 3.2 Arsitektur Sistem . . . . . . . . . . . . . . . . . .

  21 3.1 Kasus Penggunaan . . . . . . . . . . . . . . . . .

  18 BAB III DESAIN DAN PERANCANGAN

  18 2.11 MySQL . . . . . . . . . . . . . . . . . . . . . . .

  17 2.10 Redis . . . . . . . . . . . . . . . . . . . . . . . .

  17 2.9 confd . . . . . . . . . . . . . . . . . . . . . . . .

  16 2.8 etcd . . . . . . . . . . . . . . . . . . . . . . . . .

  4.4.5 Penyimpanan Konfigurasi Load Balancer

  4.4.6 ImplementasiProgramMonitoring HAProxy . . . . . . . . . . . . . . . . . .

  64 BAB V PENGUJIAN DAN EVALUASI

  88 DAFTAR PUSTAKA

  87 6.2 Saran . . . . . . . . . . . . . . . . . . . . . . . .

  87 6.1 Kesimpulan . . . . . . . . . . . . . . . . . . . . .

  79 BAB VI PENUTUP

  75 5.3.2 Hasil Uji Performa . . . . . . . . . . . . .

  75 5.3.1 Uji Fungsionalitas . . . . . . . . . . . . .

  73 5.3 Hasil Uji Coba dan Evaluasi . . . . . . . . . . . .

  69 5.2.2 Skenario Uji Coba Performa . . . . . . . .

  68 5.2.1 Skenario Uji Coba Fungsionalitas . . . . .

  67 5.2 Skenario Uji Coba . . . . . . . . . . . . . . . . .

  67 5.1 Lingkungan Uji Coba . . . . . . . . . . . . . . . .

  64 4.6.4 Metrik Aplikasi . . . . . . . . . . . . . .

  53

  63 4.6.3 Daftar Container . . . . . . . . . . . . . .

  62 4.6.2 Informasi Aplikasi . . . . . . . . . . . . .

  62 4.6.1 Daftar Aplikasi . . . . . . . . . . . . . . .

  61 4.6 Implementasi Dasbor . . . . . . . . . . . . . . . .

  60 4.5.4 Pangaturan Hot-Upgrade . . . . . . . . .

  60 4.5.3 Pengaturan Endpoint Log . . . . . . . . .

  59 4.5.2 Pengaturan Domain . . . . . . . . . . . .

  59 4.5.1 Pengaturan Teknik Balancing . . . . . . .

  58 4.5 Implementasi Load Balancer . . . . . . . . . . . .

  56 4.4.9 Implementasi Endpoint Dasbor . . . . . .

  54 4.4.8 Implementasi Pengendali Elastasitas . . .

  4.4.7 Implementasi Program Monitoring Server Master . . . . . . . . . . . . . . . . . . .

  89

  

BAB B KODE SUMBER 103

BIODATA PENULIS 105

  3.1 Daftar Kode Kasus Penggunaan . . . . . . . . . .

  70 5.4 Skenario Uji Fungsionalitas Aplikasi Dasbor . . .

  83 5.12 Error Ratio Request . . . . . . . . . . . . . . . .

  82 5.11 Penggunaan Memory . . . . . . . . . . . . . . . .

  81 5.10 Penggunaan CPU . . . . . . . . . . . . . . . . . .

  80 5.9 Kecepatan Menangani Request . . . . . . . . . . .

  79 5.8 Jumlah Container . . . . . . . . . . . . . . . . . .

  77 5.7 Jumlah Request ke Aplikasi . . . . . . . . . . . .

  76 5.6 Hasil Uji Fungsionalitas Aplikasi Dasbor . . . . .

  5.5 Hasil Uji Coba Mengelola Aplikasi Berbasis Docker

  72

  5.3 Skenario Uji Mengelola Aplikasi Berbasis Docker

  22 3.1 Daftar Kode Kasus Penggunaan . . . . . . . . . .

  68

  5.2 IP dan Domain Server . . . . . . . . . . . . . . .

  67

  49 5.1 Spesifikasi Komponen . . . . . . . . . . . . . . .

  49 4.3 Tabel domains . . . . . . . . . . . . . . . . . . .

  48 4.2 Tabel containers . . . . . . . . . . . . . . . . . .

  48 4.2 Tabel containers . . . . . . . . . . . . . . . . . .

  47 4.1 Tabel images . . . . . . . . . . . . . . . . . . . .

  23 4.1 Tabel images . . . . . . . . . . . . . . . . . . . .

  84

  (Halaman ini sengaja dikosongkan)

  2.1 Pseudocode Algoritma Reactive Model . . . . . .

  35 3.13 Desain Antar Muka Daftar Container . . . . . . .

  83 5.5 Grafik Error Ratio . . . . . . . . . . . . . . . . .

  82 5.4 Grafik Penggunaan Memory . . . . . . . . . . . .

  81 5.3 Grafik Penggunaan CPU . . . . . . . . . . . . . .

  80 5.2 Grafik Kecepatan Menangani Request . . . . . . .

  65 5.1 Grafik Jumlah Container . . . . . . . . . . . . . .

  64 4.5 Dasbor Matrik Aplikasi . . . . . . . . . . . . . .

  63 4.4 Dasbor Daftar Container . . . . . . . . . . . . . .

  63 4.3 Dasbor Informasi Aplikasi . . . . . . . . . . . . .

  50 4.2 Dasbor Daftar Aplikasi . . . . . . . . . . . . . . .

  37 4.1 DigitalOcean Control Panel . . . . . . . . . . . .

  36 3.14 Desain Antar Muka Metrik Aplikasi . . . . . . . .

  35 3.12 Desain Antar Muka Informasi Aplikasi . . . . . .

  11 2.2 Pseudocode Algoritma Skala . . . . . . . . . . . .

  34 3.11 Desain Antar Muka Dasbor Beranda . . . . . . . .

  33 3.10 Desain Dasbor . . . . . . . . . . . . . . . . . . .

  32 3.9 Diagram Alur Menghentikan Container . . . . . .

  31 3.8 Diagram Alur Menjalankan Container . . . . . . .

  29 3.7 Desain Master Host . . . . . . . . . . . . . . . . .

  3.6 Diagram Alur Pengelolaan Notification Docker Registry . . . . . . . . . . . . . . . . . . . . . . .

  28

  27 3.5 Desain Controller . . . . . . . . . . . . . . . . . .

  25 3.4 Desain Docker Registry . . . . . . . . . . . . . .

  24 3.3 Desain Load Balancer . . . . . . . . . . . . . . .

  21 3.2 Desain Umum Sistem . . . . . . . . . . . . . . .

  12 3.1 Diagram Kasus Penggunaan . . . . . . . . . . . .

  84

  (Halaman ini sengaja dikosongkan) IV.1 Isi config.yml . . . . . . . . . . . . . . . . . . . .

  40 IV.2 Perintah Pull Nginx . . . . . . . . . . . . . . . .

  57 IV.12 Menambahkan Rule Input pada iptables . . . .

  97 A.5 Isi Berkas haproxy.toml . . . . . . . . . . . . . .

  97 A.4 Isi Berkas haproxy.cfg.tmpl . . . . . . . . . . . .

  93 A.3 Isi Berkas confd.toml . . . . . . . . . . . . . . . .

  93 A.2 Isi Berkas registry.conf . . . . . . . . . . . . . . .

  62 A.1 Isi Berkas docker-compose.yml . . . . . . . . . .

  61 IV.13 Menghapus Rule Input pada iptables . . . . . .

  56 IV.11 Perhitungan Reactive Model . . . . . . . . . . . .

  42 IV.3 Perintah Menjalankan Image Nginx . . . . . . . .

  55 IV.10 Perhitungan Reactive Model . . . . . . . . . . . .

  53 IV.9 Pseudocode Menghitung Penggunaan CPU . . . .

  53 IV.8 Format Penyimpanan Data Container pada etcd .

  52 IV.7 Format Penyimpanan Data Image pada etcd . . . .

  43 IV.6 Koneksi Redis . . . . . . . . . . . . . . . . . . .

  43 IV.5 Perintah Push Image Terbaru Nginx . . . . . . . .

  42 IV.4 Perintah Commit Container Nginx . . . . . . . . .

  99 B.1 Let’s Encrypt X3 Cross Signed.pem . . . . . . . . 103

  (Halaman ini sengaja dikosongkan)

  

PENDAHULUAN

  Pada bab ini akan dipaparkan mengenai garis besar Tugas Akhir yang meliputi latar belakang, tujuan, rumusan dan batasan permasalahan, metodologi pembuatan Tugas Akhir, dan sistematika penulisan.

1.1 Latar Belakang

  Saat ini, dengan didukung oleh konsep SaaS (Software as a

  Service

  ), aplikasi web berkembang dengan pesat. Banyak perusahaan, seperti Google, Amazon, dan Microsoft yang berhasil mencapai kesuksesan dari aplikasi web. Para penyedia layanan aplikasi web juga berlomba-lomba memberikan pelayanan yang terbaik, seperti menjaga QoS (Quality of Service) sesuai dengan perjanjian yang tertuang dalam SLA (Service Level Agreement) [1]. Hal tersebut dikarenakan permintaan akses ke suatu aplikasi web biasanya meningkat dengan seiring berjalannya waktu. Keramaian akses sesaat menjadi hal yang umum dalam aplikasi web saat ini. Saat hal tersebut terjadi, aplikasi web akan diakses lebih banyak dari keadaan biasanya. Jika aplikasi web tersebut tidak menyediakan kemampuan untuk menangani hal tersebut, bisa menyebabkan aplikasi web tidak dapat berjalan dengan semestinya yang sangat merugikan pengguna. Biasanya, pengembang akan melakukan pengaturan sumber daya server secara manual agar bisa menangani permasalahan di atas, tapi akan memakan banyak biaya dan waktu. Tapi jika tidak ditangani, akibatnya aplikasi web tidak bisa berjalan saat pengalami puncak permintaan dari pengguna. Saat ini banyak tersedia layanan komputasi awan, yaitu sebuah model komputasi yang mana pengguna akan membayar sesuai dengan sumber daya yang digunakan. Dengan bantuan dari komputasi awan, penggembang bisa melakukan scale up dan scale down sumber secara manual atau memanfaatkan API yang disediakan oleh

platform yang bisa diakses dalam rentang waktu jam bahkan menit.

Perkembangan dari komputasi awan melahirkan teknologi yang dikenal dengan autonomos elastic cloud, sebuah sistem yang secara dinamis akan menambahkan sumber daya sesuai dengan jumlah permintaan. Saat permintaan akses ke suatu aplikasi web meningkat, elastic cloud secara otomatis akan menambahkan sumber daya untuk aplikasi dan juga secara otomatis akan mengurangi sumber daya dari aplikasi saat permintaan aksesnya menurun.

  Elastic cloud merupakan salah satu bagian dari komputasi

  awan yang sedang populer, dimana banyak riset dan penelitian yang berfokus di bidang ini. Saat ini, biasanya elastic cloud berbasis pada virtual machines (VMs). VM sendiri dianggap terlalu berat untuk menjalankan sebuah aplikasi web, karena biasanya yang dibutuhakan oleh suatu aplikasi web hanya web

  server

  (Apache, Nginx), bahasa pemrograman yang digunakan, basis data, dan komponen lainnya, tidak keseluruhan sistem operasi yang terjadi jika menggunakan VM. Dalam hal ini, menggunakan VM untuk mengembangkan aplikasi web hanya akan membuang-buang sumber daya dan menurunkan performa dari aplikasi. Selain itu, penerapan elastic cloud yang berjalan di atas VM tidak bisa meningkatkan sumber daya dengan cepat yang bisa merusak QoS.

  Sebuah perangkat lunak bernama docker dapat menyelesaikan permasalahan dari VM. Docker adalah sebuah perangkat lunak yang berfungsi sebagai wadah untuk membungkus dan memasukkan sebuah perangkat lunak ke dalam sebuah lingkungan beserta semua hal yang dibutuhkan oleh perangkat lunak tersebut. Selain membungkus aplikasi, docker menjadikan aplikasi yang berjalan di atasnya menjadi terisolasi sehingga menghilangkan kemungkinan terjadinya kebocoran suatu proses aplikasi yang bisa menyebabkan kerusakan pada

  

host . Docker container berjalan di atas host dan menggunakan

kernel yang sama dengan host yang mana memungkinkan

container dapat dibangun dengan cepat dan membuat penggunaan

sumber daya menjadi lebih efisien.

  Dalam tugas akhir ini akan dibuat sebuah rancangan sistem yang memungkinkan untuk menjalankan aplikasi web berbasis

  docker

  . Sistem ini bisa beradaptasi sesuai dengan kebutuhan dari aplikasi yang sedang berjalan. Jika aplikasi membutuhkan sumber daya tambahan, sistem akan menyediakan sumber daya berupa suatu container baru secara otomatis dan juga akan mengurangi penggunaan sumber daya jika aplikasi sedang tidak membutuhkannya. Proses skalabilitas ini termasuk skalabilitas secara horizontal, yaitu dengan menambah instance, dalam kasus ini berupa docker container, dari aplikasi web. Sistem ini juga menyediakan sebuah server docker repository untuk menaruh aplikasi web dalam format docker. Pengembang yang ingin memasang atau memperbarui aplikasinya di sistem ini akan melakukan push aplikasi web dalam format docker ke server

  

repository dan sistem secara otomatis akan membangun atau

memperbarui aplikasi tersebut di server master host.

1.2 Rumusan Masalah

  Rumusan masalah yang diangkat dalam tugas akhir ini adalah sebagai berikut :

  1. Bagaimana cara membuat sistem yang dapat melakukan skalabilitas secara otomatis terhadap aplikasi web berbasis

  docker

  dengan menggunakan Proactive Model dan Reactive

  Model ? 2.

  Bagaimana cara membuat sistem yang dapat mendistribusikan akses pengguna ke aplikasi web berbasis

  docker secara efisien? pembaruan untuk sebuah aplikasi web yang sudah berjalan tanpa terjadi downtime?

1.3 Batasan Masalah

  Dari permasalahan yang telah diuraikan di atas, terdapat beberapa batasan masalah pada tugas akhir ini, yaitu:

1. Semua container dari aplikasi web akan berjalan hanya pada satu server master.

  2. Perhitungan algoritma skala akan menggunakan Proactive

  Model dan Reactive Model untuk menentukan jumlah container

  yang dibentuk atau dihapus.

  3. Aplikasi web yang diuji coba hanya akan melakukan komputasi tanpa terhubung dengan layanan luar, seperti koneksi ke suatu basis data dan layanan REST API.

  1.4 Tujuan

  Tujuan dari pembuatan tugas akhir ini adalah membuat sistem yang dapat melakukan skalabilitas secara otomatis terhadap aplikasi web berbasis docker dengan menggunakan Proactive

  

Model dan Reactive Model untuk menentukan sumber daya yang

  diperlukan oleh aplikasi. Selain itu, sistem ini juga memiliki fitur

  hot-upgrade

  , yaitu dapat melakukan pembaruan terhadap aplikasi yang sudah terpasang tanpa terjadi downtime.

  1.5 Manfaat

  Tugas akhir ini diharapkan dapat memberikan kemudahan seorang pengembang aplikasi berbasis web dengan tidak perlu melakukan konfigurasi server secara langsung untuk melakukan skalabilitas aplikasinya. Pengembang tidak perlu mengawasi melonjak tinggi kemudian mengaturnya supaya bisa mengatasi permintaan tersebut. Sistem akan secara otomatis melakukan hal tersebut. Untuk menggunakan sistem ini, pengembang hanya perlu menyimpan aplikasinya di sebuah server docker repository dan sistem akan mengelolanya lebih lanjut.

  

(Halaman ini sengaja dikosongkan)

TINJAUAN PUSTAKA

2.1 Docker

  Docker adalah sebuah aplikasi yang bersifat open source yang berfungsi sebagai wadah untuk mengepak atau memasukkan sebuah perangkat lunak secara lengkap beserta semua hal lainnya yang dibutuhkan oleh perangkat lunak tersebut agar dapat berfungsi sebagaimana mestinya. [2]

  2.1.1 Docker Images Docker images adalah sebuah blueprint atau dasar dari aplikasi

  berbasis docker yang bersifat read-only. Blueprint ini sebenarnya adalah sebuah sistem operasi atau sistem operasi yang telah dipasang berbagai aplikasi dan pustaka pendukung. Docker images berfungsi untuk membuat docker container, yang mana dengan menggunakan satu docker image dapat dibuat banyak docker

  

container . Dengan menggunkaan docker image, permasalah yang

  dikenal dengan ”dependency hell”, dimana sulitnya untuk melengkapi dependensi sebuah aplikasi, dapat diselesaikan karena semua kebutuhan aplikasi sudah berada di dalamnya [3].

  2.1.2 Docker Container Docker container

  bisa dikatakan sebagai sebuah wadah, dimana docker container ini dibuat dengan menggunakan docker

  image

  . Setiap docker container dijalankan maka akan terbentuk sebuah layer di atas docker images. Contohnya saat menggunakan

  

image Ubuntu, kemudian membuat sebuah container dari image

  Ubuntu tersebut dengan nama Ubuntuku. Kemudian lakukan pemasangan sebuah perangkat lunak, misalnya nginx, maka secara otomatis container Ubuntuku akan berada di atas layer image Ubuntu, dan diatasnya lagi merupakan

  

layer nginx terletak. Docker container ke depannya dapat

  digunakan untuk menghasilkan sebuah docker images, dan docker

  

images yang dihasilkan dari docker container itu dapat digunakan

kembali untuk membuat docker container yang baru [3].

  2.1.3 Docker Registry Docker registry adalah kumpulan docker image yang bersifat

  tertutup maupun terbuka yang dapat diakses di Docker Hub atau

  

server sendiri [4]. Dengan menggunakan docker registry,

  seseorang dapat menggunakan docker image yang telah dibuat oleh pengembang yang lain, sehingga mempermudah dalam pengembangan dan transfer aplikasi.

  2.1.4 Docker’s Remote API

  API (Application Programming Interface) atau antarmuka pemrograman aplikasi adalah sekumpulan perintah, fungsi, dan protokol yang dapat digunakan oleh programmer saat membangun perangkat lunak untuk sistem operasi tertentu. API memungkinkan programmer untuk menggunakan fungsi standar untuk berinteraksi dengan sistem operasi. API dapat menjelaskan cara sebuah task tertentu. Dalam pemrograman prosedural seperti bahasa C, task biasanya dilakukan dengan media pemanggilan fungsi. Karena itu, API biasanya menyertakan penjelasan dari fungsi yang disediakannya [5].

  Docker’s Remote API menggunakan skema terbuka. Dalam skema ini, jika ada permintaan yang tidak dikenali maka akan diabaikan. Oleh karena itu, aplikasi klien harus memastikan permintaan yang dikirim dapat dikenali agar tidak terjadi kerusakan saat berkomunikasi dengan docker deamons.

  Docker’s Remote API cenderung menerapkan REST rumit, seperti attach atau pull, koneksi HTTP dipaksa untuk mengirimkan STDOUT , STDIN , dan STDERR .

2.2 Elasticity Controller

2.2.1 Proactive Model

  Proactive model akan memperkirakaan jumlah permintaan

  yang masuk setelah selang waktu ∆T kemudian akan menentukan jumlah container yang diperlukan. Untuk melakukan prediksi, akan digunakan metode ARIMA (Autorgressive

  Integrated Moving Average ). [6] ARIMA sering juga disebut metode runtun waktu Box-Jenkins.

  ARIMA sangat baik ketepatannya untuk peramalan jangka pendek, sedangkan untuk peramalan jangka panjang ketepatan peramalannya kurang baik. Biasanya akan cenderung flat (mendatar/konstan) untuk periode yang cukup panjang. Model Autoregresif Integrated Moving Average (ARIMA) adalah model yang secara penuh mengabaikan independen variabel dalam membuat peramalan. ARIMA menggunakan nilai masa lalu dan sekarang dari variabel dependensi untuk menghasilkan peramalan jangka pendek yang akurat. ARIMA cocok jika observasi dari deret waktu (time series) secara statistik berhubungan satu sama lain (dependent). Model ARIMA dibagi kedalam 3 kelompok, yaitu model autoregressive (AR),

  moving average

  (MA), dan model campuran ARIMA yang mempunyai karakteristik dari dua model pertama.

  1. Autoregressive Model (AR) Bentuk umum model autoregressive dengan ordo p (AR(p)) atau model ARIMA (p,0,0) dinyatakan sebagai berikut:

  

  X c t pXt p (II.1)

  = + + + + +

  et[0]

  1Xt

  1

  2Xt

  2

  

  • = nilai konstanta autoregressive
  • = parameter autoregresif ke-p

  p

  = nilai kesalahan pada saat t

  • e t 2.

  Moving Average Model (MA) Bentuk umum model moving average ordo q (MA(q)) atau ARIMA (0,0,q) dinyatakan sebagai berikut:

  

  • X t = q et k (II.2)

  et

  • + 1et

  1 2et

  2 Dimana:

  • = nilai konstanta moving average
  • sampai beta adalah parameter-parameter moving

  1 q average

  • e t k = nilai kesalahan pada saat t k 3.

  Model ARIMA Model ARMA hanya akan bekerja pada data stasioner. Data stationeritas berarti tidak terdapat pertumbuhan atau penuruan pada data. Data harus horizontal sepanjang sumbu waktu. Dengan kata lain, fluktuasi data berada di sekitar suatu nilai rata-rata yang konstan, tidak tergantung pada waktu dan varian dari fluktasi tersebut, yang artinya tetap konstan setiap waktu. Apabila nonstasioneritas ditambahkan pada campuran proses ARMA, maka model umum ARIMA

  p d q

  ( , , ) terpenuhi. Persamaan untuk kasus sederhana ARIMA(1,1,1) adalah sebagai berikut:

   B

  (1 )(1 = + (1 (II.3)

  1B)Xt

  1B)et

  Parameter pada variabel di atas sama dengan yang dijelaskan

  B

  pada model AR dan MA. Untuk variabel merupakan parameter dari nilai yang akan diprediksi. Setelah melakukan prediksi jumlah permintaan yang akan masuk, langkah selanjutnya adalah menentukan jumlah container

  container , dinyatakan dengan persamaan berikut: l t t

  N

  = (II.4)

  proactive f l t adalah hasil perhitungan prediksi dari model ARIMA model.

  f dalam persamaan di atas adalah jumlah permintaan yang bisa ditangani oleh satu container.

2.2.2 Reactive Model

  Selain menggunakan proactive model, digunakan juga reactive

  model f

  . Nilai pada proactive model bisa didapatkan dari reactive model atau diatur secara manual.

  

Gambar 2.1: Pseudocode Algoritma Reactive Model

  Pengembang akan mengatur batas atas dari sumber daya, lalu sistem akan mengumpulkan data dari masing-masing container dalam jangka waktu tertentu secara berkala. Jika kebutuhan sumber daya melebihi batas atas (upper) yang sudah diatur, akan dibuatkan

  

container baru untuk memenuhi kebutuhan tersebut. Detail dari

  algoritma reactive model ditujukkan seperti Gamber 2.1

2.2.3 Algoritma Skala

  Saat elasticity controller menentukan jumlah container, proses

  

scale out harus dilakukan dengan cepat agar tidak merusak QoS

dan berakibat pengalaman pengguna terganggu.

  

Gambar 2.2: Pseudocode Algoritma Skala

  Saat proses scale out, Proactive Model dan Reactive Model akan digunakan menentukan jumlah container yang harus dibentuk. Karena kebutuhan tersebut, container akan dibentuk saat itu juga. Tapi, untuk proses scale in harus dilakukan dengan cermat dan tidak terburu-buru, kalau tidak, bisa menyebabkan aplikasi meningkat dengan pesat setelah proses scale in dilakukan. Detail dari algoritma skala seperti pada Gambar 2.2. [1]

  2.3 Python

  Python adalah bahasa pemrograman interpretatif multiguna dengan prinsip agar sumber kode yang dihasilkan memiliki tingkat keterbacaan yang baik. Python diklaim sebagai bahasa yang menggabungkan kapabilitas, kemampuan, dengan sintaksis kode yang sangat jelas, dan dilengkapi dengan fungsionalitas pustaka standar yang besar serta komprehensif. Python mendukung beragam paradigma pemrograman, seperti pemrograman berorientasi objek, pemrograman imperatif, dan pemrograman fungsional. Python dapat digunakan untuk berbagai keperluan pengembangan perangkat lunak dan dapat berjalan di berbagai platform sistem operasi [7].

  2.4 Flask

  Flask adalah sebuah kerangka kerja web. Artinya, Flask menyediakan perangkat, pustaka, dan teknologi yang memungkinkan seorang pengembang untuk membangun aplikasi berbasis web. Aplikasi web yang bisa dibangun bisa berupa sebuah halaman web, blog, wiki, bahkan untuk web komersial. Flask dibangun berbasiskan pada Werkzeug, Jinja 2, dan MarkupSafe yang mana menggunakan bahasa pemrograman Python sebagai basisnya. Flask sendiri pertama kali dikembangkan pada tahun 2010 dan didistribusikan dengan lisensi BSD [8].

  Flask termasuk sebagai perangkat kerja mikro karena tidak membutuhkan banyak perangkat atau pustaka tertentu agar bisa bekerja. Flask tidak menyediakan fungsi untuk melakukan interaksi dengan basis data, tidak mempunya validasi form atau fungsi lain yang umumnya bisa digunakan dan disediakan pada sebuah kerangka kerja web. Meskipun memiliki kemampuan yang minim, tapi Flask mendukung dan memberikan kemudahan bagi pengembang untuk menambahkan pustaka sendiri untuk mendukung aplikasinya. Berbagai pustaka seperti validasi form, mengunggah file, berbagai macam teknologi autentifikasi bisa digunakan dan tersedia untuk Flask. Bahkan pustaka-pustaka pendukung tersebut lebih sering diperbarui dibandingkan dengan Flasknya sendiri.

  2.5 Docker SDK for Python

  Docker SDK for Python adalah sebuah pustaka Python yang bisa melakukan interaksi dengan Docker Engine API. Pustaka ini memungkinkan pengguna untuk menjalankan semua perintah yang bisa dilakukan oleh Docker melalui aplikasi Python, seperti menjalankan containers, mengelola containers, mengelola Swarms, dan lain-lain [9].

  Docker SDK for Python ini bisa disebut docker-py. Dengan menggunakan pustaka ini, pengembang akan lebih mudah untuk melakukan interaksi dengan docker engine karena tidak perlu menggunakan perintah Docker secara langsung. Untuk mendapatkan pustaka ini, pengembang bisa mendapatkannya di PyPI. Selain itu, pustaka ini bisa dijalankan dan digunakan bersama dengan Flask.

  2.6 HAProxy

  HAProxy, singkatan dari High Availability Proxy, adalah sebuah perangkat lunak terbuka yang berfungsi sebagai load

  balancer

  untuk protokol TCP/HTTP dan bisa berjalan pada Linux, Solaris, dan FreeBSD. Load balancer sendiri adalah teknik untuk jalur koneksi secara seimbang agar trafik dapat berjalan optimal, memaksimalkan throughput, memperkecil waktu tanggap dan menghindari kelebihan beban pada salah satu jalur koneksi.

  Fungsi yang biasanya dilakukan oleh HAProxy adalah untuk meningkatkan kinerja dan kehandalan dari sebuah server dengan cara mendistribusikan beban pada banyak server, seperti web, aplikasi, dan basis data. HAProxy digunakan oleh banyak perusahaan besar, seperti GitHub, Imgur, Instagram, dan Twitter.

  Ada tiga terminologi yang biasanya berhubungan dengan HAProxy, yaitu Access Control List (ACL), backend, dan

  frontend . [10]

  • Access Control List (ACL)

  Dalam hal load balancing, ACLs digunakan untuk melakukan tes terhadap beberapa kondisi dan melakukan suatu tindakan, seperti memilih server atau menolak permintaan, berdasarkan hasil tes yang dilakukan. Dengan menggunakan ACLs membuat pengaturan lalu lintas data lebih mudah berdasarkan pencocokan pola atau jumlah koneksi ke backend.

  • Backend backend web-backend balance roundrobin server web1 w1.domain.id:80 check server web2 w2.domain.id:80 check backend blog-backend balance roundrobin mode http server blog1 b1.domain.id:80 check server blog2 b2.domain.id:80 check
permintaan yang diteruskan. Backends didefiniskan pada bagian backend pada pengaturan HAProxy. Pada pengaturan yang paling umum, sebuah backend bisa didefinisikan oleh algoritma load balancing yang digunakan dan daftar server beserta portnya. Pengaturan di atas adalah contoh dua pengaturan backend,

  web-backend dan blog-backend dengan dua server pada

  masing-masingnya, dan menggunakan port 80:

  • Frontend Sebuah frontend mendefinisikan bagaimana sebuah permintaan diteruskan ke Backends. Frontends didefinisikan pada bagian frontend di pengaturan HAProxy. Bagian yang perlu didefinisikan meliputi:
    • Sebuah set IP address dan sebuah port, contohnya 10.1.1.7:80, *:443, dan lain-lain.
    • ACLs.
    • Bagian use_backend , yaitu sebuah fungsi yang

  mendefinisikan backend mana yang digunakan berdasarkan kondisi ACL yang cocok, dan/atau

  default_backend

  sebuah yang akan menangani semua kasus lain yang muncul.

2.7 Nginx

  Ngins adalah sebuah perangkat lunak yang bisa digunakan untuk web server, load balancer, dan reverse proxy. Nginx terkenal karena stabil, memiliki tingkat performa tinggi dan konsumsi sumber daya yang minim. Pada kasus saat terjadi koneksi dalam jumlah yang banyak secara bersamaan, penggunaan memory, CPU, dan sumber daya sistem yang lain sangat kecil dan stabil. [11]

  Nginx bisa digunakan untuk menyajikan kontent HTTP yang dinamis menggunakan FastCGI, SCGI untuk menangani scripts, aplikasi WSGI , dan bisa juga digunakan sebagai sebuah load

  

balancer . Nginx menggunakan asynchronous event-driven untuk

  menangani permintaan. Dengan menggunakan model ini bisa, pengembang bisa melakukan predeksi kinerja Nginx saat terjadi jumlah permintaan yang banyak.

  2.8 etcd

  etcd adalah sebuah perangkat lunak yang berfungsi sebagai sebuah penyimpanan terdistribusi dan berbasis key-value. etcd biasanya digunakan sebagai tempat untuk membagikan pengaturan suatu perangkat dan untuk membagikan data tentang ketersediaan sebuah layanan. etcd berfokus pada empat hal, yaitu, kemudahan, keamanan, kecepatan, dan kehandalan. etcd ditulis menggunakan bahasa pemrograman Go dan menggunakan algoritma Raft untuk menangani jumlah replikasi log yang besar. etcd sudah digunakan oleh banyak perusahaan pada bagian produksi [12].

  2.9 confd

  confd adalah sebuah perangkat lunak ringan yang berguna untuk memanajemen pengaturan perangkat lunak lain. confd menjaga pengaturan suatu aplikasi agar selalu yang paling baru dengan menggunakan atau melihat data yang ada di etcd, consul, dynamodb,Ma Redis, Vault, Zookeeper, atau berkas env dan melakukan proses template yang sudah disediakan [13]. Jika terjadi perubahan data, confd akan otomatis memperbarui pengaturan aplikasi dan menjalankan pengaturan tersebut dengan data yang baru.