𝗣𝗿𝗼𝘁𝗼𝗯𝘂𝗳 کے ساتھ مختصر ویڈیو میٹا ڈیٹا

ہمارا ingest worker ہر دو گھنٹے بعد ہزاروں ٹرینڈنگ ویڈیوز حاصل کرتا ہے۔ ہم یہ ڈیٹا تین سروسز کو بھیجتے ہیں: ایک ranking service، ایک cache warmer، اور ایک analytics job۔

ایک طویل عرصے تک، ہم اس ڈیٹا کو منتقل کرنے کے لیے JSON کا استعمال کرتے رہے۔ یہ تب تک ٹھیک کام کرتا رہا جب تک کہ یہ ناکام نہیں ہو گیا۔

JSON میں ایک ویڈیو کا ریکارڈ 2.4 KB کا تھا۔ 40,000 ریکارڈز کو تین مختلف سروسز تک پہنچانے کا مطلب ہر دو گھنٹے میں 280 MB کا غیر ضروری ٹیکسٹ منتقل کرنا تھا۔ اس سے بینڈوتھ (bandwidth) ضائع ہوتی تھی اور ہمارے PHP workers کی رفتار سست ہو جاتی تھی۔

ہم نے Protocol Buffers (Protobuf) پر منتقل ہونے کا فیصلہ کیا۔ یہاں بتایا گیا ہے کہ ایسا کیوں کیا گیا اور اس نے ہمارے سسٹم کو کیسے بدلا۔

JSON کے ساتھ تین اہم مسائل:

Protobuf نے اسے کیسے حل کیا:

Protobuf ناموں کے بجائے فیلڈ نمبرز کا استعمال کرتا ہے۔ یہ ایک .proto فائل کو 'سنگل سورس آف ٹروتھ' (single source of truth) کے طور پر استعمال کرتا ہے۔ یہ فائل PHP، Python، اور Go کے لیے کوڈ جنریٹ کرتی ہے۔ اگر آپ اسکیمہ تبدیل کرتے ہیں، تو کوڈ کمپائل نہیں ہو پاتا۔ اس طرح runtime کے بگ (bugs) compile-time کی غلطیوں میں بدل جاتے ہیں۔

نتائج:

ہم نے ایک ہفتے کے دوران ان تبدیلیوں کا جائزہ لیا:

Protobuf کب استعمال کریں:

اسے ہر چیز کے لیے استعمال نہ کریں۔ اگر آپ کے پے لوڈز چھوٹے ہیں یا آپ چاہتے ہیں کہ انسان انہیں آسانی سے پڑھ سکیں، تو JSON ہی استعمال کریں۔ Protobuf کو زیادہ حجم والے انٹرنل ٹریفک (internal traffic) کے لیے استعمال کریں جہاں رفتار اور سخت معاہدے (strict contracts) سب سے زیادہ اہمیت رکھتے ہوں۔

ہماری عوامی APIs اب بھی JSON استعمال کرتی ہیں۔ ہماری اندرونی سروسز Protobuf استعمال کرتی ہیں۔

Source: https://dev.to/ahmet_gedik778845/compact-video-metadata-serialization-with-protobuf-across-php-services-19lk