Protobuf VS JSON

Alfian Maulana Malik
Programmer Geek
Published in
6 min readJul 29, 2019
Photo by Chris Ried on Unsplash

Protocol buffer juga dikenal sebagai Protobuf adalah protokol yang dikembangkan Google secara internal untuk memungkinkan serialisasi dan deserialisasi data terstruktur antara berbagai layanan. Tujuan desain Google adalah untuk menciptakan metode yang lebih baik daripada XML untuk membuat sistem berkomunikasi satu sama lain melalui kabel atau untuk penyimpanan data. Sejak pengembangannya, Google telah membuat Protobuf di bawah open source license. Saat ini banyak menyediakan dukungan dalam bahasa yang paling umum, termasuk Python, Java, Objective-C, C # dan lainnya melalui versi bahasa proto3 baru Google.

JavaScript Object Notation atau yang lebh di kenal JSON, adalah format yang dapat dibaca yang juga digunakan untuk menyusun data. Ini juga merupakan alternatif untuk XML dan terutama digunakan sebagai cara mentransmisikan data antara server dan aplikasi web atau lainnya. JSON menggunakan cara yang dapat dibaca manusia sebagai cara mentransmisikan objek data yang terdiri dari pasangan atribut-nilai dan tipe data array (atau tipe lain dari serializable value). JSON berasal dari JavaScript, tetapi sejak tahun lalu beberapa bahasa pemrograman menyertakan kode untuk menghasilkan dan mem-parsing data dalam format JSON.

Dalam posting ini, kita akan melihat masing-masing dari protokol tersebut lalu membandingkan keduanya.

Protocol Buffer

Tujuan desain Google untuk Protocol Buffer adalah agar lebih kecil, lebih sederhana, dan lebih cepat daripada XML. Developer menekankan pada kesederhanaan dan kinerja. Google menggunakan Protocol Buffer secara luas untuk menyimpan dan menukar informasi terstruktur dari semua jenis. Itu juga bertindak sebagai dasar untuk sistem Remote Procedure Call (RPC), yang digunakan untuk hampir semua komunikasi antar mesin di perusahaan.

Facebook menggunakan protokol setara yang disebut Apache Thrift dan Microsoft menggunakan protokol Microsoft Bond di samping tumpukan protokol RPC konkret yang digunakan untuk layanan tertentu yang dikenal sebagai gRPC.

Protocol buffer adalah mekanisme extensible language-neutral dan platform-netral. Google menjelaskan penggunaannya seperti itu, “Anda menentukan bagaimana Anda ingin terstruktur data sekali, kemudian Anda dapat menggunakan kode sumber yang dihasilkan khusus untuk dengan mudah menulis dan membaca data terstruktur Anda ke dan dari berbagai aliran data dan menggunakan berbagai bahasa .

Mulai menggunakan Protocol Buffer sangat mudah. Anda cukup mengunduh dan menginstal compiler Protocol Buffer, dan lihat tutorial yang diperlukan.

JSON

JSON sebagian besar digunakan dalam aplikasi web untuk mengirim data dari server ke browser. Anda biasanya mentransfer data JSON menggunakan Ajax, yang memungkinkan pertukaran data antara aplikasi web Anda dengan browser dan server tanpa perlu memuat ulang halaman.

Contoh dari Elated:

  1. Seorang pengguna mengklik thumbnail photo atau gambar produk di toko online
  2. JavaScript yang berjalan di browser membuat permintaan Ajax ke script PHP yang berjalan di server, memberikannya ID dari produk yang diklik
  3. Script PHP mengambil nama produk, deskripsi, harga, dan info lainnya dari database produk, mengkonversikan data sebagai string JSON, dan mengirimkan string kembali ke browser
  4. JavaScript yang berjalan di browser menerjemahkan string JSON dan menampilkan detail produk di halaman untuk pengguna.

