«В распределенной среде нельзя использовать многопоточность» - почему?

Я работаю над платформой, на которой размещаются небольшие Java-приложения, все из которых в настоящее время используют один поток, живут в движке Docker, потребляют данные с сервера Kafka и регистрируются в центральной БД.

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

Мой Архитектор возражает, говоря, что «В распределенной среде мы никогда не используем многопоточность». Итак, теперь я должен реорганизовать свое приложение, исключив из него любую логику, связанную с потоками, сделав его однопоточным. Я попросил у него более подробных рассуждений, но он кричит: «Если вы не знаете об этом принципе, у вас нет места рядом с Явой».

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

Честно говоря, я не вижу проблемы многопоточности внутри контейнера. Это действительно ошибка или как-то «запрещено»?

Благодарю.

Всего 2 ответа


Когда вы пишете, например, веб-приложение, которое будет работать на сервере приложений Java EE, обычно вы не должны запускать свои собственные потоки в веб-приложении. Сервер приложений будет управлять потоками и выделять потоки для обработки входящих запросов на сервере.

Однако нет строгого правила или причины, по которой использование многопоточности в распределенной среде никогда не является хорошей идеей.

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

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


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


Есть идеи?

10000