GITLAB
Допустим у нас есть множество паралельных сборок в одном пайплайне.
Как обеспечить паралельность но не разорится на раннерах? Использовать автоскейл кубер.
Поднимаем раннер в кубе на отдельной ноде и создаем группу узлов с 0 нод и возможностью скейла. В джобах билда указываем запрос CPU, например так:
Тогда при старте контейнера с джобой кубер поймет что у нет ресурсов и выделит ноду. Таким образом, при верной настройки ресурсов нод группы мы можем сделать отдельную ноду на каждый билд. После отработки билдов все созданные ноды удалятся и не буду жрать деньги)
Допустим у нас есть множество паралельных сборок в одном пайплайне.
Как обеспечить паралельность но не разорится на раннерах? Использовать автоскейл кубер.
Поднимаем раннер в кубе на отдельной ноде и создаем группу узлов с 0 нод и возможностью скейла. В джобах билда указываем запрос CPU, например так:
variables:
KUBERNETES_CPU_REQUEST: "4"
Тогда при старте контейнера с джобой кубер поймет что у нет ресурсов и выделит ноду. Таким образом, при верной настройки ресурсов нод группы мы можем сделать отдельную ноду на каждый билд. После отработки билдов все созданные ноды удалятся и не буду жрать деньги)
👍1
SHARED
В микросервисной архитектуре есть проблема дублирования кода.
Например подсистема логирования. Если дублировать ее в код каждого сервиса то есть шанс что со временем она разойдется и будет неудобно вносить изменения.
Поэтому такие общие системы выносятся в модули. Например это может быть репозиторий который просто паблишит jar файл в нексус. А уже сервисы в свою очередь тянуть его при сборке.
Таким образом мы можем обеспечить централизованные изменения и не лезть в каждый репозиторий)
В микросервисной архитектуре есть проблема дублирования кода.
Например подсистема логирования. Если дублировать ее в код каждого сервиса то есть шанс что со временем она разойдется и будет неудобно вносить изменения.
Поэтому такие общие системы выносятся в модули. Например это может быть репозиторий который просто паблишит jar файл в нексус. А уже сервисы в свою очередь тянуть его при сборке.
Таким образом мы можем обеспечить централизованные изменения и не лезть в каждый репозиторий)
👍1
SEC
Когда я начинал работать девопсом, в 2019 году, основной диалог в сообществе шел по поводу высоких нагрузок. Мы это прошли и сейчас обеспечивать высокую нагрузку стало легче, почти все к этому готовы.
Сейчас основной диалог про безопасность. О том как правильно делать безопасность, с акцентом на безопасность приложений. Ведь инфра тоже стала довольно безопасной, почти по дефолту.
Как по мне, сейчас конценсус состоит в shift left. То есть как можно раньше найти уязвимость и сразу ее исправить. Ну и появились разные подходы к поиску, начиная от статических линтеров до команд пентестеров.
Может я просто нахожусь в таком пузыре, но вижу реальный интерес проектов к этому. Все хотят сделать безопасно и не прям дорого, поэтому внедряют безопасность на ранних стадиях процесса разработки. Это не может не радовать)
Когда я начинал работать девопсом, в 2019 году, основной диалог в сообществе шел по поводу высоких нагрузок. Мы это прошли и сейчас обеспечивать высокую нагрузку стало легче, почти все к этому готовы.
Сейчас основной диалог про безопасность. О том как правильно делать безопасность, с акцентом на безопасность приложений. Ведь инфра тоже стала довольно безопасной, почти по дефолту.
Как по мне, сейчас конценсус состоит в shift left. То есть как можно раньше найти уязвимость и сразу ее исправить. Ну и появились разные подходы к поиску, начиная от статических линтеров до команд пентестеров.
Может я просто нахожусь в таком пузыре, но вижу реальный интерес проектов к этому. Все хотят сделать безопасно и не прям дорого, поэтому внедряют безопасность на ранних стадиях процесса разработки. Это не может не радовать)
👍1
DOCKER
Докер контейнеры чаще всего максимально изолированны на машине. То есть что бы добраться до них нужно проделать множество действий.
Тут либо получать доступ к серверу либо искать RCE.
Тем не менее лучше ограничевать пользователя под которым запускается контейнер и приложение в нем.
Делается это довольно просто, в докерфайле нужно добавить две строки:
Таким образом мы создадим пользака с минимальными правами и процессы в контейнере будут запускаться под ним)
Докер контейнеры чаще всего максимально изолированны на машине. То есть что бы добраться до них нужно проделать множество действий.
Тут либо получать доступ к серверу либо искать RCE.
Тем не менее лучше ограничевать пользователя под которым запускается контейнер и приложение в нем.
Делается это довольно просто, в докерфайле нужно добавить две строки:
RUN useradd -u 10001 -r appuser
USER appuser
Таким образом мы создадим пользака с минимальными правами и процессы в контейнере будут запускаться под ним)
👍1
CICD
Пайпланы, особенно в гитлабе, хорошо поддаются шаблонизации.
Если на проекте куча однотипных микросервисов то нет смысла для каждого писать отдельный пайплайн. Это займет много времени и появятся расхождения, плюс больше вероятности ошибок.
Гитлаб поддерживает include пайплайнов из других репозиториев. В котором можно описать несколько манифестов с пайплайнами в разных файлах, или один общий, и по необходимости инклудить их в проекта.
Описать пайплайн который будет работать везде не так уж и сложно. Можно опираться на предефайн переменные гитлаба, типа CI_PROJECT_NAME и кучу других. Но в идеале структура диреторий проекта должна быть схожей. Тогда один небольшой шаблон пайплайна заработает вообще везде)
Пайпланы, особенно в гитлабе, хорошо поддаются шаблонизации.
Если на проекте куча однотипных микросервисов то нет смысла для каждого писать отдельный пайплайн. Это займет много времени и появятся расхождения, плюс больше вероятности ошибок.
Гитлаб поддерживает include пайплайнов из других репозиториев. В котором можно описать несколько манифестов с пайплайнами в разных файлах, или один общий, и по необходимости инклудить их в проекта.
Описать пайплайн который будет работать везде не так уж и сложно. Можно опираться на предефайн переменные гитлаба, типа CI_PROJECT_NAME и кучу других. Но в идеале структура диреторий проекта должна быть схожей. Тогда один небольшой шаблон пайплайна заработает вообще везде)
👍1
STORAGE
Какие основные функции файлового хранилища я хочу видеть.
Так как чаще всего я использую их для бекапов то нужно:
1. Гибкие настройки доступа
2. Cli интерфейс для клиента
3. Ротация, что бы не забивать стор старыми файлами
4. Лимиты, возможность настроить типа хранилища и ограничения на место/запросы
5. Мониторинг, по используемому месту и запросам
По опыту, вообще не все предоставляют это. Только несколько провайдеров которые делают S3 хранилки.
Какие основные функции файлового хранилища я хочу видеть.
Так как чаще всего я использую их для бекапов то нужно:
1. Гибкие настройки доступа
2. Cli интерфейс для клиента
3. Ротация, что бы не забивать стор старыми файлами
4. Лимиты, возможность настроить типа хранилища и ограничения на место/запросы
5. Мониторинг, по используемому месту и запросам
По опыту, вообще не все предоставляют это. Только несколько провайдеров которые делают S3 хранилки.
👍1
BUFER
Про более низкоуровневую вещь.
Когда мы принимаем сетевые пакеты то не всегда можем обрабатывать их в реальном времени. Допустим при скачках трафика.
Для этого есть буферизация, когда пакеты сначала кладутся в память и обрабатываются по освобождению ресурсов. Это позволяет нам сглаживать спайки и не отказывать в обслуживании. В случае переполнения буфера мы можем отклонять пакет и просить клиента сделать ретрай.
Тут могут возникнуть проблемы. Например если мы принимаем UDP пакеты и буфер переполнился то, по логике UDP, клиент не будет пробовать отправить пакет еще раз.
Или же при больших спайках часть пакетов в буфере может быть уже не актуальной, но все равно занимать очередь.
Это решается размером, TTL и таймаутами. Главное подойти к проектированию с умом, что бы не создать больше проблем)
Про более низкоуровневую вещь.
Когда мы принимаем сетевые пакеты то не всегда можем обрабатывать их в реальном времени. Допустим при скачках трафика.
Для этого есть буферизация, когда пакеты сначала кладутся в память и обрабатываются по освобождению ресурсов. Это позволяет нам сглаживать спайки и не отказывать в обслуживании. В случае переполнения буфера мы можем отклонять пакет и просить клиента сделать ретрай.
Тут могут возникнуть проблемы. Например если мы принимаем UDP пакеты и буфер переполнился то, по логике UDP, клиент не будет пробовать отправить пакет еще раз.
Или же при больших спайках часть пакетов в буфере может быть уже не актуальной, но все равно занимать очередь.
Это решается размером, TTL и таймаутами. Главное подойти к проектированию с умом, что бы не создать больше проблем)
👍1
SAAS
Есть настоящий и псевдо saas.
Настоящий - под каждого клиента поднимаем изолированный инстанас приложения. Со своей база данных, всей инфрой и контейнерами приложения.
Псевдно - у нас одна система и разделяем клиентов по схемам в одной бд. Ничего отдельного ему не поднимаем.
Оба варианта рабочие.
Настоящий.
Плюсы:
- Реальная изоляция
- Меньше логики разделения на приложении
- Безопасность
Минусы:
- Дороже по инфре
- Больше времени перед отдачей клиенту
- Сложно релизить новые версии
Псевдо.
Плюсы:
- Быстрее поднимаем
- Дешевле по инфре
- Легче вносить изменения
Минусы:
- Менее безопасно
- Сложная логика разделения на приложении
- Не так безопасно
Есть настоящий и псевдо saas.
Настоящий - под каждого клиента поднимаем изолированный инстанас приложения. Со своей база данных, всей инфрой и контейнерами приложения.
Псевдно - у нас одна система и разделяем клиентов по схемам в одной бд. Ничего отдельного ему не поднимаем.
Оба варианта рабочие.
Настоящий.
Плюсы:
- Реальная изоляция
- Меньше логики разделения на приложении
- Безопасность
Минусы:
- Дороже по инфре
- Больше времени перед отдачей клиенту
- Сложно релизить новые версии
Псевдо.
Плюсы:
- Быстрее поднимаем
- Дешевле по инфре
- Легче вносить изменения
Минусы:
- Менее безопасно
- Сложная логика разделения на приложении
- Не так безопасно
👍1
LLM
Один из кейсов где можно приминять небольшие локальные модели это сокращение отчетов.
Сейчас с популярностью appsec процессов в одном пайплайне может быть огромное количество текстовых отчетов сканирований от разных инструментов.
Вычитывать каждый раз огромные портянки не вариант. Это долго и есть шанс упустить что то важное. А вот LLM тут ложится прям хорошо.
Правильно запромтив и пихая в модель данные частями можно явно убрать мусор и дублирования, и сделать какую то приоритизацию. Плюс мы не отправляем свои данные куда то внешние системы а обрабатываем все внутри.
Один из кейсов где можно приминять небольшие локальные модели это сокращение отчетов.
Сейчас с популярностью appsec процессов в одном пайплайне может быть огромное количество текстовых отчетов сканирований от разных инструментов.
Вычитывать каждый раз огромные портянки не вариант. Это долго и есть шанс упустить что то важное. А вот LLM тут ложится прям хорошо.
Правильно запромтив и пихая в модель данные частями можно явно убрать мусор и дублирования, и сделать какую то приоритизацию. Плюс мы не отправляем свои данные куда то внешние системы а обрабатываем все внутри.
👍1
BASH
Мне не нравится bash.
Казалось бы, я постоянно работаю с линуксом и пора бы уже привыкнуть к нему. И да, я привык и довольно неплохо знаю его. Но это не отменяет того что он очень неудобный и нечитаемый.
Да, на нем некоторые вещи можно сделать короче и быстрей, особенно то что касается простой работы с файлами. Но если нужно сделать что то более сложное то все, приходится выдумывать всякое.
Например кейс: мне нужно скачать файл бекапа из s3, поднять контейнер с бд и залить туда бекап. Потом поделать несколько запросов и удалить этот контейнер. Процесс тестирования бекапов.
И на баш можно написать все это. Но он не даст такой простоты работы с s3 и запросами как тот же самый питон.
Или например, нам нужно сделать поиск по содержимому лог файла. До какого то уровня нам хватит простого grep. Но если мы захотим собрать какую то статистику или сделать более сложное обьядинение то на баше опять придется страдать)
Поэтому для себя я выбрал баш только для самых простых операций в системе. А если мне нужно написать какую то автоматизацию то только питоне)
Мне не нравится bash.
Казалось бы, я постоянно работаю с линуксом и пора бы уже привыкнуть к нему. И да, я привык и довольно неплохо знаю его. Но это не отменяет того что он очень неудобный и нечитаемый.
Да, на нем некоторые вещи можно сделать короче и быстрей, особенно то что касается простой работы с файлами. Но если нужно сделать что то более сложное то все, приходится выдумывать всякое.
Например кейс: мне нужно скачать файл бекапа из s3, поднять контейнер с бд и залить туда бекап. Потом поделать несколько запросов и удалить этот контейнер. Процесс тестирования бекапов.
И на баш можно написать все это. Но он не даст такой простоты работы с s3 и запросами как тот же самый питон.
Или например, нам нужно сделать поиск по содержимому лог файла. До какого то уровня нам хватит простого grep. Но если мы захотим собрать какую то статистику или сделать более сложное обьядинение то на баше опять придется страдать)
Поэтому для себя я выбрал баш только для самых простых операций в системе. А если мне нужно написать какую то автоматизацию то только питоне)
👍1
UPDATE
Сегодня обновлял одну систему развернутую в контейнерах. На одну мажорную версию.
Какая случилисаь проблема - нужно было обновить mongo с версии 6.0 до 8.3. Плюс к этому вендор системы выбрал для этого новый образ монги и добавил дополнительные скрипты при старте.
Что пришлось делать:
- Берем обновленный образ и поднимаем его с версией седьмой версией монги
- Снимаем дамп с актуальной монги
- Заливаем ее в 7 версию
- Поднимаем целевую 8.3 версию
- Снимаем дамп с 7 версии
- Заливаем его в 8.3
- Поднимаем версию приложения
Такие финты пришлось делать потому что между 6 и 8 версии монги нет совместимости, пришлось делать перенос данных через 7, которая совместима со обеими.
На месте вендора, для удобства клиентов, я бы все же автоматизировал миграцию между версиями. Чисто контейниризация тут не решает)
Сегодня обновлял одну систему развернутую в контейнерах. На одну мажорную версию.
Какая случилисаь проблема - нужно было обновить mongo с версии 6.0 до 8.3. Плюс к этому вендор системы выбрал для этого новый образ монги и добавил дополнительные скрипты при старте.
Что пришлось делать:
- Берем обновленный образ и поднимаем его с версией седьмой версией монги
- Снимаем дамп с актуальной монги
- Заливаем ее в 7 версию
- Поднимаем целевую 8.3 версию
- Снимаем дамп с 7 версии
- Заливаем его в 8.3
- Поднимаем версию приложения
Такие финты пришлось делать потому что между 6 и 8 версии монги нет совместимости, пришлось делать перенос данных через 7, которая совместима со обеими.
На месте вендора, для удобства клиентов, я бы все же автоматизировал миграцию между версиями. Чисто контейниризация тут не решает)
👍3
DATA
Есть правило - не засорять данными отчеты.
Они должны быть читаемы и иметь минимум мусора. Если, допустим, сканирование безопасности генерит отчет на 30 страниц то никто не будет вчитываться. Или же с мониторингом, не надо делать алерты по каждому чиху.
Сейчас есть обходной путь, еспользовать llm. Если есть избыток текстовых данных то можно прогонять их через модели и просить убрать мусор и показать только важное.
Но тут риск, модель не эксперт и может упустить что то важное. Поэтому тут очень важно тестирование и правильный промтинг. Описав гипер подробный промт и снизив температуру можно добиться хороших результатов. Но модель все еще остается довольно вероятностной штукой.
Поэтому этот подход с вычещеним данных можно использовать не на самых критичных данных.
Есть правило - не засорять данными отчеты.
Они должны быть читаемы и иметь минимум мусора. Если, допустим, сканирование безопасности генерит отчет на 30 страниц то никто не будет вчитываться. Или же с мониторингом, не надо делать алерты по каждому чиху.
Сейчас есть обходной путь, еспользовать llm. Если есть избыток текстовых данных то можно прогонять их через модели и просить убрать мусор и показать только важное.
Но тут риск, модель не эксперт и может упустить что то важное. Поэтому тут очень важно тестирование и правильный промтинг. Описав гипер подробный промт и снизив температуру можно добиться хороших результатов. Но модель все еще остается довольно вероятностной штукой.
Поэтому этот подход с вычещеним данных можно использовать не на самых критичных данных.
👍1
DISK
Как я обычно подбираю тип и размер диска:
1. Сервер приложения.
Например обычная виртуалка с контейнерами или нода в кубе где будет крутится приложение. Тут хватит минимального hdd диска. Так как в таких случаях сервер баз данных и файловое хранилище вынесены наружу, то взаимодействие диском минимальное. Чаще приложенеи выгружается в ram при старте и работает уже там.
2. Небольшой сервер хранения.
Например s3 или база данных. При небольших нагрузках тут хватит обычного ssd диска, обьем выбираем по необходимости. Тут пока не надо сильно запариваться, при небольших нагрузках все будет хорошо.
3. Нагруженный сервер хранения.
Тут уже лучше сразу думать про nvme. Так же в клаудах, да и в целом в любых системах, IOPS и скорость чтения/записи зависит от размера диска - чем больше тем выше. Поэтому тут имеет смысл перезакладывать размер диска и подбирает с максималными характеристиками. Ну и конфигурировать размеры блоков, подбирать файловую систему и больше мониторить его состояние.
Современные клауды предоставляют большой выбор и довольно гибкую настройку. И в дефолте там все довольно хорошо, сильно запариваться имеет смысл только в третьем случае)
Как я обычно подбираю тип и размер диска:
1. Сервер приложения.
Например обычная виртуалка с контейнерами или нода в кубе где будет крутится приложение. Тут хватит минимального hdd диска. Так как в таких случаях сервер баз данных и файловое хранилище вынесены наружу, то взаимодействие диском минимальное. Чаще приложенеи выгружается в ram при старте и работает уже там.
2. Небольшой сервер хранения.
Например s3 или база данных. При небольших нагрузках тут хватит обычного ssd диска, обьем выбираем по необходимости. Тут пока не надо сильно запариваться, при небольших нагрузках все будет хорошо.
3. Нагруженный сервер хранения.
Тут уже лучше сразу думать про nvme. Так же в клаудах, да и в целом в любых системах, IOPS и скорость чтения/записи зависит от размера диска - чем больше тем выше. Поэтому тут имеет смысл перезакладывать размер диска и подбирает с максималными характеристиками. Ну и конфигурировать размеры блоков, подбирать файловую систему и больше мониторить его состояние.
Современные клауды предоставляют большой выбор и довольно гибкую настройку. И в дефолте там все довольно хорошо, сильно запариваться имеет смысл только в третьем случае)
👍1
UPTIME
Сама по себе кластеризация и дублирование всех серверов не ведет к высокому аптайму. Важно что бы само приложение было готово к этому.
Что важно учитывать:
- Ретраи всего. Если реплика бд упала при обращении то нужно сделать запрос на другую
- Очередь. Запрос должен быть в очереди, что бы не пропасть если упадет один сервер приложения
- Синхронная репликация. Что бы при записи данных они гарантированно оказались везде и не потерялись
- Хелсчеки. Если реплика приложения упала то сразу убирается из балансировки
- Днс балансировка. Если один из внешних балансеров упал то не отправляем запросы на него
Тут можно говорить очень долго, но главное понимать - просто засунув все в кубер мы не повысим uptime)
Сама по себе кластеризация и дублирование всех серверов не ведет к высокому аптайму. Важно что бы само приложение было готово к этому.
Что важно учитывать:
- Ретраи всего. Если реплика бд упала при обращении то нужно сделать запрос на другую
- Очередь. Запрос должен быть в очереди, что бы не пропасть если упадет один сервер приложения
- Синхронная репликация. Что бы при записи данных они гарантированно оказались везде и не потерялись
- Хелсчеки. Если реплика приложения упала то сразу убирается из балансировки
- Днс балансировка. Если один из внешних балансеров упал то не отправляем запросы на него
Тут можно говорить очень долго, но главное понимать - просто засунув все в кубер мы не повысим uptime)
👍1
TBD
В транке важно иметь фича тоглы. Ведь все фичи идут в прод по готовности, но бизнесово не всегда можно включать их сразу.
Плюс иногда мы хотим потестить фичи только на ограниченном количестве людей, тут тоглы тоже помогут.
Как это делать? У популярный фреймворков часто есть такая функциональность. По логике это выглядит так:
- Прожимаем кнопки с фичами в админке
- Фронт получает информацию о том что включено и отрисовывает новые кнопки/функции
- Апи эндпоинты на беке становятся доступными
- При А/Б тестах выбирается скоп пользаков которым это доступно
- При выключение все тоже самое
В контексте транка все фичи, по дефолту, идут в прод выключенными. А решение о включении принимается уже бизнесово)
В транке важно иметь фича тоглы. Ведь все фичи идут в прод по готовности, но бизнесово не всегда можно включать их сразу.
Плюс иногда мы хотим потестить фичи только на ограниченном количестве людей, тут тоглы тоже помогут.
Как это делать? У популярный фреймворков часто есть такая функциональность. По логике это выглядит так:
- Прожимаем кнопки с фичами в админке
- Фронт получает информацию о том что включено и отрисовывает новые кнопки/функции
- Апи эндпоинты на беке становятся доступными
- При А/Б тестах выбирается скоп пользаков которым это доступно
- При выключение все тоже самое
В контексте транка все фичи, по дефолту, идут в прод выключенными. А решение о включении принимается уже бизнесово)
👍1
CACHE
В ответу пользаку не всегда важна огромная точность. Например если пользак делает запрос на получение данных по определенному условия, и в бд попали новые данные, то нам не обязательно сразу же отдавать их. Лаг в несколько секунд часто допустим.
Если мы идем в эту историю то нам можно выполнять запрос один раз и класть его в кеш. И если эти данные запрашиваются десятки раз в секунду то нам можно скратить запросы в бд до одного раза. И потом отдавать их просто из кеша. Это сильно снизить нагрузку)
В ответу пользаку не всегда важна огромная точность. Например если пользак делает запрос на получение данных по определенному условия, и в бд попали новые данные, то нам не обязательно сразу же отдавать их. Лаг в несколько секунд часто допустим.
Если мы идем в эту историю то нам можно выполнять запрос один раз и класть его в кеш. И если эти данные запрашиваются десятки раз в секунду то нам можно скратить запросы в бд до одного раза. И потом отдавать их просто из кеша. Это сильно снизить нагрузку)
👍1
GPU
Если мы берем маленькие языковые модели то в подборе gpu важнее память. Если есть взять карту более старого поколения но с бОльшем количеством памяти то лучше взять ее.
Ведь сами расчеты там в любом случае будут занимать секунды, и отличие в 10-15 процентов не сыграют большой роли. А вот помещать большее количество параметров в память очень важно. Ведь постоянно дозапрашивать их с диска будет дольше чем разово выгрузить их в память.
В большенстве доступных карт сейчас не больше 16гб, в редких случаях 24 или 32. И вот выбрать более старую карту с 16гб будет куда лучше чем самую новую с 12.
Если мы берем маленькие языковые модели то в подборе gpu важнее память. Если есть взять карту более старого поколения но с бОльшем количеством памяти то лучше взять ее.
Ведь сами расчеты там в любом случае будут занимать секунды, и отличие в 10-15 процентов не сыграют большой роли. А вот помещать большее количество параметров в память очень важно. Ведь постоянно дозапрашивать их с диска будет дольше чем разово выгрузить их в память.
В большенстве доступных карт сейчас не больше 16гб, в редких случаях 24 или 32. И вот выбрать более старую карту с 16гб будет куда лучше чем самую новую с 12.
👍1🎄1
PARALEL
Для больших команд которые разрабатывают кучу микросерисов нужно сделать удобное окружение. Один из важных моментов это паралельность CI/CD. Что бы не было такого что один сервер с раннором 24/7 обрабатывает очередь и люди ждут сборки по несколько часов.
Тут хорошо ложится автоскейл кубера. Тут под каждую задачу будет выделяться нода, подключаться к кластеру и обрабатывать задачу. После завершения задачи она либо берет следующую из очереди либо гасится по ненадобности.
Это неплохой баланс в мощности и стоимостью. Не нужно держать десятку нод и платить за их простой.
Но главное не забывать про лимиты, что бы кубер не раздул кластер до сотен нод)
Для больших команд которые разрабатывают кучу микросерисов нужно сделать удобное окружение. Один из важных моментов это паралельность CI/CD. Что бы не было такого что один сервер с раннором 24/7 обрабатывает очередь и люди ждут сборки по несколько часов.
Тут хорошо ложится автоскейл кубера. Тут под каждую задачу будет выделяться нода, подключаться к кластеру и обрабатывать задачу. После завершения задачи она либо берет следующую из очереди либо гасится по ненадобности.
Это неплохой баланс в мощности и стоимостью. Не нужно держать десятку нод и платить за их простой.
Но главное не забывать про лимиты, что бы кубер не раздул кластер до сотен нод)
👍1
GPU
Изначально эти чипы создавались ради обработки графики. Так как там есть высокая паралельность, при умении делать простые операции.
Это значит что бы можем паралельно делать простые преобразования над матрицами, чем и является работа с графикой. Но внезапно оказалось что подобные вычесления подходят и для задач связанных с AI. А если совместить обработку графики и ИИ то альтернатив почти нет, никакие другие типы чипов не вывезут.
Например вчера вечером собрал небольшой проект, который обрабатывает видеопоток с камеры и вытаскивает оттуда обьекты заданные в промте. Для одного потока в десятки fps вполне хватает 4080 super на 16гб, и даже остается много ресурса на другие модели)
Изначально эти чипы создавались ради обработки графики. Так как там есть высокая паралельность, при умении делать простые операции.
Это значит что бы можем паралельно делать простые преобразования над матрицами, чем и является работа с графикой. Но внезапно оказалось что подобные вычесления подходят и для задач связанных с AI. А если совместить обработку графики и ИИ то альтернатив почти нет, никакие другие типы чипов не вывезут.
Например вчера вечером собрал небольшой проект, который обрабатывает видеопоток с камеры и вытаскивает оттуда обьекты заданные в промте. Для одного потока в десятки fps вполне хватает 4080 super на 16гб, и даже остается много ресурса на другие модели)
👍1
K8S
Для меня основной минус кубера в том что все делают его по своему.
От проекта к проекту каждый кластер будет уникален, особенно если используются разные провайдеры или это селф хостед. Там будут разные storage clases, ингресы, работа с сертами и переменными. Это создает дополнительнюу сложность когда вы разрабатываете дистрибутив приложения под кубер.
Это, чаще всего, решает вельюс файлом. Когда клиент может определить свои настройки. Но это усложняет сам процесс поставки софта клиенту, ведь ему придется самому донастраивать что то.
В этом плане обычная виртуалка с докером куда проще, можно предоставить клиенту docker compose со всем необходимым и у него все сразу заработает)
Для меня основной минус кубера в том что все делают его по своему.
От проекта к проекту каждый кластер будет уникален, особенно если используются разные провайдеры или это селф хостед. Там будут разные storage clases, ингресы, работа с сертами и переменными. Это создает дополнительнюу сложность когда вы разрабатываете дистрибутив приложения под кубер.
Это, чаще всего, решает вельюс файлом. Когда клиент может определить свои настройки. Но это усложняет сам процесс поставки софта клиенту, ведь ему придется самому донастраивать что то.
В этом плане обычная виртуалка с докером куда проще, можно предоставить клиенту docker compose со всем необходимым и у него все сразу заработает)
👍1