JSON juga dapat digunakan untuk mengirim data dari browser ke server, serta string JSON dikodekan sebagai parameter GET atau POST. Ini digunakan dengan cara ini lebih jarang karena data yang dikirim dalam permintaan Ajax biasanya cukup sederhana.

JSON didasarkan pada bagaimana Anda mendefinisikan objek (yang mirip dengan bahasa lain yang disebut associative array atau hash) dan array. Dua bagian utama JSON adalah kunci dan nilai. Mereka membuat pasangan kunci / nilai.

  • Key: String yang dilampirkan dalam tanda kutip
  • Value: Nilai dapat berupa salah satu dari berikut: string, number, boolean, array, atau object.
  • Key/Value Pair: Pasangan nilai kunci datang setelah sintaks tertentu, dengan Key diikuti oleh titik dua diikuti oleh Value. Key/Value Pair selalu dipisahkan koma.

Ada lima jenis value:

  • Array: Associative array values. Ini termasuk kategori dan tag.
  • Boolean: True atau false.
  • Number: Integer
  • Object: Associative array of key/value pairs, yang ditunjukkan oleh kurung keriting. Segala sesuatu di dalamnya adalah bagian dari objek. Nilai bisa menjadi objek.
  • String: Beberapa karakter teks biasa yang biasanya membentuk kata.

Cara membedakan antara Protocol Buffers dan JSON?

Protocol Buffer dan JSON messages dapat digunakan secara bergantian; Namun, mereka dirancang dengan tujuan yang berbeda

JSON muncul dari subset dari bahasa pemrograman JavaScript. Pesan-pesannya dipertukarkan dalam format teks (dapat dibaca manusia), sepenuhnya independen dan didukung oleh hampir semua bahasa pemrograman.

Protobuf bukan hanya format pesan. Secara bersamaan seperangkat aturan dan alat yang mendefinisikan dan bertukar pesan. Saat ini dibatasi hanya untuk beberapa bahasa pemrograman. Selain itu, ia memiliki lebih banyak tipe data daripada JSON, seperti enumerasi dan metode, dan memiliki fungsi lain, termasuk RPC.

Format mana yang lebih disukai?

Pendapat berbeda, tetapi tentu saja ada berbagai sumber online yang membuktikan bahwa Protobuf berkinerja lebih cepat daripada JSON, XML, dan lainnya. Namun, setiap kasus penggunaan berbeda-beda sehingga penting untuk mencoba keduanya untuk kebutuhan spesifik Anda.

Auth0 Test — Auth0 menjalankan tes dari beberapa skenario yang berbeda untuk melihat bagaimana JSON dan Protobuf dilakukan terhadap satu sama lain menggunakan aplikasi Spring Boot. Dua skenario yang dibuat Auth0 adalah Java to Java dan JavaScript to Java — untuk mengukur “bagaimana protokol ini akan berperilaku dalam lingkungan seperti Java dan juga pada lingkungan di mana JSON adalah format pesan asli. Itulah, apa yang saya perlihatkan di sini adalah data dari lingkungan di mana JSON dibangun dan harus berkinerja sangat cepat (mesin JavaScript) dan dari lingkungan di mana JSON bukan warga negara kelas satu “. Jawaban singkatnya adalah bahwa Protobuf terbukti lebih cepat daripada JSON dalam kedua contoh ini.

Tes DZone — Tao Wen pada DZone melakukan tes sendiri. Dia mulai dengan menunjukkan bahwa jika Anda beralih dari JSON ke Protobuf hanya untuk kecepatan, maka kinerja harus setidaknya dua kali lebih cepat, jika tidak “tidak sepadan dengan usaha”. Dia mengutip sebuah studi dari Platform DSL, yang membuktikan bahwa dalam hal Java, JSON benar-benar berkinerja lebih baik. Wen mengatakan alasan untuk menggunakan Protobuf seharusnya bukan karena kecepatan, melainkan “definisi skema cross-language yang mengagumkan untuk pertukaran data”.

