Что означает N-уровневая архитектура в наше время?
В традиционном смысле N-уровень означает разделение приложения на "уровни" и размещение каждого "уровня" на разных серверах. Это было сделано как минимум по 3 причинам:
Техническое обслуживание:
а) Обслуживание кода: проще делать исправления ошибок и дополнения функций.
б) Обслуживание оборудования: отключение одного сервера не нарушает обслуживание другого уровня.
Производительность: один сервер часто был недостаточно быстрым для одновременной обработки веб-запросов, вычислений бизнес-логики и доступа к базе данных / файлам.
Масштабируемость: в частности горизонтальная масштабируемость
a) Отказоустойчивость. Возможность иметь более 1 физического сервера на один уровень означает, что при отключении 1 сервера приложение все еще может функционировать как единое целое.
б) Распределение нагрузки: наличие нескольких экземпляров уровня помогает обслуживать большое количество запросов.
В настоящее время оборудование и сети достаточно быстры, чтобы обслуживать тысячи запросов в секунду на одном сервере. Кроме того, модное слово для ИТ сейчас - "консолидация". Таким образом, даже если приложение разделено на уровни, они, вероятно, в конечном итоге будут размещаться на виртуальных машинах на одном сервере.
Я думаю, что сейчас, когда люди говорят об N-уровневой архитектуре, они говорят о разделении проблем в приложении. Это скорее логическое разделение, чем физическое. Я думаю, что до тех пор, пока мы достигнем хорошего разделения проблем и слабой связи, приложения не должны быть N-уровня. Просто кажется, что многие программисты считают, что N-уровневая архитектура - это золотой стандарт, которому должно соответствовать каждое веб-приложение.
Итак, что для вас сегодня является N-уровневой архитектурой?
3 ответа
Из статьи Википедии я прочитал:
Обычно термин "ярусы" используется для описания физического распределения компонентов системы на отдельных серверах, компьютерах или сетях (узлах обработки). Тогда трехуровневая архитектура будет иметь три узла обработки. Слои относятся к логической группе компонентов, которые могут или не могут быть физически расположены на одном узле обработки.
Я думаю, что понятие "слой" и понятие "ярус" со временем смешались. Лично мне нравится говорить только о слоях, а не об уровнях, поскольку я предпочитаю решения PAAS, в которых мои интересы связаны только с программным обеспечением, и отрасль медленно движется в этом направлении.
Также, когда вы планируете приложение, которое может значительно расшириться, я все равно не думаю, что вам следует подумать о n-уровне для масштабируемости. Фактически, очень популярные веб-сайты с большим трафиком разделяются только на 3 компонента: серверы баз данных, веб-серверы (включая серверы кэширования) и несколько CDN (сетей доставки контента). Этот вид разделения может быть достигнут в любом приложении.
Но в заключение я думаю, что программист должен думать только о слоях и разделении задач в приложении для достижения наиболее важной (и сложной) задачи: ремонтопригодности в долгосрочной перспективе.
Я думаю, что это всегда было искусственным различием. Я согласен с вашей предпосылкой, что это относится в основном к логическому разделению компонентов в наши дни. Тем не менее, все еще существует множество приложений, которые слишком велики (используются по-разному или по-разному) для размещения на одной машине, поэтому идея разделения приложения на отдельные компоненты по соображениям масштабируемости определенно не устарела.
Безопасность для одного? Я бы предпочел, чтобы вы попали на мои веб-серверы, а не на серверы приложений