LINUX.ORG.RU
ФорумAdmin

а нужны ли мне эти ваши docker-контейнеры?

 , ,


4

2

Вобщем сижу тут, разрабатываю один проект. Дошел до того шага, когда нужно начинать обмениваться данными между разными сервисами и вроде как нужно прикручивать Docker, связывать контейнеры и будет мне счастье, но так ли это?

Структура проекта следующая:

  • SQL-сервер
  • Web-backend на PHP
  • Web-frontend на Flutter
  • Сервис №1 на Java
  • Сервис №2 на Java

С самого начала проектирования я планировал завернуть это все в Docker, но у меня получается целая куча контейнеров:

  1. SQL-сервер
  2. Web-backend
  3. Web-frontend
  4. Внешний nginx, который проксирует запросы куда надо
  5. certbot для внешнего nginx, чтобы получать сертификаты
  6. Сервис №1 на Java
  7. Сервис №2 на Java

Docker принято использовать для упрощения развертывания, переноса, создания нужного окружения на машинах, где может не быть нужных пакетов. В моем случае, я вижу в использовании Docker только усложнение конфигурации и лишнюю точку отказа. Прав ли я? Может я просто устал и упускаю что-то? Как вы думаете: Docker - это серебряная пуля или стрельба из пушки по воробьям?

★★★★★

Ответ на: комментарий от adn

В смысле? Кому дорого? Ты платишь за расстояния в интернете?

Не за расстояние, а за регион. Например:

https://aws.amazon.com/ec2/pricing/on-demand/?#Data_Transfer

Как правило, хостеры упрощают этот подсчет, вроде «внутри датацентра/к партнерам, по стране, по миру». Я вот плачу те же деньги за трафика как по городу, так и по миру, но фактически я получаю заметно меньшую пропускную способность по миру.

«Программистов» не смущает, что их «проще» почему-то представляет из себя «в пять раз дольше сроки»?

В смысле? Не понял этого момента

а нужны ли мне эти ваши docker-контейнеры? (комментарий)
«Я как-то участвовал в проекте (меня заставили!), в котором 5 человек с кубренетесом, эластиксёрчем и самописным аналогом кафки два месяца ваяли проект, который моя мама сделалабы за неделю не выходя из экселя.»

Я подчеркиваю — это не мои слова, так что не «я один это выдумал». Я сам этой участи избежал, но слышал очень много страшилок от тех, кто непосредственно в таких проектах участвовал.

поскольку перекинуть пол-системы на новую архитектуру чудовищно долго и сложно

Какую новую архитектуру? Ты о чем?

Да хотя бы упомянутый JSON->Protobuf. Какой оцениваешь сложность перехода? Я уверен, что для достаточно сложной и долго разрабаытваемой системы ответ будет «это нереально», потому что отдельные сервисы написаны людьми, который уже не работают в компании, на языках, на которых никто в компании писать уже не умеет.

byko3y ★★★★
()
Ответ на: комментарий от ugoday

Расскажите случай из личного опыта

Я не крутил мускуль на AWS, но мои сетапы туда бы и не налезли.

Бэкапы для мускуля — это наименее проблемная штука,

Пока у вас база в пару десятков гигабайт укладывается, так и есть

Ты забываешь, что безудержный рост объема БД — это следствие архитектуры микросервисов, но совсем не обязательный результат для монолитов, у которых объем БД даже может уменьшаться со временем. Для средней системы в вакууме терабайты ACID-ных данных нужно хранить только если в вашей фирме миллион сотрудников или сотни миллионов пользователей.

byko3y ★★★★
()
Ответ на: комментарий от adn

Перезапустив целый монолит. Похрену на бедных клиентов

Нет. Это же не микросервис, он поддерживает горячее обновление конфигурации.

Но ты не ответил про правильную архитектуру и использования. Ты на сервере логи собираешься что-ли хранить? И смысл тогда в них?

