ewernli имеет в основном правильный ответ здесь. Единственный недостающий фрагмент из исходного вопроса касается физических и логических слоев.
С распределенной и/или многоуровневой точки зрения, являются ли слои физически раздельными или просто логически, так что это несущественно. Значит, это не имеет значения. Вы можете создавать многоуровневые и даже распределенные приложения, которые полностью находятся на одном экземпляре машины.
При этом чаще всего разделение ярусов на разные машины, построенные специально для такого типа нагрузки. Например, веб-сервер и сервер базы данных. Или даже веб-сервер, несколько веб-сервисов и один или несколько серверов баз данных.
Все эти функции, распределенные, многоуровневые и/или сбалансированные нагрузки с логическими и/или физическими уровнями являются лишь функциями дизайна приложения.
Кроме того, в современном мире виртуальных машин вполне возможно (и даже возможно) создать многоуровневое, распределенное и сбалансированное по нагрузке приложение в пределах одной реальной машины. Хотя, я бы никогда не рекомендовал этот курс действий, потому что точка балансировки нагрузки и распределенных служб обычно увеличивает доступность или пропускную способность.
Да, это действительно зависит от того, как вы архитектор приложения. –