Файл: Технология «клиент-сервер» (Общие сведения о программных системах).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 14.03.2024

Просмотров: 45

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

  • Надежность

Компонент надежности фокусируется на том, как пользователь может создавать сервисы, устойчивые как к сбоям в обслуживании, так и к сбоям инфраструктуры. Подобно эффективности энергопотребления, облако дает вам возможность создавать отказоустойчивые сервисы, которые могут противостоять сбоям, и требует, чтобы пользователь планировал свои сервисы с учетом надежности.

При взгляде на надежность в облаке, полезно продумать "радиус взрыва" - максимальный ущерб, который может быть выдержан в случае отказа системы. Чтобы построить надежные системы, необходимо свести к минимуму "радиус взрыва" отдельных компонентов.

  • Производительность

Компонент производительности фокусируется на том, как пользователь может эффективно и масштабируемо запускать службы в облаке. Хотя облако дает пользователю свободу обрабатывать любой трафик, необходимо выбрать и настроить услуги для масштабирования.

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

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

  • Оптимизация затрат

Компонент оптимизации затрат помогает достичь бизнес-результатов и в то же время минимизировать затраты.

При взгляде на оптимизацию затрат в облаке, необходимо понимать, что расходы в облаке - OpEx, а не CapEx. OpEx — это постоянная модель оплаты по мере использования, а CapEx — это модель разовой покупки.

Традиционные затраты на ИТ в локальных центрах обработки данных в основном были капитальными. Оплата происходит за всю емкость авансом, независимо от того, используется ли такая емкость в итоге. Покупка новых серверов может оказаться длительным процессом, требующим участия нескольких сторон. Это связано с тем, что капитальные затраты часто были значительными, а иногда и дорогостоящими, поставка после приобретения серверов может занять несколько недель после совершения покупки.


В AWS расходы составляют OpEx. Оплачивается только используемая мощность. Поставка новых серверов может производиться инженерами в реальном времени без необходимости длительного процесса утверждения. Это связано с тем, что операционные расходы намного ниже и могут быть отменены при изменении требований. Поскольку оплачивается только то, что используется, любую избыточную мощность можно легко остановить и прекратить. После выбора услуги ее можно подготовить за секунды и минуты.

Далее коротко рассмотрим Microsoft Azure, являющаяся облачной платформой от компании Microsoft. Сервис даёт возможность разрабатывать и выполнять приложения и хранить данные на серверах, в распределённых ЦОДах.

Из особенностей модели стоит отметить:

- Плата только за использованные ресурсы,

- Абстракция от инфраструктуры,

- Многопоточная структура вычислений.

MS Azure объединяет в себе две облачные модели: IaaS и PaaS. IaaS обеспечивает запуск виртуальной машины для каждого экземпляра приложения, в то время как PaaS обеспечивает функции операционной системы, и другие дополнительные функции.

Производитель предоставляет инструменты для миграции от классической модели ИТ инфраструктуры к гибридной или полной миграции в облако:

- Поддержка ключевых сценариев переноса серверов, данных, баз данных, веб-приложений и виртуальных рабочих столов.

- Комплексные возможности обнаружения, оценки и миграции на базе платформы Azure и средств партнеров.

- Централизованный репозиторий миграции, обеспечивающий комплексное отслеживание и аналитику.

- Экономная миграция с помощью функций и средств оптимизации затрат Azure.

Microsoft заявляет о следующих преимуществах миграции:

- Экономия до 80% на стоимости приобретения лицензий Windows Server.

- Повышение продуктивности ИТ-специалистов до 25 %.

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

Рисунок 6 – Технология SOAP.

Глобальная облачная инфраструктура AWS, предлагает более 175 полнофункциональных сервисов в центрах обработки данных (ЦОД) по всему миру, охватывая 245 стран и регионов.

Глобальная инфраструктура Azure включает в себя более 160 физических ЦОД.

Благодаря такому географическому распределению ЦОД можно создать облачную инфраструктуру с учетом всех требований. Например, быстро запустить приложение с доступом по всему миру и легко управлять рабочими нагрузками или развернуть приложение ближе к конечным пользователям, чтобы обеспечить задержку не более нескольких миллисекунд.


По состоянию на 2020 год AWS занимает 31% доли облачного рынка, Azure - 20%.

ГЛАВА 3. РАЗРАБОТКА КЛИЕНТ-СЕРВЕРНЫХ ПРИЛОЖЕНИЙ С ИСПОЛЬЗОВАНИЕМ ПРОТОКОЛА UDP

В данной работе были разработаны программы, обеспечивающие обмен данными по сети с помощью протокола UDP. Код написан на языке С. Разработанные программы делятся на сервер (timeserv) и клиент (timecli). Они предназначены для передачи по сети времени сервера.

Этот проект состоит из простого UDP сервера и клиентских программ. Сервер работает на локальном компьютере, ожидая запроса датаграммы с удаленного компьютера, запрашивающего текущее время сервера. Затем сервер возвращает свое текущее время клиенту, который, в свою очередь, отображает его.

UDP означает протокол пользовательских Дейтаграмм. Клиент отправляет датаграмму на сервер, который обрабатывает данные и возвращает ответ. UDP – это минимальный протокол транспортного уровня, ориентированный на сообщениях, который задокументирован в RFC 768. Протокол UDP не предоставляет никаких гарантий передачи. По этой причине UDP иногда называют ненадежным протоколом [3].

Ряд свойств UDP делают его особенно подходящим для определенных приложений.

- Он ориентирован на транзакции, подходит для простых протоколов запроса-ответа, таких как система доменных имен или протокол сетевого времени.