Например:

а нужны ли мне эти ваши docker-контейнеры? (комментарий)

Кстати, хранение логов на локалхосте — не такая уж и плохая задумка, поскольку не забивает сетку без толку.

byko3y ★★★★
()
Ответ на: комментарий от ugoday

Судя по остальным комментариям, правильная архитектура логгирования это класть логи в /var/log/service_name и ротировать их логротэйтом

Например, софтина похожая на разрабатываюмую мной:

https://varnish-cache.org/docs/trunk/users-guide/operation-logging.html

byko3y ★★★★
()
Ответ на: комментарий от thesis

Про необходимость копирования данных базы при перезапуске сервиса на другой ноде договорились, или ну его нафиг, берем пива и чешем обо всём?

Да как ты не можешь понять, постгрес/мускуль — это примерно как FTP сервер. Какой смысл запускать FTP сервер на дрогой машине? Чтобы по сети смонтировать ФС и отдать с нее FTP сервером файлы по той же сети? Хотя, адепты микросервисов даже тут скажут «ну файлы и сервис же в разных сегментах, для безопасности хорошо, да и FTP сервисов ты можешь запускать сколько хочешь и где хочешь, а с файлами пусть DBA морочится, это не наша проблема, сетка тоже у нас как данность, ее пропускная способность безгранична».

byko3y ★★★★
()
Ответ на: комментарий от Nervous

являются лохами в той или иной степени, даже если по итогу выходят в плюсе

Любопытный стиль мышления, где-то я его уже видел

Это когда ты работаешь 40 лет на заводе, чтобы потом получить 10 тыр пенсию после 65 лет. В плюсе же? В плюсе. Но есть ньюанс.

byko3y ★★★★
()
Ответ на: комментарий от adn

Правильно и залочить на запись всю базу. Отличное решение. И на тот же сервер, где база

InnoDB не лочит базу.

И восстановление из бэкапа 1Gb базы - сутки

SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0;

Не благодари.

если sql-proxy или proxysql, то он еще и кэшировать будет.

А куда он денется? Конечно будет, потому что без кэша всё это встанет колом. Только ты забываешь, что при прямом доступе к серверу БД ты кэши получаешь на самом этом сервере, из коробки. То есть, проблему сначала нужно грамотно создать, а потом уже придумывать, как ее решать кэшами.

byko3y ★★★★
()
Ответ на: комментарий от adn

И больше того, и монолита никакого у него тоже нет - разрозненные php файлы без какого-то состояния и данных в памяти, которые запускаются в момент обращения к ним, инициализируют все соединения, подключают все библиотеки, что-то рендерят и умирают

Вообще-то именно PHP является отдаленным прототипом модели микросервисов. На меня звания ЛАМПокрута вешают, но я совсем не ЛАМПер, скорее питонист с большим натягом. Причем, что характерно, даже сам пых отходит от синхронной stateless модели.

byko3y ★★★★
()
Ответ на: комментарий от anonymous

Посоветуйте сервис под бэкапы, для личного использования (немного баз, немного файлов, гигабайт на 50-100 в сумме).
Отстал от жизни, не знаю что используют кроме своих серверов - backblaze, crashplan?

Один поехавший почти полгода заливал 80 Тб данных на Backblaze. Но для твоих масштабов такой скорости более чем достаточно, что-то вроде $5 в месяц это стоит.

byko3y ★★★★
()
Ответ на: комментарий от adn

Потому что dump - это куча insert'ов, а они очень медленные, особенно если в таблице есть индексы

Интересно, что ты будешь делать, если тебе нужно будет по задаче от заказчика/шефа вставить сколько-то миллионов записей в БД. Xtrabackup прикольна, но с этой задачей не справится.

byko3y ★★★★
()
Ответ на: комментарий от anonymous

восстановление из бэкапа 1Gb базы - сутки.

По моему перебор

