Implementasi Protocol Buffers pada Aplikasi Weblog Client dan Server Canggih Puspo Wibowo, Lukito Edi Nugroho, Bimo Sunarfri Hantono Jurusan Teknik Elektro dan Teknologi Informasi, Fakultas Teknik, Universitas Gadjah Mada Jl. Grafika 2 Yogyakarta
[email protected],
[email protected],
[email protected] Abstract—The purpose of this study was to determine how to implement Protocol Buffers in communication of weblog application client and server, moreover, knowing the performance of Protocol Buffers than XML and JSON in weblog applications. Weblog applications are created using the Java programming language on the client and Python on the server. Whilst the web service used is Restful web service created using webpy framework on the weblog server. The results show that Protocol Buffers could be used as a data serialization format of a weblog client and server communication. In terms of performance testing, can be observed that Protocol Buffers serialization file size is smaller than XML and JSON, so it is faster to use in data communications. Keywords-blog; web services; protocol buffers
I.
PENDAHULUAN
Di internet, terdapat berbagai macam situs yang menyediakan layanan pengelolaan artikel-artikel seperti Wordpress.com, Blogger.com, Blogspot.com, dan lainlain. Melalui situs-situs yang biasa disebut weblog tersebut, pengguna dapat menulis artikel kemudian mempublikasikannya ke internet dengan mudah. Penggunaan aplikasi weblog tersebut sekarang tidak hanya tersedia dalam bentuk web, pengguna juga dapat memanfaatkan aplikasi weblog client berbasis desktop untuk berkomunikasi dengan aplikasi weblog server yang dimiliki penyedia layanan dalam internet. Aplikasi weblog client ini memungkinkan pengguna mengelola blog tanpa harus selalu terkoneksi dengan jaringan internet. Windows Live Writer, BlogDesk, Zoundry Raven, Ecto, merupakan beberapa jenis aplikasi weblog client berbasis desktop yang sering digunakan. Web service merupakan teknologi yang memungkinkan aplikasi client dan server dapat berkomunikasi sehingga memungkinkan pertukaran informasi diantara keduanya. Beberapa contoh web service yang umum digunakan aplikasi-aplikasi dalam web adalah XML-RPC, SOAP, dan RESTful. Aplikasi weblog merupakan salah satu aplikasi yang menggunakan web service di dalamnya untuk berkomunikasi antara client dan server. Web service yang digunakan pada aplikasi weblog, seperti Wordpress, adalah XML-RPC yang memanfaatkan XML seba-
gai format serialisasi data. Dalam kaitannya sebagai penghubung komunikasi aplikasi client dengan aplikasi server, web service menggunakan suatu format serialisasi data untuk mengirimkan data. Sebelum data dikirimkan, baik dari client menuju server atau sebaliknya, harus diubah dalam format data tertentu dahulu sesuai dengan web service yang digunakan. Jenis format serialisasi data yang digunakan dalam web service diantaranya XML dan JSON. Penggunaan format serialisasi data berbasis plain text seperti XML dan JSON memiliki ukuran yang relatif lebih besar, hal tersebut berimbas pada kecepatan data ketika dikirim. Di jaman dimana komunikasi data dalam internet begitu kompleks seperti sekarang ini, sementara tidak dapat dibantah bahwa faktor kecepatan juga menjadi hal yang sangat penting, semua pihak menginginkan komunikasi data yang cepat agar layanan yang diberikan dapat maksimal. Sementara itu, Google merilis format serialisasi data baru berbasis biner yang digunakan untuk komunikasi web service, yaitu Protocol Buffers (Protobuf). Menurut Google, Protobuf memiliki kecepatan melebihi format serialisasi data berbasis plain text serta ukuran file yang kecil sehingga tepat untuk digunakan dalam web service. II.
DASAR TEORI
A. Serialisasi Data Serialisasi adalah suatu proses mengubah data ke dalam bentuk stream bits untuk kemudian dikirim melalui suatu media baik kabel maupun nirkabel atau disimpan dalam media penyimpanan [1]. Sedangkan untuk deserialisasi adalah proses sebaliknya, yaitu mengubah data stream bits menjadi data semula. Dalam jaringan internet, semua komunikasi data melalui proses serialisasi-deserialisasi. Ada dua macam serialisasi, yaitu serialisasi ke dalam human-readable format (teks) dan non-human-readable format (biner) [1]. Contoh untuk serialisasi ke teks adalah format XML dan JSON, sedangkan untuk biner adalah Protocol Buffers, BSON, Thrift, dan lain-lain. Perbedaan paling utama adalah bahwa format serialisasi yang berupa
teks masih dapat dibaca meskipun dalam bentuk format serial sedangkan untuk biner tidak. B. Protocol Buffers Protocol Buffers, adalah suatu format data biner yang digunakan untuk serialisasi data. Pada awalnya, protobuf dikembangkan oleh Google untuk menangani permasalahan internal dalam hal protokol request/response pada server yang mengalami perkembangan versi. Format data yang digunakan sebelumnya, hanya dapat mendukung satu versi, sehingga ketika protokol mengalami perkembangan, format data harus disesuaikan [2]. Hal tersebut sangat merepotkan dalam perkembangan sistem. Sistem yang menggunakan protobuf akan mengabaikan field data baru yang tidak didukungnya, sehingga dalam satu waktu, sebuah format protobuf dapat digunakan baik oleh sistem lama maupun sistem baru. Dalam perkembangannya, protobuf sangat tepat digunakan pada sistem yang membutuhkan pertukaran data dalam jumlah banyak dengan waktu yang singkat dan hemat bandwidth [3]. Protobuf menggunakan sebuah dokumen protobuf messages definition yang berisi definisi struktur data yang akan dikirim dalam bentuk pasangan name-value. Messages definition tersebut disimpan dalam dokumen .proto. Contoh sederhana dari dokumen .proto yang berisi informasi tentang struktur data. message Person { required string name = 1;
XML dinilai terlalu lambat jika digunakan pada sistem skala besar [5]. Beberapa keunggulan protobuf dibanding XML adalah [6] : •
Menggunakan data access class yang memungkinkan data diakses dengan mudah melalui program.
•
Protobuf Message Definition dapat diubah tanpa mempengaruhi sistem yang sudah ada.
•
Tidak membutuhkan meta-data, sehingga data yang dikirim lebih kecil.
Grafik dibawah ini menunjukkan contoh perbandingan performa antara protobuf dengan PDBML (Protein Data Bank Markup Language) dalam
merepresentasikan data bioinformatik. [6] Figure 1.
Rata-rata ukuran file protobuf dan PDBML
required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2;
Figure 2.
Rata-rata waktu serialisasi protobuf dan PDBML
III.
} repeated PhoneNumber phone = 4; }
Dokumen .proto kemudian di-compile untuk menghasilkan data access class yang sesuai dengan bahasa pemrograman yang digunakan sistem. Untuk sementara, bahasa yang didukung oleh compiler ini hanya Java, C++, dan Python [4]. Meskipun telah banyak pihak yang membuat compiler sendiri untuk bahasa pemrograman lain. Melalui data access class yang telah dihasilkan oleh compiler, data dapat diolah dengan mudah untuk menghasilkan data biner protobuf. Protobuf pada dasarnya sama dengan XML, tetapi lebih simpel, lebih kecil, dan lebih cepat. Penggunaan protobuf sekarang telah banyak, misalnya terdapat pada sistem web services sebagai format serialisasi data baru, menggantikan peran XML yang selama ini digunakan.
RANCANGAN SISTEM
A. Arsitektur Sistem yang dibuat sebagai implementasi berupa aplikasi weblog untuk client (berbasis desktop) dan server. Antara aplikasi weblog client dan server terhubung oleh web service dengan menggunakan protobuf sebagai format serialisasi data. Skema rancangan sistem terlihat pada gambar berikut.
akan mengambil data dari database untuk ditampilkan dalam halaman web. B. Aplikasi Server Untuk dapat terhubung dengan client, aplikasi server menggunakan RESTful web service. Dalam implementasinya, digunakan webpy, yaitu sebuah framework untuk Python yang secara default telah mendukung RESTful web services. Aplikasi server menyediakan layanan untuk mengolah HTTP request dari client berupa POST dan GET.
Figure 3.
Rancangan sistem
Web service yang digunakan untuk mengirimkan dan menerima protobuf messages adalah RESTful web service yang merupakan teknologi web service yang ringan dan mudah diimplementasikan. Client mengirimkan data yang telah diserialisasikan dalam bentuk protobuf message melalui HTTP request kepada RESTful service pada server. Protobuf message kemudian diubah menjadi data semula dengan program deserialisasi yang telah ada di server. Proses pengiriman terlihat pada Figure 4.
Figure 4.
C. Aplikasi Client Pada aplikasi client, terdapat isian untuk masingmasing field yang didefinisikan pada protobuf message definition. Dengan menggunakan data access class yang telah ada, sesuai dengan protobuf message definition, data-data diserialisasikan untuk kemudian dikirim melalui http POST request ke server.
IV.
HASIL
A. Aplikasi weblog Aplikasi weblog client terdiri dari sebuah halaman yang berisi masukan-masukan untuk protobuf message. Username dan Password selain digunakan sebagai autentikasi pada weblog server, tetapi juga digunakan untuk autentikasi pada aplikasi weblog client ini. Sebelum dapat menggunakan weblog client untuk mengirim artikel, terlebih dahulu memasukkan Username dan Password yang sesuai. Tampilan aplikasi weblog client terdapat pada Figure 5.
Skema komunikasi data antara client dan server
Untuk mengakses dan menginisiasi nilai ke dalam protobuf message, data access class menyediakan builder yang dapat digunakan dengan mudah melalui set dan get method. Data access class di Java menyediakan fungsi untuk secara langsung menuliskan protobuf message dalam output stream. Dalam RESTful web services, untuk mengakses sumber daya server, client cukup mengirimkan http request dengan method yang sudah didukung seperti POST dan GET. Dalam hal ini, client mengirimkan POST request dengan protobuf message pada request body yang dikirimkan melalui output stream. Ketika ada request POST ke server, data yang diterima, masih dalam format protobuf, diubah menjadi plain data kemudian disimpan dalam database. Kemudian ketika terdapat GET request, dalam hal ini berasal dari web browser yang mengakses melalui URL, maka server
Figure 5.
Tampilan aplikasi client
Aplikasi weblog server menggunakan bahasa pemrograman Python dengan framework webpy. Secara default, webpy telah mendukung RESTful web service, dimana request yang datang akan dilihat method-nya untuk menentukan apa yang harus dilakukan oleh server. Tampilan halaman web ketika weblog server diakses melalui web browser (melalui GET request) ada pada Figure 6.
Ketika jumlah kata dalam artikel semakin besar, lama waktu pembentukan file JSON bertambah secara signifikan, sehingga pada suatu titik lama waktu JSON sama dengan XML, meskipun sebelumnya XML memiliki waktu terlama dibandingkan JSON dan Protobuf. Sedangkan pada Protobuf, pertambahan lama waktu tidak terlalu besar meskipun jumlah kata yang digunakan bertambah banyak.
Figure 6.
Selanjutnya pada pengujian kedua dihitung ukuran file serialisasi dari masing-masing format data dalam mengirimkan sebuah artikel. Hasil pengujian terlihat pada Figure 8.
Tampilan aplikasi server
B. Pengujian
3000 2607 2477
2500
Pengujian pertama dilakukan dengan menghitung lama waktu pembuatan file yang berisi sebuah artikel dalam format Protobuf, XML, dan JSON. Artikel dibuat secara acak dengan jumlah kata yang ditentukan pada bagian isi artikel. Pengujian dilakukan 15 kali, dengan jumlah kata 30, 55, 80, 105, 130, 155, 180, 205, 230, 255, 280, 305, 330, 355, dan 380 kata. Kemudian untuk masukan lain, seperti judul, kategori, dan lain-lain menggunakan data yang sama.Hasil pengujian terlihat pada Figure 7. 180000 160000 140000
2000
500
881
734
523
0 30
130
Protobuf XML JSON
80000 60000 40000 20000 0
Figure 8.
Perbandingan ukuran file serialisasi
Dari grafik terlihat bahwa Protobuf memiliki ukuran file yang lebih kecil dibanding XML dan JSON meskipun perbedaan diantara ketiga format tidak begitu besar. Hal itu terjadi karena pada pengujian ini, hanya satu field yang diubah secara signifikan, yaitu isi artikel. Ketika isi artikel ditambah, dari awal 30 kata menjadi 130 dan kemudian 230, hal itu berarti menambah panjang string pada bagian isi. Sedangkan dari hasil kajian teori didapat bahwa suatu data string diserialisasikan sama pada Protobuf, XML, maupun JSON. Itu sebabnya mengapa selisih ukuran file antara ketiga format cenderung sama meskipun jumlah kata pada isi bertambah banyak. KESIMPULAN
Dalam pembuatan aplikasi weblog client dan server dengan memanfaatkan protocol buffers dapat disimpulkan beberapa hal sebagai berikut : •
Protocol buffers dapat digunakan sebagai format serialisasi data pada aplikasi weblog client dan server dengan menggunakan bahasa pemrograman Java pada client serta Python pada server.
•
Protocol buffers memiliki ukuran file serialisasi yang relatif lebih kecil dibandingkan format serialisasi data XML dan JSON. Kemudian pada lama waktu yang dibutuhkan untuk membuat file tersebut, Protocol Buffers jauh lebih cepat dibandingkan XML dan JSON terutama untuk data-data yang besar. Performa Protocol buffers untuk digunakan sebagai format serialisasi data cukup bagus dilihat
30 55 80 105130155180205230255280305330355380 Banyak kata
Figure 7.
230
Jum lah Kata
V.
100000
Protobuf XML JSON
1279
1000
120000 waktu (ns)
1635 1497
1500
Bytes
Pengujian yang dilakukan ada dua macam, yaitu menguji lama waktu pembentukan file serialisasi kemudian pengujian tentang ukuran file serialisasi tersebut. Masingmasing pengujian, penulis membandingkan antara Protobuf, XML, dan JSON. Pengujian dilakukan menggunakan PC dengan spesifikasi sistem : prosesor Intel Core 2 Duo T7500 (2,2 Ghz, 800Mhz FSB, 4MB Cache), 2GB DDR2 RAM, serta menggunakan sistem operasi Ubuntu 11.04. Selain itu, pengujian dilakukan pada aplikasi weblog client dengan bahasa pemrograman Java.
2255
Perbandingan lama waktu pembuatan file
Lama waktu pembentukan file serialisasi pada Protobuf lebih cepat dibandingkan XML dan JSON. Hasil pengujian lama waktu pembentukan file sangat dipengaruhi oleh metode yang dilakukan. Dalam hal ini penulis membatasi pengujian hanya pada satu metode tertentu pada masing-masing format data, yaitu penggunaan Protobuf builder pada Protobuf, XMLSerializer pada XML, serta JSONObject pada JSON.
•
dari lama waktu pembentukan file yang cepat serta ukuran file yang kecil. VI. [1]
[2]
[3] [4]
[5]
[6]
DAFTAR PUSTAKA
Cline Marshall, “Serialization and Unserializetion”, http://www.parashift.com/c++-faq-lite/serialization.html, diakses tanggal 7 Mei 2011. Google, http://code.google.com/apis/protocolbuffers/docs/overview.html diakses tanggal 8 Mei 2011 O'Brien Tim, “The Common Java Cookbook”, Chapter 14: Protocol Buffers, Discursive. Google, http://code.google.com/p/protobuf/wiki/ThirdPartyAddOns diakses tanggal 8 Mei 2011 Varda Kenton, “Protocol Buffers: Google's Data Interchange Format”, http://googleopensource.blogspot.com/2008/07/protocol-buffers-googlesdata.html diakses tanggal 8 Mei 2011 Oreskovic Mile, “Evaluation of Google Protocol Buffers as a potential data serialization technique for wide use in bioinformatics”, unpublished.