Size: a a a

Архитектура ИТ-решений

2021 April 16

PD

Phil Delgyado in Архитектура ИТ-решений
REST level 1 - это тоже RPC
Это REST level 2 - только для крудов
источник

KK

Kirill Keker in Архитектура ИТ-решений
но кому-то нравится json обмениваться и не придумывать свой payload. + реализация json-rpc v2 рассчитана на асинхронный обмен уже в стандарте, там есть номера запросов и ответов.
источник

AK

Anton Korotkikh in Архитектура ИТ-решений
REST - это плохое решение для RPC. Хотя бы потому, что это адски размытая парадигма и возникает простой вопрос - а где спека реста? где какие-то rfc? где описаны эти самые level'ы?
у json-rpc есть спека, у grpc и ногих других. а у реста есть только холивары в чятиках и на форумах, как готовить рест.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
В JSON-RPC - два типа передачи параметров (нафиг?), жесткий формат ошибок (его не хватает)
Поэтому приходится все равно свое делать.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Вот это да. Но при этом самым популярным в публичных API стал наиболее ужасный Rest level 2, в котором вообще сплошные проблемы.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
(левелы, кстати, много где описаны, более-менее все одинаково понимают)
источник

PD

Phil Delgyado in Архитектура ИТ-решений
По сути, конечно, обычно приходится делать свой RPC протокол поверх REST level 1
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Со своим описанием различных ошибок на бизнес-уровне и т.п.
источник

p

pragus in Архитектура ИТ-решений
Ну было 2(пусть будет A и B) и стало 3( пусть будет C). Клиенты ws-серверов A и B никуда не делись же. А новые уже будут попадать на C.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Это ты про пункт 3?
На самом же деле новые будут и дальше равномерно раскидываться по a-b-c, пока их не перезагрузят )
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Но вообще если в качестве mq была бы кафка - я бы не парился и отправлял все сообщения на все воркеры, а те пусть сами разбирают.
И не думал про роутинг вообще
источник

PD

Phil Delgyado in Архитектура ИТ-решений
И основная беда - что хочется "положить событие в очередь в базе и в MQ" делать транзакционным, а это не просто...
Впрочем, можно всегда положить в MQ, лишний запрос не страшен
источник

p

pragus in Архитектура ИТ-решений
Да, про 3. Почему будут раскидываться, если мы через балансер можем управлять весами? Можно вообще все новые соединения направить на C.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Ну, динамическое управление весами на балансере с поддержкой websocket? Я в это не очень верю, если честно (но это может быть личными искажениями, я привык, что инфраструктуру на входящим трафике я не контролирую и нет смысла рассчитывать на что-то больше round-robin)
источник

p

pragus in Архитектура ИТ-решений
Балансер ничего не знает про ws. Он балансирует udp/tcp, а ковыряться в payload - не его дело.

Речь про katran, glb и unimog. Вот хорошая статья от CF: https://blog.cloudflare.com/unimog-cloudflares-edge-load-balancer/
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Хм, а ты много видел систем, где они стоят? Я все больше nginx вижу или железный F5 и там такая балансировка - не самое простое, насколько я помню.
И про ws (вернее про длинные соединения) балансер должен понимать (чуть-чуть)
источник

p

pragus in Архитектура ИТ-решений
Прилично. Но там у компаний  и свои каналы, и BGP и несколько точек присутствия. Просто если tcp-соединение от клиента терминируется на балансере, то это ставит крест на всей схеме.

Прелесть же такого подхода в том, что мы ограничены лишь полосой. И чем больше шардов, тем менее заметно для клиентов выпадение 1 шарда.
источник

w

whoami in Архитектура ИТ-решений
Можно же и в json закодировать enum как int?
источник

VA

Viktor Alexandrov in Архитектура ИТ-решений
нинада пазязя
источник

w

whoami in Архитектура ИТ-решений
ну грубо говоря - кодируем строку значения enum перед отправкой в crc32, почему нет?
источник