Mamy usługi sieciowe REST, które mogą obsługiwać XML lub JSON (WCF). Bawię się pomysłem wdrożenia Protobufów. Czemu?
PROS
- Mniejsze obciążenie serwerów.
- Mniejszy rozmiar wiadomości - mniejszy ruch.
- Łatwiej jest zmienić teraz niż później.
CONS
- Konieczne do wdrożenia
- Będzie trudniej rozwiązywać problemy / wąchać wiadomości do debugowania.
- Mogę włączyć GZip na serwerze, a JSON będzie zużywał tyle ruchu
Jakie są twoje sugestie i / lub doświadczenia w tym zakresie?
web-services
wcf
serialization
katit
źródło
źródło
Odpowiedzi:
Czy wartość biznesowa ich wdrożenia przekracza koszty?
Jeśli wdrożysz, musisz zmienić nie tylko serwer, ale wszystkich klientów (chociaż możesz obsługiwać oba formaty i zmieniać klientów tylko w razie potrzeby). To zajmie trochę czasu i testów, co jest bezpośrednim kosztem. I nie lekceważ czasu potrzebnego na prawdziwe zrozumienie buforów protokołów (szczególnie powodów, dla których pole jest wymagane lub opcjonalne), a także czasu potrzebnego na zintegrowanie kompilatora protobuf z procesem kompilacji.
Czy wartość przekracza to? Czy masz do wyboru opcję „nasze koszty przepustowości stanowią X% naszych przychodów i nie możemy tego wesprzeć”? A może nawet „musimy wydać 20 000 $, aby dodać serwery do obsługi JSON”?
Jeśli nie masz pilnej potrzeby biznesowej, twoi „profesjonaliści” nie są tak naprawdę profesjonalistami, tylko przedwczesną optymalizacją.
źródło
utrzymuję apis i ktoś przed mną dodał protobuf (ponieważ był „szybszy”). Jedyną rzeczą, która jest szybsza, jest RTT ze względu na mniejszy ładunek, który można naprawić za pomocą gzipped JSON.
Niesmaczna jest dla mnie względna praca nad utrzymaniem protobuf (w porównaniu do JSON). Używam java, więc używamy mapowania obiektów Jacksona dla JSON. Dodanie do odpowiedzi oznacza dodanie pola do POJO. Ale w przypadku protobuf muszę zmodyfikować plik .proto, a następnie zaktualizować logikę serializacji i deserializacji, która przenosi dane do / z buforów protokołu do POJO. Niejednokrotnie wydarzyło się wydanie, w którym ktoś dodał pole i zapomniał wstawić kod serializacji lub deserializacji dla buforów protokołu.
Teraz, gdy klienci zaimplementowali bufory protokołów, prawie niemożliwe jest uciec.
Prawdopodobnie można się z tego domyślić, moja rada nie rób tego.
źródło