Любые прослойки, включая многоуровневые - это значительные затраты на процессор... Нужно четко понимать, за что ты платишь эту цену.
Во первых виртуализация и контейнеризация добавляют возможностей в администрировании и управлении, например простота масштабирования, но это ведь не единственный способ так делать.
Многие разработчики даже не понимают, зачем нужен docker и разбивают задачу на несколько бессмысленных машин, и вместо удобства администрирования, создают лишнюю нагрузку на персонал.
p.s. Один раз получив серьезную нагрузку и попробовав bare metall железо без даже lxc/docker , назад возвращаться не захочешь.
Напоминаю, наилучшая производительность современных (уже лет 10 как) процессоров достигается только при попадании необходимых данных и кода в кеш процессора, причем если это не так, то производительность падает на порядок буквально (в 10 раз)... когда на одном железе мешаешь разные сервисы, они делят один процессор и его кеш,.. .. База данных может дать основную нагрузку на процессор, поэтому и выделить в этом случае для нее отдельное железо... даже если это не топовый процессор, правда точный ответ может дать только эксперименты на реальных данных и типовых ситуациях.
Очень жаль что датацентры не практикуют 'узкие лезвия' (очень компактные небольшие сервера, размером с ладонь), из-за чего из стоимость на столько неадекватна, что эффективнее собирать неэффективные конфигурации