Я наблюдал сравнимые скорости, так что охотно верю.

byko3y ★★★★
()
Ответ на: комментарий от anonymous

макака сидит, ваяет из кучи разношерстного мусора, говна и палок сервис/приложение, любовно собирая это у себя на локалхосте. Работать это будет только у него на локалхосте

Нет, непонятно. Почему оно будет работать у него на локалхосте? Если я — грамотная макака, которая пишет сервисы на питоне — как мне поделиться своей приложухой с другим животным?

byko3y ★★★★
()
Ответ на: комментарий от ugoday

Самое дешёвое это https://aws.amazon.com/s3/glacier/pricing/ но там, говорят, опухнешь ждать, пока обратно свои файлы выкачаешь

Ну это на самых халявных уровнях, и то хотят $2.5 за терабайт, а Backblaze дает безлимит за $5. Так-то за $30 можно оперативно выкачать свой терабайт на несколько минут, но я боюсь, что это будет не «самое дешевое».

byko3y ★★★★
()
Ответ на: комментарий от byko3y

что безудержный рост объема БД — это следствие архитектуры микросервисов, но совсем не обязательный результат для монолитов

Ты так и не смог доказать свой тезис и снова его приводишь, хотя несколько человек уже написали, что не важно как организован сервис дергаются ли функции внутри приложения или по http внешний сервис - данные в базе одинаковы.

adn ★★★★
()
Ответ на: комментарий от byko3y

InnoDB не лочит базу.

Базу нет, а таблицы лочит.

Не благодари

У меня нет mysql-а в продакшне вообще.

Конечно будет, потому что без кэша всё это встанет колом.

Слушай, ну блин. Ну посмотри на haproxy. Почему через него колом все встанет, а без него будет работать?

adn ★★★★
()
Ответ на: комментарий от byko3y

Интересно, что ты будешь делать, если тебе нужно будет по задаче от заказчика/шефа вставить сколько-то миллионов записей в БД.

Как это связано с бэкапом? Но наверное привел бы к csv/tsv и загрузил бы через LOAD DATA.

adn ★★★★
()
Ответ на: комментарий от byko3y

временно подключить логирование

Что? Вы там в своём уме? У нормальных людей логи пишутся всегда

Как залогировать некий …

Точно так же, как и без докера.

ugoday ★★★★★
()
Ответ на: комментарий от byko3y

Если вы там расходов на $200к насчитали, значит AWS используется на полную катушку. Значит повторить всё это с нуля понадобится много работы крупного отдела админов. 10 человек, год работы, средняя зарплата в $100k, вот мы и попали на лям баксов. И, что ещё хуже, попали на годовую задержку в развитии проекта.

ugoday ★★★★★
()
Ответ на: комментарий от byko3y

Это когда ты работаешь 40 лет на заводе, чтобы потом получить 10 тыр пенсию после 65 лет. В плюсе же? В плюсе.

Зависит от наличия альтернатив.

Но есть ньюанс.

Вот это он и есть. Лохом ты являешься, если этому плюсу есть более выгодные реальные альтернативы.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от byko3y

горячее обновление конфигурации

О да, детка, давай подкручивай конфигурацию на лету. Чтобы потом никто не смог ее воспроизвести.

Nervous ★★★★★
()
Ответ на: комментарий от byko3y

хранение логов на локалхосте — не такая уж и плохая задумка

  • Локалхост помер — и все логи с ним.
  • Надо отследить какой-то запрос по логам нескольких локалхостов. Сегодня будет напряженный день.
Nervous ★★★★★
()
Ответ на: комментарий от byko3y

после остановки сервиса хоть солнце не свети

Данные ведь находятся в volume, который хранится отдельно от контейнера. Понятно, что об этом должны позаботиться создатели образа: вынести каталоги данных в соответствующие тома и описать это в документации.

askh ★★★★
()
Ответ на: комментарий от byko3y

