SIP пїЅпїЅпїЅпїЅпїЅпїЅ PRI пїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
Слишком длинный поисковый запрос.
По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Наряду с Laravel, существует множество PHP-фреймворков с достаточно мощными техническими возможностями, такие как Symfony, CodeIgniter, Phalcon и другие. Тем не менее, Laravel бесподобен. Именно поэтому, наверное, этот фреймворк обрел широкую популярность за последние несколько лет. Он до сих пор входит в топ GitHub, с большим, чем 62k звездами. В данной статье обсудим Laravel, почему он так распространен, а затем некоторые из лучших хостинг платформ где установлен Laravel. Что такое Laravel? Laravel - часто используемый PHP-фреймворк с открытым исходным кодом, созданный в 2011 году Тейлором Отвеллом. Он используется для разработки от простых веб-сайтов до сложных веб-приложений. Он основан на архитектуре MVC (model, view, controller). Принцип этой архитектуры - разделение входных, выходных данных и основного функционала интерактивных приложений на отдельные составляющие, что позволяет писать хорошо отлаженный, гибкий и простой в обслуживании код. Есть и другие причины, по которым Laravel знаменит: Объектно-ориентированный подход с выразительным синтаксисом Встроенная авторизация и аутентификация Пакетная система для ускорения разработки приложений Несколько файловых систем - локальное хранилище и облачное хранилище, например RackSpace и Amazon S3 Консоль Artisan для управления миграциями баз данных, публикации ресурсов пакетов и т.д. Мощный ORM Отличные показатели при тестировании Трансляция и планирование задач Учитывая популярность данного фреймворка, недостатка в хостинг-платформах для него нет, но не все они имеют нужный функционал и надежность. И если решили работать с Laravel и хотите выжать максимальную пользу из этой PHP-фреймфорка, важно использовать надежную платформу. Технически приложение на Laravel можно разместить на хостинг-платформе с поддержкой PHP, но не все они будут оптимизированы под Laravel. 1. Forge Первый кандидат - Forge. Он позволяет развертывать и предоставлять неограниченные приложения на Linode, DigitalOcean, AWS, Hetzner, Vultr и других. На сегодня Forge управляет более чем 352 тысячами приложений и заслужил доверие тысячи компаний и разработчиков. Он позволяет размещать приложения на нескольких облачных среда на ваш выбор. Всю заботу по установке PHP, Nginx, MySQL, Redis, Postgres и других важных программ Forge берет на себя. И не надо беспокоиться по поводу обновления всего арсенала вручную. Буквально простым нажатием можно развернуть коды из GitHub или Bitbucket. Для эффективной совместной работы членам команды можно выдавать разные права на панель управления сервером. Forge предоставляет функцию изоляции пользователей, которая помогает разделять и защищать учетные записи пользователей. Аутентификация сервера выполняется по протоколу SSH, но необходимый брандмауэр не используется. Управлять сервером можно с помощью удобной веб-панели или API. На Forge достаточно хорошо организована интеграция с LetsEncrypt, так что можно получить SSL сертификаты бесплатно. Он предлагает доступные планы, которые начинаются с $12 в месяц за 1 сервер, неограниченное развертывание и сайты, а также функцию Push-to-Deploy. 2. A2 Hosting Если нужно чтобы веб-сайт работал отлажено и показывал высокую производительность, а это нужно, то следует обратить внимание на уже известный читателям нашей базы знаний хостинг-провайдера A2. A2 Hosting обеспечивает высокопроизводительный серверный хостинг для Laravel на платформе SwedingServer. Также можно выбрать опцию Turbo Servers, что даст в 20 раз большую производительность, чем стандартный план. Их серверы оснащены твердотельными накопителями, а Turbo Server имеет AMD EPYC с драйверами NVMEe. В результате можно ожидать, что процессоры будут на 40% быстрее, скорость записи/чтения - в 3 раза, время до первого байта (TTFB) - в 2 раза, а трафик будет обрабатываться в 9 раз быстрее. Установка Laravel буквально производится одним щелчком мыши. Их практика Perpetual Security помогает уменьшить количество интернет-угроз, постоянно скрывающихся в Интернете. Для всех планов бесплатно доступны защита HackScan, которая блокирует попытки взлома, обновления KernelCare, двусторонний брандмауэр, защита от подбора, DDoS и другие функции безопасности. A2 Хостинг удобен для разработчиков и ориентирован на предоставление лучших версий программного обеспечения для разработки с момента его создания в 2003 году. Вы можете выбрать несколько версий PHP, MySQL, MariaDB, Python, PostgreSQL, Apache, SSH доступ и бесплатный SSL. A2 Хостинг предлагает бесплатную миграцию учетных записей. Они также гарантируют 99,9% времени безотказной работы, так что на них можно положиться. Цены начинаются всего с $2,99 за 1 сайт, 100GB SSD и другие функции. Он также включает 30-дневную гарантию возврата денег. 3. Cloudways Cloudways, обеспечивает почти в 300 раз высокую скорость работы сервера и полностью оптимизированную для веб-приложений производительность. Он поставляется с функциями хостинга высшего класса, которые помогают легко управлять приложением. Cloudways помогает повысить производительность приложения с помощью предварительно настроенных решений оптимизации, таких как PHP-FPM, Redis, Supervisord и других. Вы получаете хостинг на базе твердотельных накопителей с выделенным IP-адресом, чтобы пользоваться полным контролем над вашим сервером. Для более быстрой доставки контента здесь используется продвинутый стек приложений, который включает в себя современные технологии кэширования, такие как Lacnish, Memcached и CloudingCDN. Для обеспечения безопасности Cloudways регулярно обновляет брандмауэры и микропрограммы на уровне платформы. Для защиты от злоумышленников в дополнение к двухфакторной аутентификации можно использовать белый список IP-адресов. Хостинг предлагает возможность автоматического резервного копирование каждый час или каждые 7 дней и функцию автоматического восстановления. Также можно выбрать частоту резервного копирования исходя из нужд проектов. Cloudways использует таких поставщиков IaaS, как AWS, GCE, Linode, DigityOcean и Vultr, для размещения приложений в более чем 60 центрах обработки данных по всему миру. Это дает вам гибкость вертикального масштабирования, и нет сковывающего вас долгосрочного контракта. Cloudways поддерживает интеграцию Git, клонирование серверов и приложений, а также области размещения, что способствует эффективной совместной работе путем добавления членов группы. Цена зависит от выбранной платформы IaaS. 4. Servebolt Servebolt предлагает удобную среду Laravel, предоставляя Git, Composer и другие инструменты командной строки. Его серверы способны адаптироваться к настройкам и пользовательским рабочим процессам. Провайдер предлагает полное управление сервером с помощью SSH-доступа и быстрых баз данных для исключительной производительности. Servebolt предлагает устойчивую сеть, а также мониторинг серверов 24/7/365 для обеспечения высокой производительности и стабильности. Они обеспечивают интеграцию Git на панели управления с webhooks, что удобно для автоматизированного развертывания. Вы также можете интегрировать такие популярные инструменты, как Codeship, DeployHQ, Capistrano, StartCity, Jenkins и другими. Servebolt предоставил вам бесплатную помощь миграции. Они также обеспечивают 99,90% гарантии безотказной работы, включая SLA. 5. fortrabbit fortrabbit является одним из лучших провайдеров для хостинга Laravel и получил хорошие отзывы от своих пользователей. Он предлагает довольно простую установку Laravel и позволяет развертывать коды через Git push, поручая Composer обрабатывать остальное. Он имеет отзывчивое сообщество и известен своим качеством поддержки клиентов. Функции, входящие в состав fortrabbit, представляют собой полностью управляемые серверы с твердотельным накопителем, что обеспечивает высокую скорость работы. Поскольку сервер поддерживает масштабирование, его можно увеличивать или уменьшать в зависимости от потребностей. Кроме того, вы получаете поддержку SSH и SFTP, HTTPS, резервное копирование серверов и PHP 7. Они также предоставляют вам Memcache, чтобы в свою очередь обеспечивает высокую скорость и уменьшает нагрузку на базу данных. 6. ServerPilot ServerPilot позволяет размещать приложения и сайты Laravel на таких популярных платформах, как DigityOcean, с его простым, но интуитивно понятным интерфейсом и автоматизированным управлением серверами. Достаточно установите Ubuntu и ServerPilot сам построит стек приложений, настроит брандмауэры и т. д., подключив облачный сервер. На ServerPilot разработчики и агентства могут выбрать несколько версий Laravel. Гибкость и скорость поддерживаются за счет оптимизации Apache, Nginx, PHP-FPM. На одном сервере можно разместить несколько приложений Laravel. ServerPilot обеспечивает автоматизированную защиту, созданную исследователями, и включает автоматические обновления серверов и SSL-сертификаты с поддержкой HTTP/2. В дополнение к просмотру журналов и управлению производительностью приложений, можно отслеживать состояние сервера и получать подробные статистические данные. На данном хостинге также можно изолировать приложения, чтобы предотвратить случайное разрушительное влияние небезопасных плагинов, размещенные на том же сервере, на другие части сайта,. Цена ServerPilot начинается с $5/сервер в месяц, включая $0,50/приложение. 7. FastComet Облачный хостинг Laravel, предоставляемый SunComet, эффективен и экономичен. Они помогают развертывать и оптимизировать облачный сервер не за несколько часов, а за несколько минут. Даже можно бесплатно запросить перенос Laravel с помощью экспертов технической поддержки хостинг-провайдера. FastComet предлагает cPanel, самую мощную и популярную панель управления хостингом, включая удобную управление учетными записями. С помощью твердотельных накопителей можно получите доступ к файлам на 300% быстрее. Вы можете управлять всем, как профессионал с доступом ROOT. Еженедельное или ежедневное автоматизированное резервное копирование вместе со снимками данных по требованию. FastComet позволяет изменять размер сервера в любое время в зависимости от ваших потребностей. С помощью RocketBooster провайдер обеспечивает превосходную производительность и мониторинг серверов. FastComet защищает ваши серверы от угроз в Интернете с помощью SunGuard и информирует сети о вредоносных атаках. Его набор средств защиты включает полную изоляцию учетных записей, защиту от грубого перебора, брандмауэр, предотвращение DDoS, обнаружение вредоносных программ и удаление, а также фильтр ботнетов. SunComet имеет 9 глобальных центров обработки данных корпоративного уровня, а также 200 точек доступа Anycast Network для глобальной сети CDN. 8. Vapor А для тех, кто предпочитает безсерверные решения, есть Laravel Vapar - платформа для безсерверного развертывания Laravel, которая работает на базе AWS. Его масштабируемость - это то, чем вы увлекаетесь при использовании его платформы без сервера. Он не требует обслуживания сервера, и его можно автоматически масштабировать по требованию в течение нескольких секунд. Можно создавать, восстанавливать и управлять традиционными базами данных без сервера непосредственно с интуитивно понятной панели мониторинга Vapar. Получите всю необходимую скорость для хостинга Laravel как Vapar предоставляет вам возможность создавать кластеры ElastiCache, Redis и легко управлять ими. Наслаждайтесь мощью бессерверных вычислений, записывая и отправляя задания Laravel, и вы увидите, как сотни заданий выполняются одновременно без какой-либо конфигурации. Потоковый файл легко загружается в S3 с помощью встроенных утилит JavaScript. Хостинг предлагает отслеживание метрики приложения о базах данных, приложениях и кэшах. Они также предупреждают вас в случае, если производительность не достигает нужной отметки. Для увеличения скорости загрузки сайта, Vapor автоматически загружает и сохраняет данные через CloudFront CDN или S3. Есть возможность управления DNS-записями приложения из интерфейса командной строки или пользовательского интерфейса. В дополнение к этому вы получаете несколько сред для вашего приложения, быстрые откаты в случае ошибок и бесконечные развертывания. Цена Laravel Vapor начинается от 39 долларов в месяц. Заключение Выбор в пользу того или иного из перечисленных выше хостингов для приложений Laravel не будет проигрышным выбором. Тем более, что большинство из них гарантируют возврат денег, так что можно попробовать и выбрать именно то, что лучше всего подходит для ваших нужд.
img
Эта статья завершает нашу серию лекций по пониманию EIGRP рассмотрением двух последних тем: Идентификатор роутера EIGRP Требования к соседству EIGRP Предыдущие статьи цикла: Часть 1. Понимание EIGRP: обзор, базовая конфигурация и проверка Часть 2. Про соседство и метрики EIGRP Часть 2.2. Установка K-значений в EIGRP Часть 3. Конвергенция EIGRP – настройка таймеров Часть 4. Пассивные интерфейсы в EIGRP Часть 5. Настройка статического соседства в EIGRP Начнем мы наше обсуждение с рассмотрения идентификатора роутера EIGRP. EIGRP Router ID Каждый EIGRP-спикер роутер имеет ассоциируемый router ID EIGRP (RID). RID - это 32-битное значение, записанное в десятичном формате с точками, например IPv4-адрес. RID EIGRP определяется, когда процесс EIGRP начинает выполняться. Интересно, что EIGRP использует те же шаги для определения RID, что и OSPF. Ниже показаны последовательные шаги определения RID: Шаг 1. Применить заданное значение RID. Шаг 2. Если RID не настроен, используйте самый старший IPv4-адрес на loopback интерфейсе, находящийся в состоянии up/up. Шаг 3. Если ни один loopback интерфейс не настроен с IPv4-адресом, используйте самый высокий IPv4-адрес на non-loopback интерфейсе. Интересно, что в то время, как EIGRP требует, чтобы роутер имел RID, значение RID играет очень тривиальную роль в процессе EIGRP. Соседи EIGRP могут дублировать RID и устанавливать соседство EIGRP между ними, хотя лучше всего назначать уникальные RID соседям EIGRP. Однако, прежде чем мы чрезмерно минимизируем RID, есть один очень важный момент, когда роутер нуждается в уникальном RID роутера. В частности, если мы вводим внешние маршруты в процесс маршрутизации EIGRP, роутер, выполняющий это перераспределение, нуждается в уникальном RID. Настройка и проверка Router ID EIGRP Чтобы сделать схему сетевой адресации более интуитивно понятной, вы можете выбрать ручную настройку RID EIGRP на определенном роутере. Это можно сделать с помощью команды EIGRP router-id rid, как показано на роутере OFF1 и показано в следующем примере: OFF1#conf term Enter configuration commands, one per line. End with CNTL/Z. OFF1(config)#router eigrp 1 OFF1(config-router)#eigrp router-id 1.1.1.1 OFF1(config-router)#end OFF1# Обратите внимание на выходные данные в приведенном выше примере, что мы вручную установили RID роутера OFF1 на 1.1.1.1. Команды проверки, которые позволяют нам просматривать RID роутера, включают: show ip eigrp topology и show ip protocols, как показано в следующих примерах: Требования к соседству Одной из основных проблем, возникающих при устранении неполадок в сети EIGRP, является установление соседства. EIGRP имеет несколько требований, как и OSPF. Однако EIGRP и OSPF немного отличаются по своим предпосылкам соседства. В таблице ниже перечислены и противопоставлены правила установления соседства как для EIGRP, так и для OSPF. Требования EIGRP OSPF иметь возможность отправлять пакеты на другой сервер Да Да Первичный адрес интерфейса (не вторичный адрес) должен быть включен в ту же подсеть, что и сеть, сопоставляемая оператором network. Да Да Интерфейс, соединенный с соседом не должен быть пассивным. Да Да Необходимо использовать ту же автономную систему (для EIGRP) или process-ID (для OSPF) при настройке роутера. Да Нет Таймер Hello и таймер Hold (для EIGRP) или Dead таймер (дляOSPF)максимально совпадать. Нет Да Соседи должны аутентифицироваться друг с другом, если аутентификация настроена. Да Да Должно быть в той же зоне N/A Да IP MTU совпадает. Нет Да К-значения совпадают Да N/A Идентификаторы роутеров (rid) должны быть уникальными Нет Да
img
Первая часть тут. Вектор пути основан на хранении списка узлов, через которые проходит путь. Любой узел, который получает обновление с самим собой в пути, просто отбрасывает обновление, поскольку это не жизнеспособный путь. Рисунок 12 используется в качестве примера. На рисунке 12 каждое устройство объявляет информацию о местах назначения каждому соседнему устройству; для пункта назначения, прикрепленного к E: E будет анонсировать F с самим собой в источнике, поэтому с путем [E], как B, так и D. От B: B анонсирует F к A с путем [E, B]. Из D: D анонсирует F в C с путем [E, D]. От C: C анонсирует F к A с путем [E, D, C] Какой путь предпочтет A? В системе вектора пути может быть ряд метрик, включая длину пути, предпочтения политики и т. д. Например, предположим, что есть метрика, которая устанавливается локально на каждом узле, переносимом с каждым маршрутом. Эта локальная метрика переносится между узлами, но никак не суммируется при прохождении через сеть, и каждый узел может устанавливать эту метрику независимо от других узлов (при условии, что узел использует одну и ту же метрику по отношению к каждому соседу). Например, локальная метрика E объявляется B, который затем устанавливает свою собственную локальную метрику для этого пункта назначения и объявляет результирующий маршрут A и т. д. Чтобы определить лучший путь, каждый узел может затем Отбросить любое место назначения с идентификатором локального узла в пути. Сравнить метрику, выбрав наивысшую локальную метрику из полученных. Сравнить длину пути, выбрав самый короткий из полученных. Объявить только тот путь, который используется для пересылки трафика. Примечание.Не имеет значения, выбирает ли каждый узел самую высокую или самую низкую метрику. Важно только то, что каждый узел выполняет одно и то же действие во всей сети. Однако при сравнении путей узел всегда должен выбирать более короткий путь. Если каждый узел в сети всегда будет следовать этим трем правилам, то петля не образуется. Например: E объявляет F в B с путем [E] и метрикой 100. B объявляет F к A с путем [E, B] и метрикой 100. E объявляет F в D с путем [E] и метрикой 100. D объявляет F в C с путем [E, D] и метрикой 100. C объявляет F в A с путем [E, D, C] и метрикой 100. У A есть два пути, оба с одинаковой метрикой, и, следовательно, будет использовано второе правило, чтобы выбрать один путь, который является наиболее коротким. В этом случае A выберет путь через [E, B]. A будет объявлять маршрут, который он использует, к C, но если C следует тому же набору правил, у него также будет два пути с доступной метрикой 100, один с путем [E, B, A], а второй с путем [E, D, C]. В этом случае должен быть механизм разрешения конфликтов, который C использует внутри для выбора между двумя маршрутами. Неважно, что это за механизм разрешения конфликтов, если он постоянно применяется в узле. Независимо от того, какой путь выберет C, трафик к F не будет закольцован. Предположим, однако, несколько иное стечение обстоятельств: E объявляет F в B с путем [E] и метрикой 100. B объявляет F к A с путем [E, B] и метрикой 100. E объявляет F в D с путем [E] и метрикой 50. D объявляет F в C с путем [E, D] и метрикой 50. C объявляет F в A с путем [E, D, C] и метрикой 50. У A есть два пути: один с метрикой 100, а другой с метрикой 50. Следовательно: A выберет более высокую из двух метрик, путь через [E, B], и объявит этот маршрут C C выберет более высокую из двух метрик, путь через [E, B, A], и объявит этот маршрут D. D выберет более высокий из двух метрик, путь через [E, B, A, C], и объявит этот маршрут E. E отбросит этот маршрут, поскольку E уже находится на пути. Следовательно, даже если метрика перекрывает длину пути в (почти) каждом узле, цикл не образуется. Проблемы метрик Каждый алгоритм, обсуждавшийся до этого момента, использовал одну метрику для вычисления путей без петель, за исключением вектора пути, а вектор пути использует две метрики очень ограниченным образом, причем одна всегда предпочтительнее другой. Путь, по сути, можно рассматривать как «фактор разрешения конфликтов», который вступает в игру только тогда, когда основная метрика, которая никак не связана с путем (поскольку она не суммируется шаг за шагом в сети), не соответствует предотвратить петлю. Некоторые протоколы могут использовать несколько метрик, но они всегда будут каким-то образом комбинировать эти метрики, поэтому для поиска путей без петель используется только одна комбинированная метрика. Почему? С математической точки зрения, все методы, используемые для нахождения набора свободных от петель (или кратчайших) путей через сеть, разрешимы за полиномиальное или неэкспоненциальное время - или, скорее, они считаются проблемами класса P. Существует более широкий класс задач, содержащих P, который содержит любую задачу, решаемую с помощью (теоретической) недетерминированной машины Тьюринга. Среди NP-проблем есть набор задач, которые считаются NP-полными, что означает, что не существует известного эффективного способа решения проблемы. Другими словами, для решения проблемы необходимо перечислить все возможные комбинации и выбрать из этого набора наилучшее возможное решение. Проблема с множественными метриками классифицируется как NP-complete, и, следовательно, хотя и разрешима, она никоим образом не решаема, что позволяет использовать ее в коммуникационных сетях, близких к реальному времени. Алгоритмы непересекающихся путей Рассмотрим ситуацию медицинской операции, выполняемой роботом, который следует за руками живого хирурга на другом конце света. Возможно, что для того, чтобы такая система работала, требуется, чтобы пакеты доставлялись от датчиков на руках хирурга к роботу в реальном времени, по порядку, с минимальным значением параметра jitter или без него, и никакие пакеты нельзя отбрасывать. Это один из примеров. Конечно, он может быть расширен для других различных ситуаций, включая финансовые системы и другие механические системы управления, где требуется доставка пакетов в реальном времени без сбоев. В таких ситуациях часто требуется передать две копии каждого пакета, а затем позволить получателю выбрать пакет, наилучшим образом соответствующий характеристикам качества обслуживания (QoS) и потерям пакетов, необходимым для поддержки приложения. Однако все системы, рассмотренные до сих пор, могут найти только один путь без циклов и потенциально альтернативный путь (LFA и / или rLFA). Таким образом, с помощью алгоритмов непересекающихся путей решается следующая проблема: Как можно построить пути в сети таким образом, чтобы они использовали наименьшее количество перекрывающихся ресурсов (устройств и каналов), насколько это возможно (следовательно, максимально непересекающиеся или максимально избыточные)? В этой части лекций мы начнем с описания концепции двухсвязной сети, а затем рассмотрим два разных (но, казалось бы, связанных) способа вычисления непересекающихся топологий в двухсвязных сетях. Двухсвязные сети Двусвязная сеть - это любая сеть, в которой есть как минимум два пути между источником и местом назначения, которые не используют одни и те же устройства (узлы) или каналы (ребра). Обратите внимание на: Сеть является двусвязной по отношению к определенному набору источников и пунктов назначения; большинство сетей не имеют двух соединений для каждого источника и каждого пункта назначения. Небольшие блоки любой данной сети могут быть подключены двумя соединениями для некоторых источников и пунктов назначения, и эти блоки могут быть соединены между собой узкими одно- или двумя соединенными точками подключения. Часто проще всего понять двусвязность на реальном примере. На рисунке 13 показана сеть, с выделенными блоками. В блоке A есть как минимум два разных непересекающихся пути между X и F: [X, A, B, E, F] и [X, C, F] [X, A, B, F] и [X, C, F] В блоке B есть одна пара непересекающихся путей из G в L: [G, K, L] и [G, H, L]. Непересекающихся путей к Z нет, так как этот узел односвязен. Между F и G также нет непересекающихся путей, так как они односвязны. Канал [F, G] можно рассматривать как узкую точку между этими двумя блоками топологии. В сети, показанной на рисунке 13, невозможно вычислить два непересекающихся пути между X и Z. Алгоритм непересекающегося пути Суурбалле В 1974 году Дж. Суурбалле опубликовал статью, описывающую, как использовать несколько запусков SPF-алгоритма Дейкстры для поиска нескольких непересекающихся топологий в сети. Алгоритм по существу вычисляет SPF один раз, удаляет подмножество линий, используемых в SPT, а затем вычисляет второй SPF по оставшимся линиям. Алгоритм Суурбалле труднее объяснить, чем проиллюстрировать на примере, поскольку он опирается на направленный характер связей, вычисляемых с помощью SPT. В качестве примеров используются рисунки 14-18. На рисунке 14 показано состояние операций после завершения первого запуска SPF и вычисления начального SPT. Обратите внимание на стрелки направления на линиях. Не принято думать, что SPT является направленным, но на самом деле это так, когда каждая линия ориентирована в сторону от источника или корня дерева. Когда F вычисляет дерево обратно к X, оно также создает направленное дерево со стрелками, указывающими в противоположном направлении. Ребра (или связи) на SPT называются ребрами дерева, а ребра (или связи), не входящие в результирующий SPT, называются ребрами не деревьев. На рис. 14 края дерева отмечены сплошным черным цветом со стрелками направления, а ребра не деревьев - более светлыми серыми пунктирными линиями. Второй шаг показан на рисунке 15. На рисунке 15 показано каждое звено с измененными затратами; каждая линия, которая была частью исходного SPT (каждое ребро дерева, показано сплошной линией), имеет две стоимости, по одной в каждом направлении, в то время как линии, которые изначально не были частью SPT (ребра, не входящие в состав дерева, показаны пунктирными линиями), имеют свои исходные расходы. Обратите внимание на стрелки, показывающие направление стоимости в каждом случае; это будет важно на следующем этапе расчета. Для расчета стоимости двух направленных линий для каждого ребра дерева: Именуем один конец линии символом u, а другой конец линии символом v. Обратите внимание, что уравнение выполняется в обоих направлениях. Вычтем стоимость источника до v из стоимости линии от u до v. Добавим стоимость из источника к u. Если источник s: d[sp](u,v) = d(u,v) ? d(s,v) + d(s,u) По сути, это устанавливает стоимость ребер дерева равной 0, как можно увидеть, выполнив математические вычисления для ссылки [B, E]: B - есть u, E - есть v, A - есть s d(u,v) = 2, d(s,v) = 3, d(s,u) = 1 2 ? 3 + 1 = 0 Однако для всех ребер, не входящих в дерево, будет установлена некоторая (обычно большая) ненулевая стоимость. Для сети на рисунке 15: Для линии [B, A] (примечание [A, B] не является линией в вычисляемом дереве направлений): B - есть u, A - есть v, A - есть s d(u,v) = 0, d(s,v) = 0, d(s,u) = 1 0 ? 0 + 1 = 1 Для линии [E,B]: E – есть u, B – есть v, A - есть s d(u,v) = 2, d(s,v) = 1, d(s,u) = 3 2 ? 1 + 3 = 4 Для линии [C,A]: C – есть u, A – есть v, A – есть s d(u,v) = 2, d(s,v) = 0, d(s,u) = 2 2 ? 0 + 2 = 4 Для линии [F,D]: F – есть u, D – есть v, A – есть s d(u,v) = 1, d(s,v) = 4, d(s,u) = 5 1 ? 4 + 5 = 2 Для линии [D,B]: D – есть u, B – есть v, A – есть s d(u,v) = 1, d(s,v) = 1, d(s,u) = 2 1 ? 1 + 2 = 2 Следующий шаг, показанный на рисунке 16, состоит в том, чтобы удалить все направленные ребра, указывающие на источник, который лежит вдоль исходного SPT к определенному месту назначения (в данном случае Z), изменить направление ребер с нулевой стоимостью (линий) вдоль этого же пути, а затем снова запустить SPF Дейкстры, создав второй SPT на той же топологии. Возвращаясь к исходному SPT, путь от X до Z проходил по пути [A,B,D,F]. Таким образом, четыре ненулевых ребра (пунктирные линии), указывающие назад к источнику, А, вдоль этого пути были удалены. Вдоль того же пути [A, B,D,F] направление каждого ребра было изменено. Например, [A,B] первоначально указывало от A к B, а теперь указывает от B к A. Следующий шаг-запустить SPF по этому графику, помня, что трафик не может течь против направления линии. Полученное дерево показано на рисунке 17. На рисунке 17 показано исходное дерево и вновь вычисленное дерево, наложенные на исходную топологию в виде двух различных пунктирных линий. Эти две топологии все еще имеют общую связь [B,D], так что они еще не совсем разобщены. В этой точке есть два кратчайших пути от X до Z: [A,B,D,F] [A,C,D,B,E,F] Эти два графа объединяются, образуя набор ребер, и любые связи, которые включены в оба графа, но в противоположных направлениях, отбрасываются; комбинированный набор выглядит так: [A->B, B->E, E->F, A->C, C->D, D->F] Обратите внимание на направленность каждой линии связи еще раз - очень важно отсечь перекрывающуюся линию, которая будет указана как [B-> D] и [D-> B]. С помощью этого подмножества возможных ребер на графе можно увидеть правильный набор кратчайших путей: [A, B, E, F] и [A, C, D, F]. Алгоритм Суурбалле сложен, но показывает основные моменты вычисления непересекающихся деревьев, в том числе то, насколько сложно их вычислить. Максимально избыточные деревья Более простой альтернативой алгоритму Суурбалла для вычисления непересекающихся деревьев является вычисление максимально избыточных деревьев (Maximally Redundant Trees-MRT). Чтобы лучше понять MRT - это изучить Depth First Search (DFS), особенно нумерованный DFS. Рисунок 18 используется в качестве иллюстрации. На рисунке 18 левая сторона представляет простую топологию. Правая-ту же топологию, которая была пронумерована с помощью DFS. Предполагая, что алгоритм DFS, используемый для «обхода» дерева, всегда выбирает левый узел над правым, процесс будет выглядеть примерно так: 01 main { 02 dfs_number = 1 03 root.number = dfs_number 04 recurse_dfs(root) 05 } 06 recurse_dfs(current) { 07 for each neighbor of current { 08 child = left most neighbor (not visited) 09 if child.number == 0 { 10 dfs_number++ 11 child.number = dfs_number 12 if child.children > 0 { 13 recurse_dfs(child) 14 } 15 } 16 } 17 } Лучший способ понять этот код-пройти рекурсию несколько раз, чтобы увидеть, как она работает. Используя рисунок 18: При первом вызове recurse_dfs в качестве текущего узла устанавливается A или root. Оказавшись внутри recurse_dfs, выбирается крайний левый узел A или B. B не имеет номера при входе в цикл, поэтому оператор if в строке 09 верен. B назначается следующий номер DFS (строка 11). У B есть дочерние элементы (строка 12), поэтому recurse_dfs вызывается снова с B в качестве текущего узла. Оказавшись внутри (второго уровня) recurse_dfs, выбирается крайний левый сосед B, которым является E. E не имеет номера DFS, поэтому оператор if в строке 09 верен. E назначается следующий номер DFS (3) E не имеет дочерних элементов, поэтому обработка возвращается к началу цикла. F теперь является крайним левым соседом B, который не был посещен, поэтому он назначен дочернему элементу. F не имеет числа, поэтому оператор if в строке 09 верен. F назначается следующий номер DFS (4). У B больше нет дочерних элементов, поэтому цикл for в строке 07 завершается ошибкой, и программа recurse_dfs завершается. Однако на самом деле recurse_dfs не выходит - он просто «возвращается» к предыдущему уровню рекурсии, то есть к строке 14. Этот уровень рекурсии все еще обрабатывает соседей A. C - следующий сосед A, который не был затронут, поэтому дочерний элемент установлен в C. И так далее Изучение номеров узлов в правой части рисунка 18 приводит к следующим интересным наблюдениям: Если A всегда следует за возрастающим числом, чтобы достичь D,оно будет следовать по пути [A, C,G,D]. Если D всегда следует за уменьшающимся числом DFS, чтобы достичь A,он будет следовать по пути [D, A]. Эти два пути на самом деле не пересекаются. Это свойство сохраняется для всех топологий, которым были присвоены номера в результате поиска DFS: путь, следующий за постоянно увеличивающимися числами, всегда будет не пересекаться с путем, который всегда следует за убывающими числами. Это именно то свойство, на котором MRT строят непересекающиеся пути. Однако проблема с нумерацией DFS заключается в том, что это трудно сделать почти в реальном времени. Должен быть какой-то избранный корень, трафик на локальном уровне неоптимален (во многом как Minimum Spanning Tree или MST), и любые изменения в топологии требуют перестройки всей схемы нумерации DFS. Чтобы обойти эти проблемы, MRT строит непересекающиеся топологии, используя тот же принцип, но другим способом. Рисунок 19 используется для пояснения. Первым шагом в построении MRT является поиск короткого цикла в топологии от корня (обычно эти петли обнаруживаются с помощью алгоритма SPF Дейкстры). В этом случае в качестве корня будет выбран A, а цикл будет [A, B, C, D]. Этот первый цикл будет использоваться как первая из двух топологий, скажем, красная топология. Обращение цикла к [A, D, C, B] создает непересекающуюся топологию, скажем, синюю топологию. Эта первая пара топологий через этот короткий цикл называется «ухом». Для расширения диапазона МРТ к первому добавляется второе ухо. Для этого открывается второй цикл, на этот раз через [A, D, F, E, B], а непересекающаяся топология - [A, B, E, F, D]. Возникает вопрос: какое из этих двух расширений топологии следует добавить к красной топологии, а какое - к синей? Здесь вступает в игру форма нумерации DFS. Каждому устройству в сети уже должен быть назначен идентификатор либо администратором, либо через какой-либо другой механизм. Эти идентификаторы должны быть уникальными для каждого устройства. В схеме нумерации DFS также существует концепция нижней точки, которая указывает, где на конкретном дереве прикрепляется этот узел, а также какие узлы присоединяются к дереву через этот узел. Учитывая эти уникальные идентификаторы и возможность вычислять нижнюю точку, каждый узел в сети может быть упорядочен так же, как ему был присвоен номер в процессе нумерации DFS. Ключ в том, чтобы знать, как порядок соответствует существующей красной и синей топологиям. Предположим, что нижняя точка B выше, чем C, если топология [A, B, C, D] является частью красной топологии. Для любого другого «уха» или петли в топологии, которая проходит через B и C, направление «уха», в котором B меньше C, должно быть помещено в красную топологию. Петля в обратном направлении должна быть размещена на синей топологии. Это объяснение является довольно поверхностным, но оно дает вам представление о том, как MRT образуют непересекающиеся топологии. Двусторонняя связь В этой и предыдущей лекциях было описано несколько различных способов вычисления пути без петель (или набора непересекающихся путей) через сеть. В каждом из этих случаев вычисленный путь является однонаправленным - от корня дерева до краев или достижимых мест назначения. Фактически, обратного пути не существует. Другими словами, источник может иметь возможность достичь пункта назначения по пути без петель, но может не быть обратного пути от пункта назначения к источнику. Это может быть необычный режим отказа в некоторых типах каналов, результат фильтрации информации о доступности или ряд других ситуаций в сети. Примечание. Двусторонняя связь не всегда нужна. Рассмотрим, например, случай с подводной лодкой, которая должна получать информацию о своей текущей задаче, но не может передавать какую-либо информацию, не раскрывая своего текущего местоположения. Желательна возможность отправлять пакеты устройствам, расположенным на подводной лодке, даже если к ним нет двусторонней связи. Плоскости управления должны быть модифицированы или специально спроектированы для обработки такого необычного случая, поскольку обычно для правильной работы сети требуется двустороннее соединение. Еще одна проблема, с которой должны столкнуться плоскости управления в области вычислительных трактов, - это обеспечение сквозной двусторонней связи. Уровень управления может решить эту проблему несколькими способами: Некоторые плоскости управления просто игнорируют эту проблему, что означает, что они предполагают, что какой-то другой протокол, например транспортный протокол, обнаружит это состояние. Плоскость управления может проверить наличие этой проблемы во время расчета маршрута. Например, при вычислении маршрутов с использованием алгоритма Дейкстры можно выполнить проверку обратной связи при вычислении путей без петель. Выполнение этой проверки обратной линии связи на каждом этапе вычислений может гарантировать наличие двусторонней связи. Плоскость управления может предполагать двустороннюю связь между соседями, обеспечивая сквозную двустороннюю связь. Плоскости управления, которые выполняют явные проверки двусторонней связи для каждого соседа, могут (как правило) безопасно предполагать, что любой путь через этих соседей также поддерживает двустороннюю связь.
ЗИМНИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59