- Подходит для моделирования других протоколов, таких как IP-туннелирования или удаленного вызова процедур и сетевая файловой системы.

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

- Используется при большом числе клиентов, к примеру в потоковых медиа-приложениях, таких как IPTV.

- Отсутствие задержек ретрансляции делает его подходящем для приложений в режиме реального времени, таких как Voice over IP, онлайн-игры и многие протоколы, построенные на основе протокола потокового вещания в режиме реального времени.

3.1. Серверная программа

Программа-сервер — это простой UDP сервер, который ждет датаграммы от клиентов. Когда он получает датаграмму, содержащую текст "GET TIME\r\n", она возвращает время текущего сервера клиенту.


Прежде чем вызывать какие-либо функции сокета, необходимо сначала открыть подключение Windows. Это делается с помощью функции WSAStartup (рисунок 7).

Рисунок 7 - Фрагмент кода, обеспечивающий открытие соединения Windows на сервере.

Шестнадцатеричное число 0x0101 — это версия используемого winsock, а переменная w является структурой формы WSADATA.

Следующий шаг-открыть сокет датаграмм для UDP. Это делается с помощью функции сокета, которая возвращает дескриптор сокета (рисунок 8).

Рисунок 8 – Фрагмент кода, обеспечивающий открытие сокета датаграмм UDP на сервере.

AF_INET указывает семейство для использования, и SOCK_DGRAM сообщает функции, которые необходимо использовать UDP вместо TCP/IP.

После этого необходимо заполнить некоторую информацию о сервере в структуре типа sockaddr_in. Во-первых, память в структуре очищается (рисунок 7). Затем устанавливается семейство серверов, которое всегда AF_INET. Номер порта задается с помощью функции htons. В зависимости от введенных параметров командной строки сервер либо попытается получить свой IP-адрес, который является предпочтительным методом работы, либо, если это не сработает, его можно указать вручную. Чтобы автоматически получить адрес компьютера-сервера, вызывается функция gethostname, а затем вызовом функции возвращает указатель на структуру типа hostent. Наконец, каждый компонент адреса в ххх.xxx.xxx.xxx копируется в структуру сервера.

Рисунок 9 – Фрагмент кода обеспечивающий назначение IP-адресов на сервере.

Переменные A1, A2, A3 и A4 являются компонентами адреса сервера в форме xxx.xxx.xxx.xxx, введенные в командной строке.

Следующим шагом является привязка адреса сервера к сокету, созданному функцией сокета. Это делается с помощью функции bind, которая возвращает -1, если возникла ошибка (рисунок 10).

Рисунок 10 – Привязка адреса сервера к сокету.

Теперь сервер готов прослушивать датаграммы от клиентов. Это делается с помощью функции recvfrom (рисунок 11). Buffer — это буфер для хранения полученных датаграмм, и BUFFER_SIZE — это максимальное число байт, которое нужно получить. Client — это структура типа sockaddr_in, содержащая сведения о клиенте, отправляющем датаграмму, включая адрес клиента.

Рисунок 11 – Фрагмент кода сервера, обеспечивающий прием данных от клиента.

После того, как дейтаграмма была получена сервером, сервер сравнивает данные в дейтаграмме со строкой "GET TIME\r\n" (рисунок 12). Если эти строки совпадают, сервер возвращает время. В противном случае запрос отклоняется как недопустимый запрос. Время отправляется обратно клиенту с помощью функции "send to".


Рисунок 12 – Фрагмент кода сервера, который обеспечивает обмен данными с клиентом.

После этого сервер возвращается в цикле обратно в функцию recvfrom.

3.2. Клиентская программа

Клиентская программа представляет собой простой UDP клиент, который отправляет запрос на сервер, чтобы получить текущее время. Во-первых, открывается соединение в Windows (рисунок 13). Затем открывается сокет. Далее адрес сервера копируется в структуру server. Этот код похож на код для сервера.

Рисунок 13 – Открытие соединения на клиенте.

В клиенте UDP необходимо знать IP-адрес клиентского компьютера. Это можно сделать автоматически или вручную с помощью аргументов командной строки. Код почти идентичен коду для назначения адреса серверу, за исключением того, что номер порта для клиента равен нулю client.sin_port = htons(0);, где client является структурой типа sockaddr_in (рисунок 14).

Рисунок 14 – Настройка порта на клиенте.

Следующим шагом является привязка адреса клиента к сокету. Этот код почти идентичен коду для сервера (рисунок 15).

Рисунок 15 – Привязка адреса к сокету на клиенте.

Теперь пришло время отправить запрос на сервер на текущее время. Для этого используется функция sendto (рисунок 16):

Рисунок 16 – Фрагмент кода, обеспечивающий отправку запроса на сервер.

send_buffer является строкой, содержащей текст "GET TIME\r\n" и заканчивается нулевым терминатором.

После отправки запроса на время ответ с сервера будет отправлен обратно. Это делается с помощью функции recvfrom:

Рисунок 17- Получение и отображение времени сервера на клиенте.

Сurrent_time - переменная типа time_t, которая хранит время.

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

3.3. Использование серверной программы

Синтаксис серверной программы timeserv [адрес сервера] порт (рисунок 18). Порт-номер порта, для запуска сервера. Рекомендуется выбрать номер порта выше 1023, так как нижние номера портов могут быть назначены другим протоколам. Необязательный параметр адрес_сервера - локальный IP-адрес компьютера, вошел в формате ХХХ.ХХХ.ХХХ.ХХХ. Если этот параметр не указан, программа попытается автоматически получить адрес. Для выхода из программы-сервера необходимо нажать сочетание клавиш Ctrl+C