Как смонтировать общий файл базы данных sqlite для приложения фляги python, работающего на кластере docker-swarm из трех узлов?

У меня была та же проблема, и я решил ее следующим образом:

const fetch = (url) => {
  return node-fetch(url)
    .then(result => result.json())
    .catch((e) => {
      return new Promise((resolve) => setTimeout(() => resolve(fetch(url)), timeout));
    });
};

tasks = [fetch(url1), fetch(url2) ....];

Promise.all(tasks).then(......)

В этом случае Promise.all будет ожидать, что каждое обещание войдет в состояние resolved или rejected.

И имея это решение, мы «останавливаем catch исполнение» неблокирующим способом. Фактически, мы ничего не останавливаем, мы просто возвращаем Promise в состояние ожидания, которое возвращает другой Promise, когда оно разрешено после таймаута.

0
задан jaikumar 31 March 2019 в 00:10
поделиться

1 ответ

Совместное использование файлов на целых узлах / машинах - это не то, что Docker решит для вас напрямую, но вы можете взглянуть на драйверы хранилища Docker в контексте общих систем хранения . Это помогает интегрироваться с такими решениями, как NFS, ZFS и т. Д.

Однако вы упомянули, что вы используете SQLite и Flask, используя драйвер SQLAlchemy. Чтобы избавить вас от головной боли, вместо того, чтобы пытаться разделить файловую систему между вашими тремя узлами, вы должны использовать сервер базы данных, такой как MySQL , MariaDB или PostgreSQL [114 ] (чтобы назвать несколько), все это хорошо работает с SQLAlchemy. Таким образом, вместо того, чтобы пытаться использовать один и тот же файл SQLite для всех запущенных экземпляров вашего приложения Flask (которое будет блокировать / ухудшать очень часто / быстро), вы можете подключить все свои контейнеры Flask к одному и тому же контейнеру базы данных.

Эту дополнительную базу данных можно легко запустить в контейнере, а также управлять с помощью docker-compose. Таким образом, только один узел нуждается в доступе к файловой системе для хранения данных для базы данных.

0
ответ дан hexacyanide 31 March 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: