Запускать базу данных как контейнер Docker или на голом металлическом сервере? - PullRequest
0 голосов
/ 29 декабря 2018

Базы данных предназначены для использования всей доступной им памяти, процессора и ввода-вывода.Есть ли хорошие / плохие причины, по которым Docker не следует использовать для рабочих баз данных?

Может быть, этот вопрос относится к другим инструментам, таким как MOM Apache Kafka, Apache ActiveMQ и т. Д.

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Контейнеры предназначены для того, чтобы иметь возможность регулировать использование ресурсов с помощью cgroups , и поэтому, пока мы можем прогнозировать использование, у нас не должно быть проблем (с производительностью) при его запуске вконтейнер.Однако есть и другие соображения, помимо использования ресурсов.

В такой архитектуре, как Kubernetes, становится сложнее управлять развертыванием баз данных, отчасти потому, что контейнеры теперь эфемерны.Если модуль выходит из строя на данном узле, нет никакой гарантии, что он будет восстановлен на том же узле, и поэтому необходимо учитывать особые соображения для приложений с состоянием (модуль должен быть подключен к тому же объему при повторном запуске и т. Д.),Вот где приходят такие конструкции, как StatefulSets . Итак, это работает, и решения и очень хорошо продуманы, но есть еще несколько рабочих циклов, через которые нужно прыгать.

Существуют также такие вещи, как Операторы , которые могут справляться со сложными потребностями при запуске и управлении приложением с состоянием, таким как база данных или распределенная очередь сообщений.Эти проекты могут быть довольно зелеными время от времени , но есть много поведения, которое было бы трудно организовать на голом металле, которое мы получаем прямо из коробки.

Более или менее, вконец дня, работает с сохранением состояния приложений, такими как базы данные или очереди сообщений на Kubernetes (или другого контейнер оркестраторах) является спорным вопросом.Как и все проектные решения, существуют компромиссы с отказоустойчивостью, сложностью и отладкой.Многие крупные компании делают это на производстве, поэтому это ни в коем случае не является разумным.

0 голосов
/ 29 декабря 2018

Docker не является полноразмерной виртуальной машиной (по крайней мере, при запуске в Linux), это просто еще один процесс, работающий на том же ядре, что и хост-машина.Более того, все процессы контейнера docker можно увидеть на главном компьютере с ps aux.

Единственная дополнительная нагрузка, которую дает Docker, - это загрузка другой ОС поверх вашего ядра, но на самом деле большинство контейнеров развернуто с очень легкими средствами, такими как alpine Linux, так что я не думаю, что это действительно нужно принимать

С другой стороны, наличие базы данных (или любой другой службы с высокой нагрузкой) в контейнерах дает вам следующие преимущества:

  • Масштабирование (контейнеры можно легко распределить по узлам синструменты оркестровки контейнеров, такие как k8s)
  • Простое развертывание (все зависимости внутри)
  • Простое обновление (просто замените контейнер)
  • Простое тестирование (нет необходимости в db-процедуры очистки перед выполнением тестов) и другие

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

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