По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Языки сценариев пользуются большей популярностью для автоматизации определенных задач. Кроме того, языки сценариев являются менее ресурсоемкими по сравнению с традиционными языками программирования. Они не требуют этапа компиляции и вместо этого интерпретируются. Например, программа Java должна быть скомпилирована перед запуском, тогда как приложение, написанное на языке сценариев, таких как Python, JavaScript или PHP, не требует компиляции. В Java-программировании сначала создаются файлы классов, а затем отображаются выходные данные. Напротив, в Python все коды выполняются во время запуска скрипта, поэтому языки программирования компилируются, тогда как языки сценариев интерпретируются. Языки сценариев относятся к определенному типу, который используется для предоставления инструкций через код веб-браузерам или автономным приложениям. Они делают кодирование более простым и быстрым, поэтому они широко используются в веб-разработке. Языки сценариев также используются в операционных системах для создания и автоматизации файлов запуска, игр, программного обеспечения статистического анализа, офисных приложений и многих других. Они могут эффективно работать в нескольких средах. Вот список наиболее популярных языков сценариев, с которых можно начать знакомиться с миром программирования. 1. JavaScript JavaScript - наиболее популярный язык сценариев, используемый разработчиками. Он следует спецификации ECMAScript, которая отвечает за определение стандартов. Этот язык разработан компанией Sun Microsystems и увидел свет в 1995 году. Крупные организации, такие как PayPal, Walmart и Netflix, созданы на основе JavaScript. Такие технологические гиганты, как Facebook и Google, вложили большие средства в этот язык. JavaScript широко используется для создания веб- или мобильных приложений, инструментов командной строки, сетевых приложений реального времени, таких как службы потоковой передачи видео, игры и т.д. Можно сказать, JavaScript является базовой технологией для создания современных веб-сайтов с уникальными функциями. Ранее JavaScript использовался только для работы в браузере, но теперь существуют фреймворки на основе JavaScript, такие как Node, которые позволяют использовать JavaScript в бэкэнде. Есть несколько популярных JavaScript фреймворков для фронтэнда, вроде Angular и React. Преимущества JavaScript: Простота в изучении и внедрении Много возможностей для работы в качестве фронтэнда, бэкэнда или фулстек разработчика. Одно из самых активных сообществ разработчиков Обеспечивает отличную интерактивность веб-сайтов Легко справляется с высокой нагрузкой и пропускной способностью сервера Возможность эффективной работы с другими языками программирования для создания разнообразных приложений 2. Python Python - второй по популярности скриптовый язык в настоящее время. Python создал Гвидо ван Россум, и первый релиз вышел в 1991 году. Код на Python прост в чтении, он похож на английский. Чтобы начат работу с Python достаточно создать файл с расширением .py, написать сам скрипты и, наконец, запустить этот файл, чтобы выполнить инструкции указанные в нем. Код в скриптах python исполняется сверху вниз, один за другим. Руководство для начинающих с примерами по изучению Python можно прочесть здесь. Разработчики в основном используют скрипты Python для автоматизации ежедневных задач, создания отчетов, обеспечения безопасности и т.д. Задачу автоматизации с Python можно выполнять за меньшее количество кода, чем в любых других языках программирования, таких как Java, C++. Преимущества Python: Очень легок в изучении Портативный, может работать на любой платформе, как Windows/Mac/Linux Может дополняться компонентами на других языках программирования Огромное сообщество поддержки Обеспечивает поддержку программирования GUI Может легко интегрироваться с другими языками программирования, вроде C, C++ и т. д. Богатый набор библиотек и модулей для больших функциональных возможностей 3. PHP PHP - это серверный язык сценариев, который является языком для создания динамических и интерактивных веб-страниц. PHP расшифровывается как гипертекстовый препроцессор. Он является открытым и бесплатным для использования. Даже если это язык, который может делать почти все, что может язык программирования, он в основном используется для выполнения логики на стороне сервера. Когда вы нажимаете кнопку входа на странице входа в Facebook, логика, которая позволяет вам войти в ваш аккаунт, выполняется на PHP. Руководство для начинающих с примерами по изучению PHP можно прочесть здесь. С помощью PHP можно создавать динамичные и красивые веб-страницы; можно собирать данные из формы, созданной в формате HTML, и использовать их для шифрования данных. Из множества функциональных возможностей PHP можно использовать PHP для создания простого приложения CRUD, которое расшифровывается как создание, чтение, обновление и удаление. Такие компании, как Википедия и Facebook, используют PHP, так как он может легко обрабатывать миллионы трафика. Преимущества PHP: Широко используемый и чрезвычайно гибкий язык Поддерживает несколько типов баз данных (MySQL, PostgreSQL, NoSQL) Поддержка нескольких типов серверов (Apache, TLS сервер) Обеспечение эффективной производительности веб-сайтов с интенсивным трафиком Предоставляет разработчикам больше возможностей управления, значит удобен для разработчиков Совместимость с большинством операционных систем и простота интеграции с несколькими технологиями 4. R R в основном используется для статистических вычислений и графики. Он широко используется аналитиками данных, учеными и статистиками. Этот язык сценариев используется через интерпретатор командной строки. R обычно называют языком науки о данных. Разработчики пишут сценарии на R для выполнения нескольких команд за один раз; это экономит много времени. Здесь сценарий представляет собой набор команд, который обычно включает в себя комментарии о том, для чего предназначен каждый фрагмент кода. Сценарий R должен быть сохранен с расширением .r. Преимущества R: Активное сообщество, поддерживающее этот язык сценариев Поддержка векторных операций Он поставляется с тысячами готовых к использованию пакетов Кроссплатформенна Наилучшим образом подходит для сложных статистических вычислений Мощные графические возможности 5. Ruby Ruby является одним из самых гибких языков программирования, и он сходит с вашего пути, если вы не кодируете так, как хотите. Создатели Ruby вложили много работы, чтобы сделать его максимально простым в использовании. Ruby может спасти тебя от набора большого количества кода. Гибкость Ruby позволила разработчикам создать невероятно инновационное программное обеспечение. Есть такие инструменты, как Chef, которые Facebook использует для автоматизации своей конфигурации сервера, или SAS, который помогает обеспечить стиль для веб-сайтов Pandora, и самое главное, Ruby разрабатывает Ruby on Rails, который, возможно, является самым популярным в мире веб- фреймворком. Airbnb и Kickstarter, как и многие другие компании, используют Ruby on Rails, в разработке своих свои веб-сайтов. Преимущества Ruby: Можно выполнять задачу за меньшее количество кода, по сравнению с другими языками программирования. Помогает ускорить разработку программного обеспечения Хорошо подходит для автоматизации тестов Предоставляет множество встроенных инструментов и библиотек, помогающих разработчикам Следует кодированию по конвенции строго в соответствии со стандартами 6. Perl Perl - язык программирования с открытым исходным кодом и огромным сообществом программистов, библиотек и ресурсов. Он имеет очень мощную встроенную структуру регулярного выражения, благодаря чему программисты и решают использовать Perl для массовой обработки текста. Perl не зависит от платформы и также используется для генерации HTML-страниц. Perl носит прозвище «Швейцарский нож скриптового языка» благодаря своей гибкости и мощи. Преимущества Perl: Относительно мало ключевых слов, простая структура и простота в изучении Поддержка широкого спектра аппаратных платформ с одним и тем же интерфейсом Обеспечивает поддержку всех коммерческих баз данных CPAN (Comprehensive Perl Archive Network), архив библиотеки Perl, включает в себя тысячи готовых модулей Поддержка автоматического управления памятью и сбора мусора Включает простые методы отладки 7. Groovy Groovy очень похож на Java. Он имеет Java-подобный синтаксис, и, если вы уже знаете Java, вам будет легче изучать его. Это мощный динамический язык с эстетической типизацией и статической компиляцией. Groovy разработан, чтобы быть менее подробным, чем Java. Синтаксис менее сложен и следует простой структуре без ненужных точек с запятой. Преимущества Groovy: Поддерживает как статическую, так и динамическую типизацию Поддержка существующих библиотек Java Сценарии Groovy могут иметь операторы без объявлений классов Легко интегрируется с существующими приложениями Java Поддержка списков, карт, регулярных выражений 8. Bash Язык сценариев Bash также известен как Bourne Again Shell. Это язык программирования сценариев оболочки, где команды оболочки выполняются через сценарий оболочки с расширением .sh. Эти команды оболочки используются на терминале с интерпретатором оболочки. В сценарии оболочки bash необходимо добавить полный путь к исполняемому двоичному файлу bash. Преимущества Bash: Самый простой способ автоматизации повседневных задач Кроме односимвольных параметров командной строки оболочки, она также поддерживает многосимвольные Выполняет все файлы запуска при запуске системы Соответствует стандарту оболочки и инструментов IEEE POSIX P1003.2/ISO 9945.2 9. PowerShell Windows PowerShell - оболочка командной строки, созданная Microsoft. Системные администраторы главным образом используют его для администрирования ОС Windows и приложений. Он построен на платформе .NET. Команды, используемые в Windows PowerShell, называются командлетами. Преимущества PowerShell: Очень легко для изучения и внедрения Предоставляет объектно-ориентированные языковые функции Простая автоматизация множества задач администрирования Нет необходимости определять тип переменной в PowerShell Позволяет выполнять задания в фоновом режиме на локальных или удаленных компьютерах Использование фоновой интеллектуальной службы передачи (BITS) поддерживает передачу файлов Написанные сценарии можно использовать повторно
img
В первой части этого материала мы изучили базовую веб-архитектуру, а во второй разобрали структуру веб-приложения. Настало время более детально рассмотреть HTTP и REST. Понимание HTTP имеет решающее значение для веб-разработчиков, поскольку оно облегчает поток информации в веб-приложении, позволяя улучшить взаимодействие с пользователями и повысить производительность сайта. Что такое HTTP? В клиент-серверной модели клиенты и серверы обмениваются сообщениями по принципу «запрос-ответ»: клиент отправляет запрос, а сервер возвращает ответ. Хранить трек из этих сообщений сложнее, чем звучит, поэтому клиент и сервер придерживаются общего языка и набора правил. Этот «язык», или протокол, называется HTTP. Протокол HTTP определяет синтаксис (формат и кодировку данных), семантику (значение, связанное с синтаксисом) и тайминг (скорость и последовательность). Каждый HTTP-запрос и ответ, которыми обмениваются клиент и сервер, рассматривается как одна HTTP-транзакция. HTTP: Общая информация Есть несколько вещей, которые стоит отметить про HTTP, прежде чем погрузиться в детали. Во-первых, HTTP текстовый протокол, что означает, что сообщения, которыми обмениваются клиент и сервер, являются битами текста. Каждое сообщение содержит две части: заголовок и тело. Во-вторых, HTTP - это протокол прикладного уровня, то есть это просто абстракционный уровень, который стандартизирует взаимодействие хостов. Сам HTTP не передает данные. Получение запроса и ответа от одной машины к другой по-прежнему зависит от базового протокола TCP/IP. Напоминаем, что TCP/IP - это двухкомпонентная система, которая функционирует как фундаментальная «система управления» Интернета. Наконец, возможно, вы видели протокол «HTTPS» в адресной строке браузера и интересовались, является ли HTTP тем же самым, что HTTP + «S». Если коротко, то HTTPS разновидность HTTP, с небольшой разницей. Простой HTTP-запрос или ответ не зашифрован и уязвим для различных типов атак. HTTPS, напротив, является более безопасной протоколом связи, которая использует TLS/SSL шифрование для обеспечения безопасности. SSL - это протокол безопасности, который позволяет клиенту и серверу взаимодействовать по сети безопасным способом - чтобы предотвратить сниффинг и подмену во время передачи сообщений по сети. Клиент обычно указывает, требуется ли ему подключение TLS/SSL, используя специальный номер порта 443. Как только клиент и сервер соглашаются использовать TLS/SSL для обмена данными, они согласовывают соединение с отслеживанием состояния, выполняя так называемое «квитирование TLS». Затем клиент и сервер устанавливают секретные сеансовые ключи, которые они могут использовать для шифрования и дешифрования сообщений, когда они разговаривают друг с другом. Многие крупные веб-сайты, такие как Google и Facebook, используют HTTPS - в конце концов, это то, что сохраняет ваши пароли, личную информацию и данные кредитных карт в безопасности. Что такое API HTTP: Углубляясь в детали Теперь, вооружившись базовыми знаниями, погрузимся глубже в структуру HTTP. Мы можем начать с посещения https://www.github.com, чтобы связаться с сервером GitHub. Если вы используете Chrome или Firefox с установленным расширением Firebug, вы можете подробно изучить HTTP-запрос, перейдя на вкладку «Сеть» или «Network». С открытой кладкой «Сеть», перейдите на сайт www.github.com, введя его в адресную строку, и вы должны увидеть что-то подобное: Затем на левой панели щелкните по первому пути, «github.com.» Теперь вы должны увидеть следующее: Заголовок запроса HTTP Заголовки HTTP обычно содержат метаданные (данные о данных). Метаданные включают тип запроса (GET, POST, PUT или DELETE), путь, код состояния, тип содержимого, используемый браузер, cookie, текст сообщения (иногда) и многое другое. Рассмотрим наиболее важные части заголовка на примере GitHub, начиная с раздела «Заголовки ответа»: Request URL: https://github.com/ - Запрошенный URL-адрес Request Method: GET - Тип используемого метода HTTP. В нашем случае наш браузер сказал: «Эй, сервер GitHub, я хочу ПОЛУЧИТЬ (GET) домашнюю страницу». Status Code:200 OK - Стандартизированный способ информирования клиента о результате запроса. Код состояния 200 означает, что сервер успешно нашел ресурс и отправляет его вам. Remote Address:192.30.252.129:443 - IP-адрес и номер порта веб-сайта GitHub, который мы посетили. Обратите внимание, что это порт номер 443 (это означает, что мы используем HTTPS вместо HTTP). Content-Encoding: gzip - Кодировка ресурса, который мы получили обратно. В нашем случае сервер GitHub сообщает нам, что содержимое, которое он отправляет назад, сжато. Возможно, Github сжимает файлы, чтобы страница быстрее загружалась. Content-Type: text/HTML; charset = utf-8 - Задает представление данных в теле ответа, включая тип и подтип. Тип описывает тип данных, в то время как подтип указывает конкретный формат для этого типа данных. В нашем случае, мы имеем текст, в формате HTML. Во второй части указывается кодировка символов для HTML-документа. Чаще всего это будет UTF-8, как и выше. Есть также куча информации заголовка, которую клиент должен был отправить, чтобы сервер мог знать, как ответить. Посмотрите на раздел «Заголовки запросов» или «Headers»: User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 - Программное обеспечение, которым пользуется пользователь. Иногда веб-сайт должен знать, с какого устройства он просматривается. Поэтому браузер отправляет эту последовательность User-Agent, которую сервер может использовать для определения того, что используется для доступа к веб-сайту Accept-Encoding: gzip, deflate, sdch - Указывает кодировку содержимого, которую может обработать браузер. Мы видим, что указан gzip, и поэтому сервер Github смог отправить нам содержимое в формате gzip. Accept-Language: en-US, en; q = 0.8 - Описывает язык, на котором должна отобразиться веб-страница. В нашем случае «en» означает английский. Host: github.com - Описывает хост, на который мы идем Cookie:_octo=GH1.1.491617779.1446477115; logged_in=yes; dotcom_user=iam-peekay; _gh_sess=somethingFakesomething FakesomethingFakesomethingFakesomethingFakesomethingFakesomethingFakesomethingFakesomethingFake; user_session=FakesomethingFake somethingFakesomethingFakesomethingFake; _ga=9389479283749823749; tz = America% 2FLos_Angeles _ - Фрагмент текста, который веб-сервер может хранить на компьютере пользователя и впоследствии извлекать. Информация сохраняется как пара имя-значение. Например, одна из пар имя-значение, сохраненных GitHub для моего запроса, является «dotcom_user=iam-peekay,», которая сообщает GitHub, что мой userid – Iam-peekay. Что теперь со всеми этими парами имя-значение? Итак, у нас есть много пар имя-значение. Но как создаются эти пары имя-значение? Каждый раз, когда браузер будет открывать веб-сайт, он будет искать на компьютере файл cookie, установленный веб-сайтом ранее. Так что, при посещении www.github.com, браузер будет искать файл cookie, который GitHub сохранил на жестком диске компьютера пользователя. Если он найдет файл cookie, он отправит все пары имя-значение в заголовке запроса. Веб-сервер GitHub теперь может использовать данные cookie различными способами, такими как рендеринг контента на основе сохраненных пользовательских предпочтений, подсчет количества времени, проведённого на сайте. Если браузер не находит файл cookie - либо потому, что сайт никогда не посещался, либо пользователь заблокировал или удалил его - браузер не отправляет данные cookie. В этом случае сервер GitHub создает новый идентификатор в качестве пары имя-значение, вместе с любыми другими необходимыми ему парами имя-значение, и отправляет его пользователю через заголовок HTTP. Получив данные, устройство хранит их на своем жестком диске. Тело HTTP Выше мы узнали, что сервер содержит большинство важных «метаданных» (данные о данных), которые необходимы для связи с клиентом. Теперь поговорим о теле HTTP запроса. Тело – это основная часть сообщения. В зависимости от типа запроса он может быть и пустым. В нашем случае вы можете увидеть тело на вкладке «Response». Поскольку мы сделали запрос GET на www.github.com, тело содержит содержимое HTML-страницы для www.github.com. Дополнительные упражнения Надеюсь, такой разбор позволит вам лучше понять структуру HTTP. На практике вы можете просмотреть на другие ресурсы, запрашиваемые вашим браузером (изображения, файлы JavaScript и т.д.) при посещении www.github.com. Теперь рассмотрим различные методы HTTP запросов, которые клиент может инициировать. Методы HTTP Команды или методы HTTP указывают серверу, что делать с данными, определенными по URL. URL-адреса всегда идентифицируют определенный ресурс. Когда клиент использует URL-адрес в сочетании с командой HTTP, это сообщает серверу, какое действие необходимо выполнить с указанным ресурсом. Примеры URL-адресов: GET http://www.example.com/users (получить всех пользователей) POST http://www.example.com/users/a-unique-id (создание нового пользователя) PUT http://www.example.com/comments/a-unique-id (обновить комментарий) DELETE http://www.example.com/comments/a-unique-id (удалить комментарий) Когда клиент делает запрос, он указывает тип запроса, используя одну из этих команд. Наиболее важными являются GET, POST, PUT и DELETE. Есть и другие методы, такие как HEAD и OPTIONS, но они используются редко, поэтому в данном материале мы пропустим их. GET GET является наиболее часто используемым методом. Он используется для чтения информации по данному URL-адресу с сервера. Запросы GET доступны только для чтения, что означает, что данные никогда не должны быть изменены на сервере - сервер должен просто извлечь данные без изменений. Таким образом, запросы GET считаются безопасными операциями, поскольку сколько бы не вызывай его, ответ будет одинаковым. Кроме того, запросы GET являются идемпотентными. Это означает, что отправка нескольких запросов GET на один и тот же URL-адрес должна привести к тому же эффекту, что и один запрос GET, поскольку запрос GET просто запрашивает данные с сервера, а не изменяет их. Запросы GET отвечают кодом состояния 200 (ОК), если ресурс был успешно найден, и 404 (NOT FOUND), если ресурс не был найден. (Отсюда термин «404 page» для сообщений об ошибках при посещении несуществующих или неправильно набранных URL-адресов.) POST POST используется для создания нового ресурса, например, через форму регистрации. Функция POST используется при необходимости создания дочернего ресурса (например, нового пользователя) для какого-либо родительского ресурса (http://example.com/users). Родительский ресурс запроса на создание новой сущности определяется по URL-адресу, и сервер обрабатывает новый ресурс и связывает его с родительским ресурсом. POST не является ни безопасным, ни идемпотентным. Это связано с тем, что выполнение двух или более идентичных запросов POST приведет к созданию двух новых идентичных ресурсов. Запросы POST отвечают кодом состояния 201 (CREATED) вместе с заголовком местоположения со ссылкой на вновь созданный ресурс. PUT PUT используется для обновления ресурса, идентифицированного по URL, с использованием информации в теле запроса. PUT также может использоваться для создания нового ресурса. Запросы PUT не считаются безопасными операциями, поскольку они изменяют данные на сервере. Однако он является идемпотентным, поскольку несколько идентичных запросов PUT на обновление ресурса должны иметь тот же эффект, что и первый. Запросы PUT отвечают кодом состояния 200 (OK), если ресурс был успешно обновлен, и 404 (NOT FOUND), если ресурс не был найден. DELETE DELETE используется для удаления ресурса, определенного по URL-адресу. Запросы DELETE являются идемпотентным, поскольку если УДАЛИТЬ ресурс, он будет удален, и даже если вы сделаете несколько идентичных запросов DELETE, результат будет одинаковым: удаленный ресурс. Скорее всего, вы просто получите сообщение об ошибке 404, если отправить запрос DELETE для одного и того же ресурса несколько раз, поскольку сервер не сможет найти его после удаления. Запросы DELETE отвечают кодом состояния 200 (OK) в случае успешного удаления или 404 (NOT FOUND), если не удалось найти удаляемый ресурс. Все вышеуказанные запросы возвращают значение 500 (ВНУТРЕННЯЯ ОШИБКА СЕРВЕРА), если обработка завершается неуспешно и сервер выдаёт ошибку. Что же такое REST? Перейдем к последнему термину – REST. Возможно, вы слышали термин RESTful application ранее. Важно понимать, что это означает, потому что, если вы используете HTTP для обмена данными между клиентом и сервером, полезно следовать рекомендациям REST. На самом деле, HTTP-методы, которые мы рассмотрели выше, не что иное, как часть REST. REST расшифровывается как Representational State Transfer (Передача состояния представления). Это архитектурный стиль проектирования приложения. Основная идея заключается в том, что для выполнения вызовов между машинами используется протокол «без состояния», «клиент-сервер», «кэшируемый» - и чаще всего этот протокол HTTP. В общем, REST это согласованный набор ограничений для проектирования приложения. Эти ограничения помогают сделать систему более производительной, масштабируемой, простой, изменяемой, видимой, портативной и надежной. Полный список ограничений очень длинный, и вы можете прочитать об этом здесь. В этой статье остановимся на двух наиболее важных из них: 1. Унифицированный интерфейс - Uniform interface: это ограничение позволяет определить интерфейс между клиентом и сервером путь, чтобы упростить и разъединить архитектуру. Там написано, что: Ресурсы должны быть идентифицируемыми в запросе (например, с помощью идентификаторов ресурсов в URI). Ресурс (например, данные в базе данных) - это данные, которые определяют представление ресурса (например, JSON, HTML). Ресурсы и представления ресурсов - это концептуально разные сущности - клиент взаимодействует только с представлением ресурсов. Клиент должен иметь достаточно информации для управления ресурсами на сервере с помощью представления ресурса. Каждое сообщение, которым обмениваются клиент и сервер, должно быть самоописательным и содержать информацию о том, как обрабатывать сообщение. Клиенты должны отправлять данные о состоянии с использованием основного содержимого HTTP, заголовка HTTP-запроса, параметров запроса и URL-адреса. Серверы должны отправлять данные о состоянии с помощью тела HTTP, кодов ответов и заголовков ответов. Примечание: Описанные выше команды HTTP составляют основную часть ограничения «унифицированного интерфейса», поскольку они представляют собой единообразные действия, которые происходят с ресурсами. 2. Отсутствие состояния - Stateless: это ограничение говорит о том, что все данные о состоянии, необходимые для обработки запроса клиента, должны содержаться в самом запросе (URL, параметры запроса, тело HTTP или заголовки HTTP), а сервер должен отправить все необходимые данные о состоянии клиенту через сам ответ (заголовки HTTP, код состояния и тело ответа HTTP). Примечание: Состояние - или состояние приложения - это данные, необходимые серверу для выполнения запроса. Это означает, что для каждого запроса мы пересылаем информацию о состоянии туда и обратно, так что сервер не должен поддерживать, обновлять и отправлять состояние. Наличие системы без сохранения состояния делает приложения намного более масштабируемыми, потому что ни один сервер не должен беспокоиться о поддержании одного и того же состояния сеанса на протяжении нескольких запросов. Все необходимое для получения данных о состоянии доступно в самом запросе и ответе. Заключение HTTP далеко не прост. Но, как вы видите, это критически важный компонент отношений между клиентом и сервером. Для создания RESTful приложений требуется по крайней мере базовое понимание HTTP. С таким багажом знаний, следующий проект для вас будет намного проще.
img
Продолжаем рассказывать про механизмы QoS (Quality of Service) . Мы уже рассказаывали про то, какие проблемы могут быть в сети и как на них может повлиять QoS. В этой статье мы поговорим про механизмы работы QoS. Механизмы QoS В связи с тем, что приложения могут требовать различные уровни QoS, возникает множество моделей и механизмов, чтобы удовлетворить эти нужды. Рассмотрим следующие модели: Best Effort –негарантированная доставка используется во всех сетях по умолчанию. Положительная сторона заключается в том, что эта модель не требует абсолютно никаких усилий для реализации. Не используются никакие механизмы QoS, весь трафик обслуживается по принципу “пришел первым – обслужили первым”. Такая модель не подходит для современных сетевых сред; Integrated Services (IntServ) – эта модель интегрированного обслуживания использует метод резервирования. Например, если пользователь хотел сделать VoIP вызов 80 Кбит/с по сети передачи данных, то сеть, разработанная исключительно для модели IntServ, зарезервировала бы 80 Кбит/с на каждом сетевом устройстве между двумя конечными точками VoIP, используя протокол резервирования ресурсов RSVP (Resource Reservation Protocol) . На протяжении звонка эти 80 Кбит/с будут недоступны для другого использования, кроме как для VoIP звонка. Хотя модель IntServ является единственной моделью, обеспечивающей гарантированную пропускную способность, она также имеет проблемы с масштабируемостью. Если сделано достаточное количество резервирований, то сеть просто исчерпает полосу пропускания; Differentiated Services (DiffServ) – модель дифференцированного обслуживания является самой популярной и гибкой моделью для использования QoS. В этой модели можно настроить каждое устройство так, чтобы оно могло использовать различные методы QoS, в зависимости от типа трафика. Можно указать какой трафик входит в определенный класс и как этот класс должен обрабатываться. В отличие от модели IntServ, трафик не является абсолютно гарантированным, поскольку сетевые устройства не полностью резервируют полосу пропускания. Однако DiffServ получает полосу, близкую к гарантированной полосе пропускания, в то же время решая проблемы масштабируемости IntServ. Это позволило этой модели стать стандартной моделью QoS; Инструменты QoS Сами механизмы QoS представляют собой ряд инструментов, которые объединяются для обеспечения уровня обслуживания, который необходим трафику. Каждый из этих инструментов вписывается в одну из следующих категорий: Классификация и разметка (Classification and Marking) - Эти инструменты позволяют идентифицировать и маркировать пакет, чтобы сетевые устройства могли легко идентифицировать его по мере пересечения сети. Обычно первое устройство, которое принимает пакет, идентифицирует его с помощью таких инструментов, как списки доступа (access-list), входящие интерфейсы или deep packet inspection (DPI), который рассматривает сами данные приложения. Эти инструменты могут быть требовательны к ресурсам процессора и добавлять задержку в пакет, поэтому после того как пакет изначально идентифицирован, он сразу помечается. Маркировка может быть в заголовке уровня 2 (data link), позволяя коммутаторам читать его и/или заголовке уровня 3 (network), чтобы маршрутизаторы могли его прочитать. Для второго уровня используется протокол 802.1P, а для третьего уровня используется поле Type of Service. Затем, когда пакет пересекает остальную сеть, сетевые устройства просто смотрят на маркировку, чтобы классифицировать ее, а не искать глубоко в пакете; Управление перегрузками (Congestion Management)– Перегрузки возникают, когда входной буфер устройства переполняется и из-за этого увеличивается время обработки пакета. Стратегии очередей определяют правила, которые маршрутизатор должен применять при возникновении перегрузки. Например, если интерфейс E1 WAN был полностью насыщен трафиком, маршрутизатор начнет удерживать пакеты в памяти (очереди), чтобы отправить их, когда станет доступна полоса пропускания. Все стратегии очередей направлены на то, чтобы ответить на один вопрос: “когда есть доступная пропускная способность, какой пакет идет первым?“; Избегание заторов (Congestion Avoidance) – Большинство QoS механизмов применяются только тогда, когда в сети происходит перегрузка. Целью инструментов избегания заторов является удаление достаточного количества пакетов несущественного (или не очень важного) трафика, чтобы избежать серьезных перегрузок, возникающих в первую очередь; Контроль и шейпинг (Policing and Shaping) – Этот механизм ограничивает пропускную способность определенного сетевого трафика. Это полезно для многих типичных «пожирателей полосы» в сети: p2p приложения, веб-серфинг, FTP и прочие. Шейпинг также можно использовать, чтобы ограничить пропускную способность определенного сетевого трафика. Это нужно для сетей, где допустимая фактическая скорость медленнее физической скорости интерфейса. Разница между этими двумя механизмами заключается в том, что shaping формирует очередь из избыточного трафика, чтобы выслать его позже, тогда как policing обычно сбрасывает избыточный трафик; Эффективность линков (Link Efficiency) – Эта группа инструментов сосредоточена на доставке трафика наиболее эффективным способом. Например, некоторые низкоскоростные линки могут работать лучше, если потратить время на сжатие сетевого трафика до его отправки (сжатие является одним из инструментов Link Efficiency); Механизмы Link Efficiency При использовании медленных интерфейсов возникают две основных проблемы: Недостаток полосы пропускания затрудняет своевременную отправку необходимого объема данных; Медленные скорости могут существенно повлиять на сквозную задержку из-за процесса сериализации (количество времени, которое маршрутизатору требуется на перенос пакета из буфера памяти в сеть). На этих медленных линках, чем больше пакет, тем дольше задержка сериализации; Чтобы побороть эти проблемы были разработаны следующие Link Efficiency механизмы: Сжатие полезной нагрузки (Payload Compression) – сжимает данные приложения, оправляемые по сети, поэтому маршрутизатор отправляет меньше данных, по медленной линии; Сжатие заголовка (Header Compression) – Некоторый трафик (например, такой как VoIP) может иметь небольшой объем данных приложения (RTP-аудио) в каждом пакете, но в целом отправлять много пакетов. В этом случае количество информации заголовка становится значимым фактором и часто потребляет больше полосы пропускания, чем данные. Сжатие заголовка решает эту проблему напрямую, устраняя многие избыточные поля в заголовке пакета. Удивительно, что сжатие заголовка RTP, также называемое сжатым транспортным протоколом реального времени (Compressed Real-time Transport Protocol - cRTP) уменьшает 40-байтовый заголовок до 2-4 байт!; Фрагментация и чередование (Link Fragmentation and Interleaving) - LFI решает проблему задержки сериализации путем измельчения больших пакетов на более мелкие части до их отправки. Это позволяет маршрутизатору перемещать критический VoIP-трафик между фрагментированными частями данных (которые называются «чередованием» голоса); Алгоритмы очередей Постановка в очереди (queuing) определяет правила, которые маршрутизатор должен применять при возникновении перегруженности. Большинство сетевых интерфейсов по умолчанию используют базовую инициализацию First-in, First-out (FIFO) . В этом методе сначала отправляется любой пакет, который приходит первым. Хотя это кажется справедливым, не весь сетевой трафик создается равным. Основная задача очереди - обеспечить, чтобы сетевой трафик, обслуживающий критически важные или зависящие от времени бизнес-приложения, отправлялся перед несущественным сетевым трафиком. Помимо очередности FIFO используются три первичных алгоритма очередности: Weighted Fair Queuing (WFQ)– WFQ пытается сбалансировать доступную полосу пропускания между всеми отправителями равномерно. Используя этот метод, отправитель с высокой пропускной способностью получает меньше приоритета, чем отправитель с низкой пропускной способностью; Class-Based Weighted Fair Queuing (CBWFQ) – этот метод массового обслуживания позволяет указать гарантированные уровни пропускной способности для различных классов трафика. Например, вы можете указать, что веб-трафик получает 20 процентов полосы пропускания, тогда как трафик Citrix получает 50 процентов пропускной способности (вы можете указать значения как процент или конкретную величину полосы пропускания). Затем WFQ используется для всего неуказанного трафика (остальные 30 процентов в примере); Low Latency Queuing (LLQ) - LLQ часто упоминается как PQ-CBWFQ, потому работает точно так же, как CBWFQ, но добавляется компонент приоритета очередей (Priority Queuing - PQ). Если вы указываете, что определенный сетевой трафик должен идти в приоритетную очередь, то маршрутизатор не только обеспечивает пропускную способность трафика, но и гарантирует ему первую полосу пропускания. Например, используя чистый CBWFQ, трафику Citrix может быть гарантированно 50% пропускной способности, но он может получить эту полосу пропускания после того, как маршрутизатор обеспечит некоторые другие гарантии трафика. При использовании LLQ приоритетный трафик всегда отправляется перед выполнением любых других гарантий. Это очень хорошо работает для VoIP, делая LLQ предпочтительным алгоритмом очередей для голоса; Существует много других алгоритмов для очередей, эти три охватывают методы, используемые большинством современных сетей
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59