deployment aplikasi untuk multi server dengan

advertisement
Edisi Agustus 2013 Volume VII No. 2
ISSN 1979-8911
DEPLOYMENT APLIKASI UNTUK MULTI SERVER
DENGAN MENGGUNAKAN CAPISTRANO
Wisnu Uriawan, Adam Faroqi, Hayati
Jurusan Teknik Informatika, Fakultas Sains dan Teknologi, Universitas Islam Negeri
Sunan Gunung Djati Bandung Jl. A.H Nasution No. 105 Bandung 40164
[email protected], 2 [email protected], [email protected]
Abstrak
Sebuah aplikasi web yang berjalan di beberapa server membutuhkan mekanisme deployment
yang berbeda dengan aplikasi yang hanya berjalan pada satu server. Aplikasi dituntut agar dapat
disebarkan ke beberapa server dalam waktu yang bersamaan. Salah satu tools yang dapat
menyelesaikan masalah dalam deployment aplikasi ke multi server yaitu capistrano.
Capistrano menawarkan kemampuan melakukan deployment aplikasi ke beberapa server. Hal
ini menarik untuk diteliti bagaimana algoritma yang digunakan, penanganan kegagalan
deployment dan penanganan downtime. Penelitian dilakukan dengan menganalisis proses kerja,
dokumentasi dan source code-nya. Hasil penelitian menunjukkan capistrano menggunakan
multi-threading dalam menyebarkan aplikasi ke beberapa server. Untuk penanganan kegagalan
capistrano menyediakan fungsi rollback agar kegagalan dapat dipelajari dan diperbaiki. Pada
saat aplikasi membutuhkan downtime, capistrano menyediakan fungsi untuk menampilkan
halaman downtime.
Kata kunci : deployment, capistrano, multi-threading, rollback, downtime
informasi dalam internet, sehingga trafik
1. Pendahuluan
Dewasa ini internet menjadi suatu
dalam
internet
semakin
permintaan
lapisan masyarakat di dunia, baik itu bagi
meningkatnya
kalangan pelajar, ilmuwan, dan usahawan.
menyebabkan beban kerja pada server
Hal
semakin
penyedia layanan internet tersebut juga
meningkatnya permintaan akan kebutuhan
meningkat seiring dengan bertambahnya
menyebabkan
informasi.
oleh
kebutuhan yang sangat penting bagi seluruh
ini
akan
padat
trafik
dalam
Semakin
internet
47
Edisi Agustus 2013 Volume VII No. 2
ISSN 1979-8911
permintaan yang masuk, sehingga server
satu penanggulangan beban yang meningkat
tersebut akan kelebihan beban dalam waktu
bisa dilakukan dengan melakukan upgrade
yang pendek, terutama untuk server yang
server, proses upgrade server merupakan
menyediakan layanan yang populer. Oleh
proses yang kompleks dan rentan terjadi
karena
dan
kegagalan aplikasi (application failure)
software yang mendukung layanan highly
ketika proses upgrade sedang berjalan.
scalable dan highly available service.
Semakin tinggi kapasitas server yang di-
itu,
diperlukan
hardware
Highly scalable dan highly available
service dapat dijabarkan sebagai berikut:
upgrade, semakin tinggi biaya yang harus
dikeluarkan.
- Scalability, saat request yang diarahkan
Sekelompok server yang dihubungkan
ke server meningkat sehingga beban
oleh jaringan yang cepat, muncul akibat
kerja server bertambah, kapasitas server
arsitektur untuk membangun layanan yang
dapat ditingkatkan dengan cepat dan
scalable dan highly available, arsitektur ini
mudah untuk memenuhi kebutuhan
dikenal dengan cluster of servers. Dalam
- Availability, layanan secara keseluruhan
harus tersedia setiap waktu.
arsitektur ini beban kerja dari banyak request
dibagi ke seluruh server oleh sebuah load
- Manageability, walaupun seluruh sistem
balancer. Sehingga jika salah satu server
mungkin secara fisik besar, harus mudah
tidak tersedia karena down, maintenance,
untuk dikelola.
dan lain-lain, maka request masih bisa
- Cost-effectiveness, seluruh bagian sistem
harus hemat biaya dalam pembangunan
dan pemeliharaan.[1]
ditangani oleh server lain.
Jika suatu web aplikasi berjalan di
beberapa server, maka semua aplikasi di
Sebuah sistem dengan satu server
semua server dituntut untuk menyediakan
biasanya tidak cukup untuk menangani
resources yang sama persis seperti kode,
beban yang meningkat secara cepat. Salah
database, file yang di-upload oleh user.
48
Edisi Agustus 2013 Volume VII No. 2
ISSN 1979-8911
Penambahan fitur pada aplikasi menuntut
walaupun sebenarnya ia hanyalah bagian
hanya sekali deployment ke semua server,
daripadanya.[3]
sehingga
2. Metoda Penelitian
dibutuhkan
suatu
mekanisme
khusus untuk melaksanakannya. Salah satu
Load balancing adalah suatu metode
solusi yang diteliti yaitu metodologi untuk
untuk
deployment sebuah web aplikasi ke semua
beberapa host sehingga beban kerja menjadi
server
Capistrano.
lebih ringan. Ini bertujuan agar waktu rata-
kemampuan
rata mengerjakan tugas menjadi singkat dan
deployment aplikasi ke multi server dalam
dapat menaikkan utilitas prosesor. Load
satu waktu.
balancing dapat diimplementasikan dengan
menggunakan
Capistrano
menawakan
Internet
berasal
Interconnection
dari
Networking
kata
yang
mempunyai arti hubungan komputer dengan
berbagai tipe yang membentuk sistem
jaringan yang mencakup seluruh dunia
(jaringan komputer global) dengan melalui
jalur telekomunikasi seperti telepon, radio
mendistribusikan
hardware
khusus,
beban
software
kepada
maupun
gabungan keduanya. Konfigurasi standar
yang ada memberi gambaran bahwa satu
mesin ditempatkan diantara client dan
server, mesin ini disebut sebagai director
karena
tugasnya
adalah
memberikan
balancing pada request dari client ke server.
link, satelit dan lainnya. World Wide Web
Sebuah load balancer adalah perangkat
adalah suatu ruang informasi di mana
jaringan yang dipasang diantara client dan
sumber-sumber
server, bekerja sebagai saklar untuk request
daya
yang
berguna
diidentifikasi oleh pengenal global yang
dari
disebut Uniform Resource Indetifier (URI).
mengimplementasikan
World Wide Web sering dianggap sama
penjadwalan yang akan menentukan ke arah
dengan
server mana request dari client akan
internet
secara
keseluruhan,
client.
Load
beberapa
balancer
metode
diteruskan.[4]
49
Edisi Agustus 2013 Volume VII No. 2
Deployment
application
environment
means
from
into
moving
a
a
home
ISSN 1979-8911
your
ke server tertentu yang sedang tersedia
development
berdasarkan algoritma tertentu. DNS dari
that
your
customers can visit. For a web application,
that process involves choosing a host, setting
up a web server and database, and moving
all of your files to the right places with the
right permissions.[6]
Aplikasi berjalan pada beberapa server
yang tergabung menjadi satu virtual server,
berikut adalah arsitektur aplikasi multi
server meggunakan linux virtual server:
suatu aplikasi web harus diarahkan ke IP
dari load balancer.
b. Server Cluster (kumpulan server)
Kumpulan dari real server yang menjadi
tempat aplikasi berjalan. Setiap server
akan memiliki resources yang sama
untuk setiap aplikasi. Real server ini lah
yang menjadi target deployment jika
terdapat
penambahan/perbaikan
kode
aplikasi.
c. Shared Storage
Merupakan tempat penyimpanan untuk
server-server yang digunakan, seperti
file-file yang diupload pengguna dan
Gambar 1. Arsitektur dasar multi server
database sehingga seluruh server akan
mampu
menyediakan
konten
yang
Arsitektur di atas mengadopsi 3-tier
sama.[5]
arsitektur yang terdiri atas:
Version
control
(Source
Code
a. Load Balancer
Management) adalah sebuah sistem yang
Merupakan satu satunya pintu masuk ke
mencatat setiap perubahan terhadap sebuah
dalam sistem/aplikasi. Load balancer
berkas atau kumpulan berkas sehingga pada
akan mendistribusikan request dari client
suatu saat dapat kembali kepada salah satu
50
Edisi Agustus 2013 Volume VII No. 2
ISSN 1979-8911
versi dari berkas tersebut. Version control
membuat sebuah bahasa skripting yang
dapat menyediakan akses untuk banyak
memiliki kemampuan orientasi objek. Pada
orang sekaligus, mirip dengan sharing folder
saat itu pemrograman berorientasi objek
yang biasa digunakan, akan tetapi, version
sedang berkembang tetapi belum ada bahasa
control memiliki kemampuan yang lebih
pemrograman scripting yang mendukung
dari pada sekedar sharing folder.[5]
pemrograman objek.[6]
Capistrano is an open source tool for
running scripts on multiple servers; its main
3. Pembahasan
Capistrano merupakan sebuah program
use is deploying web applications. It
ruby
automates the process of making a new
berkontribusi dan boleh memakai program
version of an application available on one or
ini secara bebas (free). Karena seluruh
more web servers, including supporting
capistrano dibangun menggunakan bahasa
tasks such as changing databases.[8]
pemrograman
Ruby
adalah
bahasa
pemrograman
dinamis berbasis skrip yang berorientasi
objek.
Tujuan
menggabungkan
dari
ruby
yaitu
kelebihan
dari
semua
bahasa-bahasa pemrograman skrip yang ada
di dunia. Ruby ditulis dengan bahasa
pemrograman C dengan kemampuan dasar
seperti Perl dan Python.
open
source,
siapa
ruby,
saja
maka
boleh
sebelum
melakukan instalasi di dalam komputer,
pengguna harus sudah memasang ruby dan
rubygems. Rubygems merupakan sebuah
package manager yang menyediakan format
standar
dalam
program
dan
pendistribusian
library
yang
sebuah
dibangun
menggunakan bahasa pemrograman ruby.
Berikut cara instalasi capistrano melalui
command prompt.
Ruby pertama kali dibuat oleh seorang
# gem install capistrano
programmer Jepang bernama Yukihiro
Matsumoto. Pada tahun 1993 Yukihiro ingin
51
Edisi Agustus 2013 Volume VII No. 2
Selain
memiliki
ISSN 1979-8911
ketergantungan
terhadap instalasi ruby dan rubygems, dalam
penggunannya capistrano juga bergantung
pada library ruby lainnya, yaitu highline,
net-scp, net-sftp, net-ssh dan net-sshgateway.
Berbeda
dengan
ruby
Gambar 2. Contoh penggunaan capify
dan
b. “cap”
rubygems yang harus diinstal terlebih dahulu
Perintah “cap” dijalankan pada saat
sebelum
instalasi
capistrano,
library
deployment, dan diikuti oleh task, contoh
tersebut akan secara otomatis terinstal pada
“cap
deploy”.
Ada
beberapa
jenis
saat capistrano diinstal.
perintah
dasar
(default)
cap
yang
Capistrano tidak memiliki GUI yang
disediakan
oleh
capistrano,
untuk
dapat digunakan oleh user, user harus
mengetahuinya digunakan script “cap menggunakannya melalui command prompt.
T”, maka akan muncul daftar jenis
Terdapat dua jenis perintah dasar yang
perintah cap sebagai berikut:
digunakan dalam capistrano, yaitu:
a. “capify”
Jika capistrano sudah terinstal, maka
cap deploy
# Deploys your
project.
ketika diketikkan “capify” pada layar,
cap deploy:check
akan menghasilan dua buah file. File
deployment dependencies.
# Test
Capfile dan file config/deploy.rb. Capfile
cap deploy:cleanup
# Clean up old
inilah yang akan dibaca oleh capistrano
releases.
pada saat deployment, lalu capifile akan
mencari file deploy.rb yang berisi setting
dari skenario deployment. Berikut ini
cap deploy:cold
# Deploys and
starts a `cold' application.
contoh penggunaan “capify” :
52
Edisi Agustus 2013 Volume VII No. 2
ISSN 1979-8911
cap deploy:create_symlink # Updates
cap deploy:stop
the symlink to the most recently
exists as a hook into which to install...
deployed...
cap deploy:symlink
cap deploy:migrate
# Run the
migrate rake task.
# Deprecated
API.
cap deploy:update
cap deploy:migrations
# Deploy and
run pending migrations.
cap deploy:pending
# Blank task
# Copies your
project and updates the symlink.
cap deploy:update_code
# Displays the
# Copies
your project to the remote servers.
commits since your last deploy.
cap deploy:upload
cap deploy:pending:diff # Displays
the currently deployed version.
the `diff' since your last deploy.
cap deploy:web:disable
cap deploy:restart
maintenance page to visitors.
# Blank task
# Copy files to
# Present a
exists as a hook into which to install...
cap deploy:web:enable
cap deploy:rollback
application web-accessible again.
# Rolls back to
# Makes the
a previous version and restarts.
cap invoke
cap deploy:rollback:code # Rolls back
command on the remote servers.
to the previously deployed version.
cap shell
cap deploy:setup
interactive Capistrano session.
# Prepares one
or more servers for deployment.
cap deploy:start
# Blank task
exists as a hook into which to install...
# Invoke a single
# Begin an
Seperti disebutkan di atas, pada saat
deployment aplikasi, capistrano membaca
sebuah file konfigurasi, yaitu “Capfile” dan
53
Edisi Agustus 2013 Volume VII No. 2
ISSN 1979-8911
“deploy.rb”. Berikut ini adalah hal-hal yang
set :deploy_to, "folder
harus dituliskan pada file “deploy.rb”.
target yang ada di
a.
server"
Nama Aplikasi
set :application,
d.
Server target
"tutorial"
role :web, "your web-server here"
b.
Sumber kode aplikasi
role :app, "your app-server here"
set :repository,
role :db, "your primary db-server
"repository_url"
here", :primary => true
set :scm, :subversion
role :db, "your slave db-server
here"
# Atau: `accurev`,
`bzr`, `cvs`, `darcs`,
`git`, `mercurial`,
e.
Hal-hal lain yang dibutuhkan pada saat
deployment
`perforce`,
Pada saat sebuah web aplikasi di`subversion` or `none`
deploy, biasanya selain memperbaharui
set :scm_username,
kode aplikasi, dibutuhkan langkah-
"user_name"
langkah lain sesuai kebutuhan aplikasi,
set :scm_password,
misalnya untuk aplikasi ruby on rails,
"password"
dibutuhkan script untuk me-restarrt
mod_rails . Dalam hal ini, pengguna
c.
Folder target untuk kode aplikasi
hanya perlu menambahkan script pada
capistrano. Script ini biasanya disebut
54
Edisi Agustus 2013 Volume VII No. 2
ISSN 1979-8911
“task script”, berikut adalah contohnya
besar deployment dapat dipetakan sebagai
:
berikut (client merupakan komputer lokal
milik pengembang aplikasi):
namespace :deploy do
task :start do ; end
task :stop do ; end
task :restart, :roles => :app, :except
=> { :no_release => true } do
Gambar 3. Basic deployment map
run "#{try_sudo} touch
Pada gambar di atas, aplikasi dari
“{File.join(current_path,'tmp','restart.tx
komputer pengembang disalin ke server
t')}"
menggunakan mekanisme copy-paste yang
umum seperti ftp, scp atau diunggah
end
menggunakan UI seperti yang disediakan
end
perusahaan
penyedia
perkembangannya,
a.
hosting.
banyak
Pada
pengembang
Langkah-langkah deployment
yang
Deployment
diharapkan
mampu
membuat aplikasi yang telah dibangun di
komputer lokal milik pengembang dapat
menggunakan
source
code
management (SCM) dalam pengelolaan
kode
aplikasi,
sehingga
deployment
dipetakan lagi seperti gambar di bawah ini.
berjalan di server dengan baik. Prosesnya
paling sederhana yaitu memindahkan kode
sumber
ke
server,
kemudian
menjalankannya di server. Sehingga garis
55
Edisi Agustus 2013 Volume VII No. 2
ISSN 1979-8911
deployment dapat digambarkan dengan
flowmap berikut ini:
Start
N = Jumlah
Server
Gambar
4.
Basic
deployment
map
Deploy
N=N-1
No
menggunakan SCM
N == 0
Yes
Finish
Sebuah aplikasi yang kodenya dikelola
Gambar 5. Flowmap proses deployment
menggunakan SCM, aplikasi tidak disalin ke
untuk aplikasi multiserver.
server dari komputer lokal, melainkan
disimpan terlebih dahulu ke repository SCM
Suatu deployment aplikasi, terkadang
untuk kemudian diunduh secara langsung
tidak berhasil atau menimbulkan error dan
dari server. Penggunaan SCM akan sangat
bugs yang lebih besar. Dalam hal ini, jika
membantu jika aplikasi dibangun oleh
bugs tidak dapat ditangani dengan cepat,
sekelompok orang dalam tim.
biasanya
b. Iterasi pada deployment aplikasi ke
mengembalikan
terbaik
aplikasi
ke
adalah
keadaan
sebelum deployment, dengan kata lain
banyak server
Pada deployment sebuah aplikasi web,
jika terdapat sebuah server maka terdapat
sekali proses deployment, jika terdapat dua
rollback deployment. Proses rollback pun
akan memiliki N iterasi jika terdapat lebih
dari satu server aplikasi.
Proses iterasi penanganan error atau
server, maka akan dilakukan dua kali
deployment, begitu seterusnya sehingga
akan didapatkan N iterasi deployment,
iterasi
dalam
kesalahan deployment selanjutnya dapat
digambarkan dengan flowmap yang berikut
ini:
dimana N adalah jumlah server.
Selanjutnya,
langkah
proses
56
Edisi Agustus 2013 Volume VII No. 2
ISSN 1979-8911
4. Kesimpulan
Start
N = Jumlah
Server
Dari hasil analisis dan pengujian
Rollback
N = N - 1
No
tentang capistrano, maka dapat disimpulkan
N == 0
Yes
sebagai berikut:
Finish
Gambar 6. Flowmap proses rollback
deployment untuk aplikasi multi server.
1. Capistrano
menggunakan
multi-
threading pada proses koneksi ke server,
sedangkan eksekusi setiap poses pada
Pada
dasarnya,
capistrano
sudah
masing-masing server dilakukan secara
menyediakan default deployment behaviour.
berurutan satu per satu dengan selisih
Jika proses deployment web aplikasi sama
waktu dalam hitungan milisecond.
seperti yang disediakan oleh capistrano,
2. Capistrano
menyediakan
fungsi
maka tidak diperlukan mendefinisikan task
deploy:rollback untuk mengembalikan
baru. Berikut ini adalah capistrano default
deployment ke versi sebelumnya dalam
deployment behaviour.
menangani kegagalan deployment..
3. Capistrano
menyediakan
fungsi
deploy:web:disable pada saat aplikasi
membutuhkan downtime.
5. Saran
Dengan penelitian ini, dapat diambil
beberapa saran sebagai berikut:
Gambar 7. Capistrano default deployment
behaviour
1. Setelah
menggunakan
deploy:rollback
perlu
fungsi
dilakukan
peninjauan kembali terhadap penyebab
kegagalan dan dibuatkan solusi yang
57
Edisi Agustus 2013 Volume VII No. 2
ISSN 1979-8911
lebih baik agar kegagalan tidak terjadi
(Pte) Ltd & National University of
pada deployment selanjutnya.
Singapore.
2. Pada
penggunaan
deploy:web:disable,
fungsi
[5] Zhang, W. Linux Virtual Server for
diperlukan
Scalable Network Services. China :
konfigurasi tambahan pada web server.
National Laboratory for Parallel &
Distributed Processing.
DAFTAR PUSTAKA
[6] Zygmuntowicz,
Ezra
dkk.2007.
[1] Chendramata, Aidil & Adhityo P. 2008
Deploying Rails Application Step by
. High
Availibity System, Jakarta:
Step.Texas:The Pragmatic Bookshelf
Direktorat Sistem Informasi, Perangkat
Lunak
dan
Konten
irektorat
[7] http://www.linuxvirtualserver.org (di
akses tanggal 31 Juli 2012)
Jendral Aplikasi Telematika, Departem
en Komunikasi dan Informatika.
[8] http://en.wikipedia.org/wiki/Capistran
o (diakses tanggal 31 Juli 2012)
[2] Dhanta, Rizky. 2009. Kamus Istilah
Komputer Grafis dan. Surabaya :
[9] https://github.com/capistrano/capistra
Indah
[3] Khoe
no/wiki/_pages(diakses tanggal 31
Yao
Jaringan
Juli 2012)
Tung.1997.Teknologi
Internet.Yogyakarta
:
Dinastindo
[10 https://github.com/capistrano/capistra
]
no.git(diakses tanggal 31 Juli 2012)
[4]
Teo, Y.M., dan Rassul Ayani. 2001.
Comparison
Strategies
of
on
Load
balancing
Cluster-based
Web
Servers. Singapore : Fujitsu Computer
58
Edisi Agustus 2013 Volume VII No. 2
ISSN 1979-8911
59
Download