Spostati da JSON a Protobuf. Ne vale la pena?

21

Abbiamo i servizi web REST che possono servire XML o JSON (WCF). Sto giocando con l'idea di implementare Protobufs. Perché?

Pro

  1. Meno carico sui server.
  2. Dimensioni dei messaggi più piccole - meno traffico.
  3. È più facile passare ora più tardi.

CONS

  1. È necessario implementarlo
  2. Sarà più difficile risolvere i problemi / annusare i messaggi per il debug.
  3. Posso abilitare GZip sul server e JSON consumerà tanto traffico

Qual è il tuo suggerimento e / o esperienza su questo?

    
posta katit 22.06.2012 - 17:35
fonte

2 risposte

37

Il valore commerciale dell'implementazione supera il costo?

Se si implementa, è necessario modificare non solo il proprio server, ma tutti i client (sebbene sia possibile supportare entrambi i formati e modificare solo i client secondo necessità). Ci vorrà tempo e test, che è un costo diretto. E non sottovalutare il tempo necessario per capire veramente i buffer del protocollo (in particolare i motivi per rendere il campo obbligatorio o facoltativo) e il tempo necessario per integrare il compilatore protobuf nel processo di compilazione.

Quindi il valore lo supera? Sei di fronte a una scelta tra "i nostri costi per la larghezza di banda sono il X% delle nostre entrate e non possiamo supportarlo"? O anche "abbiamo bisogno di spendere $ 20.000 per aggiungere server per supportare JSON"?

A meno che tu non abbia una necessità aziendale urgente, i tuoi "professionisti" non sono realmente dei professionisti, ma solo un'ottica prematura.

    
risposta data 22.06.2012 - 18:32
fonte
20

Mantengo l'apis e qualcuno prima di me ha aggiunto protobuf (perché era "più veloce"). L'unica cosa più veloce è RTT a causa di un payload più piccolo e che può essere corretto con JSON gzipped.

La parte che mi è di cattivo gusto è il lavoro relativo per mantenere protobuf (rispetto a JSON). Io uso java così usiamo la mappatura degli oggetti Jackson per JSON. Aggiungere a una risposta significa aggiungere un campo a un POJO. Ma per protobuf devo modificare il file .proto, quindi aggiornare la logica di serializzazione e deserializzazione che sposta i dati in / out dei buffer del protocollo e in POJO. È successo più di una volta che è accaduto un rilascio in cui qualcuno ha aggiunto un campo e si è dimenticato di inserire il codice di serializzazione o deserializzazione per i buffer del protocollo.

Ora che i client sono implementati rispetto ai buffer del protocollo, è quasi impossibile allontanarsene.

Probabilmente puoi indovinare da questo, il mio consiglio è di non farlo.

    
risposta data 22.06.2012 - 20:48
fonte

Leggi altre domande sui tag