По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Пришло время заняться некоторыми более продвинутыми и интересными функциями протокола маршрутизации Open Shortest Path First. Мы начинаем с изучения конфигурации и проверки различных областей OSPF. Это упражнение является не только забавным, но и действительно может закрепить знания о том, как эти области функционируют и почему они существуют. Видео: протокол OSPF (Open Shortest Path First) за 8 минут OSPF LSA Types Области (Areas) - это фундаментальная концепция OSPF. Это то, что делает протокол маршрутизации иерархическим, как мы любим говорить. Существует основная магистральная область (область 0), которая соединяется с нормальными, не магистральными областями. Магистраль может также соединяться с особыми типами областей, которые мы подробно рассмотрим в этой группе статей. Такая иерархическая природа конструкции помогает гарантировать, что протокол является очень масштабируемым. Мы можем легко уменьшить или исключить ненужные потоки трафика маршрутизации и связи между областями, если это необходимо. Магистральная и не магистральная область (Backbone и Non-Backbone Areas) Вернемся немного назад к нашим предыдущим сообщениям в статьях об OSPF. На рисунке 1 показана простая многозонная сеть. Сейчас я настрою эту сеть, используя мой любимый подход к конфигурации, команду конфигурации уровня интерфейса ip ospf. Пример 1 показывает конфигурацию всех трех устройств. Рисунок 1: Магистральная и не магистральная область (Backbone и Non-Backbone Areas) Пример 1: Настройка магистральных и не магистральных областей ATL Router: ATL#conf t Enter configuration commands, one per line. End with CNTL/Z. ATL(config)#interface fa0/0 ATL(config-if)#ip ospf 1 area 0 ATL(config-if)#interface lo0 ATL(config-if)#ip ospf 1 area 0 ATL(config-if)#end ATL# ATL2 Router: ATL2#conf t Enter configuration commands, one per line. End with CNTL/Z. ATL2 (config)#interface fa0/0 ATL2 (config-if)#ip ospf 1 area 0 ATL2 (config-if)#interface *Mar 27 22 :03 :27.815 : %0SPF-5-ADJCHG : Process 1, Nbr 1 .1.1 .1 on FastEthernet0/0 from LOADING to FULL, Loading Done ATL2 (config-if)#interface fa1/0 ATL2 (config-if)#ip ospf 1 area 1 ATL2 (config-if)#end ATL2# ORL Router: ORL# conf t Enter configuration commands, one per line. End with CNTL/Z. ORL( config )#interface fa1/0 ORL(config-if)#ip ospf 1 area 1 ORL(config-if)#end ORL# *Mar 27 22 :04:21.515: %0SPF-5-ADJCHG: Process 1, Nbr 10.23.23.2 on FastEthernet1/0 from LOADING to FULL , Loading Done Обратите внимание на простоту этой конфигурации, даже если мы настраиваем довольно сложный протокол маршрутизации. Area Border Router (ABR) находится в ATL2 с одним интерфейсом в магистральной и одним в не магистральной области. Обратите также внимание, как мы получаем некоторые «бонусные» проверки. Когда мы настраиваем интерфейсы, мы можем видеть, что OSPF-соседства формируются между устройствами. Это избавляет нас от необходимости проверять их «вручную» с помощью следующей команды: ATL2# show ip ospf neighbor Интересной проверкой для нас здесь является проверка префикса 1.1.1.0/24 с устройства ATL (а также удаленной связи между ATL и ATL2). Мы проверяем это на ORL, чтобы проверить многозональную конфигурацию OSPF. Поскольку это «нормальная» область, все LSA должны быть разрешены в этой области, и мы должны видеть, что префикс появляется как межзонный маршрут OSPF. show ip route ospf Хотя это не часто требуется при устранении неполадок, но мы можем изучить базу данных OSPF, чтобы увидеть различные типы LSA. show ip ospf database Записи состояния соединения маршрутизатора являются Type 1 LSA. Это конечные точки в нашей локальной области 1. Записи состояния net link-это Type 2 LSA. Здесь мы видим идентификатор маршрутизатора назначенного маршрутизатора (DR). Наконец, суммарные состояния сетевых ссылок — это Type 3 LSA. Это префиксы, которые ABR посылает в нашу область. Конечно же, это loopback (1.1.1.0) и удаленная сеть (10.12.12.0). Примечание: интерфейс обратной связи (loopback interface) объявлен как хост-маршрут 32-разрядной версии. Чтобы изменить это, вы можете просто использовать команду ip ospf network point-to-point на интерфейсе loopback. Это изменяет тип сети от типа loopback для OSPF и вызывает объявление маски в том виде, в каком она настроена. Теперь пришло время добавить к этой истории еще и другое. Давайте настроим некоторые внешние префиксы и введем их в домен OSPF. Это просто благодаря loopback interfaces. Мы создадим некоторые из них на маршрутизаторе ATL, запустим EIGRP на них, а затем перераспределим их в OSPF. ATL#conf t Enter configuration commands, one per line. End with CNTL/Z . ATL (config)#interface lo10 ATL (config-if)#ip address 192.168.10.1 255.255.255.0 ATL (config-if)#interface loopback 20 ATL (config-if)#ip address 192.168.20.1 255.255.255.0 ATL (config if)#router eigrp 100 ATL (config-router)#network 192 .168.10.1 0.0.0.0 ATL (config-router)#network 192.168.20.1 0.0.0.0 ATL (config-router)#router ospf 1 ATL (config-router)#redistribute eigrp 100 subnets metric 1000 ATL (config-router)#end ATL# Теперь у нас есть еще более интересные проверки на устройстве ORL. Во-первых, таблица маршрутизации: show ip route ospf Обратите внимание, что удаленные префиксы перечислены как маршруты E2. Это значение по умолчанию для внешних маршрутов OSPF типа 2. Это означает, что метрика остается неизменной, поскольку префикс течет от ASBR (автономного системного пограничного маршрутизатора) к внутреннему спикеру OSPF. Вы можете изменить тип на Type 1, если хотите, когда вы выполняете перераспределение. Возможно, больший интерес представляет база данных OSPF: show ip ospf database Обратите внимание, как мы подбираем Type 4 LSA (summary ASB link state), который является идентификатором маршрутизатора (1.1.1.1) ASBR (ATL). Мы также получаем Type 5 LSA, которые являются внешними префиксами. На этом мы завершим ПЕРВУЮ часть нашей продвинутой серии блогов OSPF. В следующий раз мы рассмотрим создание stubby areas, totally stubby areas, not so stubby areas (NSSA), и totally NSSA.
img
Подсистема Windows для ОС Linux, как отдельное приложение в Windows 11. Теперь пользователям Windows стало проще изучать ОС Linux на своих компьютерах с установленной ОС Windows 11. Компания Microsoft разработала собственную подсистему Windows для Linux (Windows Subsystem for Linux - WSL), которая доступна в Microsoft Store для ОС Windows 11. WSL - это приложение, которое позволяет пользователям Windows запускать среду GNU/Linux непосредственно в Windows без дополнительной установки виртуальной машины или установки двух ОС на один ПК. Одним из удобных аспектов является то, что WSL устанавливается как отдельное приложение, отделенное от операционной системы. Это означает, что пользователи могут обновлять приложение, не дожидаясь, пока станут доступны обновления ОС Windows. Данное приложение в Microsoft Store не является новой версией WSL. Это все еще WSL 2. Но это preview-версия, которая была добавлена в качестве опции для конечных пользователей, чтобы быстрее и удобнее получать новейшие функции. Двоичные файлы больше не будут входить в образ ОС Windows. Если вы не еще не успели познакомиться с WSL 2, то в новой версии заметите серьезную переработку базовой архитектуры WSL и использование виртуализации и ядра Linux для включения новых функций. Это позволило увеличить производительность файловой системы и поддерживать полную совместимость с системными вызовами. Чтобы установить и использовать WSL из Microsoft Store, у пользователя должна быть установлена ОС Windows 11 build 22000 или выше. Новые функции включают в себя то, что WSLg (графический интерфейс, поддерживающий запуск приложений Linux) теперь поставляется в комплекте с ним. Кроме того, теперь проще монтировать файлы образов виртуального жесткого диска, доступно определение типа файловой системы и поддерживается именование точек монтирования через WSL. Они также добавили индикатор, который сообщает о длительном процессе установок. Ядро Linux было обновлено до версии 5.10.60.1. Подсистема для Linux включена в WSL 1, но ее нет в WSL 2 из Microsoft Store, так как она является отделенным от образа Windows. Кроме того, приложения с Linux GUI уже будут установлены — все, что вам нужно, в одном пакете. Пользователям не надо будет ничего удалять из своих систем. У них по-прежнему будет возможность запустить более старую установленную версию WSL. Почему же на данный момент можно установить только preview-версию? Компания Microsoft все сводит к тому, чтобы в конечном итоге перевести всех на версию WSL из Microsoft Store для лучшего взаимодействия с пользователем, более быстрых обновлений и отсутствия необходимости обновлять свою ОС. Но все решит пользователь, как будет развиваться WSL. После тестирования данной подсистемы как отдельного приложения пользователями, компания Microsoft примет решение о курсе развития технологии WSL.
img
Универсальный уникальный идентификатор (UUID - Universally Unique Identifier) – это форма идентификатора, которую можно с уверенностью признать уникальной для большинства практических целей. Даже если два UUID были сгенерированы в двух различных средах двумя сторонами, они имеют ничтожные шансы на то, чтобы оказаться идентичными. Именно поэтому UUID считаются универсально уникальными. В этой статье мы с вами рассмотрим характеристики UUID, то, как работает их уникальность, и сценарии, для которых они могут упростить процесс идентификации ресурсов. Несмотря на то, что мы будем рассматривать UUID с точки зрения программного обеспечения, которое взаимодействует с записями базы данных, их также можно применять и в других ситуациях, где требуется децентрализованная генерация уникальных идентификаторов.  Что такое на самом деле универсальный уникальный идентификатор (UUID)? UUID – это просто значение, которое с уверенностью можно рассматривать как уникальное. Вероятность обнаружения двух одинаковых UUID настолько мала, что ее можно просто игнорировать. Вы можете встретить и другие термины для UUID, например, GUID (Globally Unique Identifier, - глобальный уникальный идентификатор) (такой вариант предпочитает Microsoft), однако смысл и свойства остаются теми же.  Истинный UUID – это уникальный идентификатор, который был сгенерирован и представлен в стандартизированном формате. Допустимые UUID определены в спецификации RFC 4122. Она описывает алгоритмы, которые можно использовать для генерации UUID, которые бы сохраняли свою уникальность в различных реализациях без участия основной выдающей стороны.  В RFC есть пять различных алгоритмов. У каждого из этих алгоритмов есть свой собственный механизм генерации значений. Ниже приведено краткое описание доступных «версий»: Версия 1 – Time-Based – объединяет метку времени, тактовую последовательность и значение, которое является характерным для генерирующего устройства (как правило, это MAC-адрес); таким образом создается выходное значение, которое является уникальным для этого хоста на определенный момент времени. Версия 2 – DCE Security – эта версия была создана как модификация Версии 1, которую можно использовать в среде распределенных вычислений (DCE - Distributed Computing Environment). Применяется не так часто.  Версия 3 – Name-Based (MD5) – MD5 хеширует «пространство имен» и «имя» для того, чтобы создать значение, которое будет уникальным для этого имени в пределах пространства имен. Попытка создать другой UUID с тем же пространством имен и тем же именем приведет к тому, что вы получите идентичный результат. Так что, этот метод дает воспроизводимые результаты.  Версия 4 – Random – большинство современных систем выбирают именно эту версию, поскольку здесь для получения выходного значения используется источник случайных и псевдослучайных чисел. Вероятность того, что будут созданы два одинаковых UUID, ничтожна мала.   Версия 5 – Name-Based (SHA-1) – эта версия в какой-то степени похожа на Версию 3, но здесь для хеширования пространства имен и имени используется более криптостойкий алгоритм SHA-1.  Хоть в RFC алгоритмы и обозначены как «версии», это ни в коем случае не значит, что всегда нужно использовать Версию 5, потому что она вроде бы самая новая. Выбор версии зависит от вашего варианта использования; зачастую выбирается Версия 4 из-за случайного характера генерации значений. Именно это делает ее идеальным вариантом для простых сценариев из разряда «дайте мне новый идентификатор».  Алгоритмы генерации на выходе дают 128-битное целое число без знака. Но при этом UUID чаще всего рассматривают как шестнадцатеричные строки. Также их можно хранить в виде двоичной последовательности из 16 символов. Ниже приведен пример UUID: 16763be4-6022-406e-a950-fcd5018633ca Значение записано с помощью пяти групп буквенно-числовых символов, разделенных дефисом. Последние не являются обязательными составляющими строки; их наличие связано с историческими тонкостями спецификации UUID. А еще они значительно облегчают зрительное восприятие идентификатора.  Варианты использования UUID В основном UUID используют для децентрализованного создания уникальных идентификаторов. Вы можете создать UUID где угодно и с уверенностью сказать, то он уникальный, независимо от того, был он создан на вашем сервере, в клиентском приложении или в вашей базе данных.  UUID упрощают определение и обеспечение идентичности объекта в изолированных средах. Согласно сложившейся практике, большинство приложений в качестве первичного ключа используют целочисленное поле с автоинкрементом. В таком случае, когда вы создаете новый объект, то вы не узнаете его идентификатор до тех пор, пока не добавите его в базу данных. С помощью UUID вы можете определить идентификатор в вашем приложении намного раньше.  Ниже приведен демонстрационный пример, написанный на PHP, который покажет разницу. Для начала давайте посмотрим на целочисленную систему: class BlogPost {    public function __construct(        public readonly ?int $Id,        public readonly string $Headline,        public readonly ?AuthorCollection $Authors=null) {} } #[POST("/posts")] function createBlogPost(HttpRequest $Request) : void {    $headline = $Request -> getField("Headline");    $blogPost = new BlogPost(null, $headline); } Мы должны инициализировать свойство  $Id как  null , поскольку мы не будем знать его фактический идентификатор до тех пор, пока не добавим его в базу данных. Это не самый идеальный вариант –  $Id не должен обнуляться, из-за этого экземпляры  BlogPost находятся в незавершенном состоянии.  Перейдем к UUID; это решит проблему: class BlogPost {    public function __construct(        public readonly string $Uuid,        public readonly string $Headline,        public readonly ?AuthorCollection $Authors=null) {} } #[POST("/posts")] function createBlogPost(HttpRequest $Request) : void {    $headline = $Request -> getField("Headline");    $blogPost = new BlogPost("16763be4-...", $headline); } Идентификаторы публикаций теперь можно создавать прямо в приложении, не думая о том, что они могут повториться. Это гарантирует, что экземпляры объекта всегда находятся в действительном состоянии и что ну нужно присваивать ID нулевое значение. Также эта модель упрощает обработку транзакционной логики; дочерние записи, которым нужна ссылка на родителя (например, взаимосвязи автора ( Author ) нашей публикации), могут быть добавлены немедленно, и не нужно обращаться к базе данных для того, чтобы получить идентификатор родителя.  В перспективе большую часть логики данного приложения-блога можно будет переместить на клиентскую сторону. Возможно, внешний интерфейс сможет поддерживать полностью автономное создание черновиков, по сути создавая экземпляры  BlogPost , которые будут временно сохраняться на устройстве пользователя. Теперь клиент может создавать UUID для публикации и, если ему нужно будет восстановить подключение к сети, передавать его на сервер. Если в обозримом будущем клиент получит копию черновика с сервера, то он сможет сравнить ее с любым сохранившимся локальным состоянием, так как он уже будет знать UUID.  С помощью UUID можно комбинировать данные из различных источников. Объединение таблиц базы данных и кэшей, которые используют целочисленные первичные ключи, может оказаться довольно трудоемким процессом, и, плюс ко всему, в процессе могут возникать ошибки. UUID обеспечивает уникальность идентификатора не только внутри таблиц, но и на уровне всего пространства. Это делает их более предпочтительным вариантом для дублируемых структур и данных, которые часто необходимо перемещать из одной системы хранения в другую. Нюансы, возникающие при встрече UUID с базами данных Преимущества UUID довольно привлекательны. Однако есть несколько подводных камней, о которых следует помнить при использовании UUID в реальных системах. Один из значительных факторов в пользу целочисленных идентификаторов – их легко масштабировать и оптимизировать. Механизмы управления базами данных могут с легкостью индексировать, сортировать и фильтровать список чисел, которые идут одно за другим. А вот про UUID такого сказать нельзя. Прежде всего, UUID в четыре раза больше, чем целое число (36 против 4 байтов); для больших наборов данных этот факт уже может быть существенным моментом. Такие значения намного сложнее сортировать и индексировать, особенно если речь идет о случайных UUID, которые являются самыми популярными. Их случайный характер говорит о том, что они не имеют естественного порядка. Если вы используете UUID в качестве первичного ключа, то это может навредить производительности при индексировании. Все эти проблемы могут усугубляться в хорошо нормализованной базе данных, которая активно использует внешние ключи. В таком случае у вас может оказаться большое количество реляционных таблиц, каждая из которых хранит ссылки на ваши 36-байтные UUID. В конечном счете, дополнительная память, которая необходима для выполнения операций объединения и сортировки, может негативно сказаться на производительность вашей системы.   У вас есть возможность немного сгладить нежелательные последствия, сохранив свои UUID в виде двоичных данных. Это значит, что вместо столбца  VARCHAR(36) у вас будет столбец  BINARY(16) . Некоторые базы данные, например, PostgreSQL, имеют встроенный тип данных  UUID ; другие, например, MySQL, имеют специальные функции, которые преобразовывают строку UUID в двоичную форму и наоборот. Такой подход, конечно, более эффективный, но не забывайте, что вам по-прежнему придется использовать дополнительные ресурсы для хранения и выборки данных.  Эффективной может оказаться стратегия, когда вы в качестве первичных ключей оставляете целые числа, но при этом добавляете дополнительное поле UUID для того, чтобы ваше приложение могло на него ссылаться. Реляционные таблицы ссылок могут использовать идентификаторы для повышения производительности, пока ваш код извлекает и вставляет объекты верхнего уровня с UUID. Здесь все зависит от вашей системы, ее масштаба и ваших приоритетов: если вам нужна децентрализованная генерация идентификаторов и простейшее слияние данных, то лучший вариант – это UUID, но вам следует помнить и об обратной стороне медали. Заключение UUID – это уникальные значения, которые можно использовать для децентрализованной генерации идентификаторов. Совпадение идентификаторов возможно, но вероятность такого события настолько мала, что ее можно не учитывать. Если бы вы генерировали один миллиард UUID в секунду в течении 100 лет, то вероятность обнаружить дубликат составила бы около 50% при условии наличия достаточной энтропии.  У вас есть возможность использовать UUID для установления идентичности независимо от вашей базы данных до того, как вы добавите объект в базу данных. Такой подход упрощает код прикладного уровня и не допускает того, что объекты в вашей системе будут идентифицированы неправильно. UUID также содействуют репликации данных, гарантируя уникальность вне зависимости от хранилища данных, устройства или среды, чего нельзя сказать о целочисленных ключах, которые действуют на уровне таблиц.  Несмотря на то, что UUID широко используются при разработке программного обеспечения, они не являются идеальным решением. Новички часто зацикливаются на возможности обнаружения совпадений, но это не должно быть вашим главным аргументом, если только ваша система не настолько чувствительна, что вам просто необходимо гарантировать уникальность идентификаторов.  Более очевидная проблема для большинства разработчиков заключается в хранении и извлечении сгенерированных UUID. Примитивное использование  VARCHAR(36) (или  VARCHAR(32) , если вы удалите дефисы) в долгосрочной перспективе может оказывать негативное влияние на ваше приложение, так как большая часть попыток оптимизировать индексацию базы данных будут неэффективными. Изучите встроенные средства обработки UUID в вашей системе управления базой данных для того, чтобы максимально улучшить производительность вашего программного решения. 
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59