5

Utilizziamo kafka per archiviare messaggi e per inviare un numero estremamente elevato di messaggi (> 30k in un minuto). Non sono sicuro che sia pertinente, ma il codice che è il produttore del messaggio kafka è in jruby.Metriche delle prestazioni per Avro vs Protobuf

Serializzare e deserializzare i messaggi ha anche un impatto sulle prestazioni del sistema.

Qualcuno può aiutare a confrontare Avro vs Protocol Buffer in termini di velocità di serializzazione e deserializzazione.

+1

Non una buona domanda per stackoverflow ma controlla questo post: http://www.sammur.com/?p=36 – Nicholas

+0

grazie mille Nicholas :) –

risposta

19

Odio dirti questo, ma non c'è una risposta semplice alla tua domanda.

Le prestazioni di un formato di serializzazione dipendono da molti fattori. Prima di tutto, le prestazioni sono una proprietà dell'implementazione più del formato stesso. Quello che vuoi veramente sapere è quanto bene eseguono le specifiche implementazioni JRuby di ogni formato (o forse le implementazioni Java, se le stai semplicemente avvolgendo). La risposta potrebbe essere molto diversa dalla risposta in altre lingue, come il C++.

Inoltre, le prestazioni variano a seconda di come si utilizza la libreria. Le API di molte librerie offrono un compromesso tra il modo "facile, lento" e il modo "veloce, difficile". Durante l'ottimizzazione, dovrai studiare attentamente la documentazione e cercare codice di esempio dagli autori delle biblioteche per sapere come spremere le massime prestazioni.

Infine, e soprattutto, le prestazioni sono molto diverse a seconda dei dati con cui si sta lavorando. Diversi formati e implementazioni ottimizzano per diversi tipi di dati. Ad esempio, i dati pesanti sulle stringhe eserciteranno percorsi di codice molto diversi da quelli con numeri elevati. Per ogni formato, anche JSON e XML *, è sempre possibile trovare un caso d'uso in cui si comporta meglio di tutti gli altri. Diffida dei benchmark che provengono dagli autori delle biblioteche, poiché questi tenderanno a enfatizzare i casi di utilizzo a loro favore.

Sfortunatamente, se si vuole veramente sapere quale formato si esibirà meglio per voi, l'unico modo che scoprirete è scrivendo due versioni del vostro codice, una per ciascuna libreria e confrontandole. Nessun benchmark esterno sarà in grado di darti la vera risposta.

(Io sono l'autore di Protobuf v2 e Cap'n Proto, così ho passato un sacco di tempo a guardare benchmark di serializzazione e pensare a prestazioni.)

* Sto scherzando su XML.

+0

è bello sentirlo da te, ci siamo spostati su protobuf e sta facendo abbastanza bene, btw c'è un buon modo per convertire il proto timestamp in ruby ​​data-time object? –

+0

@AdityaSanghi Scusa, non so nulla dell'implementazione di Ruby protobuf. Presumibilmente ci dovrebbe essere una funzione di libreria da qualche parte, anche se il timestamp.proto ufficiale è relativamente nuovo, quindi forse non è stato ancora aggiunto. –