По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
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 предпочтительным алгоритмом очередей для голоса; Существует много других алгоритмов для очередей, эти три охватывают методы, используемые большинством современных сетей
img
В этой статье рассматривается OSPF и все проблемы, которые могут возникнуть с этим протоколом. OSPF отличается от EIGRP протоколом состояния канала, но общим для них является то, что оба протокола маршрутизации устанавливают соседство до обмена информацией о маршрутизации. В случае OSPF мы обмениваемся LSA (объявление о состоянии канала), чтобы создать LSDB (база данных о состоянии канала). Наилучшая информация из LSDB будет скопирована в таблицу маршрутизации. В этой части мы начнем с устранения неполадок соседей OSPF. Как только у нас есть рабочее соседство OSPF, мы рассмотрим другие проблемы, такие как отсутствующие маршруты. Full просмотр соседства OSPF При просмотре соседства OSPF, мы видим, что оно сообщает нам Full. Необходимо больше информации для понимания состояния Full. Если смежность соседства OSPF не полная, мы рассматриваем одно из следующих состояний: Соседей нет вообще Оно "залипло" в ATTEMPT. Оно "залипло" в INIT. Оно "залипло" в 2-WAY. Оно "залипло" в EXSTART/EXCHANGE. Оно "залипло" в LOADING. Давайте начнем и рассмотрим разные ситуации, которые могут возникнуть с соседством OSPF! Видео: протокол OSPF (Open Shortest Path First) за 8 минут Урок 1 у нас есть 2 маршрутизатора Мы начнем со сценариев, когда OSPF вообще не имеет соседства. В приведенном выше примере у нас есть 2 маршрутизатора. нет никакого OSPF соседства Как вы можете видеть, у нас нет никакого OSPF соседства, что может быть не так? show ip ospf interface show ip ospf interface Можно было просто посмотреть на текущую конфигурацию и выяснить, что не так, но мы не ищем простых путей. Мы используем другие полезные команды OSPF. Сначала используем команду show ip ospf interface. Мы видим, что OSPF не включен на интерфейсе FastEthernet 0/0 R1, но он работает на R2. Кто-то допустил ошибку с командой network и набрал неверный сетевой адрес Кто-то допустил ошибку с командой network и набрал неверный сетевой адрес ... простая ошибка, но такие вещи случаются. R1(config)#router ospf 1 R1(config-router)#no network 192.168.21.0 0.0.0.255 area 0 R1(config-router)#network 192.168.12.0 0.0.0.255 area 0 Настройка правильного сетевого адреса и обратной маски устраняет эту ошибку. Настройка правильного сетевого адреса Проблема решена. Соседство OSPF установлено. Это было легкое начало... Итог урока: проверьте правильность настройки сетевого адреса, обратной маски и области. Урок 2 2 маршрутизатора, но проблема другая Очередная проблема. Схема аналогичная: 2 маршрутизатора, но проблема другая. нет никакого соседства OSPF Как вы видите, нет никакого соседства OSPF. Протокол OSPF был включен на интерфейсе обоих маршрутизаторов Протокол OSPF был включен на интерфейсе обоих маршрутизаторов, поэтому мы знаем, что был использован правильный тип сети. Однако если вы внимательно посмотрите на R1, то увидите, что на нем написано "No Hellos (Пассивный интерфейс)". Если вы настроите пассивный интерфейс, то сеть на интерфейсе все равно будет объявлена, но она не будет отправлять приветственные пакеты OSPF. Таким образом, невозможно создать соседство OSPF. невозможно создать соседство OSPF Вот она проблема. R1(config)#router ospf 1 R1(config-router) #no passive-interface Fe0/0 Удалим пассивный интерфейс. Удалим пассивный интерфейс Соседство OSPF работает. Проблема устранена! Итог урока: проверьте, что OSPF отправляет приветственные пакеты на интерфейс, поскольку, в противном случае, вы не сможете создать соседство. Урок 3 те же маршрутизаторы, другая проблема Следующий сценарий с теми же маршрутизаторами, но другая проблема. R1 показывает, что наш сосед OSPF находится в состоянии INIT R2 ничего не показывает Интересно... R1 показывает, что наш сосед OSPF находится в состоянии INIT, а R2 ничего не показывает. OSPF был правильно настроен на обоих интерфейсах OSPF был правильно настроен на обоих интерфейсах Как мы видим, в примере выше OSPF был правильно настроен на обоих интерфейсах. Поскольку R1 показывает состояние INIT, мы можем сделать вывод, что он получает что-то от R2. R2 ничего не показывает, поэтому, вероятно, ничего не получает от R1. OSPF использует пакеты приветствия для установления соседства OSPF, и они отправляются с использованием многоадресного адреса 224.0.0.5. можем ли мы пропинговать адрес многоадресной рассылки можем ли мы пропинговать адрес многоадресной рассылки Рекомендуется проверить, можем ли мы пропинговать адрес многоадресной рассылки, который OSPF использует для пакетов приветствия. Мы видим, что R1 и R2 оба не получают ответа. Отправка эхо-запросов друг другу проходят без проблем Отправка эхо-запросов друг другу проходят без проблем Отправка эхо-запросов друг другу проходят без проблем. Так что может вызвать проблемы с отправкой и получением многоадресного трафика OSPF? Как насчет списка доступа? на R2 имеется входящий список доступа на R2 имеется входящий список доступа Мы что-то нашли. И это то, что на R2 имеется входящий список доступа с именем BLOCKSTUFF. в нижней части access-list имеется данный запрет Список доступа разрешает только TCP, UDP и ICMP трафик. OSPF не использует TCP или UDP, и он удаляется этим списком доступа из-за deny any. Мы этого не видим в верхнем листинге, но в нижней части access-list имеется данный запрет. R2(config)#ip access-list extended BLOCKSTUFF R2(config-ext-nacl)#5 permit ospf any any проведем коррекцию Проведем коррекцию access-list, чтобы был разрешен трафик OSPF. теперь она отображается как Full Проблема решена, теперь она отображается как Full. теперь можно пинговать адрес многоадресной рассылки 224.0.0.5 OSPF теперь можно пинговать адрес многоадресной рассылки 224.0.0.5 OSPF Ну что, теперь можно пинговать адрес многоадресной рассылки 224.0.0.5 OSPF. Мы видим ответ с другой стороны. Итог урока: не блокируйте многоадресные адреса OSPF 224.0.0.5 и 224.0.0.6 (DR / BDR). Урок 4 от же сценарий, другая проблема Это еще не все! Тот же сценарий, другая проблема: Соседство OSPF отсутствует, но мы видим, что OSPF был включен на интерфейсе Соседство OSPF отсутствует, но мы видим, что OSPF был включен на интерфейсе Соседство OSPF отсутствует, но мы видим, что OSPF был включен на интерфейсе Соседство OSPF отсутствует, но мы видим, что OSPF был включен на интерфейсе Соседство OSPF отсутствует, но мы видим, что OSPF был включен на интерфейсе. Пинг на адреса многоадресной рассылки проходит Пинг на адреса многоадресной рассылки проходит Пинг на адреса многоадресной рассылки проходит, так что это уже хорошо. Это хороший момент для включения отладки, чтобы узнать, что происходит: что происходит за кулисами Это очень полезная отладка, которая позволяет увидеть, что происходит за кулисами. сбросим процесс OSPF Мы сбросим процесс OSPF, чтобы ускорить отладку. Имейте в виду, что вы также можете сбросить только одно соседство OSPF. Это лучшая идея, если это применяется в производственной сети (сети предприятия или организации). R1 говорит, что он получил пакет Теперь нам есть с чем работать. R1 говорит, что он получил пакет hello, но у нас есть несоответствующие параметры hello. R означает то, что мы получили, а C - что мы настроили. Как мы видим, существует несоответствие в маске подсети. R1 настроен с маской подсети 255.255.255.0, в то время как R2 имеет маску подсети 255.255.255.128. OSPF будет сравнивать маску подсети только в том случае, если вы используете широковещательный тип сети. show ip ospf interface show ip ospf interface Можно использовать команду show ip ospf interface для проверки типа сети, и видно, что она является broadcast. Здесь мы видим, что R2 имеет другую маску подсети Здесь мы видим, что R2 имеет другую маску подсети Здесь мы видим, что R2 имеет другую маску подсети. Необходимо это исправить! R2(config)#interface Fe0/0 R2(config-if)#ip address 192.168.12.2 255.255.255.0 Достаточно просто... соседство OSPF работает соседство OSPF работает Теперь мы видим, соседство OSPF работает. Итог урока: проверьте правильность использования одинаковых масок подсетей на маршрутизаторах, которые напрямую связаны друг с другом. Урок 5 Та же топология, и у нас очередная проблема с пакетами hello Давайте продолжим, но уже со следующей ошибкой. Та же топология, и у нас очередная проблема с пакетами hello. Сразу перейдем к отладочной части: проблема похожа на наш последний сценарий Эта проблема похожа на наш последний сценарий. Есть часть параметров, которые должны совпадать в hello-пакете, чтобы создать соседство OSPF. dead-interval на R1 сконфигурирован на 24 секунды, а на R2 - на 11 секунд. hello-interval сконфигурирован на 10 секунд на R2 и 6 секунд на R1. Поменяем настройки параметров: R1(config)#interface Fe0/0 R1(config-if)#ip ospf hello-interval 10 R1(config-if)#ip ospf dead-interval 11 Нам нужно изменить это на уровне интерфейса. Введенные команды с новыми параметрами Введенные команды с новыми параметрами решают нашу проблему. Соседство OSPF работает. Урок 6 Топология Еще одна проблема, с которой нам, возможно, придется столкнуться, это аутентификация. OSPF предлагает 3 метода аутентификации: без аутентификации Plaintext MD5 аутентификация нет соседей OSPF нет соседей OSPF Как мы видим, у нас нет соседей OSPF. Давайте используем debug: Debug ip ospf adj Debug ip ospf adj поможет нам решить эти неполадки. Видно, что мы получаем пакет с аутентификацией типа 2, а используется тип 0. Вот что это значит: Type 0: нет аутентификации. Type 1: plaintext аутентификация. Type 2: MD5 аутентификация. Соответственно - R1 сконфигурирован без аутентификации, а R2 сконфигурирован на использование аутентификации MD5. R2 сконфигурирован на использование аутентификации MD5 Мы также можем посмотреть информацию OSPF для каждого интерфейса, чтобы увидеть, включена ли аутентификация или нет. включена ли аутентификация или нет Это то, что настроено на интерфейсе R2. R1(config)#interface FastEthernet0/0 R1(config-if)#ip ospf authentication message-digest R1(config-if)#ip ospf message-digest-key 1 md5 MYKEY Мы копируем и вставляем его в R1. копируем и вставляем его в R1 Проблема устранена! Если вам интересно, вот что вы увидите, когда задан неправильный пароль на одном из маршрутизаторов: R1(config)#interface FastEthernet0/0 R1(config-if)#no ip ospf message-digest-key 1 md5 MYKEY R1(config-if)#ip ospf message-digest-key 1 md5 WRONGKEY Сначала мы поменяем ключ: отладчик говорит нам, что мы используем неправильный ключ Наш отладчик говорит нам, что мы используем неправильный ключ между нашими маршрутизаторами. Извлеченный урок: убедитесь, что вы используете один и тот же тип аутентификации OSPF и пароль между маршрутизаторами. Урок 7 Тот же сценарий Что еще может пойти не так? Кажется, что нет никаких проблем, связанных с соседством OSPF! Тот же сценарий, теперь другая проблема: Соседство отсутствует OSPF Соседство отсутствует OSPF OSPF-соседство отсутствует. есть несоответствие в номере области На одном из наших маршрутизаторов появилось сообщение. Оно не требует объяснений, похоже, у нас есть несоответствие в номере области. R1 настроен для области 1, а R2 настроен для области 0 R1 настроен для области 1, а R2 настроен для области 0 R1 настроен для области 1, а R2 настроен для области 0. Исправляем: network R1(config)#router ospf 1 R1(config-router)#no network 192.168.12.0 0.0.0.255 area 1 R1(config-router)#network 192.168.12.0 0.0.0.255 area 0 Мы используем команду network, чтобы задать правильный номер области. network Ура, все работает! Итог урока: убедитесь, что ваши маршрутизаторы OSPF согласовывают один и тот же номер области. Урок 8 а этот раз R1 и R2 находятся в одной зоне 1 Рисунок выше слегка отличается от предыдущего. На этот раз R1 и R2 находятся в одной зоне 1. нет соседей нет соседей Вот так сюрприз... нет соседей! Запускаем отладку: Запускаем отладку Очень интересно! Существует несоответствие в опции stub/transit area. OSPF имеет различные типы областей, и оба маршрута должны согласовываться с типом области (stub, nssa, totally stub и totally nssa). R1, по-видимому, настроен на использование normal area R1, по-видимому, настроен на использование normal area. R2, похоже, настроен на использование stub area R2, похоже, настроен на использование stub area. Несоответствие в типе области означает, что мы не можем установить соседство OSPF. R2 имеет команду area 1 stub На листинге выше мы видим, что R2 имеет команду area 1 stub. Удалим ее. R2(config)#router ospf 1 R2(config-router)#no area 1 stub Изменим область 1 на normal area для R2. Изменим область 1 на normal area для R2 Изменим область 1 на normal area для R2 Итог урока: убедитесь, что ваши маршрутизаторы OSPF используют один и тот же тип области. Урок 9 Очередная ситуация с неполадками с OSPF Очередная ситуация с неполадками в OSPF, которая на первый взгляд кажется очень запутанной. Давайте посмотрим на конфигурацию OSPF обоих маршрутизаторов: посмотрим на конфигурацию OSPF обоих маршрутизаторов посмотрим на конфигурацию OSPF обоих маршрутизаторов Это простая конфигурация. таблица соседства OSPF не пустая таблица соседства OSPF не пустая У нас таблица соседства OSPF не пустая, но оба маршрутизатора "застряли" в состоянии 2WAY. Помимо поиска нужного нам слова "FULL", следует обратить внимание на две вещи, отображаемые командой show: Оба маршрутизатора показывают друг друга как DROTHER. Приоритет для обоих маршрутизаторов равен 0. В multi-access сети, такой как Ethernet, OSPF будет выполнять выборы DR/BDR, если тип сети broadcast или non-broadcast. Проверяем тип сети: Оба интерфейса настроены для типа сети broadcast Оба интерфейса настроены для типа сети broadcast Оба интерфейса настроены для типа сети broadcast. Это значение по умолчанию для интерфейсов Ethernet. Это означает, что у нас есть выборы DR/BDR, но оба маршрутизатора настроены на приоритет 0, а это означает, что они не будут участвовать в выборах DR/BDR. По этой причине они застряли в состоянии 2WAY. Необходимо это исправить: R1(config)#interface fastEthernet 0/0 R1(config-if)#ip ospf priority 1 Мы изменим приоритет на одном из маршрутизаторов. Мы видим, что R1 был выбран для DR Мы видим, что R1 был выбран для DR Все работает. Мы видим, что R1 был выбран для DR, потому что он имеет приоритет 1. Итог урока: Типы широковещательной и не вещательной сети требуют выбора DR/BDR. Убедитесь, что один из маршрутизаторов выбран. В следующей статье мы разберем еще 8 уроков траблшутинга OSPF.
img
Когда речь заходит о веб-фреймворках на Python, то можно смело сказать, что Django и Flask – это два самых популярных. Мы уже писали про фреймворк Django, так что теперь давайте посмотрим на его младшего (но не менее мощного) брата. Итак, что же такое Flask? Flask – это микофреймворк для разработчиков, который позволяет им быстро и просто создавать и масштабировать веб-приложения. Выяснение того, как они это делают, займет чуть больше времени. Для начала мы кратко рассмотрим основные способы использования Python веб-разработчиками в цифровых системах, а затем поговорим о самом микрофреймворке Flask. А далее мы рассмотрим некоторые плюсы и минусы его использования и сравним Flask с его более известным собратом Django. Как разработчики используют Python? Язык программирования Python – это область деятельности не только для ученых и аналитиков данных. Его гибкость – одна из ключевых причин, по которой огромное количество веб-разработчиков изучают его и профессионально используют во всех видах проектов. Преимущественно они используют его для создания мощных серверных веб-приложений, которые могут быстро обрабатывать данные. Они также используют его для таких областей, как сбор данных, машинное обучение и искусственный интеллект. Разработчикам нравится простота использования и эффективность Python, поскольку он позволяет создавать быстро загружаемые и безопасные веб-сайты. Еще до этапа развертывания – Python идеально подходит для проектирования и тестирования прототипов, позволяя выполнять итерации и разработку, быстро достигая финального этапа разработки готового продукта. Если вам нужны более конкретные примеры, то мы нашли некоторые из наиболее известных примеров использования Python от таких компаний, как Netflix, Uber и Spotify. На самом деле есть очень много преимуществ изучения и использования Python для веб-разработки. Когда речь заходит о разработке веб-приложения на Python, то тут есть много разных вариантов, но наверху этого списка находятся именно Django и Flask. А сейчас давайте продолжим и узнаем поподробнее о втором – о Flask. Что такое Flask? Flask входит в топ-20 самых востребованных веб-фреймворков согласно опросу Stack Overflow 2022 года – неплохо для микрофреймворка. Откуда такое признание? В основном от того, что для своей работы он не полагается на какие-либо другие инструменты или программные библиотеки. Flask, которому уже немного больше 11 лет, примерно того же возраста, что и более известный веб-фреймворк Django. Из-за того, что язык Python был назван в честь комедийной труппы Monty Python, то и весь проект Flask изначально задумывался как первоапрельская шутка. Однако Армин Ронахер, создатель, понял, что то, что задумывалось как шутка, может действительно превратиться во что-то реально полезное – подходящую основу для создания веб-приложений. Его название – это обыгрывание названия более раннего веб-фреймворка Bottle. Flask – это то, что известно как фреймворк WSGI. Оно произносится как «виски» и обозначает Web Server Gateway Interface (интерфейс шлюза веб-сервера). По сути, это способ для веб-серверов передавать запросы веб-приложениям или платформам. Flask использует для работы внешнюю библиотеку WSGI, а также шаблонизатор Jinja2. Это готовый фреймворк, что означает, что вы можете без проблем перейти на работу с ним – это одно из его основных преимуществ. Итак, теперь мы знаем, что такое Flask, а значит, пришло время посмотреть, как его используют разработчики. Преимущества и недостатки Flask Преимущества Flask: Масштабируемость Размер – это все, и статус Flask в качестве микрофреймворка означает, что вы можете использовать его для невероятно быстрого развития технического проекта, такого как веб-приложения. Если вы планируете создать приложение, которое будет начинаться с малого формата, но при этом будет иметь потенциал быстрого роста в том числе и в тех направлениях, которые вы еще не полностью проработали, то Flask – идеальный выбор для вас. Его простота использования и малое количество зависимостей позволяют ему работать бесперебойно даже при масштабировании. Гибкость Это основная функция Flask и одно из его самых больших преимуществ. Перефразируя один из принципов дзэн Python, простота лучше сложности, так как ее можно легко перераспределить и переместить. Это полезно не только с точки зрения того, что ваш проект можно легко продвигать в другом направлении, но это также гарантирует, что структура проекта не рухнет при изменении какой-либо ее части. Минималистичность Flask и его способность разрабатывать небольшие веб-приложения означают, что он даже более гибкий, чем Django. Легкость в использовании Как и в случае с Django, способность быстро ориентироваться помогает веб-разработчикам сосредотачиваться только на написании кода, а не на попытках разобраться, как и что работает. Микрофреймворк прост для понимания, и не только экономит веб-разработчикам их время и усилия, но и позволяет им максимально контролировать их код и все, что только можно. Простота Когда этот термин используется в отношении какого-либо инструмента или фреймворка, то речь идет о его конструкции – есть несколько составных частей, которые необходимо собирать и собирать повторно, и он не зависит от большого количества программных расширений для функционирования. Такая конструкция дает веб-разработчикам определенный уровень контроля. Flask также поддерживает модульное программирование, в котором его функциональность можно разделить на несколько взаимозаменяемых модулей. Каждый модуль действует как независимый строительный блок, который может выполнять какую-то часть функциональных возможностей. В общем это означает, что все составные части структуры являются гибкими, подвижными и тестируемыми сами по себе. Документация Согласно теории создателя о том, что «хороший план разработки документации на самом деле заставляет вас писать документацию», пользователи Flask могут найти большое количество структурированных примеров и рекомендаций. Это создает хорошие условия для того, чтобы разработчики использовали фреймворк, так как они могут легко ознакомиться с различными аспектами и возможностями инструмента. Документацию Flask можно найти на их официальном сайте. Недостатки Flask: Небольшое количество инструментов Конечно же есть и некоторые недостатки в простоте этого микрофреймворка. Главный из них заключается в том, что, в отличие от Django, в Flask нет такого большого количества различных инструментов. Это значит, что разработчикам придется вручную добавлять программные расширения, такие как библиотеки. А при добавлении большого количества таких расширений приложение может начать тормозить из-за большого количества запросов. Трудность ознакомления с большими приложениями Из-за того, что разработка приложения с использованием Flask может иметь множество различных тонкостей, веб-разработчик, пришедший к проекту на полпути, может столкнуться с трудностями во время ознакомления с тем, как оно было разработано. Модульная структура микрофреймворка, о которой мы упоминали ранее, может усложнять работу программистов, которым нужно ознакомиться с каждой составной частью. Затраты на техническое обслуживание Поскольку Flask является гибким с точки зрения использования технологий, с которыми он может взаимодействовать, то довольно часто компании, использующие Flask, несут дополнительные расходы на поддержку этих технологий. Например, если технология, взаимодействующая с вашим приложением, устареет или перестанет существовать, то компании придется искать новую технологию, которая будет также совместима с вашим приложением. Чем сложнее приложение, тем выше потенциальные затраты на обслуживание и внедрение. Flask vs Django Скорее всего, вы уже поняли, что эти двое много чем похожи. Все чаще они упоминаются в одном ряду. И Flask, и Django предназначены для того, чтобы разработчикам было легче начать работу с проектами, а также легче масштабировать их в приложения. Они оба просты в развертывании, оба очень просто проводят модульное тестирование и идут вместе с документацией. Предоставление веб-разработчикам возможности более продуктивно писать код именно на Python, а не на других языках, во многом объясняет их популярность. Опрос Python-разработчиков, проведенный JetBrains в 2021 году, показал, что Django и Flask находятся в тупиковой ситуации с точки зрения популярности. Так чем же они отличаются? Применение Полезный совет, позволяющий понять, что и когда использовать, заключается в следующем: Django подходит для больших проектов и для небольших, которые так и останутся ими, а Flask – для небольших приложений, у которых есть перспектива стать больше. Django – это монолит, что значит, что он старается быть полноценным универсальным механизмом для вас и ваших потребностей. Из-за такой своей требовательности это может оказаться не очень оптимально для некоторых разработчиков. В качестве альтернативы, как микрофреймворк, Flask может легко и гибко взаимодействовать с другими инструментами, даже с теми, с которыми вы изначально не планировали работать. С Django вам необходимо будет определить масштаб проекта заранее. Общественная поддержка Flask имеет гораздо меньшее и менее сплоченное сообщество пользователей в сравнении с Django, поэтому, если у вас возник тот или иной вопрос, то у вас гораздо меньше шансов найти ответ на форуме, так как меньше активных пользователей, которые обращаются за помощью. Простой способ проверить - зайти на главный веб-форум Stack Overflow. Проверка форума показала, что против 46 966 вопросов с тегом Flask выступают 273 775 вопросов с тегом Django. Это ни в коем случае не означает, что сообщество Flask полностью мертво. Это лишь значит, что это немного более молодой фреймворк, а, соответственно, и его сообщество. Безопасность В то время как Django может похвастаться отличными функциями аутентификации и входа в систему для пользователей, Flask не может себе такого позволить. Тем не менее, микрофреймворк поддерживает безопасные cookie-файлы на клиентской стороне. В целом, Django считается «полностью укомплектованным» фреймворком и более безопасным. Доступ к базе данных Еще одно ключевое отличие для разработчиков, работающих с базами данных, - насколько Django и Flask поддерживают к ним доступ, в основном объектно-реляционное управление (ORM - Object Relational Management). Объектно-реляционное управление позволяет API легко получать доступ к данным без необходимости писать SQL-команды. Django поддерживает ORM, что позволяет писать сложные запросы. А вот Flask-разработчикам, к сожалению, придется писать все свои SQL-операторы самостоятельно, что, конечно, может добавить лишней работы. Стоимость Flask более гибкий из-за его относительной поворотливости, тогда как Django в целом считается более дешевым в обслуживании с точки зрения эксплуатационных расходов. Мало того, что для работы с Flask требуется дополнительная поддержка из-за ряда технологий, с которыми он работает, так и разработчиков, имеющих опыт работы с ним, найти сложнее, чем тех, кто имел дело с Django. Если говорить о сравнении и принятии решения как предприятием, так и технической командой, что использовать и для какого проекта, то это действительно зависит от специфики и масштаба самого проекта. Но если вы веб-разработчик, который работает с Python, и пытается решить, с каким фреймворком ему лучше познакомиться, то почему бы не сразу с обоими? Знания и опыт развертывания проектов с использованием как Django, так и Flask могут значительно повысить ценность ваших навыков (и потенциально повысить вашу зарплату разработчика полного цикла). Итоги Итак, вот оно: введение в микрофреймворк Flask, включая то, как его использовать, а также плюсы и минусы. Крайне важно, чтобы технические команды знали и понимали, для каких проектов лучше всего подходит Flask, а какие проекты – это работа для более крупного веб-фреймворка Django. В любом случае, любой веб-разработчик, работающий с Python, должен знать, как работать хотя бы с одним из этих двух популярных инструментов.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59