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