Да как ты не можешь понять(с), я говорю не о «зачем», а о случае, если это уже сделано. Если нашлись причины пускать БД в контейнере или без него на VPS. Не бывает созданных лично для тебя шаблонных ВМ с терабайтными хранилищами, поэтому ты выбираешь ВМ по процу/памяти, а хранилище докупаешь отдельно, и лежит оно тоже отдельно, и поэтому переживает смерть ВМ.
И поэтому - в стотыщный раз - копировать данные при пересоздании ноды в пределах ДЦ не требуется.

Какой смысл запускать FTP сервер на дрогой машине? Чтобы по сети смонтировать ФС и отдать с нее FTP сервером файлы по той же сети?

Да не «смонтировать ФС по сети», а «провайдер мне подоткнет в ВМ сетевое хранилище, видимое мной как блочное устройство».

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 4)
Ответ на: комментарий от askh

Я ему третий день об этом толкую. Но он, видимо, слишком занят войной на несколько фронтов, поэтому ниасиливаю донести.

thesis ★★★★★
()
Ответ на: комментарий от byko3y

Я не крутил мускуль на AWS,

Вас не смущает, что вы, не имея никакого опыта в теме, спорите со специалистом?

безудержный рост объема БД — это следствие архитектуры микросервисов

А на следующем круге мы узнаем, что микросервисы придумал Гитлер.

ugoday ★★★★★
()
Ответ на: комментарий от byko3y

Во-первых, маргинальщина, наверное имеющая свою область применения, но не очень широкую. Во-вторых, вам докер запрещает «logs to a shared memory segment, called the VSL - the Varnish Shared Log. When the end of the segment is reached we start over, overwriting old data»?

ugoday ★★★★★
()
Ответ на: комментарий от thesis

Мне кажется он просто в глаза не видел ни одного контейнера. Поэтому он судит о них по названию.

Отсюда какие-то странные вопросы про репликацию, логи, данные и т.п.

Ну то есть он просто не знает, что контейнер может писать данные на диск, логи в /var/log, запускаться по юниту systemd и т.д. и т.п.

alpha ★★★★★
()
Ответ на: комментарий от thesis

Ну это отдельная проблема, осознать что контейнер, микросервис и облачная оркестрация - это три разных человека.

Да даже и облачная окрестрация бывает сильно разной. У нас вон и дженкинс в openshift выложен. Понятно что никто не настраивает ему автоскейлинг и green-blue deployment, он просто тихо сидит себе и раз в полгода обновляется.

alpha ★★★★★
()
Ответ на: комментарий от adn

InnoDB не лочит базу.

Базу нет, а таблицы лочит.

Нет, не лочит.

Слушай, ну блин. Ну посмотри на haproxy. Почему через него колом все встанет, а без него будет работать?

При чем тут он. Мы говорили про БД. Когерентные кэши в принципе не могут работать быстрее прямого доступа к БД, потому что прямой доступ к БД — это и есть тот самый когерентный кэш.

byko3y ★★★★
()
Ответ на: комментарий от adn

Как это связано с бэкапом? Но наверное привел бы к csv/tsv и загрузил бы через LOAD DATA

Вот, то есть, вставку ты будешь делать одной операцией, а бэкап так восстановить, видите ли, нельзя, только insert-ом по одной строчке.

byko3y ★★★★
()
Ответ на: комментарий от ugoday

Что? Вы там в своём уме? У нормальных людей логи пишутся всегда

Петабайт уже набрали в своей системе?

Точно так же, как и без докера

Ну и зачем тогда играться в 24/7? Я сомневаюсь, что ваши сервисы умеют в горячую перезагрузку конфигов — вместо этого их нужно убивать и поднимать заново.

byko3y ★★★★
()
Ответ на: комментарий от ugoday

Если вы там расходов на $200к насчитали, значит AWS используется на полную катушку

