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 WEBMUHAMAD 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 aService), 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 LevelAgreement). 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
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.