Post on 13-Mar-2019
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 1
PEMROGRAMAN TERDISTRIBUSI MENGGUNAKAN
PYTHON MERUPAKAN ALTERNATIF YANG SEDERHANA DAN MENARIK
DALAM MEMBANGUN SISTEM SEKELAS SUPERKOMPTER DENGAN ALOKASI DANA YANG RENDAH
Ema Utami dan Mahdi Ridho
STMIK AMIKOM Yogyakarta
e-mail : ema@nrar.net
ABSTRAK
Perancangan dan pembangunan sistem diperlukan untuk membantu manusia dalam memecahkan masalah mulai dari yang sederhana sampai yang komplek. Untuk melakukan proses yang sederhana hanya dengan satu komputer saja sudah cukup, misalkan menghitung rata-rata penghasilan penduduk suatu daerah. Namun, bagaimana jika dihadapkan pada suatu kasus pencarian bilangan prima terbesar. Mungkin saja manusia dapat memberikan gambaran simulasi secara umum dengan berbagai teknik, tetapi untuk detail dan segala kemungkinannya sangat sulit dikerjakan. Dalam hal ini dibutuhkan suatu sistem dengan spesifikasi khusus.
Pilihan boleh saja menggunakan satu superkomputer untuk melakukan perhitungan. Alasan yang masuk akal untuk menggunakan superkomputer dengan kecepatan dan ketelitian yang tinggi. Namun, penggunaan superkomputer membutuhkan dana yang sangat mahal, diperkirakan memakan biaya dengan angka 8-10 digit dolar AS, dan sulit diperoleh di pasaran pada umumnya karena adanya pembatasan ekspor dari pemerintah Amerika. Lalu, apakah ada solusi lain yang dapat menggantikan teknologi superkomputer?
Suatu isu yang menarik dalam perkembangan teknologi informasi dapat menjawab pertanyaan tersebut. Awal mulanya muncul pemikiran bagaimana suatu komputer biasa dapat dijalankan secara optimal layaknya sebuah superkomputer. Para pengembang teknologi informasi akhirnya menemukan satu alternatif yang masuk akal terutama dari segi finansial yaitu distributed system atau distributed programming.
Kata kunci : superkomputer, teknologi informasi, distributed programming
1. Pendahuluan
Distributed system merupakan suatu sistem yang terdiri dari beberapa komputer dan terhubung dalam suatu jaringan dimana semua komputer saling berkontribusi untuk menyelesaikan masalah. Dalam suatu distributed system, ada sebuah sub-system yang mampu memberikan tugas kepada setiap sistem yang ingin bergabung dan menerima kembali hasilnya.
Untuk membangun suatu distributed system, sebaiknya menggunakan sesuatu yang standar dimana telah diimplementasikan oleh berbagai platform. Sehingga sistem yang dibuat dapat digunakan secara meluas. Selain penggunaan teknologi yang standar, perlu dipertimbangkan juga
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 2
masalah dana yang akan dikeluarkan untuk membangun distributed system agar bisa ditekan seminimal mungkin. Hal utama yang sangat berpengaruh dalam masalah dana adalah hardware. Kabar gembira yang dapat dijadikan pertimbangan adalah hardware (dalam hal ini komputer) yang sudah out of date dapat digunakan untuk membangun distributed system.
Teknologi dalam distributed system terdiri dari beberapa kategori, di antaranya:
1) Socket
Teknologi ini merupakan cikal bakal dari distributed system. Konsep dasarnya terdapat sebuah server yang akan membuka socket dan mendefinisikan berbagai aturan dan client-client melakukan tugasnya masing-masing dengan mengikuti aturannya. Teknologi ini sangat sulit dan komplek karena dibutuhkan kemampuan untuk membuat semacam protokol baru.
2) Remote Procedure Call (RPC)
Dalam RPC terdapat sub-system yang mendefinisikan berbagai aturan dalam bentuk procedure, selanjutnya sub-system lainnya memanggil procedure tersebut untuk menyelesaikan tugasnya masing-masing.
3) Objek terdistribusi dalam satu bahasa pemograman
Contoh implementasinya pada Java Remote Method Invocation (RMI), DOPY, dan Pyro.
4) Objek terdistribusi tanpa memperhatikan perbedaan bahasa pemograman
Contoh implementasinya pada DCOM dari Microsoft dan CORBA.
5) Teknologi lain seperti Message-oriented middleware, mobile agent, dan lain sebagainya.
Salah satu teknologi standar yang dapat digunakan dalam membangun suatu distributed system adalah Remote Procedure Call (RPC). Dalam konteks distributed sytem, suatu sub-system mendefinisikan beberapa aturan (dalam hal ini berupa procedure) dan sistem lain dimungkinkan bergabung untuk menyelesaikan masalah berdasarkan procedure yang didefinisikan. Teknologi RPC telah dipertimbangkan kurang lebih sekitar tahun 1976. Teknologi ini membutuhkan model pengalamatan server, protokol transport, dan type marshalling.
Beberapa proyek distributed system yang telah berhasil dilakukan di antaranya:
1) Abacus adalah sebuah distributed system yang menggabungkan 17 komputer Pentium III dengan masing-masing 2 processor (total ada 34 CPU) dengan sistem Linux digunakan untuk aplikasi multimedia berbasis internet. Abacus dibangun pada tahun 2000 dan diisukan sebagai salah satu perangkat komputasi terbaik di Hongkong.
2) Barkeley Open Infrastructure for Network Computing (BOINC) yang dikembangkan oleh tim dari University of California, Barkeley Amerika.
3) Einstein@home adalah proyek yang menggunakan sistem terdistribusi dalam melakukan pencarian terhadap bintang neutron berputar menggunakan data dari LIGO dan detektor gelombang gravitasi GEO.
4) Climateprediction@net adalah sistem terdistribusi yang digunakan dalam perhitungan perubahan iklim.
Namun di balik kelebihannya, sistem yang terdistribusi juga menimbulkan masalah baru seperti konkurensi data, latensi, dan berbagai kemungkinan kesalahan lainnya. Hal ini merupakan sesuatu yang dianggap wajar dalam perkembangan teknologi informasi dan menjadi tantangan bagi dunia TI untuk menemukan solusi yang nyata dan tepat guna.
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 3
3. XML-RPC
XML-RPC adalah salah satu bentuk sederhana implementasi teknologi RPC yang menggunakan XML sebagai type marshalling serta HTTP sebagai protokol transport dan pengalamatan servernya. XML-RPC sangat mirip dengan SOAP yang juga menggunakan XML dan HTTP. Meskipun SOAP lebih kompleks dibandingkan XML-RPC, namun SOAP masih jauh dari stabil.
Kini XML-RPC telah diimplementasikan pada banyak bahasa pemograman, sebut saja Python, Java, Perl, C, C++, PHP, dan sebagainya. Hal ini membuktikan bahwa XML-RPC merupakan teknologi yang standar dan matang. XML-RPC juga mendukung multi-platform termasuk UNIX, Windows, dan Macintosh.
Dalam XML-RPC terdapat sistem yang bertugas sebagai server dan client. Server mendefinisikan berbagai aturan dalam bentuk procedure, selanjutnya procedure tersebut akan dipanggil oleh client dalam menyelesaikan tugasnya masing-masing. Secara global cara kerjanya dapat digambarkan sebagai berikut:
Gambar 1: Bagan cara kerja XML-RPC
Salah satu contoh sukses pemanfaatan XML-RPC adalah KDE dan ZOPE. XML-RPC juga telah digunakan oleh Red Hat dalam beberapa layanan baik secara eksternal maupun internal. Selain itu, XML-RPC sangat cocok dalam pengembangan aplikasi bisnis secara intensif baik yang berbasis dekstop maupun web. Memanfaatkan XML-RPC untuk membantu masalah yang kompleks dan butuh proses komputasi yang besar cukup masuk akal bagi kalangan pengguna rumahan maupun profesional.
Kelebihan yang diperoleh dari penggunaan XML-RPC dalam melakukan pemograman secara terdistribusi yaitu:
1) Membuat aplikasi dapat berjalan secara modular, dalam konteks distributed tugas benar-benar dapat dibagi ke beberapa sub-system melalui pembagian module.
2) Dengan adanya teknologi internet, memungkinkan seluruh komputer yang ada dunia turut berkontribusi menjadi bagian sub-system tanpa harus mengganggu aktivitas kerja seperti biasanya.
3) XML-RPC merupakan teknologi yang cukup stabil dan mudah untuk digunakan.
HTTPXML XML
XML‐RPC
DATA
DATA
DATA DATA
DATA
DATA Code
Code
Code Code
Code
Code
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 4
4) Mendukung sistem keamanan yang dapat diandalkan dalam hal pengalamatan server.
5) Sifatnya yang free, open, dan multi-platform, memudahkan setiap user untuk secara langsung menggunakannya.
4. Python
Sekilas, nama bahasa pemograman yang satu ini terdengar seperti nama salah satu reptil buas. Python dikembangkan oleh Guido van Rossum (guido@python.org) pada awal tahun 1990 di Stichting Mathematisch Centrum (http://www.cwi.nl). Python sendiri dapat dikatakan merupakan penerus dari bahasa ABC. Pada tahun 1995, sebagian besar pengembangan Python dilakukan di Corporation for National Research Initiatives (http://www.cnri.reston.va.us). Pengembangan Python saat ini dinaungi oleh Python Software Foundation.
Beberapa rilis Python berada dalam bendera licensi yang berbeda-beda, akan tetapi semuanya adalah open source. Hampir semua licensi Python kompatibel dengan GPL, kecuali Python versi 1.6, 2.0, 1.6.1, dan 2.1.
Python merupakan interpreter yang dapat diandalkan dalam penanganan hal-hal yang sangat rumit dan membutuhkan perhitungan dengan ketelitian tingkat tinggi. Dalam dunia free software, jarang sekali terdapat implementasi suatu bahasa pemograman yang datang satu paket dengan GUI toolkit sendiri termasuk dalam hal ini Python. Meskipun Python menggunakan pustaka Tk, namun bukan dikembangkan secara khusus untuk Python. Selain itu, dukungan berbagai GUI toolkit untuk Python dapat ditemukan dimana-mana seperti PyGTK dan PyQT. Contoh aplikasi GUI yang dibangun dari bahasa Python adalah installer RedHat Linux. Pustaka-pustaka lain yang tidak datang bersama suatu bahasa pemograman umumnya diimplementasikan oleh pihak ketiga dan dapat digunakan secara bebas.
Python dapat dijalankan di hampir semua platform mulai dari GNU/Linux, Windows, dan Machintos. Python termasuk ke dalam general purpose programming language dimana hampir semua tugas pemograman di lingkungan sistem (dalam Linux), jaringan, sampai pemograman berbasis web. Python juga menyediakan framework untuk membuat aplikasi jaringan.
Python sangat mendukung pemograman berorientasi objek, dan semuanya merupakan suatu objek di Python. Berbeda dengan bahasa pemograman pada umumnya, Python sangat memperhatikan whitespace dan indentasi.
Beberapa aplikasi lainnya yang telah dibuat dari Python adalah ZOPE sebuah aplikasi server, Grail sebuah web browser, dan KnowBot Operating Environment (distributed environment untuk kode mobile), engine untuk virtual reality di University of Virginia, dan masih banyak lagi. Karena kestabilannya, Python telah digunakan sejak lama oleh Google, Inc.
Dalam hubungannya dengan Distributed Programming, Python menyediakan 2 pustaka atau modul yaitu SimpleXMLRPCServer dan xmlrpclib yang masing-masing berfungsi sebagai server dan client.
Kemampuan python dalam mengelola tipe data sangat baik. Untuk mendeklarasikan suatu variabel dilakukan secara langsung tanpa menyebutkan tipe datanya, ini yang membedakan Python dengan bahasa lain. Python akan menentukan tipe datanya secara otomatis. Python juga mendukung konversi dan perhitungan antar tipe data dengan ketelitian yang tinggi. Python membagi tipe data ke dalam 2 jenis yaitu bilangan (semua tipe yang berhubungan dengan angka murni) dan string.
Untuk tipe data dalam rumpun bilangan termasuk di dalamnya adalah integer, long, float, oktal, hexadesimal, dan bilangan kompleks. Hal-hal yang harus diperhatikan:
1) Untuk bilangan oktal dan hexa masing-masing diawali dengan 0 dan 0x
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 5
2) Untuk bilangan yang panjang diakhiri dengan karakter l atau L
3) Untuk bilangan float, gunakan e atau E pada eksponensial
4) Untuk bilangan kompleks dibagi ke menjadi bagian real dan imajiner, dan diakhiri dengan j atau J
Operator untuk tipe dalam rumpun bilangan dapat dilihat pada tabel berikut:
Operator Keterangan
+
-
*
/
%
**
~
>>
<<
|
&
^
>, >=
<, <=
==
!= atau <>
penjumlahan
pengurangan, negasi
perkalian
pembagian
sisa pembagian
pemangkatan
bitwise komplemen
bitwise shiftright
bitwise shiftleft
bitwise or
bitwise and
bitwise xor
perbandingan lebih besar dan lebih besar sama dengan
perbandingan lebih kecil dan lebih kecil sama dengan
perbandingan sama dengan
perbandingan tidak sama dengan
Tabel 1: Operator untuk tipe data bilangan
Dalam menangani penggunaan string python dapat diandalkan, dengan aturan sebagai berikut:
1) diapit tanda kutip tunggal (') atau ganda (“)
2) bila di dalam suatu string terdapat karakter kutip tunggal (') penulisannya diapit kutip ganda (“)
3) bila di dalam suatu string terdapat karakter kutip tunggal (“) penulisannya diapit kutip ganda (')
Operator-operator untuk tipe data string dapat dilihat pada tabel berikut:
Operator Keterangan
+ penjumlahan
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 6
Operator Keterangan
*
>
<
==
!= atau <>
in
pengulangan
perbandingan lebih besar (jumlah karakter)
perbandingan lebih kecil
sama dengan
tidak sama dengan
anggota himpunan
Tabel 2: Operator untuk tipe data string
List dapat disamakan dengan array pada bahasa C. List berguna sekali bila memiliki banyak data dengan berbagai tipe, akan dirasakan bila membuat program yang komplek. Hal-hal yang perlu diperhatikan:
1) List bersifat mutable sehingga nilai suatu indeksnya bisa diubah
2) Aturan lainnya sama seperti perlakuan tipe data string
Beberapa method yang sangat berguna dalam memanipulasi list diantaranya:
Method Keterangan
append(b)
sort()
count(b)
extend(list)
index(b)
insert(i,b)
pop(i)
remove(b)
reverse()
menambahkan data b di akhir list
mengurutkan sebuah list
menghasilkan jumlah anggota b dalam list
menambahkan data berupa list pada akhir suatu list
mendapatkan indeks dari kemunculan pertama dari b
menyisipkan data b sebelum indeks i
menghapus data pada index i, defaultnya nilai paling akhir
menghapus data b yang muncul pertama kali
membalik anggota data suatu list
Tabel 3: Method list
Tuple kegunaannya hampir sama dengan list yaitu dalam hal pengumpulan berbagai data. Namun di satu sisi terdapat perbedaan yang menonjol antara tuple dengan list yaitu dalam hal penulisan dan sifatnya. Pada list dibatasi tanda kurung siku, sedangkan pada tuple dibatasi tanda kurung biasa. Selain itu, tuple merupakan object yang immutable. Hal lain yang perlu diperhatikan untuk tuple dengan satu elemen atau anggota, penulisannya ditambah koma (,) setelah elemen pertama dan sebelum tanda kurung tutup.
Dictionary merupakan tipe berupa kumpulan data seperti list dan tuple namun disajikan dalam bentuk yang tidak berurutan. Mungkin bagi bahasa lain penggunaan dictionary sangat aneh dan tidak ada. Setiap Elemen data dalam dictionary dibagi menjadi key dan value. Bagi para
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 7
programmer yang terbiasa dengan penggunaan seleksi case, akan kebingungan saat mengenal python karena tidak tersedia. Namun dengan adanya dictionary permasalahan tersebut dapat dipecahkan. Beberapa hal yang perlu diperhatikan:
1) Untuk mengakses nilai data menggunakan key atau kunci, jadi bukannya indeks seperti pada list dan tuple
2) Dictionary merupakan objek yang mutable
3) Fungsi penggabungan dan irisan pada dictionary tidak berlaku
4) Dictionary tidak memperhatikan urutan
5) Penulisannya dibatasi oleh tanda kurung kurawal {}
Untuk informasi selengkapnya silahkan membaca manualnya atau kunjungin situs resminya di www.python.org.
5. Instalasi dan Konfigurasi
5.1 Python
Pada dasarnya Python merupakan perangkat lunak yang secara default termasuk dalam suatu paket distribusi GNU/Linux. Untuk GNU/Linux distribusi Slackware menggunakan Python versi 2.4, biasanya terdapat pada CD I direktori /slackware/d. Toolkit yang digunakan untuk melakukan instalasi paket di Slackware adalah installpkg, berikut langkah instalasinya:
# mount /mnt/cdrom
# cd /mnt/cdrom/slackware/d
# installpkg python-2.4.1-i486-1.tgz
Dari proses instalasi di atas akan membuat beberapa informasi yang tersimpan dalam direktori /usr termasuk di dalamnya berisi library, dokumentasi, file binary, dan informasi lainnya. Kelebihan Python adalah menyediakan modus interaktif yang sangat berguna dalam melakukan latihan dan tes kode. Untuk menulis kode dalam modus interaktif dilakukan dengan memanggil toolkit python pada shell Linux.
# python
Python 2.4.1 (#1, Apr 10 2005, 22:30:36)
[GCC 3.3.5] on linux2
Type "help", "copyright", "credits" or "license"
for more information.
>>>
Tanda “>>>” merupakan suatu prompt dalam modus interaktif Python, selanjutnya Python siap menerima input kode yang dimasukkan.
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 8
5.2 PostgreSQL
Perangkat lunak PostgreSQL bisa didapatkan pada situs resminya http://www.postgresql.org atau beberapa mirror lainnya. Paket yang tersedia bervariasi mulai dari rpm, tar.gz, tar.bz2, deb, dan exe untuk versi Windows. Pada penelitian ini digunakan paket dalam bentuk source tar.bz2. Langkah-langkah global instalasi untuk paket source adalah unpack paket, konfigurasi paket yang telah diunpack menggunakan beberapa opsi jika dibutuhkan, kompilasi, dan setup.
# tar –xjpvf postgresql-8.0.3.tar.bz2
# cd postgresql-8.0.3
# ./configure --prefix=/usr/local/pgsql
--enable-FEATURE=yes --with-python --with-openssl
--with-libraries=/lib:/usr/lib --with-zlib
--with-include=/usr/include --with-gnu-ld
# make; make install
PostgreSQL merupakan aplikasi daemon atau server, segala aplikasi dalam kategori daemon dibutuhkan user yang sepsifik untuk mengendalikannya. User yang digunakan untuk PostgreSQL diberi nama postgres. Dalam melakukan instalasi, user ini harus dibuat secara manual.
# groupadd postgres
# adduser postgres
Selanjutnya akan dibuat sebuah direktori yang berfungsi untuk inisialisasi database beserta informasi penting lainnya seperti keamanan koneksi ke database. Hak kepemilikan direktori ini diberikan sepenuhnya kepada user postgres.
# mkdir /usr/local/pgsql/data
# chown –R postgres.postgres /usr/local/pgsql/data
Setelah proses pembuatan direktori inisialisasi database selesai, langkah selanjutnya adalah melakukan inisialisasi database dengan status user postgres.
# su – postgres
$ /usr/local/pgsql/bin/initdb –D
/usr/local/pgsql/data
Proses instalasi dan konfigurasi di atas dapat dikatakan selesai dan database PostgreSQL sudah bisa dijalankan. Tetapi demi kemudahan dan kesempurnaan hasil instalasi, bisa ditambahkan beberapa konfigurasi dalam bentuk file seperti pembacaan PATH dan file kontrol yang bertugas
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 9
untuk menjalankan, menghentikan, me-restart, dan melihat status server PostgreSQL. File pembacaan PATH pada Slackware disimpan dalam direktori /etc/profile.d dengan ekstensi .sh. Berikut isi file pembacaan PATH PostgreSQL yang diberi nama pgsql.sh:
#!/bin/sh
# Variable - Variable PostgreSQL
dir=/usr/local/pgsql
lib=$dir/lib
library_path=$lib:$library_path
manpath="$MANPATH:$dir/man"
data=$dir/data
PATH="$PATH:$dir/bin"
export dir
export lib
export library_path
export manpath
export data
export PATH
Sedangkan file kontrol bisa diletakkan pada sembarang direktori, namun pada umumnya file kontrol di Slackware terletak dalam direktori /etc/rc.d. Berikut isi file kontrol dengan nama rc.pgsql yang dimaksud:
#!/bin/sh
# Scripts untuk start dan stop PostgreSQL
server=/usr/local/pgsql/bin/postmaster
pgctl=/usr/local/pgsql/bin/pg_ctl
data=/usr/local/pgsql/data
case "$1" in
start)
echo "Menjalankan PostgreSQL..."
su - postgres -c "$server -i -D $data
>logfile 2>&1 &"
echo -n ""
;;
stop)
echo -n "Menghentikan PostgreSQL..."
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 10
su - postgres -c "$pgctl -D $data stop"
;;
restart)
echo -n "Mengulang PostgreSQL..."
su - postgres -c "$pgctl -D $data restart"
;;
status)
su - postgres -c "$pgctl -D $data status"
;;
*)
echo "Gunakan: `basename $0` (start|stop|restart|status)"
exit 1
;;
esac
exit 0
Kemudian file tersebut diubah hak aksesnya menjadi file yang bisa dieksekusi:
# chmod 744 /etc/rc.d/rc.pgsql
Untuk mencoba file kontrol tersebut bisa melakukan beberapa perintah berikut:
1) Menjalankan server PostgreSQL
# /etc/rc,d/rc.pgsql start
2) Me-restart server PostgreSQL
# /etc/rc.d/rc.pgsql restart
3) Menghentikan server PostgreSQL
# /etc/rc.d/rc,pgsql stop
4) Melihat status server PostgreSQL
# /etc/rc.d/rc.pgsql status
Untuk menjalankan server PostgreSQL secara otomatis di saat booting sistem, bisa melakukan penambahan informasi pada file /etc/rc.d/rc.M sebagai berikut:
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 11
if [ -x /etc/rc.d/rc.pgsql ]; then
. /etc/rc.d/rc.pgsql start
fi
5.3 PyGreSQL
Toolkit ini berfungsi sebagai paket yang berisi module untuk koneksi ke server PostgreSQL yang diintegrasikan bersama Python. Untuk mendapatkannya bisa mengunjungi situs resminya di http://www.pygresql.org. Langkah-langkah instalasinya:
# installpkg PyGreSQL.tgz
Hasil perintah di atas akan menghasilkan sebuah direktori bernama /PyGreSQL-3.8.1. Di dalam direktori ini berisi file-file yang akan diarahkan menjadi sebuah module ke direktori library Python. Sebelumnya status server PostgreSQL harus dalam keadaan aktif atau running.
# python setup.py build
# python setup.py install
Proses kompilasi di atas akan mengkopikan beberapa file library yaitu pg dan _pg ke dalam direktori /usr/lib/python2.4/site-packages. Setelah proses kompilasi selesai, langkah selanjutnya adalah mengenalkan library PostgreSQL bernama libpq.so.4.0 dengan cara membuat file link dan diberi nama libpq.so.4. File link ini (libpq.so.4) akan disimpan pada direktori /usr/lib. Langkah ini dilakukan untuk menghindari kesalahan saat melakukan import module di Python, dimana Python tidak dapat menemukan library yang dimaksud.
# ln -s /usr/local/pgsql/lib/libpq.so.4.0 /usr/lib/libpq.so.4
6. Pengujian
6.1 Server PostgreSQL
Uji coba server PostgreSQL dilakukan dengan beberapa langkah berikut:
1) Mendaftarkan user baru
Untuk mendaftarkan user baru hanya bisa dilakukan oleh user daemon PostgreSQL yaitu dalam hal ini user postgres. Perintah yang digunakan adalah createuser diikuti nama user yang akan didaftarkan. Disini akan didaftarkan user baru bernama root pada server PostgreSQL.
# adduser rido
# su – postgres
$ createuser rido
Shall the new user be able...database? (y/n) y
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 12
Shall the new user be able...new users? (y/n) n
CREATE USER
2) Membuat database baru
Pada penelitian ini akan dibuat sebuah database yang nantinya akan digunakan untuk aplikasi kepegawaian, database ini dibuat oleh user root.
$ createdb tuxhouse
Untuk menguji bahwa database telah berhasil dibuat dengan langkah berikut:
$ psql -d tuxhouse
Welcome to psql 8.0.3, the PostgreSQL interactive
terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
tuxhouse=>
Simbol “=>” merupakan prompt dalam modus interaktif PostgreSQL dan menandakan database telah berhasil dibuat.
3) Menambahkan prosedur keamanan user
Bagian ini sangat penting saat melakukan koneksi ke database. Prosedur keamanan untuk user dengan pemberian password yang menggunakan metode enkripsi MD5. Langkah ini harus dilakukan dalam modus interaktif.
tuxhouse=> alter user rido with encrypted password 'rahasia';
4) Melakukan query database
Uji coba selanjutnya adalah melakukan query untuk membuat beberapa tabel dalam database tuxhouse. Tabel-tabel yang akan dibuat terdiri dari lima tabel yaitu pegawai, absensi, promosi, mutasi, dan terminasi. Listing query ditulis dalam sebuah file, kemudian file tersebut dipanggil di dalam modus interaktif PostgreSQL. Isi file listing terebut disimpan dalam file bernama listing.sql
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 13
(dapat dilihat pada lampiran). Untuk melakukan pemanggilan file tersebut dengan langkah sebagai berikut:
tuxhouse=> \i listing.sql
6.2 Module pg
Cara termudah melakukan uji coba penggunaan module pg adalah melalui modus interaktif Python. Ada beberapa cara yang bisa dilakukan yaitu:
1) Cek module
Untuk melakukan cek module di Python bisa dengan langkah berikut:
>>> help()
>>> pg
Perintah di atas untuk membuka dokumentasi module pg. Jika module pg ditemukan, berarti module tersebut telah siap digunakan.
2) Import module dan melakukan koneksi
Langkah ini untuk melakukan uji coba secara lebih detail.
>>> import pg
>>> konek = pg.DB('tuxhouse','localhost',5432,None, None,'rido’,’rahasia')
Untuk melakukan koneksi digunakan beberapa informasi penting di antaranya nama database, hostname, port, opt, tty, user, dan password.
6.3 Aplikasi Berbasis Teknologi Distributed System
Berikut beberapa contoh aplikasi berbasis distributed system beserta penjelasannya:
6.3.1 Simulasi Aplikasi Database Menggunakan Memori
Pada aplikasi ini memanfaatkan resource memori sebagai databasenya. Disini akan dibuat listing program untuk aplikasi server, sedangkan untuk aplikasi clientnya dijalankan melalui modus interaktif. File listing program untuk server bernama server.py. Langkah-langkah uji coba sebagai berikut:
1) Pada komputer server jalankan file server.py
# python server.py
2) Pada komputer client masuk ke dalam modus interaktif lalu ikuti langkah berikut:
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 14
>>> import xmlrpclib
>>> pegawai=xmlrpclib.Server ('http://192.168.100.1:1')
>>> pegawai.Simpan('1','rido','kepsek','IVB')
'1'
>>> pegawai.Simpan('2','novriana','guru','IIIB')
'2'
>>> pegawai.Cari('1')
['1', 'rido', 'kepsek', 'IVB']
>>> pegawai.Cari('2')
['2', 'novriana', 'guru', 'IIIB']
6.3.2 Aplikasi Mencari Bilangan Prima Tertinggi
Ada tiga file listing program yang akan dibuat dan digunakan dalam uji coba ini, di antaranya prima.py, prima_server.py, prima_client.py. File prima.py akan dijalankan sebagai aplikasi biasa atau non distribusi, aplikasi ini akan diujicobakan pada 2 komputer secara bergantian. Sedangkan file prima_server.py dan prima_client.py merupakan aplikasi yang dijalankan secara terdistribusi, file prima_server.py dijalankan pada komputer server dan prima_client dijalankan pada komputer client. Masing-masing aplikasi akan dijalankan dalam rentang waktu satu jam, hal ini untuk mengukur kecepatan antara 2 jenis aplikasi tersebut. Cara menjalankannya cukup dengan perintah python diikuti nama file.
1) Pada komputer I dan komputer II jalankan file prima.py.
# python prima.py
2) Setelah langkah pertama selesai, jalankan file prima_server.py pada komputer I.
# python prima_server.py
3) Jalankan file prima_client.py pada komputer II.
# pyhon prima_client.py
Pada uji coba aplikasi terdistribusi, akan dibagi dalam 2 tahap yaitu 30 menit pertama proses dilakukan oleh komputer II dan 30 menit berikutnya dilakukan oleh komputer I. Hasil akhir berupa bilangan prima terbesar akan ditampilkan pada komputer II.
Dari hasil uji coba tersebut diperoleh data sebagai berikut:
Aplikasi Uji 1 Uji 2 Uji 3
prima.py pada komputer I 165721 141311 166099
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 15
prima.py pada komputer II 181693 155707 153733
distributed programming 199457 171449 194869
Tabel 4: Hasil pengujian aplikasi bilangan prima
Tabel di atas menunjukkan bahwa aplikasi yang berjalan secara terdistribusi menghasilkan bilangan prima yang lebih besar dibandingkan aplikasi non distribusi. Sebenarnya sistem terdistribusi unggul dalam hal kecepatan, akan tetapi diperlukan program yang benar-benar berat dan komplek misalnya multimedia untuk rendering dan permodelan. Analoginya adalah kecepatan orang jalan kaki atau sepeda atau motor atau mobil akan terkesan sama sampainya jika jarak yang ditempuh hanya 1 meter, akan tetapi jika jarak yang ditempuh jauh baru terlihat perbedaannya. Dari analisa ini dapat dijelaskan bahwa uji coba di atas pada dasarnya membutuhkan waktu yang lebih lama sehingga mendapatkan hasil yang signifikan.
6.3.3 Aplikasi Database Kepegawaian Sederhana
Aplikasi ini merupakan penyempurnaan dari aplikasi pada uji coba sebelumnya. Kali ini dibuat 2 file masing-masing bertugas sebagai server dan client. File untuk sisi server bernama profile_server.py dan profile_client.py untuk sisi clientnya. Uji coba kali ini melakukan sedikit perbaikan pada listing program untuk server. Perbaikan yang dilakukan adalah dengan penambahan module socket dan class bernama ProfileXMLRPCServer. Class ini berisi beberapa procedure socket yang berfungsi dalam keamanan koneksi. Kemudian pada bagian objek server, instansiasi objek diturunkan dari class ProfileXMLRPCServer.
Sebelum perubahan:
server = SimpleXMLRPCServer.SimpleXMLRPCServer
(('192.168.100.1',1))
Setelah perubahan:
server = ProfileXMLRPCServer('192.168.100.1',1)
Beberapa perbaikan di atas dilakukan karena pada uji coba aplikasi sebelumnya terdapat beberapa kekurangan yaitu dari sisi kestabilan dan keamanan. Pada aplikasi sebelumnya, jika aplikasi server dihentikan dengan pemberian intrupsi berupa penekanan CTRL-C akan menimbulkan pesan kesalahan socket saat menjalankan kembali. Pesan kesalahan yang muncul mengatakan bahwa alamat sedang terpakai. Selain itu, tidak ada filtering alamat yang diizinkan mengakses dalam arti lain semua alamat bisa bergabung dan mengakses server secara langsung.
Selain melakukan perbaikan pada listing program, juga dilakukan penanganan database server PostgreSQL. File yang berhubungan dengan penanganan keamanan server PostgreSQL adalah pg_hba.conf yang terletak pada direktori /usr/local/pgsql/data. Informasi yang perlu ditambahkan adalah pada bagian “local” yaitu:
# "local" is for Unix domain socket connections only
local tuxhouse rido md5
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 16
Dari informasi di atas dapat dijelaskan bahwa server PostgreSQL hanya menerima koneksi secara lokal dan menggunakan metode MD5 untuk autentikasi password saat melakukan koneksi ke database tuxhouse. Sedangkan yang diizinkan mengakses database tersebut hanya user root.
6.4 Listing Program
6.4.1 server.py
import SimpleXMLRPCServer
class Profile:
def __init__(self):
'''
Constructor Class
'''
self.profile = []
def Simpan(self,nip,nama,alamat,jabatan):
'''
Register pegawai baru dan mengembalikan nilai nip
'''
data=list([nip,nama,alamat,jabatan])
self.profile.append(data)
return nip;
def Cari(self, nip):
'''
Mencari Data...
'''
code = "data tidak ditemukan"
for i in self.profile:
if i[0] == nip:
code = i
break
return code
server = SimpleXMLRPCServer.SimpleXMLRPCServer(('192.168.100.1',1000))
server.register_instance(Profile())
server.serve_forever()
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 17
6.4.2 prima.py
import time
waktu=time.time()
x=5
while time.time()-waktu<=3600:
stat=1
for i in range(3,x,2):
if x%i==0:
i=x
stat=0
if stat==1:
print x
x+=2
6.4.3 prima_server.py
import SimpleXMLRPCServer
import time
class prima:
def __init__(self):
self.hasil=0
def itung(self,kiriman):
waktu=time.time()
while time.time()-waktu<=1800:
stat=1
for i in range(3,kiriman,2):
if kiriman%i==0:
i=kiriman
stat=0
if stat==1:
self.hasil=kiriman
kiriman+=2
return self.hasil
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 18
server=SimpleXMLRPCServer.SimpleXMLRPCServer(('192.168.100.1',1))
server.register_instance(prima())
server.serve_forever()
6.4.4 prima_client.py
import xmlrpclib
import time
kirim=xmlrpclib.Server('http://192.168.100.1:1')
waktu=time.time()
x=5
while time.time()-waktu<=1800:
stat=1
for i in range(3,x,2):
if x%i==0:
i=x
stat=0
if stat==1:
y=x
x+=2
hasil=kirim.itung(y)
print hasil
6.4.5 dbase_server.py
import SimpleXMLRPCServer
import socket
import pg
class ProfileXMLRPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer):
def __init__(self, *args):
'''
Constructor for class MiniBankXMLRPCServer
'''
SimpleXMLRPCServer.SimpleXMLRPCServer.__init__(self, (args[0], args[1]))
self.ACCESSLIST = (
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 19
'192.168.100.2',
)
def server_bind(self):
'''
Server bind...
'''
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
SimpleXMLRPCServer.SimpleXMLRPCServer.server_bind(self)
def verify_request(self, request, client_address):
'''
Verify request, only access IP in ACCESSLIST
'''
if client_address[0] in self.ACCESSLIST:
return 1
else:
return 0
class Profile:
def __init__(self):
self.profile = ''
def Simpan(self,nip,nama,jbt,gol):
db=pg.DB('tuxhouse','localhost',5432,None,None,'rido','rahasia')
try:
s=1
db.get('profile',nip,'nip')
except:
s=0
if s==1:
pesan='Data dengan NIP %s sudah ada'%nip
else:
db.query("insert into profile values('"+nip+"','"+nama+"','"+jbt+"','"+gol+"')")
pesan='Data berhasil disimpan'
db.close()
return pesan;
def Cari(self,nip):
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 20
db=pg.DB('tuxhouse','localhost',5432,None,None,'rido','rahasia')
try:
s=1
hasil=db.get('profile',nip,'nip')
except:
s=0
db.close()
if s==0:
pesan='Data dengan NIP %s tidak ditemukan'%nip
data=[1,pesan]
else: data=[2,hasil['nip'],hasil['nama'],hasil['jabatan'],hasil['gol']]
return data;
server = ProfileXMLRPCServer('192.168.100.1',1)
server.register_instance(Profile())
server.serve_forever()
6.4.6 dbase_client.py
import xmlrpclib
kirim=xmlrpclib.Server('http://192.168.100.1:1')
def Simpan():
print "Masukkan data anda :\n"
nip = raw_input("N I M : ")
nama = raw_input("Nama : ")
jbt = raw_input("Jabatan : ")
gol = raw_input("Golongan : ")
hasil = kirim.Simpan(nip,nama,jbt,gol)
print hasil
def Cari():
nip = raw_input("Masukkan NIP : ")
hasil = kirim.Cari(nip)
if hasil[0]==1:
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 21
print hasil[1]
else:
print "NIP : ",hasil[1]
print "Nama : ",hasil[2]
print "Jabatan : ",hasil[3]
print "Golongan : ",hasil[4]
print "1. Simpan Data"
print "2. Cari Data\n"
pilih = raw_input("Tentukan pilihan anda : ")
if pilih=='1':
Simpan()
elif pilih=='2':
Cari()
else:
print "Pilihan yang anda masukkan tidak terdaftar"
Dari contoh-contoh di atas, dapat dijelaskan langkah-langkah umum membuat aplikasi terdistribusi menggunakan xmlrpc pada python:
1. Membuat aplikasi server:
a. import module SimpleXMLRCPServer
b. definisi class dan procedure
c. instansiasi dan register objek class (perhatikan 3 baris kode dari bawah)
2. Membuat aplikasi client:
a. import module xmlrpclib
b. instansiasi objek class melalui register socket
c. pemanggilan procedure
7. Kesimpulan
Berdasarkan hasil implementasi dan analisa dalam membangun aplikasi berbasis teknologi distributed system atau programming, maka dapat diambil beberapa kesimpulan sebagai berikut:
a. Implementasi distributed programming merupakan salah satu alternatif yang sederhana dan menarik dalam membangun sistem sekelas superkomputer dengan alokasi dana yang rendah.
b. Untuk membuat aplikasi berbasis teknologi distributed system bisa memanfaatkan module XML-RPC yang telah tersedia secara default pada bahasa Python.
Seminar Nasional Teknologi 2007 (SNT 2007) ISSN : 1978 – 9777 Yogyakarta, 24 November 2007
D ‐ 22
c. Penggunaan module XML-RPC dalam membuat aplikasi sangat mudah karena telah terbagi menjadi dua fungsi sebagai client dan server.
d. Untuk mendapatkan hasil yang signifikan dalam melakukan percobaan misalnya pengukuran kecepatan dibutuhkan aplikasi yang komplek atau juga bisa dengan permainan waktu yang lama.
e. XML-RPC sangat memperhatikan segi kestabilan dan keamanan dalam membangun sebuah sistem dengan adanya penanganan socket dan class program.
f. Dengan distributed programming, aplikasi yang berjalan menjadi lebih modular dalam menangani proses sehingga tidak semua proses dijalankan oleh satu sub-system.
8. Saran
Penelitian ini hanyalah serangkaian percobaan yang dilakukan secara sederhana dan penuh keterbatasan terutama dalam penggunaan perangkat keras. Tidak menutup kemungkinan bahwa penelitian ini dapat lebih dikembangkan ke arah yang lebih luas lagi. Dari penelitian ini lebih menekankan pada sisi penerapan dan penggunaan teknologi distributed system atau programming pada suatu aplikasi sederhana sehingga masih belum cukup untuk mendapatkan hasil yang sempurna. Kesempurnaan penelitian merupakan hal yang tidak mungkin bagi manusia, namun berusaha untuk menjadi sempurna adalah hal yang mungkin-mungkin saja dan manusiawi. Oleh karena itu, bagi peneliti yang tertarik mengembangkan materi dalam penelitian ini bisa mengarahkannya pada aplikasi yang benar-benar komplek dan memanfaatkan jaringan internet sebagai sarana distribusinya. Dengan konsep seperti ini diharapkan sistem yang dibangun merupakan suatu yang terdistribusi secara global dan dapat dimanfaatkan oleh berbagai pihak dalam lingkup jaringan internet.
9. Daftar Pustaka
Noprianto, 2002, Python dan Pemrograman Linux, Penerbit Andi, Yogyakarta
Prabantinia, Dwi, 2002, PracticalTCP/IP Mendesain, menggunakan dan Troubleshooting
Jaringan TCP/IP di Linux dan Windows, Penerbit Andi, Yogyakarta
Raharjo, Suwanto & Istiyanto, Jazi, 2003, Keamanan Akses PostgreSQL melalui PHP
(Menggunakan Apache Web Server pada GNU/Linux, Penerbit Andi, Yogyakarta