На полную катушку — не значит «эффективно». Достаточно нанять рукожопов, для которых вычислительные мощности и сеть безграничны, и амазон тебе любезно «смасштабирует» систему до сотен тысяч под нагрузкой.

Значит повторить всё это с нуля понадобится много работы крупного отдела админов. 10 человек, год работы, средняя зарплата в $100k, вот мы и попали на лям баксов

Чиво? Почему не сто админов? Как там, «сколько админов нужно, чтобы вкрутить mysql...».

byko3y ★★★★
()
Ответ на: комментарий от Nervous

О да, детка, давай подкручивай конфигурацию на лету. Чтобы потом никто не смог ее воспроизвести

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

byko3y ★★★★
()
Ответ на: комментарий от Nervous

Локалхост помер — и все логи с ним

Будто у тебя каждый день локалхосты дохнут как мухи.

Надо отследить какой-то запрос по логам нескольких локалхостов. Сегодня будет напряженный день

Если нужна точная синхронизация между логами, то я боюсь, что тебе даже твой готовый ELK не сильно поможет.

byko3y ★★★★
()
Ответ на: комментарий от askh

Данные ведь находятся в volume, который хранится отдельно от контейнера. Понятно, что об этом должны позаботиться создатели образа: вынести каталоги данных в соответствующие тома и описать это в документации

Дальнейшее обсуждение вопроса читайте в ветке:

а нужны ли мне эти ваши docker-контейнеры? (комментарий)
а нужны ли мне эти ваши docker-контейнеры? (комментарий)

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Петабайт уже набрали в своей системе?

Вы там в церн играете?

Ну и зачем тогда играться в 24/7?

Вопрос не понят.

вместо этого их нужно убивать и поднимать заново.

Как будто что-то плохое.

ugoday ★★★★★
()
Ответ на: комментарий от thesis

Да как ты не можешь понять(с), я говорю не о «зачем», а о случае, если это уже сделано. Если нашлись причины пускать БД в контейнере или без него на VPS. Не бывает созданных лично для тебя шаблонных ВМ с терабайтными хранилищами, поэтому ты выбираешь ВМ по процу/памяти, а хранилище докупаешь отдельно, и лежит оно тоже отдельно, и поэтому переживает смерть ВМ.
И поэтому - в стотыщный раз - копировать данные при пересоздании ноды в пределах ДЦ не требуется

Один экземпляр мускуля с сетевым накопителем NVMe положит тебе целый InfiniBand на 60 Гбит/с. Один! По этой причине единственный адекватный подход — это скопировать изначально том по сети на тот хост, где будет выполняться сервис БД.

byko3y ★★★★
()
Последнее исправление: byko3y (всего исправлений: 1)
Ответ на: комментарий от byko3y

Достаточно нанять рукожопов, для которых вычислительные мощности и сеть безграничны

Попробуйте не нанимать рукожопов. Это и без AWS хороший совет.

Чиво?

Таво.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Вас не смущает, что вы, не имея никакого опыта в теме, спорите со специалистом?

Не смущает. Меня смущает весьма специфический опыт этого специалиста.

безудержный рост объема БД — это следствие архитектуры микросервисов

А на следующем круге мы узнаем, что микросервисы придумал Гитлер

Я уже отвечал, что архитектура микросервисов подразумевает «тянуть старые API и форматы данных до скончания веков», а это значит, что БД мы оптимизировать-реструктурировать не можем, значит, что мы будем сохранять сырые бессхемовые данные и парсить их на лету — этот подход и приводит к тому, что данных у БД становится больше, больше, еще больше, только больше.

byko3y ★★★★
()
Ответ на: комментарий от ugoday

Во-первых, маргинальщина, наверное имеющая свою область применения, но не очень широкую. Во-вторых, вам докер запрещает «logs to a shared memory segment, called the VSL - the Varnish Shared Log. When the end of the segment is reached we start over, overwriting old data»?