Code Climate Test — Michael Bernstein menjalankan perbandingan yang sangat baik pada Code Climate. Bernstein mulai dengan menggambarkan keunggulan JSON sebagai format pertukaran data — “itu dapat dibaca manusia, dipahami dengan baik, dan biasanya berkinerja baik”. Dia melanjutkan dengan mengatakan bahwa dia percaya Protocol Buffer adalah pilihan yang lebih baik daripada JSON untuk penyandian data.

He cites five primary reasons for believing this:

(i) Schemas Are Awesome — dengan menyandikan semantik objek bisnis Anda sekali dalam format proto, ini membantu “memastikan bahwa sinyal tidak hilang di antara aplikasi, dan bahwa batasan yang Anda buat menegakkan aturan bisnis Anda”;

(ii) Backward Compatibility for Free — JSON tidak menggunakan bidang angka sedangkan Protocol Buffer menggunakannya , yang meniadakan kebutuhan untuk pemeriksaan versi dan menghindari kebutuhan untuk “ugly code”, membuat kurang kompatibilitas menjadi suatu tantangan;

(iii) Less Boilerplate Code — Protocol Buffers memungkinkan Anda untuk mengembangkan kelas yang dihasilkan proto Anda bersama dengan skema Anda sedangkan titik akhir JSON dalam layanan berbasis HTTP cenderung mengandalkan kode boilerplate yang ditulis tangan untuk menangani pengodean dan pengodean objek Ruby ke dan dari JSON;

(iv) Validations and Extensibility — Keywords padaProtocol Buffers sangat kuat, memungkinkan Anda untuk menyandikan bentuk struktur data Anda dan bagaimana kelas akan bekerja dalam setiap bahasa;

(v) Easy Language Interoperability — Variasi bahasa yang digunakan untuk mengimplementasikan Protocol Buffer membuat “interoperabilitas antara aplikasi polyglot dalam arsitektur Anda menjadi lebih sederhana”.

Pro dan kontra

Untuk meringkas, berikut adalah ikhtisar dari pro dan kontra dari masing-masing:

  • Protobuf lebih mudah diikat ke objek; membandingkan string dalam JSON bisa lambat.
  • Karena JSON bersifat tekstual, integer dan floatnya bisa lambat untuk disandikan dan didekode.
  • JSON tidak dirancang untuk angka.
  • JSON berguna ketika Anda ingin data dapat dibaca manusia.
  • Jika aplikasi sisi server Anda ditulis dalam JavaScript, JSON paling masuk akal.
  • Parsing string, array dan objek JSON membutuhkan pemindaian berurutan yang berarti tidak ada ukuran elemen atau jumlah untuk header.
  • Parsing berurutan di perpustakaan Protobuf dan di JSON. Ini berarti sulit untuk mencapai peningkatan kinerja yang signifikan ketika menjalankan format dalam CPU yang sama dan inti yang sama.
  • Implementasi pustaka untuk Protobuf mungkin tidak lebih cepat dari JSON meskipun tampaknya format keseluruhan lebih cepat. Jika parser belum dikonfigurasi untuk dioptimalkan dengan baik, alokasi memori tambahan atau salin dengan membuatnya lebih lambat.
  • JSON dapat secara signifikan lebih lambat sehubungan dengan pembandingan JMH.
  • Integers harus sangat cepat di Protobuf.
  • Protofbuf cenderung lebih cepat pada pengkodean integer dari JSON.
  • Untuk double-decoding, Protobuf telah terbukti secara signifikan lebih cepat daripada JSON untuk double decoding(JSON tidak layak untuk angka float).
  • Protocol Buffers menawarkan berbagai keuntungan kepada JSON untuk layanan yang secara langsung dikonsumsi oleh browser web.

Sekali lagi, pada akhirnya penting untuk mencoba keduanya dan melihat mana yang lebih unggul untuk kasus penggunaan khusus Anda.

--

--

Alfian Maulana Malik
Programmer Geek

Very skillful programmer, like traveling and many more to do as a programmer. Have a startup "Pathravel". Check my Profile https://kutt.it/alfianmalik