Код
#статьи

Кирпичи для интернета: топ‑10 концепций современной веб‑архитектуры, которые вам точно нужно знать

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

Фото: Bloomberg / Getty Images

Шалита Суранга

(Shalitha Suranga)


Об авторе

Программист, создатель Neutralinojs — фреймворка для разработки JS-, HTML- и CSS-приложений, постоянный автор статей о технологиях на Medium.



Переводчик

Екатерина Степанова


С тех пор как Тим Бернерс-Ли изобрёл World Wide Web, в облачную экосистему перешли чуть ли не все типы физических сервисов. Число веб-сайтов и веб-приложений начало расти как на дрожжах — и в архитектуре каждого современного веб-приложения есть общие компоненты облачных вычислений, которые нужно знать каждому разработчику. Провайдеры облачных сервисов могут по-разному называть эти компоненты, но их суть остаётся прежней.

Я изучил архитектуры веб-приложений нескольких современных IT-гигантов (Netflix, Medium и Airbnb) и выделил в них такие составляющие:

1. Сервер

Сервером называют компьютер, который предоставляет какой-то сервис (или несколько сервисов) в частной сети или интернете. Другие устройства — их ещё называют клиентами — могут подключаться к серверу через разные порты, чтобы получить этот сервис. Серверы обычно называют по имени сервиса, который они предоставляют. Например, если сервер принимает запросы через 80-й порт и отдаёт клиентам веб-страницы, такой сервер обычно называют веб-сервером. Также существуют файловые серверы, почтовые серверы, серверы аутентификации, серверы баз данных, серверы приложений и тому подобные.

Сейчас более популярны виртуальные, а не физические серверы. Поставщики облачных услуг создают виртуальные машины поверх своего физического оборудования с помощью гипервизоров и программного обеспечения для виртуализации. Например, некоторые популярные провайдеры используют для создания своих виртуальных машин гипервизор Xen первого типа.

2. Клиент

Клиент — это устройство, которое подключается к серверам, чтобы пользоваться их сервисами или ресурсами. Клиентом может быть компьютер, веб-сайт, ПО или встроенная система. Например, когда вы заходите на веб-сайт, ваш браузер становится клиентом. По аналогии с именованием серверов, клиенты тоже называются в зависимости от сервиса, которым они пользуются: бывают email-клиенты, веб-клиенты, клиенты баз данных или клиенты онлайн-чатов.

В клиент-серверной модели используются методы вроде аутентификации, чтобы открыть конкретный сервис только отдельным клиентам. Клиенты бывают тонкими и толстыми. Тонкий клиент полностью зависит от сервера, как обычное одностраничное приложение (SPA — Single Page Application). Толстый же клиент от сервера не зависит. Он похож на автономное приложение, которое сохраняет данные на сервере.

3. Микросервис

Монолитная клиент-серверная архитектура не лишена недостатков. Сбои в монолитных системах влияют на всю систему, а сопровождать их довольно сложно. При микросервисном подходе разработчики разбивают большую монолитную систему на небольшие сервисы — микросервисы. Так называют слабосвязанный изолированный сервис, отвечающий за какой-то процесс.

Если вы разрабатываете систему управления пользователями, микросервисы могут отвечать за регистрацию пользователей, генерацию отчёта и процесс оплаты. В реальных веб-ориентированных системах большинство микросервисов представляют собой RESTful API, работающие на виртуальной машине или в контейнере.

Примечание переводчика

REST (англ. REpresentational State Transfer — «передача репрезентативного состояния» или «передача „самоописываемого“ состояния») — архитектурный стиль, набор принципов, по которому должны взаимодействовать компоненты распределённого приложения. Если система, веб-служба, API соответствует этим принципам, она называется RESTful.

Рой Филдинг (Roy Thomas Fielding) — американский учёный, автор термина REST, предложил шесть принципов REST-архитектуры, среди которых клиент-серверная модель, кэширование, отсутствие состояния и другие.

4. Облачная функция

С возрастанием сложности кода микросервисы могут становиться более тяжёлыми и сложными для поддержки. Кроме того, могут резко вырасти затраты на инфраструктуру, так как микросервисы будут постоянно ждать подключения клиентов к виртуальным машинам или контейнерам. Бессерверная (serverless) концепция позволяет разбить большие системы на более мелкие и удобные для поддержки функции — так называемые бессерверные, или облачные, функции.

5. Балансировщик нагрузки

Балансировкой нагрузки называют её распределение между разными вычислительными модулями. В веб‑архитектуре балансировщик нагрузки — это компонент, который перенаправляет трафик на разные серверы в зависимости от их доступности.