В какой эластик ты будешь это совать дальше? У варниша эту штука из коробки как бы позволяет реализовывать произвольный уровень логирования, и при этом не захламлять сетку.

byko3y ★★★★
()
Ответ на: комментарий от ugoday

А в чём подстава?

Есть упомянутые выше ограничение на примерно 2 ТБ трафика в день. И всё. У них очень дешевое дисковое пространство, даже в тёпленькой вариации B2 загрузка и скачивание терабайта данных каждый месяц обойдется в $15. Конечно, это в основном канал, но я думаю, что на бэкапы у них являются низкоприоритетным трафиком.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

архитектура микросервисов подразумевает «тянуть старые API и форматы данных до скончания веков», а это значит, что БД мы оптимизировать-реструктурировать не можем,

– Вы стоите на самой низшей ступени развития, – перекричал Филипп Филиппович, – вы ещё только формирующееся, слабое в умственном отношении существо, все ваши поступки чисто звериные, и вы в присутствии двух людей с университетским образованием позволяете себе с развязностью совершенно невыносимой подавать какие-то советы космического масштаба и космической же глупости о том, как всё поделить… А в то же время вы наглотались зубного порошку…

ugoday ★★★★★
()
Ответ на: комментарий от byko3y

У варниша эту штука из коробки как бы позволяет реализовывать произвольный уровень логирования, и при этом не захламлять сетку.

Ну, подключайте эту вашу игрушку к контейнеру, я вам не запрещаю.

ugoday ★★★★★
()
Ответ на: комментарий от alpha

Ну то есть он просто не знает, что контейнер может писать данные на диск, логи в /var/log, запускаться по юниту systemd и т.д. и т.п

Конечно может, но если бы всё было так просто, то контейнер бы не применяли — не находишь? Контейнер нужен чтобы обрезать лишнюю руку-ногу сервису. Я пишу о том, что есть реальные проблемы с данными, с контейнерами и без них, и контейнеры никак эти проблемы не решают, а могут еще собственного геморроя докинуть в кучу.

byko3y ★★★★
()
Ответ на: комментарий от alpha

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

Я сразу могу написать — я фанат распределенных систем, и да, грамотные распределенные системы вполне себе пишут без контейнеров и микросервисов. Друго дело — зачем нужен контейнер? Запускать постгрес можно и нужно без контейнера. Монолиты с состояниями тоже немного смысла крутить в контейнерах, поскольку кроме них на машине, обычно, ничего нет. Контейнера нужны, чтобы расплодить много-много похожих конфигураций одного и того же — а это очевидные микросервисы. А зачем микросервисы нужны, если не для того, чтобы поиграться в гугл?

У нас вон и дженкинс в openshift выложен. Понятно что никто не настраивает ему автоскейлинг и green-blue deployment, он просто тихо сидит себе и раз в полгода обновляется

И зачем ему быть в openshift?

byko3y ★★★★
()
Ответ на: комментарий от ugoday

Вы там в церн играете?

Ну у вас же там логи детальные по всей системе непрерывно собираются. Под нагрузкой гигабайты за день должны прилетать.

Ну и зачем тогда играться в 24/7?

Вопрос не понят

вместо этого их нужно убивать и поднимать заново.

Как будто что-то плохое

Хорошо, я не догадался сразу — всю нагрузку и всё состояние у вас держит кэш и БД, потому сервисы можно убивать хоть пять раз в секунду. Тогда настоящим вопросом становится логирование операций в БД — её точно по первой хотелке не перезапустишь.

byko3y ★★★★
()
Ответ на: комментарий от ugoday

Попробуйте не нанимать рукожопов. Это и без AWS хороший совет

Пишет мне человек, строящий микросервисы, весь смысл которых для бизнеса заключается в возможности найма макак, факапы которых не положат всю систему. Если нанимать не рукожопов на микросервисы, то это как поставить профессора сортиры чистить.

byko3y ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.