Zdecydowanie zalety / wady korzystania z JSON przez REST w porównaniu z bezpośrednim TCP / IP z protokołem binarnym i myślę, że już podejrzewasz, że protokół binarny będzie szybszy. Nie potrafię powiedzieć dokładnie, o ile szybciej (a to zależy od wielu czynników), ale zgaduję, że może 1-2 rzędy różnicy wielkości.
Na pierwszy rzut oka, jeśli coś jest 10-100 razy wolniejsze niż coś innego, możesz zareagować gwałtownie i zdecydować się na „szybką rzecz”. Jednak ta różnica prędkości występuje tylko w samym protokole. Jeśli istnieje dostęp do bazy danych / plików po stronie serwera, wybór warstwy transferu nie wpłynie na to. W niektórych przypadkach prędkość warstwy transferu może być znacznie mniejsza.
HTTP REST i JSON są dobre z wielu powodów:
- są łatwe do spożycia przez prawie każdego. Możesz napisać swoją aplikację internetową, a następnie odwrócić się i opublikować swój interfejs API, aby mógł z niego korzystać reszta świata. Teraz każdy może trafić w te same punkty końcowe i dostać się do twoich usług
- są łatwe do debugowania, możesz otworzyć sniffer pakietów lub po prostu zrzucić przychodzące żądania do plików tekstowych i zobaczyć, co się dzieje. Nie można tego zrobić za pomocą protokołów binarnych
- są łatwo rozszerzalne. Możesz dodać więcej atrybutów i danych w późniejszym czasie i nie naruszać zgodności ze starymi klientami.
- do użytku przez klientów javascript (nie jestem pewien, czy mają już parser JS protobuf, nie wierzcie, że istnieje)
Protobufy przez TCP / IP:
Gdyby to był mój wybór, wybrałbym HTTP REST i JSON. Jest powód, dla którego tylu innych firm i stron internetowych poszło tą drogą. Pamiętaj również, że w przyszłości zawsze możesz wesprzeć 2 punkty końcowe. Jeśli projekt jest poprawny, wybór punktu końcowego powinien być całkowicie oddzielony od logiki biznesowej po stronie serwera lub bazy danych. Więc jeśli później zrozumiesz, że potrzebujesz większej prędkości dla wszystkich / niektórych żądań, powinieneś być w stanie dodać protobufy przy minimalnym zamieszaniu. Jednak od samego początku REST / JSON sprawi, że zejdziesz z ziemi szybciej i poprowadzisz dalej.
Jeśli chodzi o Netty vs Spring. Nie korzystałem bezpośrednio z Netty, ale uważam, że jest to tylko lekki serwer WWW, gdzie Spring jest strukturą zapewniającą znacznie więcej niż tylko to. Ma warstwy dostępu do danych, planowanie zadań w tle i (myślę) model MVC, więc jest znacznie cięższy. Który wybrać? Jeśli zdecydowałeś się na HTTP, to następne pytanie prawdopodobnie brzmi, jak standardowa jest Twoja aplikacja? Jeśli masz zamiar napisać jakąś szaloną logikę niestandardową, która nie pasuje do standardowej formy, a wszystko czego potrzebujesz to tylko warstwa serwera HTTP, skorzystaj z Netty.
Podejrzewam jednak, że twoja aplikacja nie jest tak wyjątkowa i prawdopodobnie mogłaby skorzystać z wielu rzeczy, które Spring ma do zaoferowania. Oznacza to jednak, że powinieneś zbudować aplikację zgodnie ze strukturą Spring i postępować zgodnie z oczekiwaniami, co oznaczałoby, że dowiesz się więcej o Spring przed zanurzeniem się w swoim produkcie. Szkielety ogólnie są świetne, ponieważ znowu pozwalają szybciej oderwać się od ziemi, ale wadą jest to, że musisz dopasować się do ich formy zamiast robić własny projekt, a następnie oczekiwać, że szkielet po prostu zadziała.
(*) - w przeszłości zwracano uwagę, że moje posty nie odzwierciedlają opinii całego świata, więc przejdę do zapisu i dodam tylko, że mam ograniczone doświadczenie z Netty (wcześniej korzystałem z frameworka Play który jest oparty na Netty) lub Spring (czytałem tylko o tym). Więc weź to, co mówię, z odrobiną soli.