Как правильно сделать прокси между мобильным и десктопным фронтендами?
Nginx принимает запрос из внешнего мира, после отдаёт скрипту на go, который, учитывая User-Agent и куки, перенаправляет либо на touch.js, либо на descktop.js.
touch.js и descktop.js - выполняют роли фронтенда при серверном рендинге.
1. В этой схеме меня ничего не смущает, go отрабатывает крайне быстро, но нет ли более устоявшегося подхода?
2. touch.js и descktop.js, как и другие сервисы находятся в отдельных doker-контейнерах (один git репозиторий = один контейнер), не слишком ли преувеличено для go-прокси выделять отдельный контейнер, если там всего один небольшой файл в src?
sim3x, NodeJs не панацея, к тому же единственная причина по которой он используется на сервере, это пререндеринг ReactJs. MongoDB не подходит, так как мне нужны транзакции, и без костылей. Но вероятно, монга будет использоваться для сохранения данных влияющих на отображения для каждого из клиентов, это ещё один вопрос на повестке, но руки до него ещё не дошли.
Алексей Невзоров, Чаще всего, если в проекте есть и Node и Python и GO, не очень удивляешься, когда вместо конфига на несколько строк пишут сразу proxy... =P
Это, конечно, шутка, скорее, но повод задуматься всё же есть.
Борис Сёмов, Нода (react.js) для рендеринга, Питон (aiohttp) для бекенда и апи (руки тянутся переписать api на го), Го для служебных сервисов (великолепный язык, но библиотеко-кастрированный).
Алексей Невзоров, Не, я даже не спорю, что это может быть нужно и удобно в определённых обстаятельствах. Просто, часто, это получается совсем по другим причинам. =)
Nginx умеет это из коробки. Если ваш go proxy не подтягивает откуда-то данные о новых UA мобильных устройств, а просто работает по заданным правилам, то это можно сделать и в nginx, и обойтись вообще без этого звена.
Отдельный контейнер вполне нормально выделять хоть на один бинарник, ничего такого, мало того, изначально так ведь и задумывалось. =)
Алексей Невзоров, Ну куки-то тоже доступны как переменные и по ним можно вполне делать условия, так что это не проблема, но если действительно логика сложна, то да, может смысл и есть какой-то.
Обычно, это просто проверка пачки регулярок через map + одно условие по куке, и вполне легко реализуется.
Сложная логика определения агента, поэтому писать в nginx не хочется, так же есть флаг в куках, который показывает, что пользователь явно сменил фронтенд.