Есть два основных типа балансировщиков нагрузки: аппаратные (HLB — hardware‑based load balancer) и программные (software‑based). Популярнее программные, потому что HLB дорогие и для них нужны физические серверы.

Почти все поставщики облачных сервисов предлагают балансировщики нагрузки по модели «как услуга» (as-a-service).

6. API-шлюз (API gateway)

У веб-приложения может быть несколько API, и каждый нужно защитить от избыточной загрузки с помощью ограничения скорости обработки запросов (rate limiting). API-шлюз предоставляет единственную точку доступа для нескольких API и других сервисов.

Принцип его работы схож с принципом работы балансировщика нагрузки: он перенаправляет каждый клиентский запрос соответствующим сервисам. API-шлюз обычно предоставляется как часть решения по управлению API (API management solution), в которое также входит графический пользовательский интерфейс (GUI) для управления API с защищённой панели администратора.

В API-шлюзы встраивают службы мониторинга API, ограничения скорости обработки запросов, монетизации API и версионирования. Обычно API-шлюзы используются с RESTful API, но могут поддерживать протоколы SOAP, GraphQL, gRPC и TCP.

7. Очередь сообщений

Современная веб-архитектура складывается из отдельных управляемых компонентов — микросервисов. Микросервисы используют для взаимодействия друг с другом RESTful API или очереди сообщений. Очереди сообщений организуют асинхронный канал обмена сообщениями между двумя микросервисами по типу «издатель — подписчик» (pub-sub).

У очередей сообщений есть несколько преимуществ перед асинхронными RESTful-интерфейсами. Например, если во время REST-запроса происходит ошибка, инициатор запроса (клиент) должен суметь её обработать. Кроме того, некорректное REST-сообщение будет просто отклонено и никуда не сохранится. А вот очереди сообщений хранят все сообщения.

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

8. CDN

Сеть доставки контента (Content Delivery Network, CDN) состоит из географически распределённых серверов, которые кэшируют статический контент (например, рисунки или скрипты. — Пер.) для улучшения производительности, доступности и безопасности веб-приложений.

В типовом веб-приложении обычно есть рисунки, видео, стили и файлы JavaScript. Каждый раз, когда пользователь заходит в ваше приложение, его браузер скачивает эти ресурсы с сервера. Если пользователь живёт далеко от физического месторасположения сервера, страница будет загружаться долго. CDN кэширует статический контент на множестве серверов по всему миру и быстро доставляет его географически более близким клиентам.

Более того, CDN может смягчить ущерб от DDoS-атак, так как серверы кэширования CDN, по сути, выступают как прокси для вашего оригинального сервера.

Примечание переводчика

Атака типа «отказ в обслуживании» (DoS, Denial of Service) — попытка сделать недоступным сайт, веб‑приложение, систему. Часто при этом генерируется много запросов, которые в итоге перегружают систему. DDoS (Distributed DoS — в пер. с англ. — распределённая) — это когда атака ведётся одновременно из нескольких источников.

CDN при этой атаке становится дополнительным барьером — закрывает целевые компьютеры от прямого воздействия злоумышленников.

9. База данных

База данных — это компонент, в котором хранятся сведения различных типов. Есть разные типы баз данных: SQL, облачные, «ключ — значение» (key-value), графовые и иерархические (documented). Серверы баз данных позволяют клиентам взаимодействовать с базами данных по специальным протоколам. Например, сервер базы данных MySQL использует протокол MySQL.

Тип базы данных выбирают веб-архитекторы, исходя из реальных требований. Например, если нужно хранить много пользовательских сессий с уникальными идентификаторами, хорошим выбором будет база данных типа «ключ — значение».

10. Сервисы

Веб-приложениям необходимы аутентификация, обмен электронными письмами, логирование, мониторинг, машинное обучение, система платежей и другие сервисы. Кроме того, им нужны службы, связанные с разработкой, проектированием и развёртыванием, такие как хостинг репозиториев, непрерывная интеграция/доставка (CI/CD), база данных, хостинг приложений, поиск/индексирование и тому подобное. Ключевые требования для этих сервисов можно реализовать с помощью многих опенсорсных фреймворков. Но всё равно понадобится инфраструктура, чтобы установить и использовать эти сервисы.

Многие компании и стартапы, работающие по модели «как услуга» (as-a-service), предоставляют почти все эти облачные сервисы для веб-разработки. Кроме того, некоторые крупные технологические компании создали собственные экосистемы для разработки, в которых объединили множество облачных сервисов.


Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована