Protocol Buffers Menghadapi Kritikan Pembangun Yang Semakin Meningkat Terhadap Kelemahan Reka Bentuk Sistem Jenis

Pasukan Komuniti BigGo
Protocol Buffers Menghadapi Kritikan Pembangun Yang Semakin Meningkat Terhadap Kelemahan Reka Bentuk Sistem Jenis

Kritikan terperinci terhadap Protocol Buffers milik Google telah mencetuskan perdebatan sengit dalam komuniti pembangun, menonjolkan isu reka bentuk asas yang terus mengecewakan jurutera yang bekerja dengan format pensirialan tersebut. Perbincangan tertumpu pada batasan sistem jenis, cabaran keserasian ke belakang, dan jurang antara format wayar protobuf dengan keperluan aplikasi praktikal.

Sekatan Sistem Jenis Mewujudkan Geseran Pembangunan

Aduan paling ketara tertumpu pada pelbagai sekatan sewenang-wenangnya protobuf yang menghalang ciri-ciri daripada berfungsi bersama dengan lancar. Pembangun kerap menghadapi batasan seperti ketidakupayaan untuk menggunakan enum sebagai kunci peta, sekatan pada peta bersarang, dan fakta bahawa medan oneof tidak boleh diulang. Kekangan ini memaksa jurutera menulis penyelesaian sementara dan fungsi penghuraian tersuai, menggagalkan tujuan kod yang dijana secara automatik.

Satu isu yang amat mengecewakan melibatkan sekatan kunci peta. Banyak projek akhirnya menggunakan peta berasaskan rentetan di seluruh pangkalan kod mereka atau menukar secara manual antara peta rentetan dan struktur berjeniskan dengan betul selepas penyahsirialan. Ini mewujudkan overhed penyelenggaraan tambahan dan sumber ralat berpotensi dalam sistem pengeluaran.

Batasan Utama Protocol Buffers

  • Sekatan Map: Tidak boleh menggunakan enum sebagai kunci, tiada map bersarang, kunci terhad kepada string/integer sahaja
  • Komposisi Jenis: medan oneof tidak boleh menjadi repeated, sokongan parameterisasi terhad
  • Kualiti Sokongan Bahasa: Go (baik) berbanding Python/Ruby/TypeScript (bermasalah)
  • Pengendalian Medan: Semua medan adalah pilihan secara lalai, pemulaan nilai-sifar boleh menyembunyikan ralat

Format Pensirialan Alternatif

  • Simple Binary Encoding (SBE): Pengendalian keserasian ke belakang/ke hadapan yang lebih baik
  • Typical: Memperkenalkan "medan asimetrik" untuk evolusi skema yang lebih selamat
  • Pendekatan tradisional: REST/JSON untuk kes penggunaan yang lebih mudah tanpa keperluan prestasi yang melampau

Kualiti Kod Yang Dijana Berbeza Secara Dramatik Mengikut Bahasa

Pengalaman pembangun dengan Protocol Buffers sangat bergantung pada bahasa pengaturcaraan sasaran. Walaupun pembangun Go umumnya melaporkan pengalaman positif, mereka yang bekerja dengan pelaksanaan Python atau Ruby menghadapi cabaran ketara. Penjanaan kod TypeScript telah menarik kritikan khusus kerana menandakan hampir semua medan sebagai pilihan, memaksa pasukan menulis lapisan pengesahan tambahan.

Kami akhirnya terpaksa menulis kod kami sendiri untuk menghurai respons daripada respons klien TypeScript yang dijana dengan berguna. Ini bermakna kami juga terpaksa mengendalikan penolakan respons yang tidak masuk akal di mana medan yang sebenarnya diperlukan tidak hadir.

Kualiti yang bergantung pada bahasa ini mewujudkan pengalaman yang tidak konsisten merentas pasukan pembangunan dan boleh mempengaruhi pilihan teknologi melebihi keperluan pensirialan sahaja.

Faedah Keserasian Ke Belakang Dipersoalkan

Walaupun Protocol Buffers memasarkan keserasian ke belakang dan ke hadapan sebagai ciri utama, pembangun melaporkan hasil bercampur-campur dalam amalan. Pendekatan format untuk mengendalikan medan yang hilang melalui pemulaan nilai sifar boleh menyamarkan masalah data sebenar dan mewujudkan pepijat halus. Sesetengah jurutera berhujah bahawa faedah keserasian tidak membenarkan overhed kerumitan untuk banyak kes penggunaan.

Komuniti telah mengenal pasti format pensirialan alternatif yang menyediakan jaminan keserasian yang serupa dengan sistem jenis yang lebih bersih. Walau bagaimanapun, penggunaan meluas protobuf dan ekosistem perkakas menjadikan migrasi mencabar untuk projek yang telah mapan.

Penyelesaian Alternatif Muncul

Beberapa pembangun telah menunjuk kepada format pensirialan yang lebih baharu yang menangani batasan protobuf sambil mengekalkan ciri keserasian. Simple Binary Encoding (SBE) dan Typical telah mendapat perhatian untuk pendekatan mereka yang lebih berprinsip terhadap evolusi skema dan keselamatan jenis. Alternatif ini menunjukkan bahawa masalah tersebut bukan wujud dalam format pensirialan tetapi lebih kepada pilihan reka bentuk khusus.

Perdebatan yang berterusan mencerminkan ketegangan yang lebih luas dalam kejuruteraan perisian antara penyelesaian pragmatik yang berfungsi pada skala dan reka bentuk yang kukuh secara teori yang memberikan pengalaman pembangun yang lebih baik. Walaupun Protocol Buffers terus berkhidmat kepada banyak organisasi dengan berkesan, kritikan tersebut menonjolkan bidang di mana format boleh berkembang untuk melayani amalan pembangunan moden dengan lebih baik.

Rujukan: Protobuffers Are Wrong