Считается, что с зависимостями лучше работать через собственные абстракции. Если в какой-то момент придется заменить либу/внешний сервис A на B, то изменения будут только в адаптере, но не просочатся в остальной код.
И вот у меня дошли руки тоже это реализовать у себя :) Делюсь прогрессом.
Подход выбран близкий, но с отличиями в деталях. Поднимается контекст Spring, считаем sha256 от папки с миграциями liquibase, часть первых символов в hex это тег образа. Если образа нет, собираем: подняли стандартный контейнер postgresql, запустили миграции liquibase, стопнули контейнер, скопировали /var/lib/postgresql/data в отдельный .tar.gz, создаём на основе стандартного postgresql новый образ с нужным тегом, закидывая туда файлы в другую папку (/var/lib/postgresql-migrated/data) + обновлённый migrated-entrypoint.sh. Скрипт делает только перемещение в изначальную папку, и запуск оригинального docker-entrypoint.sh, это нужно для того, чтобы файлы в контейнере разместились на tmpfs.
При запуске одного произвольного теста время на поднятие контекста срезалось в два раза.
Как-то, уже наверное 15 лет назад, мы в НИИ купили себе стойку в комнату. Прям небольшой кабинет, 4 стола, 3-4 человека.
Сперва с одним сервером, постепенно выросли до 3. Для каждого сервера понемногу внизу стойки вставили по ИБП. Свитч. Напруга — был силовой щиток рядом, всё ОК. Чутт выше поставили полку, на неё МФУшка влезла :) Над стойкой кондёр на стену.
Цель — фундаментальные исследования, числомолотилка. В целом всё нормально было, кроме ещё одного фактора, который выше никто не отметил. Последний, третий supermicro, несмотря на толщину 2U, был ужасно шумный. Первый брали Интел, 4u, он был тих. Второй 1U, шумоват. А вот третий нас просто добил. В итоге включали вычисления на нём, только уходя домой.
Ну и оно до сих пор стоит и работает. Не представляю, сколько денег это бы сожрало при разных вариантах аренды.
Если держать в голове, что у нас его виртуальные треды, можно завести бесконечный тредпул, их плодить бесщадно на каждый запрос запрошенное N число, а в потоках блокироваться на семафоре. В зависимости от обсуждения с собеседующим можно семафор сделать или глобальный, если хочется честно лимитировать число запросов от нашего сервиса к целевому, или на внешний запрос, если "чуть более честно следовать букве ТЗ".
Если виртуальных тредов нет, можно поинтересоваться, не предполагается ли, что у нас всегда достаточно памяти под треды, и авось их тоже можно плодить.
В общем, мой коммент скорее про то, что перед реализацией можно ещё больше деталей уточнить, которые могут дать пространство для манёвра.
Мне кажется, я бы в такой ситуации сразу начал рисовать график запросов и доказывать, что лучше не батчи по 10, а семафором каким-нибудь ограничить, чтобы в моменте было не более 10. Сергей, не задавал такой вопрос? )
Мне недавно sealed классы зашли с джексоном и его JavaTypeName. Правда вручную пришлось зарегать наследников при построении маппера, но это выглядело лучше, чем дублирование кода в permits и аннотациях. Есть открытый issue, в котором даже посоветовали готовый сторонний модуль, который автоматизирует регистрацию сабтипов. Под рукой нет ссылок, извините.
Полностью поддерживаю, много лет пуши приходят сперва жене на телефон, где я тоже установил МП. Но ей тоже иногда надо, а мне через 1 минуту смс перезапросить не проблема обычно:)
Вся ситуация на самом деле как будто звучит примерно так:
Хочется, чтобы в этом мире доверенными ЦА были только ЦА иных стран, с которыми у меня дел нет, которые никак не заинтересованы в проведении MitM на мне.
Если мое государство или другие, в которых есть сервисы / банки, которыми я пользуюсь, будет в корневых ЦА, я опасаюсь MitM.
Ещё надо отметить переиспользование кусков SQL из разных файлов :)
Точно крутая технически штука, но почему она звучит как зло?)
Но, действительно, статья не отвечает на вопрос из заголовка...
Считается, что с зависимостями лучше работать через собственные абстракции. Если в какой-то момент придется заменить либу/внешний сервис A на B, то изменения будут только в адаптере, но не просочатся в остальной код.
Эта статья была написана как ответ на переписку в комментариях к моей статье: https://habr.com/ru/articles/742552/
И вот у меня дошли руки тоже это реализовать у себя :) Делюсь прогрессом.
Подход выбран близкий, но с отличиями в деталях. Поднимается контекст Spring, считаем sha256 от папки с миграциями liquibase, часть первых символов в hex это тег образа. Если образа нет, собираем: подняли стандартный контейнер postgresql, запустили миграции liquibase, стопнули контейнер, скопировали /var/lib/postgresql/data в отдельный .tar.gz, создаём на основе стандартного postgresql новый образ с нужным тегом, закидывая туда файлы в другую папку (/var/lib/postgresql-migrated/data) + обновлённый migrated-entrypoint.sh. Скрипт делает только перемещение в изначальную папку, и запуск оригинального docker-entrypoint.sh, это нужно для того, чтобы файлы в контейнере разместились на tmpfs.
При запуске одного произвольного теста время на поднятие контекста срезалось в два раза.
Ну, если бы не Майнкрафт, я бы не перешёл из плюсов в джаву :) Так что у меня к нему личная благодарность :)
Как-то, уже наверное 15 лет назад, мы в НИИ купили себе стойку в комнату. Прям небольшой кабинет, 4 стола, 3-4 человека.
Сперва с одним сервером, постепенно выросли до 3. Для каждого сервера понемногу внизу стойки вставили по ИБП. Свитч. Напруга — был силовой щиток рядом, всё ОК. Чутт выше поставили полку, на неё МФУшка влезла :) Над стойкой кондёр на стену.
Цель — фундаментальные исследования, числомолотилка. В целом всё нормально было, кроме ещё одного фактора, который выше никто не отметил. Последний, третий supermicro, несмотря на толщину 2U, был ужасно шумный. Первый брали Интел, 4u, он был тих. Второй 1U, шумоват. А вот третий нас просто добил. В итоге включали вычисления на нём, только уходя домой.
Ну и оно до сих пор стоит и работает. Не представляю, сколько денег это бы сожрало при разных вариантах аренды.
Если держать в голове, что у нас его виртуальные треды, можно завести бесконечный тредпул, их плодить бесщадно на каждый запрос запрошенное N число, а в потоках блокироваться на семафоре. В зависимости от обсуждения с собеседующим можно семафор сделать или глобальный, если хочется честно лимитировать число запросов от нашего сервиса к целевому, или на внешний запрос, если "чуть более честно следовать букве ТЗ".
Если виртуальных тредов нет, можно поинтересоваться, не предполагается ли, что у нас всегда достаточно памяти под треды, и авось их тоже можно плодить.
В общем, мой коммент скорее про то, что перед реализацией можно ещё больше деталей уточнить, которые могут дать пространство для манёвра.
Пора Павлу опять делать что-то новое, модное, молодежное?)
Есть вариант вложить материнский капитал сильно хуже, чем в квартиру -- в частный дом :)
Мне кажется, я бы в такой ситуации сразу начал рисовать график запросов и доказывать, что лучше не батчи по 10, а семафором каким-нибудь ограничить, чтобы в моменте было не более 10. Сергей, не задавал такой вопрос? )
Сперва прочитал как "есть во всех российских странах" =)
Мне недавно sealed классы зашли с джексоном и его JavaTypeName. Правда вручную пришлось зарегать наследников при построении маппера, но это выглядело лучше, чем дублирование кода в permits и аннотациях. Есть открытый issue, в котором даже посоветовали готовый сторонний модуль, который автоматизирует регистрацию сабтипов. Под рукой нет ссылок, извините.
Там же на самом деле ещё есть нотка непредсказуемости. Вот, к примеру, Китай построил мегадамбу — Земля немного изменила скорость вращения ...
Полностью поддерживаю, много лет пуши приходят сперва жене на телефон, где я тоже установил МП. Но ей тоже иногда надо, а мне через 1 минуту смс перезапросить не проблема обычно:)
Если бы )
Жаль, что в статье нет никаких технических деталей. Только два названия, Redis и Caffeine.
Хотелось глубины.
Тут Adobe что-то очень похожее выпустили ))
https://www.youtube.com/watch?v=3ZTB79o7DqM
https://youtu.be/barsu1NWE4s?t=1904
Вся ситуация на самом деле как будто звучит примерно так:
Хочется, чтобы в этом мире доверенными ЦА были только ЦА иных стран, с которыми у меня дел нет, которые никак не заинтересованы в проведении MitM на мне.
Если мое государство или другие, в которых есть сервисы / банки, которыми я пользуюсь, будет в корневых ЦА, я опасаюсь MitM.
Финтех, бэк для внутренних мобилок, мы уже на 21 :)