Protobuf ഉപയോഗിച്ച് കോംപാക്ട് വീഡിയോ മെറ്റാഡാറ്റ

ഞങ്ങളുടെ ഇൻജസ്റ്റ് വർക്കർ (ingest worker) ഓരോ രണ്ട് മണിക്കൂർ കൂടുമ്പോഴും ആയിരക്കണക്കിന് ട്രെൻഡിംഗ് വീഡിയോകൾ ശേഖരിക്കുന്നു. ഈ ഡാറ്റ ഞങ്ങൾ മൂന്ന് സർവീസുകളിലേക്ക് അയക്കുന്നു: ഒരു റാങ്കിംഗ് സർവീസ് (ranking service), ഒരു കാഷെ വാർമർ (cache warmer), കൂടാതെ ഒരു അനലിറ്റിക്സ് ജോബ് (analytics job).

ഒരുപാട് കാലമായി ഈ ഡാറ്റ കൈമാറാൻ ഞങ്ങൾ JSON ആണ് ഉപയോഗിച്ചിരുന്നത്. അത് തകരാറിലാകുന്നതുവരെ അത് നന്നായി പ്രവർത്തിച്ചിരുന്നു.

JSON ഉപയോഗിക്കുമ്പോൾ ഒരു വീഡിയോ റെക്കോർഡിന് 2.4 KB വലിപ്പമുണ്ടായിരുന്നു. 40,000 റെക്കോർഡുകൾ മൂന്ന് വ്യത്യസ്ത സർവീസുകളിലേക്ക് മാറ്റുക എന്നതിനർത്ഥം ഓരോ രണ്ട് മണിക്കൂർ കൂടുമ്പോഴും 280 MB ആവർത്തിച്ചു വരുന്ന അനാവശ്യ ടെക്സ്റ്റ് കൈമാറുന്നു എന്നാണ്. ഇത് ബാൻഡ്‌വിഡ്ത്ത് പാഴാക്കുകയും ഞങ്ങളുടെ PHP വർക്കറുകളുടെ വേഗത കുറയ്ക്കുകയും ചെയ്തു.

ഞങ്ങൾ പ്രോട്ടോക്കോൾ ബഫേഴ്സിലേക്ക് (Protocol Buffers - Protobuf) മാറി. എന്തുകൊണ്ടാണ് ഞങ്ങൾ അങ്ങനെ ചെയ്തതെന്നും അത് ഞങ്ങളുടെ സിസ്റ്റത്തിൽ എങ്ങനെയൊക്കെ മാറ്റങ്ങൾ വരുത്തിയതെന്നും താഴെ നൽകുന്നു.

JSON-ലെ മൂന്ന് പ്രധാന പ്രശ്നങ്ങൾ: