Буду также рад подписке на мой уютный telegram бложик: https://t.me/OlegMalyshevBlog
Клиент:
В контексте сетевых технологий, клиент — это компьютер или смартфон или любое другое устройство, которое получает доступ к ресурсам, данным или услугам, предоставляемым другим компьютером, известным как сервер. В клиент-серверной модели клиент обычно инициирует запросы на сервер для получения данных или выполнения определенных задач. Клиенты могут быть как программным обеспечением, так и аппаратными устройствами, и они используют протоколы сети для связи с сервером и обмена данными, о протоколах мы поговорим с вами чуть позже.
Сервер:
Сервер — это компьютер или устройство, которое предоставляет определенные ресурсы, данные или услуги другим компьютерам или устройствам, известным как клиенты. Он может обслуживать запросы клиентов, обрабатывать данные, хранить информацию, управлять сетевыми ресурсами и многое другое. Серверы обычно работают непрерывно, обеспечивая доступ к данным или услугам для клиентов по запросу. Они могут быть физическими серверами или виртуальными машинами, обеспечивающими различные функции в сети или веб-приложениях.
И иными словами клиент-серверная архитектура — это сетевая архитектура, в котором клиентом является запрашивающая машина, а сервером машина, которая отвечает на этот запрос.
Пример клиент-серверной архитектуры на примере приложения погоды на смартфоне
Для простоты понимания давайте рассмотрим мобильное приложение погода на смартфоне и данное приложение как раз и будет клиентом, запуская это мобильное приложение мы ожидаем увидеть актуальную для нагло местоположения погоду.
На нашем телефоне нет данных о погоде во всем мире, но зато эти данные могут быть у Элл или Гугл если мы используем смартфон на ОС андройд.
То есть у нас есть где-то пополняемое хранилище о погоде на земле и без него наши мобильное приложение эту задачу не решит. Назовем это хранилище север.
Получается что у нас есть две части системы, которые бесполезны друг без друга у нас есть мобильное приложение, которое без сервера просто не сможет отобразить нам красивые картинки без актуальной погоды, а сервер не сможет отобразить актуальную информацию о погоде без клиента, то есть без мобильного приложения или какого-то сайта с погодой.
Задаче решается только тогда, когда клиент передает свои координаты на сервер и сервер в завиcимости от координат отдает клиенту актуальную информацию о погоде. Вот это и будет клиент северной архитектурой. Большинство веб и мобильных приложений.
Протоколы прикладного уровня
Теперь давайте разберем как у нас может происходить взаимодействие клиента и сервера и в данном случае нас интересует переда данных через wi-fi, lte, 5G и т д. Этот тип взаимодействия дает возможность получить доступ к сети интернет, а значит это самый перспективный способ для нас для реализации связи между клиентом и сервером. Этот способ называется сетевым взаимодействием. Для непосредственной передачи данных используются протоколы прикладного уровня, самые популярные это http и https.
Также у нас есть ряд других известных протоколов прикладного уровня.
Это FTP (File Transfer Protocol) — протокол передачи файлов, используется для передачи файлов между клиентом и сервером. Это SMTP (Simple Mail Transfer Protocol) — протокол передачи почты, используется для отправки электронной почты. Это POP3 (Post Office Protocol, версия 3) и IMAP (Internet Message Access Protocol) — протоколы для получения электронной почты с почтовых серверов на клиентские устройства.
Это RDP (Remote Desktop Protocol) — протокол для удаленного управления рабочими столами компьютеров в операционной системе Windows и многие многие другие протоколы.
TCP/IP
Также необходимо упомянуть о семействе потоколов сетевого и транспортного уровня tcp/ip
TCP/IP — это набор протоколов, работающих на более низких уровнях сетевой структуры, стек протоколов TCP/IP имеет несколько уровней, включая сетевой уровень (где действует IP протокол, который отвечает за марщрутизацию, идентификацию, местоположение устройства по IP адресу), транспортный уровень (где действует TCP, UDP и др.), и прикладной уровень (где действуют протоколы, такие как HTTP, FTP, SMTP и другие)
Иными словами HTTP и HTTPS использует протокол TCP/IP в качестве транспортного уровня для отправки данных через сеть.
Разница между HTTP и HTTPS
Данные, передаваемые по протоколу HTTP, не шифруются и передаются в открытом виде. Это означает, что они могут быть подвержены перехвату и просмотру третьими лицами, если они имеют доступ к сетевому трафику.
HTTPS — это защищенная версия HTTP, которая использует шифрование для обеспечения конфиденциальности и безопасности данных.
Данные, передаваемые по протоколу HTTPS, шифруются с использованием SSL (Secure Sockets Layer) или его более современного варианта TLS (Transport Layer Security). Это означает, что данные остаются зашифрованными при передаче между браузером и сервером, что делает их недоступными для прослушивания третьими лицами.
Использование HTTPS также предоставляет подтверждение подлинности веб-сайта через сертификаты, что помогает предотвратить подделку
Трехуровневая архитектура с использованием базы данных
Далее мы снова возвращаемся к клиент северной архитектуре, только справа если смотреть на монитор у нас добавилась база данных. Давайте ее разберем с учетом базы данных. У нас есть клиент и у нас есть сервер.
В данном случае client1 client2 и т д это пользователи, которые сидят в разных городах, через браузер, мобильные приложения и что-то ищут в интернет-магазине.
К примеру они ищут велосипед, вводят какое-то название велосипеда и нажимают кнопку найти. В этом случае по http или https протоколу отправляется request запрос на сервер, сервер обращается к серверу базы данных и получает от сервера базы данных нужную модель велосипеда, если она есть в таблице. Веб-сервер по определенной логике обрабатывает запрос с велосипедом при помощи back-end языков программирования и далее респонсом при помощи https протокола отправляет ответы обратно клиентам. Ответ же может включать веб-страницы, JSON-данные, изображения и другие ресурсы, которые будут использоваться клиентом и отображаться при помощи front-end языков, в которые входят и разметка текста при помощи html и css и такой язык как typescript, различные библиотеки, такие как redux, react и т д. Если мы говорим, что со стороны клиентов выступают смартфоны, то в случае iOS это будет Swift + различные библиотеки работающие с ui, а в случае andriod — это будет kotlin.
Клиент серверная архитектура с балансировщиком
Далее я привел схему, когда наш интернет магазин посещает большое количество пользователей, как правило, в этом случае одного сервера недостаточно, их несколько и для того, чтобы с этими серверами эффективно работать, нам нужен балансировщик.
Балансировщик равномерно распределяет входящий трафик между несколькими серверами, обеспечивая более равномерное использование ресурсов и предотвращая перегрузку отдельных серверов. Если один из серверов выходит из строя или становится недоступным, балансировщик нагрузки перераспределяет трафик на доступные серверы, обеспечивая тем самым высокую доступность и надежность интернет-магазина в данном случае.
Также балансировщик нагрузки позволяет легко добавлять или удалять серверы в кластере, что облегчает масштабирование веб-приложений для удовлетворения роста нагрузки
Некоторые балансировщики нагрузки также предоставляют функциональность защиты от Ddos атак.
Многие балансировщики нагрузки предоставляют инструменты для мониторинга и управления серверами и трафиком, что упрощает управление сетевой инфраструктурой.
Простыми словами представьте, что у нас есть два сервера, на которые идут запросы со многих клиентов и вот на один север идет 10 запросов, а на другой все 2, балансировщик это увидит и равномерно распределит запросы между серверами.
Клиент серверная архитектура с несколькими балансировщиками
Далее я привел пример схемы, когда у нас к примеру очень большой интернет магазин, который обслуживают большое количество серверов, на столько большое, что они объединяются в кластеры и естественно для такого количества серверов нужен ни один балансировщик. И также огромное количество пользователей этого большого интернет-магазина будет создавать большое количество запросов к базам данных и серверов баз данных в этом случае тоже будет много и для них также нужны свои балансировщики.
При это часть серверов может быть совершенно не нагружены и они используются как резервные, в случае если откажут основные сервера.