Size: a a a

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

2020 October 17

AD

Alex Dev in Архитектура ИТ-решений
Gennadiy Kruglov
Как конкретно?
ui call api - >  stream(message bus) -> service -> cache(like redis)  <- scheduler service write to main db
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Александр
Конкретный кейс загрузка в кэш параллельно с бд и все чтение из кэша, все запросы за пределами кэша потом как нибудь как очередь дойдет. Запись в бд батчами минимум индексов. По тестам 300 тыс записей в сек в 1 инстанс вместо шардов бд, имдг под чтение
Не так. Немного сложнее. Например, обновление кэша параллельно с БД, чтение последних данных (за последний час, максимум за последние сутки) из кэша, агрегатов, рассчитанных пакетно за предыдущие периоды, месяц, год, десять лет тоже возможно из кэша. Но рассчитываются агрегаты не по данным кэша и даже скорее всего спарком на основе лога сообщений в хадупе. А агрегацию горячих данных можно выполнять с помощью потоковой обработки, с учётом того, что сообщения в очередях могут надёжно храниться довольно долго, часто больше суток
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Alex Dev
ui call api - >  stream(message bus) -> service -> cache(like redis)  <- scheduler service write to main db
redis поддерживает SQL?
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Alex Dev
ui call api - >  stream(message bus) -> service -> cache(like redis)  <- scheduler service write to main db
Так, в этой цепочке база по расписанию по данным кэша обновляется?
источник

AD

Alex Dev in Архитектура ИТ-решений
Gennadiy Kruglov
redis поддерживает SQL?
если не поменяли был форк leveldb, где были подобные запросы (более расширенная работа с timeseries)
источник

А

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

А

Александр in Архитектура ИТ-решений
Кроме агрегатов ещё и сортировки по разным колонкам которые не доходят до бд
источник

AD

Alex Dev in Архитектура ИТ-решений
Gennadiy Kruglov
Так, в этой цепочке база по расписанию по данным кэша обновляется?
да , с уточнением что сервис "перезаводится" от эвента шины сообщений (stream)
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Alex Dev
да , с уточнением что сервис "перезаводится" от эвента шины сообщений (stream)
не понимаю) почему не обновлять базу также балками в стриме/ сервисом "повешенным" на топик очереди сообщений, например

вам не кажется, что обновление базы по данным из кэша - это слишком хрупкая конструкция?
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Александр
Кроме агрегатов ещё и сортировки по разным колонкам которые не доходят до бд
Для этого нужен грид или нечто более сложное, чем тот же редис?
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Возможно я заблуждаюсь, но как мне кажется, как только мы выносим хоть какую-то логику на уровень базы/кэша и пр., мы что-то делаем не так
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Почему так? Потому что чем больше возможностей будет у кэша, задача которого - максимально быстро отдавать данные по ключу или по простейшим запросам, тем больше костылей будет на нём реализовано
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
А уж про грид и говорить не приходится, архитекторы с фантазией весь банк на него переведут.
источник

AD

Alex Dev in Архитектура ИТ-решений
Gennadiy Kruglov
не понимаю) почему не обновлять базу также балками в стриме/ сервисом "повешенным" на топик очереди сообщений, например

вам не кажется, что обновление базы по данным из кэша - это слишком хрупкая конструкция?
Там самодельная шина, не поддерживает такое.  это сейчас в каждой системе есть несколько вариантов "закрытия окон" (привет kafka streams) или батчинг из коробки.  Хрупкая если бы это была финансовая система 😅, ну а так вроде работает и не ломается, держит на 1 сервере много каналов*10-100тысч изменений в секунду.
источник

A

Andrey in Архитектура ИТ-решений
коллеги, мы тут на днях говорили про уважение бизнеса к крупным вендорам и "отхватывание" инженерами за любые косяки опенсорса.

А кто-то в курсе, предлагать самописные ERP тоже мазохизм с точки зрения принимаемой ответственности?
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Alex Dev
Там самодельная шина, не поддерживает такое.  это сейчас в каждой системе есть несколько вариантов "закрытия окон" (привет kafka streams) или батчинг из коробки.  Хрупкая если бы это была финансовая система 😅, ну а так вроде работает и не ломается, держит на 1 сервере много каналов*10-100тысч изменений в секунду.
Хрупкая, потому что, с моей точки зрения, записывать данные сначала в кэш и потом из кэша в базу очень странно. Нужно писать параллельно в кэш и в базу, в базу непосредственно из очереди. Хрупкая, потому что между очередью и базой появляется лишний элемент (кэш), который к тому же может потерять данные
источник

F

Fagor in Архитектура ИТ-решений
Andrey
коллеги, мы тут на днях говорили про уважение бизнеса к крупным вендорам и "отхватывание" инженерами за любые косяки опенсорса.

А кто-то в курсе, предлагать самописные ERP тоже мазохизм с точки зрения принимаемой ответственности?
Если у вас гарантирована команда примерно 20-30 человек (зависит от объёма компании, необходимого охвата областей, доменов), и срок до сдачи продукта на 80% года три, то нормально. Если нет, то к черту. Еще должны быть готовы представители, и не рядовые, от каждой области, которые к вам на половину ставки уйдут, на месяца 4ре и более иногда.
источник

A

Andrey in Архитектура ИТ-решений
Просто обычно ERP строят на базе коробок. Продал (купил) коробку, а дальше поверх нее пишешь нужный функционал. Бизнесу рассказываешь, что следуешь лучшим практикам, заложенным в логике вендора. Вот думаю, а есть ли смысл очковтирательством заниматься.
источник

F

Fagor in Архитектура ИТ-решений
Gennadiy Kruglov
Хрупкая, потому что, с моей точки зрения, записывать данные сначала в кэш и потом из кэша в базу очень странно. Нужно писать параллельно в кэш и в базу, в базу непосредственно из очереди. Хрупкая, потому что между очередью и базой появляется лишний элемент (кэш), который к тому же может потерять данные
Очень запутано. Я вижу что в любом случае при распараллеливании появляется "костыль", или приложение пишет и в кеш и в базу, что как то не очень. Мы имеем костыль в приложении. Или появляется промежуточная база/утилита, которая распределяет и в кеш и в базу. Т.е. еще один системный сервис.
источник

F

Fagor in Архитектура ИТ-решений
Хотя я может что то напутал, сегодня как то "не идет"
источник