Однозначно є плюси / мінуси щодо використання JSON через REST проти прямого TCP / IP з бінарним протоколом, і я думаю, ви вже підозрюєте, що бінарний протокол буде швидшим. Я не можу точно сказати, наскільки швидше (і це залежатиме від багатьох факторів), але я б здогадався, можливо, на 1-2 порядки різниці.
На перший погляд, якщо щось у 10-100 разів повільніше, ніж щось інше, у вас може виникнути реакція на коліна та йти на «швидку річ». Однак ця різниця швидкостей є лише в самому протоколі. Якщо на базі сервера є доступ до бази даних / файлів, це не вплине на вибір вашого шару передачі. У деяких випадках це може зробити швидкість вашого шару передачі набагато менш значною.
HTTP REST і JSON корисні з кількох причин:
- вони легко споживаються практично будь-ким. Ви можете написати веб-додаток, а потім розгорнути та опублікувати свій API для решти країн світу. Тепер кожен може потрапити на ті самі кінцеві точки та дістатися до ваших послуг
- вони легко налагоджувати, ви можете відкрити sniffer пакетів або просто скинути вхідні запити на текстові файли і подивитися, що відбувається. Ви не можете цього зробити з бінарними протоколами
- вони легко розширюються. Ви можете додати більше атрибутів і даних згодом і не порушувати сумісність зі старими клієнтами.
- витратний клієнтами Javascript (не впевнений, що у них ще є протобуф JS-аналізатор, не вірю, що є)
Протобуфи через TCP / IP:
Якби це був мій вибір, я б перейшов з HTTP REST та JSON. Існує причина, що так багато інших компаній та веб-сайтів пішли цим шляхом. Також пам’ятайте, що в майбутньому ви завжди можете підтримувати 2 кінцеві точки. Якщо ваш дизайн правильний, вибір кінцевої точки повинен бути повністю відірваний від вашої бізнес-логіки або бази даних. Тож якщо згодом ви зрозумієте, що вам потрібна більша швидкість для всіх / деяких запитів, ви зможете додавати протобуфи з мінімальною суєтою. Однак відразу з битою, REST / JSON швидше зведе вас із землі та відведе вас далі.
Що стосується Нетті проти Весни. Я не використовував Netty безпосередньо, але я вважаю, що це просто легкий веб-сервер, де, як Spring, є основою, яка забезпечує набагато більше для вас, ніж просто це. Він має шари доступу до даних, планування фонових завдань та (я думаю) модель MVC, тому він набагато більш важкий. Який вибрати? Якщо ви вирішили піти HTTP-шлях, то наступне питання, напевно, наскільки стандартним є ваш додаток? Якщо ви збираєтесь написати якусь шалену власну логіку, яка не відповідає стандартній формі, і все, що вам потрібно, - це лише рівень сервера HTTP, перейдіть з Netty.
Однак я підозрюю, що ваша програма не така вже й особлива, і це, ймовірно, може отримати користь від багатьох речей, які може запропонувати Весна. Але це означає, що ви маєте структурувати свій додаток за рамками Spring та робити так, як вони від вас очікують, що означало б дізнатися більше про Весну, перш ніж зануритися у ваш продукт. Рамки в цілому чудові, тому що знову вони швидше збивають вас із землі, але недоліком є те, що вам доведеться вписатись у їх форму, а не робити власний дизайн, а потім очікувати, що рамка просто запрацює.
(*) - в минулому вказувалося, що мої публікації не відображають думки всього світу, тому я продовжую записувати і просто додаю, що у мене обмежений досвід роботи з будь-якою Netty (я раніше використовував Play Framework який базується на Netty) або Spring (я лише про це читав). Тож візьміть, що я кажу, із зерном солі.