HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>11 май 2022</li>
2 <ul><li>11 май 2022</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Опытный разработчик рассказывает о десяти китах, на которых построена архитектура современного веба.</p>
4 </ul><p>Опытный разработчик рассказывает о десяти китах, на которых построена архитектура современного веба.</p>
5 <p>Фото: Bloomberg / Getty Images</p>
5 <p>Фото: Bloomberg / Getty Images</p>
6 <p>Фулстек-разработчик. Любимый стек: Java + Angular, но в хорошей компании готова писать хоть на языке Ада.</p>
6 <p>Фулстек-разработчик. Любимый стек: Java + Angular, но в хорошей компании готова писать хоть на языке Ада.</p>
7 <p><strong>Об авторе</strong></p>
7 <p><strong>Об авторе</strong></p>
8 <p><a>Программист</a>, создатель Neutralinojs - фреймворка для разработки JS-, HTML- и CSS-приложений, постоянный автор статей о технологиях на Medium.</p>
8 <p><a>Программист</a>, создатель Neutralinojs - фреймворка для разработки JS-, HTML- и CSS-приложений, постоянный автор статей о технологиях на Medium.</p>
9 <p><strong>Переводчик</strong></p>
9 <p><strong>Переводчик</strong></p>
10 <p>Екатерина Степанова</p>
10 <p>Екатерина Степанова</p>
11 <p>С тех пор как Тим Бернерс-Ли изобрёл World Wide Web, в облачную экосистему перешли чуть ли не все типы физических сервисов. Число веб-сайтов и веб-приложений начало расти как на дрожжах - и в архитектуре каждого современного веб-приложения есть общие компоненты облачных вычислений, которые нужно знать каждому разработчику. Провайдеры облачных сервисов могут по-разному называть эти компоненты, но их суть остаётся прежней.</p>
11 <p>С тех пор как Тим Бернерс-Ли изобрёл World Wide Web, в облачную экосистему перешли чуть ли не все типы физических сервисов. Число веб-сайтов и веб-приложений начало расти как на дрожжах - и в архитектуре каждого современного веб-приложения есть общие компоненты облачных вычислений, которые нужно знать каждому разработчику. Провайдеры облачных сервисов могут по-разному называть эти компоненты, но их суть остаётся прежней.</p>
12 <p>Я изучил архитектуры веб-приложений нескольких современных IT-гигантов (<a>Netflix</a>,<a>Medium</a>и <a>Airbnb</a>) и выделил в них такие составляющие:</p>
12 <p>Я изучил архитектуры веб-приложений нескольких современных IT-гигантов (<a>Netflix</a>,<a>Medium</a>и <a>Airbnb</a>) и выделил в них такие составляющие:</p>
13 <p>Сервером называют компьютер, который предоставляет какой-то сервис (или несколько сервисов) в частной сети или интернете. Другие устройства - их ещё называют клиентами - могут подключаться к серверу через разные порты, чтобы получить этот сервис. Серверы обычно называют по имени сервиса, который они предоставляют. Например, если сервер принимает запросы через 80-й порт и отдаёт клиентам веб-страницы, такой сервер обычно называют веб-сервером. Также существуют файловые серверы, почтовые серверы, серверы аутентификации, серверы баз данных, серверы приложений и тому подобные.</p>
13 <p>Сервером называют компьютер, который предоставляет какой-то сервис (или несколько сервисов) в частной сети или интернете. Другие устройства - их ещё называют клиентами - могут подключаться к серверу через разные порты, чтобы получить этот сервис. Серверы обычно называют по имени сервиса, который они предоставляют. Например, если сервер принимает запросы через 80-й порт и отдаёт клиентам веб-страницы, такой сервер обычно называют веб-сервером. Также существуют файловые серверы, почтовые серверы, серверы аутентификации, серверы баз данных, серверы приложений и тому подобные.</p>
14 <p>Сейчас более популярны виртуальные, а не физические серверы. Поставщики облачных услуг создают виртуальные машины поверх своего физического оборудования с помощью гипервизоров и программного обеспечения для виртуализации. Например, некоторые популярные провайдеры используют для создания своих виртуальных машин гипервизор Xen первого типа.</p>
14 <p>Сейчас более популярны виртуальные, а не физические серверы. Поставщики облачных услуг создают виртуальные машины поверх своего физического оборудования с помощью гипервизоров и программного обеспечения для виртуализации. Например, некоторые популярные провайдеры используют для создания своих виртуальных машин гипервизор Xen первого типа.</p>
15 <p>Клиент - это устройство, которое подключается к серверам, чтобы пользоваться их сервисами или ресурсами. Клиентом может быть компьютер, веб-сайт, ПО или встроенная система. Например, когда вы заходите на веб-сайт, ваш браузер становится клиентом. По аналогии с именованием серверов, клиенты тоже называются в зависимости от сервиса, которым они пользуются: бывают email-клиенты, веб-клиенты, клиенты баз данных или клиенты онлайн-чатов.</p>
15 <p>Клиент - это устройство, которое подключается к серверам, чтобы пользоваться их сервисами или ресурсами. Клиентом может быть компьютер, веб-сайт, ПО или встроенная система. Например, когда вы заходите на веб-сайт, ваш браузер становится клиентом. По аналогии с именованием серверов, клиенты тоже называются в зависимости от сервиса, которым они пользуются: бывают email-клиенты, веб-клиенты, клиенты баз данных или клиенты онлайн-чатов.</p>
16 <p>В клиент-серверной модели используются методы вроде аутентификации, чтобы открыть конкретный сервис только отдельным клиентам. Клиенты бывают тонкими и толстыми. Тонкий клиент полностью зависит от сервера, как обычное одностраничное приложение (SPA - Single Page Application). Толстый же клиент от сервера не зависит. Он похож на автономное приложение, которое сохраняет данные на сервере.</p>
16 <p>В клиент-серверной модели используются методы вроде аутентификации, чтобы открыть конкретный сервис только отдельным клиентам. Клиенты бывают тонкими и толстыми. Тонкий клиент полностью зависит от сервера, как обычное одностраничное приложение (SPA - Single Page Application). Толстый же клиент от сервера не зависит. Он похож на автономное приложение, которое сохраняет данные на сервере.</p>
17 <p>Монолитная клиент-серверная архитектура не лишена недостатков. Сбои в монолитных системах влияют на всю систему, а сопровождать их довольно сложно. При микросервисном подходе разработчики разбивают большую монолитную систему на небольшие сервисы - микросервисы. Так называют слабосвязанный изолированный сервис, отвечающий за какой-то процесс.</p>
17 <p>Монолитная клиент-серверная архитектура не лишена недостатков. Сбои в монолитных системах влияют на всю систему, а сопровождать их довольно сложно. При микросервисном подходе разработчики разбивают большую монолитную систему на небольшие сервисы - микросервисы. Так называют слабосвязанный изолированный сервис, отвечающий за какой-то процесс.</p>
18 <p>Если вы разрабатываете систему управления пользователями, микросервисы могут отвечать за регистрацию пользователей, генерацию отчёта и процесс оплаты. В реальных веб-ориентированных системах большинство микросервисов представляют собой RESTful API, работающие на виртуальной машине или в контейнере.</p>
18 <p>Если вы разрабатываете систему управления пользователями, микросервисы могут отвечать за регистрацию пользователей, генерацию отчёта и процесс оплаты. В реальных веб-ориентированных системах большинство микросервисов представляют собой RESTful API, работающие на виртуальной машине или в контейнере.</p>
19 <p><strong>Примечание переводчика</strong></p>
19 <p><strong>Примечание переводчика</strong></p>
20 <p>REST (англ. REpresentational State Transfer - "передача репрезентативного состояния" или "передача "самоописываемого“ состояния") - архитектурный стиль, набор принципов, по которому должны взаимодействовать компоненты распределённого приложения. Если система, веб-служба, API соответствует этим принципам, она называется RESTful.</p>
20 <p>REST (англ. REpresentational State Transfer - "передача репрезентативного состояния" или "передача "самоописываемого“ состояния") - архитектурный стиль, набор принципов, по которому должны взаимодействовать компоненты распределённого приложения. Если система, веб-служба, API соответствует этим принципам, она называется RESTful.</p>
21 <p>Рой Филдинг (Roy Thomas Fielding) - американский учёный, автор термина REST, предложил шесть принципов REST-архитектуры, среди которых клиент-серверная модель, кэширование, отсутствие состояния и другие.</p>
21 <p>Рой Филдинг (Roy Thomas Fielding) - американский учёный, автор термина REST, предложил шесть принципов REST-архитектуры, среди которых клиент-серверная модель, кэширование, отсутствие состояния и другие.</p>
22 <p>С возрастанием сложности кода микросервисы могут становиться более тяжёлыми и сложными для поддержки. Кроме того, могут резко вырасти затраты на инфраструктуру, так как микросервисы будут постоянно ждать подключения клиентов к виртуальным машинам или контейнерам. Бессерверная (serverless) концепция позволяет разбить большие системы на более мелкие и удобные для поддержки функции - так называемые бессерверные, или облачные, функции.</p>
22 <p>С возрастанием сложности кода микросервисы могут становиться более тяжёлыми и сложными для поддержки. Кроме того, могут резко вырасти затраты на инфраструктуру, так как микросервисы будут постоянно ждать подключения клиентов к виртуальным машинам или контейнерам. Бессерверная (serverless) концепция позволяет разбить большие системы на более мелкие и удобные для поддержки функции - так называемые бессерверные, или облачные, функции.</p>
23 <p>Балансировкой нагрузки называют её распределение между разными вычислительными модулями. В веб‑архитектуре балансировщик нагрузки - это компонент, который перенаправляет трафик на разные серверы в зависимости от их доступности.</p>
23 <p>Балансировкой нагрузки называют её распределение между разными вычислительными модулями. В веб‑архитектуре балансировщик нагрузки - это компонент, который перенаправляет трафик на разные серверы в зависимости от их доступности.</p>
24 <p>Есть два основных типа балансировщиков нагрузки: аппаратные (HLB - hardware‑based load balancer) и программные (software‑based). Популярнее программные, потому что HLB дорогие и для них нужны физические серверы.</p>
24 <p>Есть два основных типа балансировщиков нагрузки: аппаратные (HLB - hardware‑based load balancer) и программные (software‑based). Популярнее программные, потому что HLB дорогие и для них нужны физические серверы.</p>
25 <p>Почти все поставщики облачных сервисов предлагают балансировщики нагрузки по модели "как услуга" (as-a-service).</p>
25 <p>Почти все поставщики облачных сервисов предлагают балансировщики нагрузки по модели "как услуга" (as-a-service).</p>
26 <p>У веб-приложения может быть несколько API, и каждый нужно защитить от избыточной загрузки с помощью ограничения скорости обработки запросов (rate limiting). API-шлюз предоставляет единственную точку доступа для нескольких API и других сервисов.</p>
26 <p>У веб-приложения может быть несколько API, и каждый нужно защитить от избыточной загрузки с помощью ограничения скорости обработки запросов (rate limiting). API-шлюз предоставляет единственную точку доступа для нескольких API и других сервисов.</p>
27 <p>Принцип его работы схож с принципом работы балансировщика нагрузки: он перенаправляет каждый клиентский запрос соответствующим сервисам. API-шлюз обычно предоставляется как часть решения по управлению API (API management solution), в которое также входит графический пользовательский интерфейс (GUI) для управления API с защищённой панели администратора.</p>
27 <p>Принцип его работы схож с принципом работы балансировщика нагрузки: он перенаправляет каждый клиентский запрос соответствующим сервисам. API-шлюз обычно предоставляется как часть решения по управлению API (API management solution), в которое также входит графический пользовательский интерфейс (GUI) для управления API с защищённой панели администратора.</p>
28 <p>В API-шлюзы встраивают службы мониторинга API, ограничения скорости обработки запросов, монетизации API и версионирования. Обычно API-шлюзы используются с RESTful API, но могут поддерживать протоколы SOAP, GraphQL, gRPC и TCP.</p>
28 <p>В API-шлюзы встраивают службы мониторинга API, ограничения скорости обработки запросов, монетизации API и версионирования. Обычно API-шлюзы используются с RESTful API, но могут поддерживать протоколы SOAP, GraphQL, gRPC и TCP.</p>
29 <p>Современная веб-архитектура складывается из отдельных управляемых компонентов - микросервисов. Микросервисы используют для взаимодействия друг с другом RESTful API или очереди сообщений. Очереди сообщений организуют асинхронный канал обмена сообщениями между двумя микросервисами по типу "издатель - подписчик" (pub-sub).</p>
29 <p>Современная веб-архитектура складывается из отдельных управляемых компонентов - микросервисов. Микросервисы используют для взаимодействия друг с другом RESTful API или очереди сообщений. Очереди сообщений организуют асинхронный канал обмена сообщениями между двумя микросервисами по типу "издатель - подписчик" (pub-sub).</p>
30 <p>У очередей сообщений есть несколько преимуществ перед асинхронными RESTful-интерфейсами. Например, если во время REST-запроса происходит ошибка, инициатор запроса (клиент) должен суметь её обработать. Кроме того, некорректное REST-сообщение будет просто отклонено и никуда не сохранится. А вот очереди сообщений хранят все сообщения.</p>
30 <p>У очередей сообщений есть несколько преимуществ перед асинхронными RESTful-интерфейсами. Например, если во время REST-запроса происходит ошибка, инициатор запроса (клиент) должен суметь её обработать. Кроме того, некорректное REST-сообщение будет просто отклонено и никуда не сохранится. А вот очереди сообщений хранят все сообщения.</p>
31 <p>Даже если сообщение отправят в момент сбоя получателя, тот всё же получит его после перезапуска. Поэтому веб-архитекторы отдают предпочтение очередям сообщений в тех случаях, когда надёжность транзакций имеет решающее значение.</p>
31 <p>Даже если сообщение отправят в момент сбоя получателя, тот всё же получит его после перезапуска. Поэтому веб-архитекторы отдают предпочтение очередям сообщений в тех случаях, когда надёжность транзакций имеет решающее значение.</p>
32 <p>Сеть доставки контента (Content Delivery Network, CDN) состоит из географически распределённых серверов, которые кэшируют статический контент (например, рисунки или скрипты. - Пер.) для улучшения производительности, доступности и безопасности веб-приложений.</p>
32 <p>Сеть доставки контента (Content Delivery Network, CDN) состоит из географически распределённых серверов, которые кэшируют статический контент (например, рисунки или скрипты. - Пер.) для улучшения производительности, доступности и безопасности веб-приложений.</p>
33 <p>В типовом веб-приложении обычно есть рисунки, видео, стили и файлы JavaScript. Каждый раз, когда пользователь заходит в ваше приложение, его браузер скачивает эти ресурсы с сервера. Если пользователь живёт далеко от физического месторасположения сервера, страница будет загружаться долго. CDN кэширует статический контент на множестве серверов по всему миру и быстро доставляет его географически более близким клиентам.</p>
33 <p>В типовом веб-приложении обычно есть рисунки, видео, стили и файлы JavaScript. Каждый раз, когда пользователь заходит в ваше приложение, его браузер скачивает эти ресурсы с сервера. Если пользователь живёт далеко от физического месторасположения сервера, страница будет загружаться долго. CDN кэширует статический контент на множестве серверов по всему миру и быстро доставляет его географически более близким клиентам.</p>
34 <p>Более того, CDN может смягчить ущерб от DDoS-атак, так как серверы кэширования CDN, по сути, выступают как прокси для вашего оригинального сервера.</p>
34 <p>Более того, CDN может смягчить ущерб от DDoS-атак, так как серверы кэширования CDN, по сути, выступают как прокси для вашего оригинального сервера.</p>
35 <p><strong>Примечание переводчика</strong></p>
35 <p><strong>Примечание переводчика</strong></p>
36 <p>Атака типа "отказ в обслуживании" (DoS, Denial of Service) - попытка сделать недоступным сайт, веб‑приложение, систему. Часто при этом генерируется много запросов, которые в итоге перегружают систему. DDoS (Distributed DoS - в пер. с англ. - распределённая) - это когда атака ведётся одновременно из нескольких источников.</p>
36 <p>Атака типа "отказ в обслуживании" (DoS, Denial of Service) - попытка сделать недоступным сайт, веб‑приложение, систему. Часто при этом генерируется много запросов, которые в итоге перегружают систему. DDoS (Distributed DoS - в пер. с англ. - распределённая) - это когда атака ведётся одновременно из нескольких источников.</p>
37 <p>CDN при этой атаке становится дополнительным барьером - закрывает целевые компьютеры от прямого воздействия злоумышленников.</p>
37 <p>CDN при этой атаке становится дополнительным барьером - закрывает целевые компьютеры от прямого воздействия злоумышленников.</p>
38 <p>База данных - это компонент, в котором хранятся сведения различных типов. Есть разные типы баз данных: SQL, облачные, "ключ - значение" (key-value), графовые и иерархические (documented). Серверы баз данных позволяют клиентам взаимодействовать с базами данных по специальным протоколам. Например, сервер базы данных MySQL использует<a>протокол MySQL</a>.</p>
38 <p>База данных - это компонент, в котором хранятся сведения различных типов. Есть разные типы баз данных: SQL, облачные, "ключ - значение" (key-value), графовые и иерархические (documented). Серверы баз данных позволяют клиентам взаимодействовать с базами данных по специальным протоколам. Например, сервер базы данных MySQL использует<a>протокол MySQL</a>.</p>
39 <p>Тип базы данных выбирают веб-архитекторы, исходя из реальных требований. Например, если нужно хранить много пользовательских сессий с уникальными идентификаторами, хорошим выбором будет база данных типа "ключ - значение".</p>
39 <p>Тип базы данных выбирают веб-архитекторы, исходя из реальных требований. Например, если нужно хранить много пользовательских сессий с уникальными идентификаторами, хорошим выбором будет база данных типа "ключ - значение".</p>
40 <p>Веб-приложениям необходимы аутентификация, обмен электронными письмами, логирование, мониторинг, машинное обучение, система платежей и другие сервисы. Кроме того, им нужны службы, связанные с разработкой, проектированием и развёртыванием, такие как хостинг репозиториев, непрерывная интеграция/доставка (CI/CD), база данных, хостинг приложений, поиск/индексирование и тому подобное. Ключевые требования для этих сервисов можно реализовать с помощью многих опенсорсных фреймворков. Но всё равно понадобится инфраструктура, чтобы установить и использовать эти сервисы.</p>
40 <p>Веб-приложениям необходимы аутентификация, обмен электронными письмами, логирование, мониторинг, машинное обучение, система платежей и другие сервисы. Кроме того, им нужны службы, связанные с разработкой, проектированием и развёртыванием, такие как хостинг репозиториев, непрерывная интеграция/доставка (CI/CD), база данных, хостинг приложений, поиск/индексирование и тому подобное. Ключевые требования для этих сервисов можно реализовать с помощью многих опенсорсных фреймворков. Но всё равно понадобится инфраструктура, чтобы установить и использовать эти сервисы.</p>
41 <p>Многие компании и стартапы, работающие по модели "как услуга" (as-a-service), предоставляют почти все эти облачные сервисы для веб-разработки. Кроме того, некоторые крупные технологические компании создали собственные экосистемы для разработки, в которых объединили множество облачных сервисов.</p>
41 <p>Многие компании и стартапы, работающие по модели "как услуга" (as-a-service), предоставляют почти все эти облачные сервисы для веб-разработки. Кроме того, некоторые крупные технологические компании создали собственные экосистемы для разработки, в которых объединили множество облачных сервисов.</p>
42 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
42 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>