Учитывая ваш контекст, я думаю, что было бы лучше использовать привязку.
Предполагается, что изображение Docker может быть многократно использовано в другом контексте, и построение всего изображения исключительно для конкретной конфигурации (т. Е. Среды) будет препятствовать этой цели:
Документация Docker рекомендует:
Мы настоятельно рекомендуем использовать VOLUME для любых изменяемых и / или обслуживаемых пользователем частей вашего изображения.
blockquote>Хорошие варианты использования для bind mounts
Обмен файлами конфигурации с хост-машины на контейнеры.
blockquote>
Зависит, на каком языке программирования Вы хотите использовать (и который библиотеки). Лично я выбрал бы многопоточность, поскольку я знаю проблемы, связанные с потоками (и как решить их).
Многопроцессорная обработка могла бы помочь Вам, если Вы хотите выполнить демона на нескольких машинах и распределить загрузку среди них, но я не думаю, что это - основная проблема здесь.
Вы не учли слишком много деталей. На самом деле, с точки зрения того, что Вы уже заявили, выбор не важен и нет ничего по сути большего количества багги о многопоточности, чем многопроцессорная обработка; Вы отсутствуете, почему эти методы имеют такую репутацию. Если Вы не обмениваетесь данными затем нет большой проблемы, которая будет иметься (конечно, могут быть некоторые другие проблемы, но нам нужны детали для решения о тех). Кроме того, имеет значение, какая платформа, на UNIX как операционные системы, процессы довольно легки так или иначе.
Однако существуют другие проблемы для рассмотрения? На какой системе (системах) Вы будете работать? Вы определенно не хотите порождать несколько процессов в однопроцессорной системе, поскольку Вы не собираетесь извлекать много пользы, в зависимости от некоторых других деталей, которые Вы могли указать. Если Вы описываете природу проблемы, Вы пытаетесь решить, мы можем помочь далее.
Они оба могут быть сложными и комплекс их собственными способами.
Можно сделать также. В главной схеме вещей это не могло бы иметь значения, который Вы выбираете. То, что действительно имеет значение, - то, как хорошо Вы делаете их. Поэтому:
Сделайте то, с чем Вы являетесь самыми опытными. Или если Ваше продвижение команды, сделайте то, с чем команда является самой опытной.
---Поточная обработка!---
Я сделал большое потоковое программирование, и я наслаждаюсь частями его и частями его, я не наслаждаюсь. Я изучил много и теперь могу обычно писать многопоточное приложение без слишком большого количества боли, но она действительно должна быть записана в очень особенном методе. А именно:
1) Это должно быть записано с очень ясно определенными границами данных, которые на 100% ориентированы на многопотоковое исполнение. Иначе, независимо от того, что условие, которое может произойти, произойдет, и это не могло бы быть, когда у Вас есть наложение отладчика вокруг.. Плюс отладка потокового кода похож на пиринг в поле Schrodinger... Путем взгляда там, другие потоки могут или не могли иметь времени для обработки больше.
2) Это должно быть записано с тестовым кодом, который подчеркивает машину. Много многопоточных систем только показывают свои ошибки, когда машины в большой степени подчеркнуты.
3) Должен быть некоторый очень умный человек, который владеет кодом обмена данных. Если будет какой-либо путь к ярлыку, который будет сделан, то некоторый разработчик, вероятно, сделает его, и у Вас будет ошибочная ошибка.
4) Должны быть всеобъемлющие ситуации, которые сбросят приложение с минимумом суеты. Это для производственного кода, который повреждается из-за некоторой проблемы поточной обработки. Короче говоря:Шоу должно продолжаться.
---Межпроцессный!---
Я имею меньше опыта с основанной на процессе поточной обработкой, но недавно делал некоторый межпроцессный материал в Windows (где IPC является вызовами веб-сервиса... ДОБЕЙТЕСЬ!), и это относительно чисто и просто, но я следую некоторым правилам здесь также. В общем и целом межпроцессное взаимодействие будет намного более безошибочным, потому что программы получают вход от внешнего мира очень хорошо.. и те транспортные механизмы являются обычно асинхронными. Так или иначе...
1) Определите ясные границы процесса и механизмы связи. Сообщение/обработка событий через, о, скажите, TCP или веб-сервисы или каналы или независимо от того, что прекрасно, пока границы ясны, и существует много кода проверки и проверки ошибок на тех границах.
2) Будьте подготовлены к узким местам. Прощение кода очень важно. Этим я имею в виду, иногда Вы не будете мочь записать в тот канал. Необходимо смочь повторно поставить в очередь и повторить те сообщения без приложения, блокирующего/бросающий исключение.
3) В целом будет намного больше кода, потому что перенос данных через границы процесса означает, что необходимо сериализировать его некоторым способом. Это может быть источником проблем, особенно когда Вы начинаете поддерживать и изменять тот код.
Надеюсь, это поможет.
Необходимо ли совместно использовать данные обновления между экземплярами, где обновления являются частыми, и IPC был бы слишком дорогим? В этом случае многопоточность, вероятно, лучше. Иначе необходимо весить, более ли устойчивость отдельных процессов или простота создания/коммуникации потока важны для Вас.
Если Вы хотите устойчивость, используйте многопроцессорную обработку.
Процессы совместно используют регистрирующуюся загрузку между ними. Рано или поздно регистрирующийся запрос поразит ошибку и разрушит регистратор. С многопроцессорной обработкой Вы только теряете один процесс и настолько только, что один запрос входа (который Вы, возможно, не обработали так или иначе из-за ошибки).
Многопоточность уязвима для катастрофических отказов, так как одна фатальная ошибка вынимает Ваш единственный процесс.
Mulit-обработка до некоторой степени более технически сложна, так как необходимо сбалансировать рабочую нагрузку по процессам, которые могут повлечь за собой общую память использования.
Один вопрос состоит в том, необходимо ли сделать также. Я не знаю детали Ваших требований, но единственное потоковое использование приложения select(2)
может соответствовать Вашим потребностям и не иметь недостатки или процессов или потоков. Это требует, чтобы Вы смогли централизовать весь свой ввод-вывод в одно центральное место, наиболее вероятную диспетчеризацию другим модулям через обратные вызовы, но это не все это трудно, если у Вас нет большого количества библиотек, которые хотят сделать их собственный ввод-вывод и не могут быть реструктурированы таким образом.
Спасибо все для Вашей обратной связи.
Я выбрал мультиархитектуру процессов, подобную веб-серверу Apache. Процессы масштабируются приятно в системах мультипроцессора/ядра. Связь будет выполнена с каналами или сокетами.
Процессы будут готовы использовать в провыгребной яме, таким образом, не будет никакой нерестящейся стоимости процесса.
Хит производительности будет незначителен по сравнению с устойчивостью, которую я получу.
Наконец-то мы реализовали это как многопроцессорную систему с каналами для IPC и бухгалтерией, которая порождает процессы по мере необходимости. Подобно Apache httpd. Работает отлично.