По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Когда синхронизация менее важна, чем фактическая доставка, трафиком часто можно управлять с помощью метода взвешенной справедливой организации очереди на основе классов (CBWFQ). В CBWFQ участвующие классы трафика обслуживаются в соответствии с назначенной им политикой. Например, трафику, помеченному как AF41, может быть гарантирована минимальная пропускная способность. Для трафика, помеченного как AF21, также может быть гарантирована минимальная пропускная способность, возможно, меньшая, чем объем, предоставленный трафику AF41. Немаркированный трафик может получить любую оставшуюся полосу пропускания. CBWFQ имеет понятие справедливости, когда различные классы трафика могут доставляться по перегруженному каналу. CBWFQ обеспечивает справедливое обслуживание пакетов в очереди в соответствии с политикой QoS. Пакеты будут отправляться всем классам трафика с назначенной им полосой пропускания. Например, предположим, что пропускная способность канала составляет 1024 Кбит / с. Для класса трафика AF41 гарантирован минимум 256 Кбит / с. Для класса AF31 гарантирована скорость минимум 128 Кбит / с. Для класса AF21 гарантирована скорость минимум 128 Кбит / с. Это дает нам соотношение 2: 1: 1 между этими тремя классами. Остальные 512 Кбит / с не распределены, то есть доступны для использования другим трафиком. Включая нераспределенную сумму, полное соотношение составляет 256: 128: 128: 512, что сокращается до 2: 1: 1: 4. Чтобы решить, какой пакет будет отправлен следующим, очередь обслуживается в соответствии с политикой CBWFQ. В этом примере пропускная способность 1024 Кбит / с делится на четыре части с соотношением 2: 1: 1: 4. Для простоты предположим, что перегруженный интерфейс будет обслуживать пакеты в очереди за восемь тактов: Тактовый цикл 1. Будет отправлен пакет AF41. Тактовый цикл 2. Будет отправлен еще один пакет AF41. Тактовый цикл 3. Будет отправлен пакет AF31. Тактовый цикл 4. Будет отправлен пакет AF21. Тактовые циклы 5-8. Пакеты с другими классификациями, а также неклассифицированные пакеты будут отправлены. В этом примере предполагается, что есть пакеты, представляющие каждый из четырех классов, находящихся в буфере, поставленных в очередь для отправки. Однако не всегда все бывает так однозначно. Что происходит, когда нет пакетов из определенного класса трафика для отправки, даже если есть место в гарантированном выделении минимальной полосы пропускания? Гарантированная минимальная пропускная способность не является резервированием. Если класс трафика, которому назначен гарантированный минимум, не требует полного распределения, другие классы трафика могут использовать полосу пропускания. Также нет жестких ограничений гарантированного минимума пропускной способности. Если объем трафика для определенного класса превышает гарантированный минимум и полоса пропускания доступна, трафик для класса будет проходить с большей скоростью. Таким образом, происходящее могло бы выглядеть примерно так: Тактовый цикл 1. Отправляется пакет AF41. Тактовый цикл 2. Нет пакета AF41 для отправки, поэтому вместо него отправляется пакет AF31. Тактовый цикл 3. Отправлен еще один пакет AF31. Тактовый цикл 4. Нет пакета AF21 для отправки, поэтому отправляется неклассифицированный пакет. Тактовые циклы 5-7. Отправляются пакеты с другими классификациями, а также неклассифицированные пакеты. Тактовый цикл 8. Нет более классифицированных или неклассифицированных пакетов для отправки, поэтому отправляется еще один пакет AF31. В результате неиспользованная полоса пропускания делится между классами с избыточным трафиком. Перегрузка CBWFQ не увеличивает пропускную способность перегруженного канала. Скорее, алгоритм предусматривает тщательно контролируемое совместное использование перенапряженного канала, отражающее относительную важность различных классов трафика. В результате совместного использования CBWFQ трафик доставляется через перегруженный канал, но с меньшей скоростью по сравнению с тем же каналом в незагруженное время. Невозможно переоценить различие между "совместным использованием перегруженного канала" и "созданием полосы пропускания из ничего". Распространенное заблуждение о QoS заключается в том, что, несмотря на точки перегрузки на сетевом пути, взаимодействие с пользователем останется идентичным. Это совсем не так. Инструменты QoS, такие как CBWFQ, по большей части предназначены для того, чтобы максимально использовать плохую ситуацию. При выборе того, когда и когда пересылать трафик, QoS также выбирает, какой трафик отбрасывать. Среди потоков, передаваемых по сети, есть "победители" и "проигравшие". LLQ является заметным исключением, поскольку предполагается, что трафик, обслуживаемый LLQ, настолько критичен, что он будет обслуживаться, исключая другой трафик, вплоть до назначенного ограничения полосы пропускания. LLQ стремится сохранить пользовательский опыт. Другие инструменты управления перегрузкой QoS Формирование трафика - это способ изящно ограничить классы трафика определенной скоростью. Например, трафик, помеченный как AF21, может иметь скорость 512 Кбит / с. Формирование изящное. Он допускает номинальные всплески выше определенного предела перед отбрасыванием пакетов. Это позволяет TCP более легко настраиваться на требуемую скорость. Когда пропускная способность сформированного класса трафика отображается на графике, результат показывает нарастание до предельной скорости, а затем постоянную скорость передачи на протяжении всего потока. Формирование трафика чаще всего применяется к классам трафика, заполненным слоновьими потоками. Слоновидные потоки - это долговечные потоки трафика, используемые для максимально быстрого перемещения больших объемов данных между двумя конечными точками. Слоновые потоки могут заполнять узкие места в сети собственным трафиком, подавляя меньшие потоки. Распространенная стратегия QoS состоит в том, чтобы формировать скорость трафика слоновьих потоков, чтобы в узком месте оставалась достаточная пропускная способность для эффективного обслуживания других классов трафика. Применение политик аналогично формированию трафика, но более жестко обращается с избыточным (несоответствующим) трафиком. Вместо того, чтобы допускать небольшой всплеск выше определенного предела пропускной способности, как при формировании перед сбросом, применение политик немедленно отбрасывает избыточный трафик. При столкновении с ограничителем трафика затронутый трафик увеличивается до предела пропускной способности, превышает его и отбрасывается. Такое поведение отбрасывания заставляет TCP заново запускать процесс наращивания мощности. Полученный график выглядит как пилообразный. Применение политик может использоваться для выполнения других задач, таких как перемаркировка несоответствующего трафика на значение DSCP с более низким приоритетом, а не отбрасывание.
img
Семантическое управление версиями (или семвер) – это формальное соглашение для определения номера версии новых выпусков программного обеспечения. Стандарт помогает пользователям программного обеспечения понять серьезность изменений в каждом новом дистрибутиве. Проект, использующий семантическое управление версиями, объявляет основной номер версии (major), дополнительный номер версии (minor) и номер исправления (patch) для каждого выпуска. Строка версии 1.2.3 указывает на основную версию под номером 1, дополнительную версию под номером 2 и исправление под номером 3. Номера версий такого формата широко используются как программными пакетами, так и исполняемыми файлами конечных пользователей, такими как приложения и игры. Однако не каждый проект точно следует стандарту, установленному semver.org. Спецификация была создана для решения проблем, вызванных несовместимостью методов управления версиями между программными пакетами, используемыми в качестве зависимостей. Под «пакетом» и «зависимостью» мы подразумеваем библиотеку кода, предназначенную для использования в другом программном проекте и распространяемую диспетчером пакетов, таким как npm, composer или nuget. Это именно то применение семантического управления версиями, которое мы рассматриваем в этой статье. Major, Minor и Patch Важно понимать значение трех задействованных компонентов. Вместе они намечают путь разработки проекта и соотносят влияние каждого нового выпуска на конечных пользователей. Major number (основной номер версии) – основной номер указывает на текущую версию общедоступного интерфейса пакета. Он увеличивается каждый раз, когда вы вносите изменения, которые требуют от существующих пользователей вашего пакета обновления их собственной работы. Minor number (дополнительный номер версии) – дополнительный номер указывает на текущую функциональную версию вашего программного обеспечения. Он увеличивается всякий раз, когда вы добавляете новую функцию, но не меняете интерфейс вашего пакета. Он сообщает пользователям о том, что были внесены значительные изменения, но пакет полностью совместимым с предыдущими версиями с предыдущим дополнительным номером. Patch number (номер исправления) – номер исправления увеличивается каждый раз, когда вы вносите какое-то незначительное изменение, которое не влияет на общедоступный интерфейс или общую функциональность вашего пакета. Его чаще всего используют для исправления ошибок. Потребители всегда должны иметь возможность не задумываясь установить последнюю версию исправлений. Семантическая структура версии выпуска лучше всего моделируется в виде дерева. Наверху у вас изменения общедоступного интерфейса, каждое из которых отображается на основном номере. Каждая основная версия имеет свой собственный набор дополнительных версий, в которые добавляются новые функции без нарушения совместимости с предыдущими версиями. И наконец, дополнительные версии могут время от времени отлаживаться путем исправления некоторых ошибок. Откуда начинать? Большинство проектов должны начинаться с версии 1.0.0. Вы публикуете свой первый общедоступный интерфейс и первоначальный неизмененный набор функций. И поскольку вам еще не приходилось вносить никаких исправления, то и версия исправления – 0. Теперь давайте посмотрим, что же происходит, когда вы вносите изменения в свой пакет. После вашего первоначального выпуска вы получаете отчет об ошибке от пользователя. Когда вы выпустите исправление, то правильный номер версии уже будет 1.0.1. Если бы вы затем выпустили еще одну версию с исправлением ошибок, то вы бы увеличили номер исправления до 2, т.е. номер версии уже был бы 1.0.2. Тем временем вы также работали над новой интересной функцией. Это совершенно необязательно, поэтому пользователям не нужно ничего делать для обновления. Вы выпускаете эту версию как 1.1.0. – создана новая функциональная среда, но ее еще ни разу не исправляли. К сожалению, скоро приходят отчеты об ошибках, и среди ваших пользователей начинает распространяться версия 1.1.1. Несколько месяцев спустя вы решили провести реорганизацию кода всего проекта. Некоторые функции были удалены или теперь доступны через объединенный интерфейс. Если вы выпустите эту работу, то люди, использующие текущую версию вашего пакета, должны будут внести серьезные изменения в свой проект. Пришло время опубликовать 2.0.0. в вашем репозитории пакетов. Поддержание старых веток Увеличение какого-либо номера в вашей строке версий не создает точку невозврата. После публикации 1.1.1 вы могли обнаружить ошибку, присутствующую в 1.0.2. Используя ветки в вашей системе контроля версий, вы можете произвести исправления в обеих версиях. В итоге вы получите 1.1.2 и 1.0.3. Точно также вы можете поддерживать ветку 1.х вашего проекта, несмотря на выпуск 2.0.0. Может показаться странным публиковать 1.1.2 после 2.0.1, но это вполне нормальная практика. Семантическое управление версиями не создает линейный постоянно увеличивающийся номер версии; наоборот, оно предназначено для использования в качестве части модели разработки ветвления, которое использует простоту установки исправлений, предлагаемую системами управления исходным кодом, такими как Git. Опубликованные версии должны быть неизменяемыми. После того, как вы создали версию 2.4.3, вы не можете «обновить» его, просто добавив дополнительный код в ту же строку версии. Вы должны присваивать новый номер версии каждому выпуску, чтобы пользователи всегда могли получить доступ к каждой конкретной версии вашего пакета. Обработка пакетов, находящихся в стадии разработки Как правило, вы всегда обновляете основную версию своего пакета всякий раз, когда вносятся изменения, несовместимые с предыдущими версиями. Когда вы находитесь в стадии разработки, то ваша кодовая база может дорабатываться очень быстро, что приводит к публикации множества основных версий. Вы можете этого избежать, рекламируя свой проект как 0.y.z. Значение 0 в качестве основной версии означает, что ваш пакет неустойчив. Обычные правила в отношении совместимости с предыдущими версиями тут не применяются, поэтому вы можете выпускать новые версии, увеличивая только дополнительный номер и номер исправления. Это значит, что вы можете использовать 1.0.0 для обозначения первой «завершенной» версии вашего программного обеспечения. Вы также можете добавить дополнительные «идентификаторы» в конец строки версии, используя дефис в качестве разделителя: 1.0.0-alpha.1. Вы можете использовать такой вариант для того, чтобы четко обозначить альфа- и бета-версии. Точно также вы можете включить метаданные сборки, добавив символ +: 1.1.0-alpha.1+linux_x86. Заключение Согласованное использование семантического управления версиями помогает пользователям быть уверенными в вашем проекте. Они могут четко видеть, как развивается ваша кодовая база и нужно ли им самим провести какую-то работу, чтобы идти в ногу со временем. Объявление строки семантической версии необходимо при публикации в диспетчере наиболее популярных пакетов. Тем не менее, в конечном счете, вам решать, какие номера вы устанавливаете для каждого нового выпуска. Соблюдение стандарта четко сообщает о ваших намерениях пользователям и сводит к минимуму риск непреднамеренного нарушения чужой работы.
img
Все пользователи Linux и системные администраторы должны знать, как безопасно выключить всю систему. Для этого есть несколько вариантов, включая планирование выключения в определенное время, немедленное выключение, рассылку уникального сообщения и так далее. В этом руководстве вы узнаете, как использовать команду выключения Linux shutdown с примерами. Синтаксис команды выключения Прежде чем переходить к конкретным способам выключения вашей системы Linux, вы должны понять основной синтаксис команды выключения: shutdown [options] [time] [message] [options] - определяют, хотите ли вы остановить, выключить или перезагрузить машину. [time] - указывает, когда вы хотите завершить выключение. [message] - добавляет сообщение, объявляющее о завершении работы. Как использовать команду выключения Для использования команды shutdown в системах Linux требуется пользователь root или пользователь с привилегиями sudo. Если вы используете команду без дополнительных аргументов, запуск sudo shutdown в окне терминала выполнит завершение работы за 60 секунд. Выключение со всеми параметрами Чтобы просмотреть все параметры при завершении работы системы Linux, используйте следующую команду: sudo shutdown --help На выводе отображается список параметров выключения, а также описание каждого из них. Как выключить систему в определенное время Чтобы запланировать завершение работы, добавьте аргумент [time] и укажите, когда вы хотите, чтобы оно произошло. Есть два способа выключить систему в определенное время - с использованием абсолютного или относительного формата времени. Абсолютное время соответствует формату чч:мм (hh:mm) и позволяет запланировать выключение в указанное время. Команда следует синтаксису: sudo shutdown hh:mm Например, чтобы потребовать выключения в 7 утра, введите следующую команду: sudo shutdown 07:00 В качестве альтернативы можно использовать относительный формат +m и запланировать завершение работы через определенное количество минут с момента запуска команды. В этом случае синтаксис команды: sudo shutdown +m Чтобы выключить систему через 20 минут, запустите: sudo shutdown +20 Как немедленно выключить систему Как упоминалось ранее, запуск команды shutdown без каких-либо аргументов заставляет систему выключиться через минуту после выполнения команды. Однако, если вам требуется немедленное выключение, используйте: sudo shutdown now Другой вариант - запланировать выключение, используя формат относительного времени со значением 0, как в приведенной ниже команде: sudo shutdown +0 Как транслировать собственное сообщение После того, как вы запланировали выключение системы, все пользователи в системе получат сообщение, уведомляющее их о выключении. Чтобы добавить настраиваемое сообщение в уведомление о завершении работы, чтобы информировать пользователей о том, что должно произойти. Вы можете добавить [message], только если команда также включает атрибут [time]: sudo shutdown [time] "[message]" Например, чтобы выключить систему через 20 минут и передать сообщение об обновлении системы, запустите: sudo shutdown +20 "System Upgrade" Как отменить запланированное выключение Чтобы отменить запланированное выключение, используйте команду: sudo shutdown -c Вы также можете добавить сообщение для уведомления пользователей об отмене завершения работы. Для этого добавьте параметр [message] (в кавычках) к приведенной выше команде. Например: sudo shutdown -c "Canceling System Upgrade"
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59