𝗖𝗼𝗺𝗽𝗮𝗰𝘁 𝗩𝗶𝗱𝗲𝗼 𝗠𝗲𝘁𝗮𝗱𝗮𝘁𝗮 𝗪𝗶𝘁𝗵 𝗣𝗿𝗼𝘁𝗼𝗯𝘂𝗳

અમારું ઇન્જેસ્ટ વર્કર (ingest worker) દર બે કલાકે હજારો ટ્રેન્ડિંગ વિડિયો મેળવે છે. અમે આ ડેટા ત્રણ સેવાઓ પર મોકલીએ છીએ: એક રેન્કિંગ સર્વિસ, એક કેશ વार्मર (cache warmer), અને એક એનાલિટિક્સ જોબ.

લાંબા સમય સુધી, અમે આ ડેટા મોકલવા માટે JSON નો ઉપયોગ કરતા હતા. જ્યાં સુધી સમસ્યા ન આવી ત્યાં સુધી તે બરાબર કામ કરતું હતું.

JSON માં એક સિંગલ વિડિયો રેકોર્ડ 2.4 KB નો હતો. 40,000 રેકોર્ડ્સને ત્રણ અલગ-અલગ સેવાઓ પર મોકલવાનો અર્થ હતો દર બે કલાકે 280 MB વધારાનો (redundant) ટેક્સ્ટ મોકલવો. આનાથી બેન્ડવિડ્થનો બગાડ થતો હતો અને અમારા PHP વર્કર્સની ઝડપ ધીમી પડી જતી હતી.

અમે Protocol Buffers (Protobuf) પર સ્વિચ કર્યું. તે શા માટે કર્યું અને તેનાથી અમારી સિસ્ટમ કેવી રીતે બદલાઈ તે અહીં છે.

JSON સાથેની ત્રણ મુખ્ય સમસ્યાઓ:

Protobuf એ આ સમસ્યા કેવી રીતે ઉકેલી:

Protobuf નામોને બદલે ફીલ્ડ નંબર્સનો ઉપયોગ કરે છે. તે 'સિંગલ સોર્સ ઓફ ટ્રુથ' તરીકે .proto ફાઇલનો ઉપયોગ કરે છે. આ ફાઇલ PHP, Python, અને Go માટે કોડ જનરેટ કરે છે. જો તમે સ્કીમા બદલો છો, તો કોડ કમ્પાઈલ થવામાં નિષ્ફળ જાય છે. આનાથી રનટાઇમ બગ્સ (runtime bugs) કમ્પાઈલ-ટાઇમ એરર્સ (compile-time errors) માં બદલાઈ જાય છે.

પરિણામો:

અમે એક અઠવાડિયા દરમિયાન આ ફેરફારો માપ્યા:

Protobuf નો ઉપયોગ ક્યારે કરવો:

તેનો ઉપયોગ દરેક વસ્તુ માટે કરશો નહીં. જો તમારા પેલોડ્સ નાના હોય અથવા તમારે તેને માણસો દ્વારા સરળતાથી વાંચવાની જરૂર હોય, તો JSON સાથે જ રહો. જ્યાં સ્પીડ અને કડક કોન્ટ્રાક્ટ્સ સૌથી વધુ મહત્વના હોય તેવા હાઈ-વોલ્યુમ ઇન્ટરનલ ટ્રાફિક માટે Protobuf નો ઉપયોગ કરો.

અમારી પબ્લિક APIs હજુ પણ JSON નો ઉપયોગ કરે છે. અમારી ઇન્ટરનલ સર્વિસિસ Protobuf નો ઉપયોગ કરે છે.

સ્ત્રોત: https://dev.to/ahmet_gedik778845/compact-video-metadata-serialization-with-protobuf-across-php-services-19lk