Случайны выбор дневника Раскрыть/свернуть полный список возможностей


Найдено 632 сообщений
Cообщения с меткой

приоритеты - Самое интересное в блогах

Следующие 30  »
rss_rss_hh_new

[Перевод] Жесткая расстановка приоритетов

Понедельник, 20 Марта 2017 г. 16:12 (ссылка)

Расстановка приоритетов означает выполнение задач, которые наиболее важны, в первую очередь. Если вы производите продукты, это означает, что прежде всего должно делаться то, что представляет наибольшую ценность для клиента.



По моему опыту, искусство принимать решения, связанные с приоритетами, является одним из навыков, которые даются командам с особым трудом. Причина в том, что эти решения иногда бывают очень сложными. Хотя обычно это входит в базовые обязанности менеджера по продукту, я обнаружил, что в лучших командах каждый член прямо-таки маниакально расставляет приоритеты, ориентируясь на те же цели, что и его коллеги, и работая с ними в связке.



Эта статья посвящена основам расстановки приоритетов.









Основы расстановки приоритетов



Приоритизация в управлении продуктом может быть разделена на две области:




  • Приоритизация между проектами — это определение того, какой проект вашей команде стоит взять в работу следующим.

  • Приоритизация работы в рамках одного проекта — здесь цель заключается в том, чтобы максимально эффективно выполнить один проект.



Как мы увидим, способы, с помощью которых мы должны решать каждую из этих проблем, сильно отличаются. Объясняется это тем, что они предполагают различные решения.



При определении приоритетности проектов вы должны принять одно важное решение: во что моя команда будет вкладываться в первую очередь? Чтобы найти правильный подход к этому вопросу, представьте, что собираете паззл. Строго следуйте схеме, чтобы отыскать все кусочки, и когда они сложатся в нужной последовательности, у вас будет ответ.



Когда же вы расставляете приоритеты в рамках проекта, вам придется сотни раз принимать одно и то же решение: точно ли это необходимо? Правильный подход заключается в следующем: нужно осознать, что процесс производства продукта всегда спонтанен и выработать жесткий образ мышления, который позволит быстро принимать решения, отделяя необходимое от факультативного.







Расстановка приоритетов между проектами





Строго следуйте схеме, чтобы сложить паззл: во что моя команда будет вкладываться в первую очередь?



Ответ на этот вопрос может потребовать от вас суровости, но сам по себе процесс не особенно сложный:




  • Оцените рентабельность инвестиций для каждого проекта

  • Примените три ограничения: зависимости, временные рамки и состав команды.

  • Соберите паззл — выстроите последовательность проектов, основываясь на окупаемости инвестиций и ограничениях



Я предполагаю, что большинство из этих идей не являются новыми для читателей, поэтому мы пройдемся по ним вскользь.



1. Оцените рентабельность инвестиций



Основой для приоритизации проектов является рентабельность (окупаемость) инвестиций (ROI); она измеряется как величина потребительской ценности, которую ваша команда создает за единицу времени. Ваша цель в том, что касается приоритизации — всегда выполнять ту работу, которая даст максимум потребительской ценности.



Чтобы выделить приоритетные проекты, вам необходимо оценить два момента:




  • Объем потребительской ценности, которая будет получена;

  • Количество времени, которое потребуется для завершения проекта.





Как только у вас появятся все эти данные по каждому проекту, вы можете просто сравнить их, а затем — вуаля — приоритеты как на ладони.







Разумеется, оценить воздействие и усилия сложно, но если считать, что вероятность ошибиться у вас каждый раз одинаковая, то в качестве сравнительного упражнения вычисление окупаемости — вполне законный метод приоритизации проектов.



Совет: сделали оценку усилий и воздействия? Удвойте первое значение, а второе поделите на два — и вы окажетесь гораздо ближе к реальности.



2. Примените ограничения



Поскольку в жизни все не так гладко, как в электронной таблице, существуют также ограничения, которые необходимо учитывать при расстановке приоритетов. Основные ограничения, с которыми вам придется иметь дело — это зависимости, временные рамки и состав команды.



Зависимости



Зависимость возникает, когда необходимо завершить один этап работы, чтобы продвинуться с другим этапом.



Предположим, ваша команда занимается разработкой мобильных приложений и вы хотите сделать так, чтобы на смартфонах клиенты могли производить оплату одним нажатием на кнопку. Вы вычислили, что данный проект окупится лучше всех других, и поэтому хотите внедрить эту функцию как можно скорее.







Однако для этого ваша компания должна в первую очередь иметь возможность вообще принимать платежи, над чем сейчас работает другая команда. Зависимость от других отделов означает, что вы пока ничего не можете сделать, поэтому правильным решением с точки зрения приоритизации будет отложить функцию платежа в один клик и взяться за следующий по окупаемости проект.







В процессе производства продуктов зависимости неизбежны, и чем успешнее становится продукт, тем они многочисленнее, ведь больший масштаб предполагает более сложные системы. В крупных компаниях понимание зависимостей и работа с ними часто являются наиболее важными составляющими приоритизации.



Замечу в скобках: многие думают, что у стартапов такие высокие темпы, потому что люди там работают усерднее и более амбициозны. На самом деле, разница в скорости работы происходит из-за того, что у стартапов гораздо меньше зависимостей (и клиентов, которые будут недовольны, если что-то пойдет не так), так что им проще доводить задачи до ума.



Обратные зависимости



Бывают моменты, когда у вас есть проект, который будет очень полезен для других команд в достижении их целей. В таких случаях зависимостью являетесь вы.



Если вы рассчитываете рентабельность проекта для компании в целом, а не только своего продукта — а нужно делать именно так, — то вам следует вычислить суммарную рентабельность инвестиций не только вашего проекта, но и всех зависимых от него, которые вы «разморозите», чтобы правильно расставить приоритеты для своей команды.







Всякий раз, когда я вижу, как команда работает на то, чтобы «разморозить» других, я проникаюсь к этим людям уважением — это говорит о зрелости в продуктовом мышлении. Такие команды можно назвать невоспетыми героями, теми, кто приносит продуктовой компании больше всего пользы.



Временные рамки



Временные рамки — это стандартное ограничение, которое мы все на себе испытали. Дело принимает особенно серьезный оборот, когда есть риск, что вы потратите деньги, не успев внедрить самую окупаемую функцию, и все будет кончено.







В такой ситуации правильным решением, конечно, будет выбрать самый рентабельный из проектов, которые реально закончить в эти сроки.







Состав команды



Не все команды равны, и иногда состав команды будет влиять на ваши решения относительно того, какой проект нужно взять в работу.



Возьмем для примера команду, которая чуть ли не целиком состоит из новых в компании людей — например, стайку стажеров (ничего плохого не хочу сказать о стажерах, 50% всего программного обеспечения делают именно они).



В таких ситуациях вам следует остерегаться ставить в приоритет проект, который содержит множество рисков для клиентов, даже если он имеет максимальный показатель окупаемости инвестиций. Вместо этого вам будет выгоднее приоритизировать проект, не затрагивающий никаких критически важных фрагментов кода или пользовательского опыта, потому что тогда вероятность плохого исхода уменьшается в разы.







Помогите командам новичков в первую очередь немного освоиться, успешно выкатив несколько небольших проектов. Как только у них появятся какие-то благополучно внедренные функции в анамнезе, они смогут перейти к более сложным проектам.



Приоритизация между проектами: сложите паззл целиком и приступайте к работе



Я преуменьшаю объем работ, необходимый для сбора всей информации, указанной выше, но как только все это будет у вас на руках, останется только сложить кусочки.







Расставляем приоритеты внутри проекта



Когда работа над проектом уже начата, расстановка приоритетов отличается на фундаментальном уровне. Она становится более спонтанной. Решения необходимо принимать каждый день, а на глубокий анализ каждой проблемы, какой мы проводили на стадии выбора проекта, уже не хватает времени. К тому же, в этот период команда на нервах — ведь все эти решения как-то будут сказываться на реальных клиентах, и временами может казаться, что на кону репутация каждого из задействованных в стартапе.



Единственный способ сладить со скоростью и хаотичностью процесса создания продукта — выработать жесткий подход, в рамках которого вся работа, которую осуществляет команда, будет отслеживаться и каждое действие будет ставиться под вопрос: действительно ли это необходимо?



Принять жесткий подход значит признать реальное положение вещей, осознать, что вам предстоит ежедневно делать трудный выбор, на чем сосредоточить силы. Осознать, что намерение выпустить идеальный продукт — это иллюзия, что запуск всегда требует компромиссов.



Жесткий подход вызван желанием довести продукт до запуска. Ожидания инвесторов и клиентов так давят на команду, что в итоге многим попросту становится страшно выводить продукт на рынок. Они начинают заморачиваться мелочами до такой степени, что работа практически не движется. Они теряют из виду то, что действительно имеет значение — потребительская ценность за единицу времени — и начинают гнаться за совершенством.



Покажите мне команду, у которой на стадии запуска нет багов, и я скажу: им давным-давно следовало бы выкатить продукт.


На самом деле, сама спонтанность приоритизации внутри проекта делает любую попытку определить фиксированную последовательность действий бессмысленной. Более продуктивная стратегия — помочь команде усвоить концепции разработки продукта, которые пригодятся им, чтобы жестко отвечать на вопрос: «А это точно необходимо?». Вот те из них, которые мы рассмотрим в этой статье:




  1. Создаем систему приоритизации

  2. Используем предположения о продукте, чтобы выстроить баланс между качеством и скоростью

  3. Временная стоимость запуска





1. Создаем систему приоритизации



Любое ПО по умолчанию — та еще головная боль. В нем и сейчас есть баги, а со временем их будет становиться только больше. Если команда, столкнувшись с новым багом, не может быстро определить, стоит ли его исправлять, то её способность сосредотачиваться на самых важных задачах будет подорвана.



Вы не можете себе позволить собирать совещание и обсуждать приоритеты каждый раз, как обнаружится очередной баг, так что оптимальным выходом будет внедрить систему, по которой можно определять, какие баги прорабатывать сразу, а на какие махнуть рукой.



В качестве примера — вот система, которая оказалась полезной для моей команды.







Ось X представляет процент пользователей, на которых повлияет баг, ось Y — насколько серьезным будет это влияние. Красная точка обозначает сам баг.



Чтобы применять эту систему, совместно с командой определите, какие уровень серьезности и процент пользователей будут считаться максимально допустимыми (в нашем случае это «пользователи не могут провести платеж» и 5% соответственно). Далее разбейте поле на зоны и договоритесь, какие действия будут предприниматься для каждой. Набор действий обязательно должен включать в себя «отправить в бэклог и не трогать».



Если вы не пожалеете на это времени и сил, ваша команда станет настоящей машиной по устранению багов, а вероятность того, что кто-то работает над незначительным багом, будет устранена на системном уровне.



2. Используем предположения о продукте, чтобы выстроить баланс между качеством и скоростью



Часто приходится слышать истории о том, какой ужасный код писали основатели стартапа на ранних этапах. Потом, когда компания достигла успеха, этот код являлся новым программистам команды в кошмарах.



Что, основатели не умели писать код? Не исключено. Но скорее всего на тот момент им просто было плевать на качество кода, так как вероятность того, что продукт окажется успешным, была крайне мала. Поэтому они делали упор на скорость и проверку идеи.



Каждая команда неминуемо в чем-то жертвует качеством, чтобы запустить продукт. Ей приходится решать, где провести черту, и по большей части это определяется тем, как расставлены приоритеты — что считается ключевым для качества продукта.



Вот хороший способ найти для себя приемлемую точку на спектре «скорость-качество»: основывайтесь на своих предположениях о продукте. Предположения о продукте — это те основополагающие мнения касательно проблемы пользователей или планируемого решения, которых вы придерживаетесь.



В качестве простого примера можно привести компанию Facebook на заре её деятельности. Предполагаемая проблема формулировалась как «люди хотят общаться друг с другом онлайн». Получив подтверждение, что эта проблема актуальна, они стали придумывать идеи для продукта, например, возможность добавлять других пользователей в друзья — иными словами, делать предположения о том, как решить поставленную проблему.



Если вы проанализируете свой продукт, то увидите, что ситуация с предположениями может быть следующей:




  1. Сама проблема, которую вы хотите решить, является предположением

  2. Решение, которое вы предлагаете для известной проблемы, является предположением

  3. Ни проблема, ни решение не являются предположением (вы точно знаете, что нужно делать и почему)









Если вы находитесь на левой стороне спектра, то у вас есть предположение, что пользователи сталкиваются с некоторой проблемой, но вы не знаете, насколько оно соответствует действительности. В таком случае вам лучше по максимуму срезать углы и выкатить продукт как можно быстрее, чтобы свести к минимуму риск, что вы решаете несуществующую проблему.



Напротив, если вы на правом конце спектра, то есть уверены и в актуальности проблемы, и в том, как создать правильное решение, тогда стоит обеспечить максимально возможное качество — ведь вы знаете, что продукт будет успешным, а значит нужен хороший задел на будущее.



Часто компании создают отдельные команды для экспериментов и для работы над «ядром». Как мне кажется, подобная структура организации свидетельствует о том, что у большинства команд нет понимания спектра предположений о продукте и, соотвественно, они не способны сделать однозначный выбор в пользу скорости или качества.



3. Временная стоимость запуска



ПО имеет ценность для пользователей только после запуска.







А значит, мы должны уметь определять ценность раннего запуска продукта для пользователей. Я уже говорил об этой концепции в одной из своих предыдущих статей.



Для примера: команды часто сталкиваются с непростым выбором — стоит ли внедрять функцию для 80% клиентов, при этом задерживая её для оставшихся 20%. Обычно такая ситуация складывается тогда, когда её реализация для этих 20% потребует нишевого функционала, создание которого займет в два раза больше времени (по сравнению с тем, что было реализовано для 80%).



Давайте разложим оба варианта по полочкам.











Глядя на диаграмму, мы видим, что в первом случае 80% пользователей выигрывают — они получают доступ к функционалу раньше и имеют возможность извлечь больше ценности. В противном случае им пришлось бы ждать. Тогда, получается, и гадать нечего — надо выбирать первый вариант? Не совсем. Выбор остается сложным, так как:




  1. 20% пользователей, которые останутся неохваченными, определенно поймут, что вы приняли решение их не поддерживать, и придут в ярость. С их точки зрения, лучше вы бы вообще ничего не делали.

  2. 80% пользователей, для которых функция будет подключена, на самом деле не ощутят, что что-то выиграли от того, что получили доступ к ней раньше.



Как ни парадоксально, в сумме эти два эффекта дают следующий результат: принимая решение предоставить пользователям больше ценности на определенном отрезке времени, мы разозлим больше народу, чем если бы ничего не делали. Дожили.



Тем не менее, в таких случаях я обычно советую командам проявить жесткость и запускать продукт. И вот почему:




  1. Если бы пользователи знали контекст и могли принять решение за нас, подавляющее большинство проголосовало бы за запуск.

  2. В долгосрочной перспективе, если команда будет последовательно придерживаться такой стратегии, то постепенно соотношение случаев, когда конкретный пользователь оказывается в числе 80% и 20% соответственно, выровняется. В результате, эффект накапливается, и пользователи получают больше ценности по экспоненте за заданный период, чем получили бы от компании, которая предпочитает всегда ждать, пока не сможет охватить 100% клиентской базы.



Выбор в пользу раннего запуска — одна из тех идей, которые легко осмыслить, но сложно воплотить в жизнь из-за того дискомфорта, который они вызывают. Те, кто умеет жестко расставлять приоритеты, поймут что к чему и смогут действовать в интересах пользователей.



Приоритизация внутри проекта: жесткий подход противоестественен



Рассмотренные концепты — это то, в полезности чего я имел возможность убедиться на собственном опыте. Есть и другие, а все предложенное мной можно корректировать в процессе применения.



К сожалению, большая часть компаний не испытывает желания принимать жесткий подход к расстановке приоритетов, несмотря на то, что это ключевой принцип для тех, кто создает продукты.



Например, в крупных организациях то и дело выкатываются новые функции; большая часть работников узнает об этом не раньше, чем сами пользователи. Как вы думаете, увидят ли они в таких условиях, что их коллеги сумели потратить на запуск в три раза меньше времени, чем потратили бы другие на их месте? Вряд ли. Зато они заметят, чего не хватает в конечном продукте, пусть даже все эти недочеты были пропущены командой умышленно.



И наоборот, вылизанный до блеска продукт внутри компании, как правило, хвалят. Одно плохо: понадобилось два года, чтобы довести его до запуска. Жаль, что мы не задумываемся о том, сколько пользователей от нас отвернулись, потому что отчаялись его дождаться.



Мотивируйте вашу команду становится лучше — то есть жестче.



Приоритизация — это искусство



Время — это самый ценный ресурс, которая ваша компания имеет в своем распоряжении. Если в ваши обязанности входит распределение этого времени, вам нужно по максимуму развить этот навык. Это искусство, которое можно целенаправленно постигнуть на практике.



Напоследок предлагаю вам еще один тезис на тему приоритетов: всегда существует способ достигнуть поставленной цели быстрее, чем вы запланировали.



Всегда. Вам просто нужно его найти. Вам просто нужно задать вопрос: «Как нам это сделать в два раза быстрее?» в конце совещания — и каким-то чудесным образом команда придумает выход.



Я два года занимаюсь запуском продуктов и еще не разу не сталкивался с такой ситуацией, чтобы команда не смогла придумать, как предоставить пользователю ту же ценность с меньшими временными затратами. Случаев, чтобы команда расставила приоритеты идеально, мне тоже не попадалось — что лишний раз подтверждает сказанное выше.



Если принять, что выход есть всегда, то самое разумное — активно и жестко расставлять приоритеты, неважно в работе ли уже проект или вы еще выбираете, каким из стартапов заняться.



Даже если ваш проект — это целое государство.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/324380/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Трииночка

Из чего построить коттедж? Выбор материалов для строительства.

Суббота, 25 Февраля 2017 г. 12:14 (ссылка)


Из чего построить коттедж? Выбор материалов для строительства.





Из чего построить? Именно этот вопрос в первую очередь задает себе каждый, кто хочет иметь собственный дом. Какие материалы использовать в строительстве, конечно, решать самому хозяину будущего дома, но необходимо учитывать, что от правильности выбора строительных материалов будут зависеть такие немаловажные аспекты, как тепло, надежность, долговечность, экологичность и технологичность жилища, а также немаловажный момент экономичности строительства.



Читать далее...
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
АниноН

ДОКУМЕНТ: Что скрывает Махсон? За что отправили в отставку главврача московской больницы

Суббота, 18 Февраля 2017 г. 14:22 (ссылка)
gosrf.ru/news/27977/


В распоряжении редакции оказались результаты проверки Росздравнадзором ГАУЗ «МГОБ №62 ДЗМ», по результатом которой главной врач больницы Анатолий Махсон был отправлен в отставку Департаментом здравоохранения города Москвы.

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Ada_Peters

Буква "Я" - последняя ли в алфавите?

Вторник, 31 Января 2017 г. 17:19 (ссылка)




Буква "Я"
- последняя ли в алфавите?
Я люблю тебя таким,

какой я есть


Классическая детская приговорка, а иногда и установка от родителей детям: «Я..Я… Я – последняя буква алфавита!»

Да, это говорили почти всем нам, но отразилось больше на девочках. Может потому, что в патриархальном мире, женскому «Я» гораздо тяжелее жить. Или потому, что в женскую природу механизм самоотдачи заложен больше.

Вот просишь женщину расположить свои жизненные приоритеты в порядке очередности и получаешь – детей, семью, родителей, партнера, друзей, работу, родственников, здоровье и так далее в разной очередности.
Читать далее...
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Ваш звонок очень важен для нас? Или как работает система приоритезации заявок в сервисных подразделениях

Понедельник, 23 Января 2017 г. 12:59 (ссылка)

imageЗдравствуй, дорогой Читатель. Сегодня я расскажу тебе, как устроена система определения приоритетов обращений в техническую поддержку компании, наличие которой в организации позволяет существенно сократить время реакции на запрос, правильно распределить ограниченные ресурсы сервисного подразделения, максимально быстро и эффективно реагировать на острые проблемы клиентов, не терпящие отлагательств. Особенности работы системы мы рассмотрим на реальном примере нашей компании.



Итак, представим ситуацию, что обратился ты в организацию X за некой услугой/продуктом. Возможно, еще на этапе покупки у тебя возникали сомнения относительно разумности выбора компании, но по каким-то причинам услугу/продукт ты все-таки приобрел. Как оказалось впоследствии – очень зря. Качество услуги/продукта не соответствует ожиданиям, возврат не предусмотрен, но заставить сие изделие работать все равно нужно. Выход – служба поддержки. Но вот незадача. Служба поддержки как будто не замечает твоих просьб о помощи, по телефону с ними не связаться, электронные сообщения будто сразу отправляются в спам. Знакомо?

С чем могут быть связаны подобные проблемы и имеет ли это отношение к нерациональному распределению ресурсов в сервисных подразделениях и неправильной приоритезации обращений заказчиков? На эти вопросы я и постараюсь пролить свет на примере системы приоритезации обращений АО «Инфовотч».



Мы рассмотрим основные критерии повышения или понижения приоритета обращения в службу технической поддержки, механику их работы, рассмотрим в каком порядке выстраиваются заявки для сотрудников и их непосредственных руководителей. Для начала давайте выясним, как система выставления приоритетов обращений клиентов выглядит изнутри.

Расстановка приоритетов обращений в сервисных подразделениях при работе с очередями часто вызывает вопросы. Организация должна дорасти до определенного уровня зрелости, чтобы начать придавать этому аспекту оказания услуг нужное внимание. Конечно, объем запросов должен достичь того уровня, чтобы и критерии расстановки приоритетов «созрели», и количество ошибок из-за «человеческого фактора» возросло до неприемлемых величин (что легко заметить по растущему количеству «крикливых» заказчиков и эскалаций от руководства), и экономический эффект от автоматизации процесса стал осязаемым.



Вы когда-нибудь анализировали, сколько времени затрачивается сотрудниками на рутинное администрирование бизнес-процессов в вашем подразделении? Думаю, что даже если и приходилось этим заниматься, то не слишком часто. Между тем, рутина может отнимать значительное количество рабочего времени сотрудника. Нельзя сказать, что она не важна, ведь она обеспечивает функционирование всего механизма, но, вместе с тем, такая работа не приносит и измеряемого результата, который руководство желает видеть в KPI. К примеру, в службе технической поддержки вряд ли кому-то интересно, сколько сотрудник потратил времени на администрирование заявок (то есть проставление приоритетов, заполнение служебных полей и прочее сопутствующее подкручивание винтиков большого механизма заявки в CRM-системе). На контроле, как правило, только количество обработанных и решенных заявок, результаты по проверке качества и CSAT (Customer Satisfaction). Между тем, практика показывает, что заниматься этим вопросом нужно:



Одна-две минуты на заявку * количество заявок =?

А сколько это в неделю? А в месяц? А в год?

А если умножить это количество часов на средний ФОТ сервисной службы?



У менеджеров всегда есть более важные задачи, не терпящие отлагательств, и инвестировать время в то, чтобы автоматизировать часть рутины, да еще получить согласие и поддержку смежных подразделений, чьи интересы эта автоматизация затрагивает, не всегда представляется возможным. К (не)счастью, в современной экономической модели случаются кризисы, которые стимулируют компании работать в режиме экономии и обратить свой взор к оптимизации монструозных процессов, накрученных в тучные годы. Ранее несрочные задачи по оптимизации и автоматизации процессов выходят на первый план. Так случилось и в нашей организации. Экономическая ситуация в стране не способствует найму сотрудников под каждую новую задачу, а кризис роста в условиях экономии создает уникальную ситуацию, в которой у руководителей подразделений не остается иного выхода, кроме как заняться ревизией процессов, чтобы и сервис не пострадал, и ФОТ не разрастался.



Итак, цель – обеспечить прежний уровень KPI техподдержки в условиях роста количества обращений и ограничения найма новых сотрудников.

Задачи:


  • Упрощение и унифицирование определения приоритета обращений для инженера технической поддержки;

  • Обеспечение правильной очередности обработки заявок.



Проблема – работы становится больше, количество рабочих рук не растет или растет слишком медленно, требования по приоритетам не отражают реальной ситуации с большим количеством различных нюансов.

Способы решения:


  • Контроль рабочего времени сотрудников (в данной статье рассматриваться не будет);

  • Повышение квалификации и производительности сотрудников (тоже как-нибудь в другой раз);

  • Снижение трудозатрат на рутинное администрирование процессов, в частности процесса выставления приоритетов заявкам (то, о чем и пойдет речь дальше).





В среднем сотрудник затрачивает до полутора минут на то, чтобы просто квалифицировать обращение и назначить ему правильный приоритет, исходя из определенного набора требований. Это обязательная часть процесса работы с обращениями в любом контакт-центре, от которой ни при каких обстоятельствах не избавиться. В нашем случае однажды назначенный приоритет в обращении сохранялся с ним на протяжении всей работы с заявкой и никогда не пересчитывался с учетом новых данных. Такая ситуация не требовала автоматизации, пока руководитель подразделения был в состоянии держать в голове все эскалации, поступившие от смежных подразделений, успевал просматривать все открытые обращения и применять «ручное управление» к очередности обработки заявок от заказчиков. На малых объемах в команде, где есть только один менеджер, такой подход оправдан и достаточен. Но его эффективность весьма ограничена, не подходит для компаний с двумя и более сменами, и не исключает «человеческий фактор». Всегда есть вероятность допустить ошибку, недоглядеть или просто забыть о какой-либо заявке, не вовремя сообщить коллеге из следующей смены о какой-либо эскалации. В результате таких сбоев страдают, как правило, заказчики, а это неприемлемо. В итоге мы приняли решение полностью переработать систему приоритезации заявок в техническую поддержку, максимально исключить «человеческий фактор», решить проблему «не обновляемых» показателей приоритета в кейсах.



В силу того, что CRM-система используется в компании достаточно давно, мы уже накопили приличное количество данных как о наших клиентах, так и о наиболее типичных проблемах и ситуациях в работе организации с заказчиком, заказчика с продуктом, продукта с инфраструктурой заказчика и т.п. Проконсультировавшись с коллегами по цеху и изучив опыт построения подобных систем динамической приоритезации в других компаниях, мы разработали собственную, отвечающую нашим реалиям и укладывающуюся в наши бизнес-процессы.

Решено было построить систему приоритетов в виде числовых значений от 0 до 1, где наивысшим приоритетом обладают обращения со значением приоритета «1». Они должны обрабатываться в первую очередь. Соответственно значение «0» обладает наименьшим приоритетом и попадает в поле зрения инженера технической поддержки только после обработки всех более значимых заявок. Общая схема выглядит следующим образом:



image



Как видим, за базис приоритета обращения были приняты существующая система SLA и особые источники поступления заявок. В нашей компании имеется три типа контрактов технической поддержки, которые предлагают заказчикам различные SLA. Каждый из таких контрактов получил свое базовое число. Это же касается и источников поступления заявки. При этом система автоматически проставляет более высокий приоритет при выборе из двух базовых. А дальше началось самое интересное. Базовые значения никак не учитывают все возможные нюансы в работе технической поддержки.



Приведу пример:

Очень большой и невероятно важный заказчик написал нам на почту с предложением изменить пиктограмму в интерфейсе. Как нам следует поступить? Должны ли мы срочно бросить все силы на поиск нерадивого дизайнера, нарисовавшего такую отвратительную пиктограмму, заставить его/ее немедленно все переделать, утвердить макет, напрячь технический департамент и без промедления выпустить хотфикс для этого заказчика?



В это же время менее крупный клиент испытывает серьезные затруднения с продуктом, из-за которых у него фактически остановился бизнес, и направляет запрос в нашу службу поддержки.

Следует ли нам понизить в приоритете первый запрос и помочь второму клиенту, пусть и не такому большому и невероятно важному, но чья проблема стоит более остро?



Согласитесь, имея в арсенале лишь ограниченное количество ресурсов, невозможно быть доступным по первому требованию сразу для всех желающих. И подавляющее большинство заказчиков это прекрасно понимают. Не станет даже самый большой и важный заказчик настаивать на немедленном решении вопроса с некрасивой пиктограммой, так как это лишь мелкое неудобство, а не реальная проблема, препятствующая нормальной работе. Поэтому расстановка правильных приоритетов в условиях ограниченных ресурсов очень важна. Не менее важна аккуратность и простота этого механизма.

Отталкиваясь от этой логики, мы дополнили базовую систему приоритезации определенными коэффициентами, активируемыми в разных ситуациях:









То есть конечная формула выглядит так:

Базовый показатель + плавающий показатель = Итоговое значение приоритета.

Попробую для наглядности провести расчет по приведенным ранее примерам.



Для примера №1 расчет выглядит так:

Premium SLA + Предпродажная эскалация + Постпродажная эскалация + Вес организации*количество пользователей более 10000 + Серьезность проблемы * пожелания по функциональности + продолжительность работы = 0.07+0+0+0.03*0.38+0.56*0.02-0 = 0.07+0.0114+0.0112 = 0.09 Как видите, итоговый показатель приоритета достаточно низкий, несмотря на приличные вводные данные (Premium поддержка, крупный клиент)



Для примера №2 расчет выглядит так:

Extended SLA + Предпродажная эскалация + Постпродажная эскалация + Вес организации*количество пользователей 100 + Серьезность проблемы * Критическая проблема + продолжительность работы = 0.04+0+0+0.03*0.03+0.56*0.42=0.04+0.0009+ 0.24=0.28 Здесь ситуация обратная. Несмотря на то, что организация совсем не крупная и имеет более скромный контракт на техническую поддержку, из-за высокого уровня важности проблемы значение приоритета заявки превышает заявку из примера №1.



То есть, имея в своем арсенале весь набор необходимых данных, система автоматически подняла более критичную проблему от небольшой организации над низкоприоритетной, несмотря на более высокий вес первого заказчика. Система умеет автоматически пересчитывать приоритет заявки по девяти разным параметрам, повышать базовый показатель приоритета с помощью 18 различных коэффициентов, тем самым увеличивая или уменьшая базовое число приоритета. Показатель этот не является статичным. Он изменяется при появлении новых данных в классификации обращения и мгновенно изменяет ранжирование заявок в очереди на обработку. Это позволяет нам распределять заявки именно в той очередности, в которой их необходимо обрабатывать.



image



Вот так теперь выглядит очередь обращений для инженера технической поддержки. Больше нет необходимости выяснять приоритет заявки. Инженеры технической поддержки просто обрабатывают заявки сверху вниз в порядке очереди.



Как видите, при создании системы приоритезации мы постарались учесть все возможные нюансы, возникающие при обработке обращения: это и серьезность проблемы обратившегося, и SLA, который зафиксирован в договоре на техническое обслуживание, и различные виды эскалаций и даже длительность работы с обращением с момента его открытия в нашей CRM-системе. А принимая во внимание то, что большинство этих параметров проставляются автоматически, наши инженеры больше не тратят время на администрирование приоритета обращения и могут сконцентрироваться на изучении проблемы заказчика и выработке решений, быть на связи с теми, кто остро нуждается в срочной помощи. Руководителям смен больше не нужно постоянно держать в голове информацию обо всех «особых» заявках и вовремя реагировать на их переоткрытие, а заказчики могут быть уверены, что все их обращения будут обработаны в максимально сжатые сроки и никогда не исчезнут из поля зрения технической поддержки до их полного разрешения.



Новая система внедрена в нашей CRM и функционирует с начала декабря 2016 (51 неделя). За время ее пилотной эксплуатации мы уже заметили снижение количества эскалаций:







Внимательный читатель, несомненно, обратит внимание на то, что в текущей реализации никак не учитывается «Backlog». Все дело в том, что это уже следующий этап задуманной нами автоматизации. Как только механизм автоматического расчета Бэклога будет готов, мы добавим его в существующую систему приоритезации и заново пересчитаем коэффициенты. Пока же «слежка» за бэклогом осуществляется в ручном режиме. Описанию механизма расчета бэклога будет посвящён отдельный пост, после того как механизм будет полностью готов и внедрен.

В ближайшее время так же выйдет статья с подробным описанием математического аппарата расчета коэффициентов описанного выше механизма приоритезации.

За сим у меня все, буду рад пообщаться в комментариях.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/320208/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
lenov_ru

Real Shooting Army Training v 1.2 (Mod Money/Unlock) » Клуб пользователей планшетов на ANDROID / Lenovo IdeaTab A2109 8GB / Samsung Galaxy Tab 2 7.0 / Asus Transformer TF700T / NVIDIA Tegra 3

Среда, 11 Января 2017 г. 09:14 (ссылка)
lenov.ru/games/27738-real-s...nlock.html


Real Shooting Army Training - шутер-тир в декорациях военный базы. Геймеры будут оттачивать своё мастерство виртуальной стрельбы участвуя в различных режимах и ситуациях. Скорость реакции и умение

Комментарии (0)КомментироватьВ цитатник или сообщество
lenov_ru

Gardens Inc 4 - Blooming Stars v 1.11 Мод (Unlocked/Money) » Клуб пользователей планшетов на ANDROID / Lenovo IdeaTab A2109 8GB / Samsung Galaxy Tab 2 7.0 / Asus Transformer TF700T / NVIDIA Tegra 3

Пятница, 30 Декабря 2016 г. 08:25 (ссылка)
lenov.ru/games/27607-garden...money.html


Gardens Inc 4 - Blooming Stars - новые приключение садовников Джилл и Майкла. Четвёртая часть увлекательного тайм-менеджера теперь содержит в себе элементы фермы и поиска предметов, что существенно

Комментарии (0)КомментироватьВ цитатник или сообщество
NetFact

Зрительное восприятие: от физиологии к образу (2016) Семинар » NetFact.Ru: Скачать бесплатно – Популярная Интернет Библиотека

Вторник, 13 Декабря 2016 г. 21:09 (ссылка)
netfact.ru/videotech/3463-z...minar.html


Зрительное восприятие: от физиологии к образу (2016) Семинар




Семинар Алексея Шадрина призван дать общеконцептуальное представление о функции человеческого зрения на основе самых современных научных данных.



ДЛЯ КОГО ЭТО?

Семинар рассчитан на широкий круг слушателей с любым уровнем начальной подготовки и будет полезен всякому, кто работает с изображениями и хочет достичь их максимальной изобразительной эффективности, не растрачивая при этом времени и сил на заведомо бесполезную и ненужную работу, а также для тех, кто желает добиться успеха в рыночной реализации изображений.



ЧЕМУ ВЫ НАУЧИТЕСЬ?

-Вы получите общее представление о функции зрения, основанное на новейших данных, очищенное при этом от фантазий, домыслов и технократических благоглупостей.

-Научитесь расставлять приоритеты в создании и обработке изображений.

-Научитесь читать изобразительные приоритеты, расставленные другими авторами.

-Поймете фундаментальные отличия между оптико-технологическим и рукотворным изображением, а также фундаментальные отличия в методологии их создания.

-Научитесь классифицировать зрителей (заказчиков фоторабот) по визуальным предпочтениям и адаптировать к этим предпочтениям.

-Увидите, что большая часть изобразительных проблем решается не техническими средствами, но через знание основ зрительного восприятия.



Программа семинара:



ЗАНЯТИЕ 1



Зрительное восприятие

Определение зрительного восприятия.

Зрительное восприятие как конструктивный акт.

Зрительное восприятие как процесс моделирования.

Восприятие как выявление смысла.



Оптическая информация

Внешний оптический массив. Оптические изображения.



Зрительная система и ее составляющие

Глаз.

Физиологическая оптика.

Сетчатка.

Фоторецепторы.

Проводящие пути.

Зрительная кора.

Инференции.

Эвристические процессы.

Нисходящие и восходящие процессы.



Четыре этапа зрительной обработки

Ретинальное изображение.

Оптический этап зрительного восприятия.

Фасетный этап зрительного восприятия.

Предметный этап зрительного восприятия.

Категорийный этап зрительного восприятия.



Цветовое зрение

Физическое описание света.

Физиологическое описание цвета.

Психофизическое соответствие.

Трихроматический этап.

Закон Фехнера и закон Стивенса.

Оппонентный этап.

Цветовые аномалии.

Фокальные цвета и прототипы.

Модель цветовой классификации.

Феномены цветового восприятия.



ЗАНЯТИЕ 2



Пространственное зрение

Анатомия и физиология пространственного зрения.

Гистология сетчатки.

Специализация ретинальных функций.

Зрительные потоки и рецептивные поля.

Классификация нейронов.

Корковое представление и восприятие.

Дэвид Хьюбел и Торстен Визель.

Зрительные потоки в коре.

Зоны первичной зрительной коры.



Психофизические каналы

Теория пространственных частот.

Каналы пространственных частот.

Психофизическая контрастносенситивная функция зрительной системы человека.

Ретинальная световая адаптация.

Хроматическая адаптация.

Пространственная адаптация.



Компрессия пространственной информации

Эффективные представления ретинального изображения.

Блочное преобразование: JPEG-DCT.

Пирамиды.

Вейвлет-преобразования.



Детекция краев

Край-операторы.

Опорные скетчи.

Виды краев.

Края и пространственные частоты.



Восприятие глубины пространства

Эвристические допущения.

Окулярная информация (аккомодация, конвергенция).

Стереоскопическая информация.

Бинокулярная диспарантность.

Гороптер.

Вертикальная диспарантность.

Стереопсис Леонардо.

Динамическая информация (параллакс движения, оптический поток от движения наблюдателя, оптический поток от движения объектов, динамика текстуры).

Пикториальная информация.

Интерпретация краев.







Зрительное восприятие: от физиологии к образу (2016) Семинар



Зрительное восприятие: от физиологии к образу (2016) Семинар



Зрительное восприятие: от физиологии к образу (2016) Семинар






Информация о видео

Название: Зрительное восприятие: от физиологии к образу

Автор: Алексей Шадрин

Год выхода: 2016

Жанр: Семинар

Язык: Русский

Выпущено: Россия

Продолжительность: ~6 часов



Файл

Формат: AVI, PDF

Видео: XVID, 1660x658, ~752 Kbps

Аудио: MP3, 128 Kbps, 48.0 KHz

Размер: 2.54 Gb



Скачать: Зрительное восприятие: от физиологии к образу (2016) Семинар



Скачать | Download | TurboBit.net

http://turbobit.net/9ypugl2pteot/zritel.vospr.rar.html



Скачать | Download | HitFile.net

http://www.hitfile.net/cNVZ3zK/zritel.vospr.rar.html



Скачать | Download | Файлообменник.рф

http://файлообменник.рф/3bgo3q3coqb6/zritel.vospr.rar.html



Скачать | Download | DepFile.com

http://kyc.pm/iSMSb0wkI/zritel.vospr.rar

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
knigalyb

Послание Президента Федеральному Собранию [ 01.12.2016 ]

Четверг, 01 Декабря 2016 г. 18:01 (ссылка)

Источник: http://kremlin.ru/events/president/news/53379/videos


Владимир Путин обратился к Федеральному Собранию с ежегодным Посланием. Оглашение Послания по традиции состоялось в Георгиевском зале Большого Кремлёвского дворца.


В.Путин: Добрый день, уважаемые коллеги! Уважаемые члены Совета Федерации! Уважаемые депутаты Государственной Думы! Граждане России!

Сегодня, как обычно в Посланиях, речь пойдёт о наших задачах в экономике, социальной сфере, во внутренней и внешней политике. Больше внимания на этот раз уделим экономике, социальным вопросам и внутренней политике.

Нам приходится решать все эти задачи в сложных, неординарных условиях, как это не раз бывало в истории. И народ России вновь убедительно доказал, что способен отвечать на непростые вызовы, отстаивать и защищать национальные интересы, суверенитет и независимый курс страны.

Но вот что хотел бы, уважаемые коллеги, в этой связи сказать. Говорил уже несколько раз публично, но и сегодня хотел бы повторить.

Граждане объединились – и мы это видим, надо сказать спасибо за это нашим гражданам – вокруг патриотических ценностей не потому, что всем довольны, что всё их устраивает. Нет, трудностей и проблем сейчас хватает. Но есть понимание их причин, а главное уверенность, что вместе мы их обязательно преодолеем. Готовность работать ради России, сердечная, искренняя забота о ней – вот что лежит в основе этого объединения.

При этом люди рассчитывают, что им будут обеспечены широкие и равные возможности для самореализации, для воплощения в жизнь предпринимательских, творческих, гражданских инициатив, рассчитывают на уважение к себе, к своим правам, свободам, к своему труду.

Принципы справедливости, уважения и доверия универсальны. Мы твёрдо отстаиваем их – и, как видим, не без результата – на международной арене. Но в такой же степени обязаны гарантировать их реализацию внутри страны, в отношении каждого человека и всего общества.

Любая несправедливость и неправда воспринимаются очень остро. Это вообще особенность нашей культуры. Общество решительно отторгает спесь, хамство, высокомерие и эгоизм, от кого бы всё это ни исходило, и всё больше ценит такие качества, как ответственность, высокая нравственность, забота об общественных интересах, готовность слышать других и уважать их мнение.

Это показала и прошедшая в этом году избирательная кампания. Вы знаете, что инициатива о возвращении к смешанной модели выборов депутатов Государственной Думы была поддержана в Послании 2012 года. Это был принципиальный шаг навстречу общественному мнению.

Считаю, что курс на развитие политической системы, институтов прямой демократии, на повышение конкурентности выборов абсолютно оправдан, и мы, безусловно, будем его продолжать.

Выросла роль Государственной Думы как представительного органа. В целом укрепился авторитет законодательной власти. Его надо поддерживать, подтверждать делами. Это касается всех политических сил, представленных в парламенте.

Но, конечно, особая ответственность на партии «Единая Россия», которая, кстати, сегодня отмечает своё пятнадцатилетие. Партия имеет конституционное большинство в Госдуме, является главной опорой Правительства в парламенте. И нужно так выстроить совместную работу, чтобы все обещания, обязательства, взятые перед гражданами, были выполнены.

Именно граждане определили итоги избирательной кампании, выбрали путь созидательного развития страны, доказали, что мы живём в здоровом, уверенном в своих справедливых требованиях обществе, в котором укрепляется иммунитет к популизму и демагогии и высоко ценятся значимость взаимоподдержки, сплочённости, единства.

Речь не идёт, конечно, о какихто догмах, о показном, фальшивом единении, тем более о принуждении к определённому мировоззрению – всё это в нашей истории, как вы хорошо знаете, было, и мы не собираемся возвращаться назад, в прошлое.

Но это не значит, что, жонглируя красивыми словами и прикрываясь рассуждениями о свободе, комуто можно оскорблять чувства других людей и национальные традиции.

Вы знаете, если ктото считает себя более продвинутым, более интеллигентным, даже считает себя поумнее когото в чёмто, – если вы такие, но с уважением относитесь к другим людям, это же естественно.

При этом, конечно, считаю неприемлемой и встречную агрессивную реакцию, тем более если она выливается в вандализм и в нарушение закона. На подобные факты государство будет реагировать жёстко.

Завтра у нас заседание Совета по культуре – обязательно обсудим вопросы, вызывающие широкую дискуссию, поговорим о принципах взаимной ответственности представителей гражданского общества и деятелей искусств.

Но хочу особо подчеркнуть: и в культуре, и в политике, в средствах массовой информации и в общественной жизни, в полемике по экономическим вопросам никто не может запретить свободно мыслить и открыто высказывать свою позицию.


Источник и продолжение:

http://kremlin.ru/events/president/news/53379



https://my.mail.ru/mail/knigalyb2014/video/_myvideo/3164.html
https://ok.ru/video/212388416084
https://kinostok.tv/video/508277/poslanie-prezidenta-federalnomu-sobraniyu--01122016-
http://video.meta.ua/8728214.video
http://play.md/2550314
https://vk.com/video197777762_456239380
https://rutube.ru/video/08a659da8f920101c7670ab278d8c001/

Комментарии (0)КомментироватьВ цитатник или сообщество
junetiger

Ты можешь верить мне или не верить...

Воскресенье, 28 Ноября 2016 г. 00:12 (ссылка)

Ты можешь верить мне или не верить (700x441, 75Kb)

Ты можешь верить мне или не верить,
Но это не мое — кривить душой.
Предпочитаю понести потери,
Чем куш сорвать — особенно большой.

Не рвусь в герои и не жажду славы,
И не хочу занять высокий пост -
Мечтаю нарожать детей ораву:
На зависть всем — такой карьерный рост.

Мне не хватило в детстве кукол, видно:
Не наигралась досыта, увы!
Но мне нисколько это не обидно -
Вот только мысль нейдет из головы:

Не будет в доме места для печали,
Когда его заполнит детвора:
Хочу, чтобы в нем радостно звучали
Смех, песни, крики с самого утра!

Чтоб все любили искренне друг друга
И помогали вместе в трудный час,
Чтоб нас не разметала порознь вьюга
И в очаге огонь чтоб не погас,

Чтоб боль и радость поровну делили
И подставляли вовремя плечо -
Чтоб не запачкался налетом пыли
Душ чистых даже крохотный клочок.

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Kat_Vrou

Почему бы нет?

Среда, 16 Ноября 2016 г. 21:47 (ссылка)


Это я не нравоучения читаю, а просто рассуждаю в собственном "домике" на ЛиРу. И пишу это на заметку и как напоминание прежде всего себе.



Мы, люди, очень глубоко погрязли в предрассудках и всяких убеждениях, которые нам прививают все, кому не лень. Родители, государство, духовные лица, медия и т.п. И почти все мы оглядываемся на социум: а что люди скажут, если я сделаю так или этак? Многие отказываются от своих желаний и даже своей личности ради того, чтобы быть "как все" и не выделяться. И это проблематично. Конечно, социум - это хорошо. И порядок в нем надо поддерживать: наказывать преступников, защищать слабых и беспомощных (и людей, и животных), беречь природу и т.п.



Но в то же время, не нужно заставлять людей отказываться от себя и своих желаний. Если хороший и добрый человек, который никому вреда не приносит, честно зарабатывает на жизнь, заботится о своей семье и т.д., но в то же время имеет какие-то личные, отличные от других, пристрастия, то почему он должен от них отказываться и терпеть нападки окружающих? Если он хочет жить так, как он хочет и с тем, с кем хочет, так ПОЧЕМУ БЫ НЕТ?

* Почему бы мужчине не полюбить другого мужчину или женщине другую женщину, если уж так у них сложилось, и их тянет к представителю того же пола? И если они друг другу доверяют, как не доверяли никому больше? Почему бы им не жениться? И почему бы такой паре не растить детей? (Но только воспитывать их правильно. Чтобы дети не подавляли в себе естественную гетеросексуальность и выбирали себе пару по своему желанию, а не копировали бы родителей).

* Почему бы молодому парню не полюбить взрослую женщину, которая его намного старше? Если она умна, красива и привлекает его сексуально, так почему бы и нет? Родить не может? А кто сказал, что этот парень обязательно собирается стать отцом? Вдруг ему никакие дети не нужны, а нужна только любовь? А если и да, то с помощью современной медицины женщина может стать матерью практически в любом возрасте.

* Или почему бы молодой девушке не полюбить мужчину намного старше? Опять же, если он сексуален в ЕЁ глазах. И ее привлекает именно взрослость и мудрость. А ведь немало мужчин осознанно хотят стать отцами именно в зрелом возрасте, когда точно знают, что они хотят передать наследникам (опыт и жизненные ценности, не только материальные)

* Почему бы здоровому человеку не полюбить инвалида? Или красивому - некрасивого? Неужели настолько недопустимо подумать, что эта любовь - она только любовь, и за ней не стоит никакая выгода и обман? А вдруг этот "ущербный" человек тому другому просто НРАВИТСЯ? И некрасивость и инвалидность не играют никакой роли?

* И почему бы человеку не жить на улице или на природе, если он так хочет и сам выбрал такой образ жизни? Может, он страдает клаустрофобией, и стены дома давят ему на психику? А свежий воздух наоборот - помогает и оздоровляет. И может, ему нафиг не нужны всякие бытовые удобства, без которых большинство не помышляет своей жизни? Или он такой философ, каким был Диоген, живший в бочке? Не бомжара вонючий, а именно философ? Если такой человек не пьет под забором, не дерется, соблюдает личную гигиену, выглядит чистым и опрятным, (скажем, моется в бане и стирает свои пожитки в реке или прачечной), не пугает детей внешним видом, то кому он такой помешает?

* Почему бы женщине не иметь так называемых "свободных отношений", которые приписывают в основном мужчинам? То есть, мужчинам такие отношения иметь можно, а дамам почему-то нельзя, на комильфо? Но что тут такого некомильфошного, спрашивается? Бывают же такие периоды, когда любви нет, брака или постоянных отношений - тоже. А сексу-то хочется, физиология же никуда не девается. Поэтому не вижу ничего плохого в знакомствах и связях "для поибацца". Особенно, если они взаимные. И эти мужчина и женщина хотят друг от друга одного и того же.



И это я всё к тому, что не надо судить других за то, как они живут. Это их личное дело. И если нам лично, как окружающим и членам социума, это никак не мешает и не вредит, то какое правво мы имеем их осуждать?



1 (502x379, 115Kb)


Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
lenov_ru

Delicious - New Beginning v 17.0 Мод (Unlocked) » Клуб пользователей планшетов на ANDROID / Lenovo IdeaTab A2109 8GB / Samsung Galaxy Tab 2 7.0 / Asus Transformer TF700T / NVIDIA Tegra 3

Воскресенье, 23 Октября 2016 г. 08:22 (ссылка)
lenov.ru/games/26834-delici...ocked.html


Delicious - New Beginning - ещё одна глава из популярной серии тайм-менеджеров. Геймерам необходимо будет справляться с многочисленными домашними делами, уходу за малышом и одновременно рабо

Комментарии (0)КомментироватьВ цитатник или сообщество
Аноним

Среда, 01 Декабря 1970 г. 03:00 (ссылка)

Комментарии ()КомментироватьВ цитатник или сообщество
rss_rss_hh_new

[Перевод] Почему выгорание истощает продуктивность (и как с ним бороться)

Среда, 21 Сентября 2016 г. 10:12 (ссылка)

image



Во время строительства карьеры работа круглыми сутками кажется оправданной жертвой. Но недооценка значения отдыха вполне может привести к выгоранию.



Нереальность достижения цели без потери сил и времени — это ключевая идея нашей рабочей культуры. И создается ощущение, что слишком усердной работы не существует. 80-часовая рабочая неделя, проверка электронной почты в 3 утра, ночные сверхурочные ради запуска проекта — подобные поступки кажутся необходимыми и даже похвальными.




И это фактически становится концом продуктивности. Усердная работа, целеустремленность и небольшие дополнительные усилия, направленные на то, чтобы выделиться из толпы, — это все здорово, если вам хочется продвинуться по карьерной лестнице. Ведь если вы не относитесь к числу счастливчиков, постоянно оказывающихся в выигрыше, то без всего этого добиться успеха просто невозможно.



Нарочитая занятость — это почетно. Но постоянная работа на пределе служит прямой дорогой к выгоранию. Более того, очевидным является тот факт, что переработка на самом деле снижает производительность. Джон Пенкейвел из Стэндфордского университета обнаружил: отсутствие выходных вредит часовой выработке, а продуктивность 70-часовой рабочей недели едва ли возрастает по сравнению с 54-часовым графиком — следовательно, 16 лишних часов превращаются в бессмысленную трату времени.



Следует учитывать и негативное влияние переработки на самочувствие. А потому очень важно следить за тем, чтобы перегрузка не превращалась в препятствие на пути к целям.



Что такое выгорание (и каковы его симптомы)?



Выгорание — это ощущение глубокой тревоги, утомления и беспомощности, возникающее при работе до изнеможения. Будучи результатом повышенного и длительного стресса, оно может подкрадываться незаметно, ведь усталость и стресс часто воспринимаются как норма.



Выгорание состоит из 12 стадий, выделенных психологами Хербертом Фройденбергером и Джейлом Нортом. Оно затрагивает людей, пренебрегающих своими потребностями ради бесконечной работы. Размышления об отдыхе, здоровье и отношениях исчезают, и приближающиеся к выгоранию люди начинают отрицать наличие сформированных подобным стилем жизни проблем. Наиболее драматичное проявление выгорания и его последняя стадия — это физический и эмоциональный кризис. Но трудности, причиной которых оно служит, — например, чувство опустошенности, изоляция и хроническая усталость — начинают оказывать свое негативное влияние задолго до этого.



Работа долгими часами, отказ от выходных, прожигание жизни — в итоге все это дает о себе знать. Один из ведущих британских врачей профессор Джон Аштон даже призывал установить 4-дневную рабочую неделю для борьбы с повышенным артериальным давлением и психологическими недомоганиями, связанными с переработками. Это говорит о том, что медики относятся к слишком усердной работе очень серьезно.



Стратегии адаптации, разработанные для поддержания такого стиля жизни, тоже способны усугубить выгорание. Временные меры — успокоение, приходящее вместе с сигаретой, или пятничные загулы до утра — в долгосрочной перспективе могут лишь усложнить ситуацию.



Если говорить о карьере, то работа на пределе возможностей способна привести к появлению реальных препятствий на пути к успеху. Выгорание лишает мотивации и оптимизма при условии потери интереса к работе. Индикатором этого служит то, что уменьшение числа рабочих часов в богатейших странах мира коррелирует с повышением производительности, а шведский эксперимент с 6-часовым рабочим днем завершился подъемом работоспособности и снижением текучки кадров.



Почему выгорание приводит к ужасному самочувствию?



Выгорание обычно начинается с желания испытать себя. Сочетание амбициозности и перфекционизма заставляет работать усерднее и упорнее, и прятать голову в песок при виде любых возникающих проблем — вроде вечного насморка или нежданных слез из-за пустяков.



Постоянное напряжение запускает ответ на стресс «бей или беги». Организм высвобождает такие гормоны стресса, как адреналин и кортизол, перенаправляет энергию в мышцы и повышает ЧСС, игнорируя нежизненно важные функции вроде пищеварения. Когда стресс превращается в «состояние по умолчанию», подобная реакция начинает приносить вред. Излишнее напряжение вызывает чувство вечной усталости, подавляет либидо и негативно сказывается на иммунной системе.



Со временем все это нарастает. Ощущение вымотанности, отсутствие мотивации, неумение расслабиться, возникновение привычки жить в окружении мелких недомоганий… В результате выгорание начинает влиять на способность полноценно жить и трудиться. Но если усердная работа необходима для достижения успеха, то как можно приложить все усилия и при этом не навредить своему здоровью и самочувствию?



Как избежать выгорания и поднять продуктивность?



Ключ к борьбе с выгоранием — выделение времени на занятия, снижающие уровень стресса, и формирование определенных границ как для себя, так и для работодателей.



1. Ограничить свои рабочие часы



Случайные задержки на работе ради интересных дел не принесут никакого вреда. Однако если вы постоянно работаете до утра или остаетесь в офисе, когда все уже разошлись по домам, то велика вероятность того, что все закончится выгоранием.



Если вам просто поручили чересчур много работы и отвели на ее выполнение слишком мало времени, не стесняйтесь и поднимите этот вопрос в разговоре с работодателем. Любой практичный босс наверняка предпочтет разумную загруженность потере работника из-за выгорания. Тем более что другим людям придется взять на себя ваши обязанности, если вы не сумеете завершить начатое.



2. Создать официальное рабочее расписание



Также следует установить строгие границы рабочего дня (особенно если вы работаете на себя) и отклоняться от них лишь изредка. Степень загруженности обычно колеблется, поэтому иногда может возникать необходимость поработать по паре лишних часов в день в течение 2 недель. И это нормально при условии, что вы вернетесь к обычному распорядку достаточно быстро. В конце рабочего дня отключайте почтовые уведомления, закрывайте проекты и мысленно отстраняйтесь от дел.



3. Подумать над приоритетами, находящимися за пределами рабочей сферы



Вспомните еще и о своих домашних обязанностях. Тому, у кого есть дети, работать по 40 часов в неделю гораздо сложнее, чем тем, у кого их нет. И правильное для вас расписание может не согласовываться с традиционным «с 9 до 17». Вам просто нужно оценить, с чем вы сможете стабильно справляться. И если вдруг приходит понимание, что вы взвалили на себя слишком много, немедленно решать эту проблему.



4. Найти (здоровые) способы расслабиться



Наконец, найдите здоровый метод, позволяющий вам расслабиться. Алкоголь даже в небольших количествах снижает качество сна, поэтому пара бокалов вина в конце дня просто усугубят усталость. Сигареты, как известно, тоже вредны, поэтому нужно отыскать здоровые альтернативы.



Медитация поможет вам избежать выгорания по многим причинам: от снижения на треть уровня гормонов стресса в организме до вхождения в состояние глубокого отдыха, даже более глубокого, чем сон. Если вы находитесь в состоянии стресса и чувствуете себя измотанным, то медитация поможет вам восстановиться.



А еще добиться желаемого помогают упражнения (выполняемые ради удовольствия, а не рассматриваемые как очередная обязанность), регулярные прогулки на природе или лежание в ванне с книгой в конце дня. Как бы там ни было, ежедневный отдых не только приносит душевный покой, но и помогает двигаться дальше.



P.S. Рекомендуем ещё одну полезную статью по теме работы над собой — 8 явных признаков успешной жизни, не имеющих отношения к деньгам или славе.



Автор перевода — Давиденко Вячеслав, основатель компании TESTutor.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/310558/

Комментарии (0)КомментироватьВ цитатник или сообщество
Dima_Krikunov

Выставите приоритеты

Понедельник, 05 Сентября 2016 г. 20:29 (ссылка)




Выставите приоритеты.


Когда в вашей жизни слишком много всего, когда 24-х часов в сутках не хватает - вспомните о банке из-под майонеза... и кофе.


Профессор философии стоял перед слушателями, а на столе перед ним лежало несколько предметов. Когда лекция началась, он, не говоря ни слова, взял очень большую и пустую банку из-под майонеза и начал заполнять её мячиками для гольфа. Затем он спросил студентов,заполнена ли банка? Они ответили "да". Затем профессор взял коробку с галькой и высыпал её в банку. Он немножко потряс банку. Галька забила пространство между мячиками. Он снова спросил студентов, была ли банка полной. Они подтвердили, что это так. Затем профессор взял коробку с песком и высыпал его в банку. Конечно же, песок заполнил все пустоты. И он снова спросил студентов, была ли банка полной. Студенты ответили "да". Профессор взял две чашки кофе, которые стояли под столом и вылил их в банку, заполнив всё свободное место между песком. Студенты рассмеялись. "Итак!" сказал профессор, когда все успокоились, "Я хочу, чтобы вы представили, что эта банка - ваша жизнь Мячики для гольфа - это важные вещи. Это ваша семья, дети, вера, здоровье, друзья и ваши любимые увлечения. Даже если все остальное потеряно, но остались эти вещи - ваша жизнь всё равно будет полной. Галька представляет собой остальные вещи, которые имеют значение. Ваша работа, дом, машина. Песок - это всё остальное. Это мелочи. "Если вы сперва заполните всю банку песком, - продолжил он, - в ней не останется места для гальки и мячиков для гольфа. То же самое происходит и в жизни. Если вы потратите всё свое время и энергию на мелочи, у вас никогда не будет места для вещей, которые действительно важны для вас. Обратите внимание на те вещи, которые важны для вашего счастья!Играйте со своими детьми. Заботьтесь о своём здоровье. Пригласите спутника жизни в ресторан. Станьте снова 18-летним. У вас всегда будет время на уборку дома. Позаботьтесь сразу о мячиках для гольфа, о том, что действительно важно. Выставите приоритеты.Остальное - это песок".Один из студентов поднял руку и спросил профессора, а что же означает кофе? Профессор улыбнулся. "Я рад, что вы задали этот вопрос. Оно просто показывает, что неважно насколько полна ваша жизнь, в ней всегда есть место, чтобы выпить пару чашек кофе с другом".


 
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Mikrotik QOS в распределенных системах или умные шейперы

Суббота, 06 Августа 2016 г. 10:40 (ссылка)

Mikrotik QOS в распределенных системах или умные шейперы





image

А что бы вы со своей стороны могли предложить?

— Да что тут предлагать… А то пишут, пишут… конгресс, немцы какие-то… Голова пухнет. Взять все, да и поделить.

— Так я и думал, — воскликнул Филипп Филиппович, шлепнув ладонью по скатерти, — именно так и полагал.

М. Булгаков, «Собачье сердце»



Про разделение скорости, приоритезацию, работу шейпера и всего остального уже много всего написано и нарисовано. Есть множество статей, мануалов, схем и прочего, в том числе и написанных мной материалов. Но судя по возрастающим потокам писем и сообщений, пересматривая предыдущие материалы, я понял — что часть информации изложена не так подробно как это необходимо, другая часть просто морально устарела и просто путает новичков. На самом деле QOS на микротике не так сложен, как кажется, а кажется он сложным из-за большого количества взаимосвязанных нюансов. Кроме этого можно подчеркнуть, что крайне тяжело освоить данную тему руководствуясь только теорией, только практикой и только прочтением теории и примеров. Основным костылем в этом деле является отсутствие в Mikrotik визуального представления того, что происходит внутри очереди PCQ, а то, что нельзя увидеть и пощупать приходится вообразить. Но воображение у всех развито индивидуально в той или иной степени.





Поэтому я решил написать еще один материал, в котором я смешаю теорию с практикой, визуальными примерами и разобью данный материал на блоки от простого, к сложному. С каждым новым примером я буду добавлять необходимую информацию, и в самом конце вы получите полное представление, как это все работает. Думаю, так будет значительно проще понять основные принципы построения шейпера на микротике.



В данном материале я буду рассматривать только Queue Tree очереди с использованием PCQ. Уж извиняйте, Simple Queues для меня это — несколько не тот уровень возможностей. Так же не будет описан устаревший материал, который применим только для пятых версий ROS, хотя в некоторых моментах я буду на него ссылаться для сравнения.



Начнем с простого примера





Имеем микротик:

WAN интерфейс с белым адресом (1.1.1.1) и входящей скоростью 32 мегабита в секунду

LAN — c подсетью 192.168.0.0/24



Задача нарезать входящую в различных комбинациях (Download) скорость для подсети 192.168.0.0/24. Исходящую скорость (Upload) пока трогать не будем, но отмечу, что ее реализация почти ничем не отличается от реализации входящей скорости.



Для того чтобы что то нарезать на микротике мы должны определится с критериями отбора нужного нам трафика и выделить его. Для этого нам понадобится /ip firewall mangle.



Мангл можно представить в виде своеобразного фильтра, способного отбирать из общего потока пакеты и соединения по определенным критериям и выполнять с ними определенные действия.



Наш единственный критерий известен: нам из общего потока нужны только пакеты, которые идут в подсеть 192.168.0.0/24. В качестве действия с этими пакетами мы выберем — назначение пакету маркировки, впоследствии на основе этой маркировки пакеты можно будет обработать в Queue Tree.



Чтобы правильно промаркировать пакет — нужно знать по каким цепочкам в Mangle он проходит. Для этого нужно знать диаграммы движения пакетов (Packet Flow) причем не абы какие, а именно свежие диаграммы т.к. в шестой версии ROS схема немного изменилась. И естественно, посмотрев на эти диаграммы впервые, у вас на устах ничего кроме матерных слов не будет.



image




Опять же не все так сложно как кажется, данные диаграммы показывают, как ходит трафик во всех случаях, нам же для работы с шейпером понадобится лишь малая их часть.



Исходя из данной диаграммы, можно понять, что интересующий нас трафик идет по пути:



Input Interface > PREROUTING ->FORWARD ->POSTROUTING -> Output Interface



Схема при включенном NAT будет чуть пожирнее:



Input Interface > PREROUTING > DST-NAT >FORWARD > POSTROUTING > SRC-NAT > Output Interface



Какую из цепочек выбрать?



В пятых версиях ROS кроме того где находится NAT, нужно было еще знать где находится обработка очередей global-in, global-out и global-total.

В шестой версии стало все проще, т.к. вышеуказанные обработки упразднили и заменили одним global. И находится этот global в самом конце POSTROUTING, после него обрабатываются очереди SimleQueue и пакет отпускается на волю. Исходя из этого — нам неважно, где он теперь, т.к. все обработки по маркировке производятся до него.



А раз так, то единственное ограничение нам создает только NAT и выбор будет зависеть от направления трафика, который мы хотим промаркировать. По этому случаю накидал свою диаграмму:



image




Как видно из диаграммы, для маркировки полученных пакетов, нам нужны цепочки, в которых доступны серые адреса подсети 192.168.0.0/24 (dst-address).

А видно их только в FORWARD и POSTROUTING.



Для того чтобы промаркировать Upload пакеты нужны цепочки со второй половины диаграммы, в которых доступны серые адреса подсети 192.168.0.0/24 (src-address).

А доступны они во всех трех цепочках PREROUTING, FORWARD, POSTROUTING.



Я рад, что не поленился и написал так много лишних букаф. И все для того, чтобы донести до вас информацию о том, что независимо от направления, которое мы хотим промаркировать, можно выбрать цепочку FORWARD в обоих случаях. Но так нельзя делать в пятых версиях ROS.



С цепочкой определились, теперь нужно определиться с тем, как мы будем помечать пакеты. Сначала пометить соединения, а уже потом в них пометить нужные пакеты? Или просто пометим пакеты и все взлетит?

Как то давно во времена первых версий из шестой линейки, мне написал один хороший человек (за что ему огромное спасибо!), и сказал, что у него в системе интересный глюк. Дал он мне соединение на TeamViewer и показал, как обычная маркировка пакетов помечает на треть (треть! Карл!) пакетов больше, чем маркировка при тех же параметрах но в пределах соединений. Соответственно и скорости в дереве были в норме, а вот на интерфейсах были на треть выше. Ковырялся долго, ничего не нашел. Делал повторую маркировку по тем же критериям вне коннекшена, предварительно отключив дальнейшие передачи уже помеченных пакетов в вышестоящих правилах. Все это с занесением в лог. Нормальные обычные пакеты, почему они не попали в коннекшен так и не понял.

Поставил ту же версию себе на тестовый стенд (один WAN, один LAN и все это под двойной NAT) настроил правила и поймал тот же глюк у себя. На протяжении четырех-пяти (уже не помню) версий я ловил данный глюк. Потом тупо сделал нагрузочный тест и понял — не такое уж и великое снижение нагрузки на камень, чтобы использовать маркировку в соединениях. С тех пор, на маркировку пакетов в соединениях — я забил. Как руки дойдут — проверю, а пока маркирую пакеты так.



Ну, с этим закончили. Правило в студию!




Данным правилом мы помечаем все пакеты, у которых dst-address равен адрес листу «LAN» ну и назначаем им packet-mark тоже «LAN»

/ip firewall mangle add action=mark-packet chain=forward comment=LAN disabled=no dst-address-list=LAN new-packet-mark=LAN passthrough=yes;





Так же добавим и сам адрес лист:

/ip firewall address-list add address=192.168.0.0/24 disabled=no list=LAN;





На этом маркировка в одном направлении закончена, чтобы промаркировать исходящий трафик, нам нужна копия правила, где dst-address-list=LAN заменен на src-address-list=LAN



Но как я уже писал, для примера мы возьмем только входящий трафик.



Ловим трафик в Queue Tree




Для того чтобы создать очередь PCQ в данном случае требуется одно правило и профиль в Queue Type. Но я создам два правила, чтобы на одном примере показать как в том, или ином случае ведет себя очередь при установке лимитов.



Родительская очередь

/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=30M name=DOWNLOAD parent=global priority=8





Тут стоит прояснить несколько моментов:

parent=global — В данном параметре можно указать либо «global» либо имя интерфейса. Имя интерфейса тут играет роль определенного фильтра направления трафика и используется в сложных конфигурациях для исключения всех направлений кроме указанного интерфейса и действует только для этой очереди и ее потомков. Всегда указывайте в данном параметре «global» эффект будет тот же, а проблем меньше.

max-limit=30M — в условии задачи указано что канал у нас выдает 32 метра, но прописывать нужно чуть меньше доступной скорости. В противном случае вы упретесь в шейпер своего провайдера, ваш же просто не будет работать.



burst-limit=0 burst-threshold=0 burst-time=0s — отключены т.к. их использование мало чего дает при PCQ, но в профиле они имеют достаточную актуальность для использования.



priority=8 — приоритет очереди, 1 — высший приоритет, 8 — низший приоритет. НЕ РАБОТАЕТ если очередь имеет потомков.



Приоритеты работают только у потомков, причем конкурируют они друг с другом не только в пределах своего родителя, но и с потомками других родителей и только в случае общего дедушки, который лимитирует этим дармоедам скорость. При одинаковых приоритетах они распределят между собой всю доступную дедушкой скорость. При разных — сначала из общей дедушкиной миски едят высокоприоритетные, потом едят те у кого приоритет пониже и то только если что-то осталось, ну или родители развели дедушку на Limit-at. Хотя и родители могут устроить битву титанов среди своих потомков, если у них установлен не только Limit-at, но и Max-limit. Это будет в стиле: «не сжирайте все, у деда есть и другие дети с внуками от первого брака!»

Ну да постебались и хватит! Про лимиты и приоритеты расскажу более наглядно чуть позже.



В общем, мы создали родителя, теперь ему нужен потомок. Но для добавления потомка (конечной очереди) сначала необходимо добавить профиль. Добавляем.



/queue type add kind=pcq name= PCQ_DOWNLOAD_LAN pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;





kind=pcq — Указываем что очередь которая использует данный профиль является инициатором подочередей PCQ

pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s — Настройки Burst Скоростей, об этом чуть позже.

pcq-classifier=dst-address — Данный параметр указывает по какому классификатору будут создаваться PCQ очереди. В данном случае по адресу назначения (входящий трафик)



pcq-dst-address-mask=32 и pcq-src-address-mask=32 — задают количество адресов в одной очереди. (32=одна очередь на один ip адрес)



pcq-rate=0 — Устанавливает верхний лимит скорости для одной PCQ очереди (в нашем случае для одного ip адреса) Если указан ноль — скорость не ограничена и будет разделена поровну между очередями (ip адресами). В нашем случае 30 мегабит будут разделены поровну между активными очередями (ip адресами).



pcq-limit=50 — лимит размера одной очереди (для одного ip адреса) Все данные в этой очереди при достижении лимитов задерживаются, все что в нее не влезло — уничтожается.



pcq-total-limit=2000 — лимит размера всех очередей.



Теперь, когда у нас есть родительская очередь и профиль под потомка, мы добавим самого потомка:



/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=LAN packet-mark=LAN parent=DOWNLOAD priority=8 queue=PCQ_DOWNLOAD_LAN;





packet-mark=LAN — вот тут мы ловим в очередь поток промаркированных в мангле пакетов.

parent=DOWNLOAD — указали родителя, который ограничил нам скорость.

queue=PCQ_DOWNLOAD_LAN — ссылаемся на профиль с настройками в Queue Type



Ну, вот и закончили с правилами. Посмотрим на визуальную диаграмму.



Все что происходит наверху, вы уже знаете, далее смешанные промаркированные пакеты в хаотичном порядке, кучей подхватываются очередью потомком. И тут начинается самое интересное.



image




Допустим, у нас сейчас в подсети работают три машины: 192.168.0.1, 192.168.0.2 и 192.168.0.3.



В связи с тем, что потомок привязан к профилю с именем «PCQ_DOWNLOAD_LAN», профиль ему сообщил: что нужно создать под каждый встреченный в промаркированном потоке dst-ip адрес отдельную PCQ очередь.



У нас внутри Queue Tree очереди будет создано три PCQ очереди (потока) с одинаковыми параметрами pcq-rate, pcq-limit и настройками Burst скоростей.



В данном случае очередь сработала как своеобразный сортировщик пакетов. И для каждого пользователя создала индивидуальную очередь.



Каждая очередь проходит через pcq-rate, именно эта штука и задерживает пакеты в индивидуальных очередях.

Далее пакеты смешиваются и поступают во вторую часть Queue Tree очереди c именем «LAN», где проходят проверку на суммарную скорость по Max-Limit, если он есть и исчерпан, то этот Max-limit будет поделен поровну между PCQ-очередями (потоками), задержка производится на уровне pcq-rate, какие-то очереди ускоряются, какие-то притормаживаются. Все что не влезло в pcq-limit — уничтожается.



Но у нас этого параметра в очереди «LAN» не установлено и поэтому трафик ползет вверх к родительской очереди (DOWNLOAD). Там все происходит по аналогии, проверяется Max-Limit и если он достигнут — родительская очередь пинает pcq-rate на закрытие дышла. Скорости потоков выравниваются, и все приходит в норму.

Представим на секунду, что мы не установили Max-Limit в родительской очереди. Так вот, если нигде по пути трафика при pcq-rate=0 не было обнаружено значения Max-Limit, то и вся очередь не будет работать, весь трафик пройдет сквозь шейпер без задержек, т.к. некому сообщить pcq-rate что канал не резиновый.



Многих мучает вопрос, если в данном случае pcq-rate=0, пользователей три, двое спят, а один качает. Он выжирает все 30 мегабит? — Да!



А что будет, если проснется еще один и тоже начнет качать? — Будет произведено перестроение и выравнивание скоростей. 30 мегабит они поделят поровну. Единственный нюанс — на это требуется время, второй пользователь будет немного медленнее набирать скорость, чем обычно.



Суть механизма заключается в задержке и уничтожении пакетов, которые не влезли в лимит. Протокол TCP устроен таким образом, что в рамках соединения — сервер который отправляет данные клиенту, проверяет как они дошли до него, если у пакетов выросла задержка или пакет потерялся (нарушение последовательности) сервер снижает скорость отправки чтобы увеличить стабильность.



pcq-limit и pcq-total-limit задаются экспериментально, чем больше лимит — тем больше задержка и больше занято оперативной памяти роутера. Чем меньше лимит — тем больше пакетов будет уничтожено.



Что будет, если задать pcq-rate=5M?

Каждый пользователь получит не более 5 мегабит. 3 активных пользователя * 5 мегабит =15 мегабит.



Три активных пользователя, все качают по полной, pcq-rate=11M?

Скорость упрется в Max-limit родительской очереди (30M) и данная скорость будет поделена между пользователями равномерно по 10 мегабит. Если один из них уйдет с закачки или снизит свою скорость минимум до 8 мегабит, двое остальных разгонятся до 11 мегабит.



Я очень надеюсь, что по данному примеру все понятно, если непонятно — прочтите еще раз и еще раз, далее будет сложнее.



Burst



Технология Burst предназначена для подачи увеличенной скорости при назначенном лимите на короткое время. Использовать данную функцию целесообразно на небольших по скорости тарифах, для ускорения веб-серфинга или быстрой подгрузки данных в приложения. Данная функция работает только в случае если pcq-rate не равен нулю.

Не буду до посинения грузить вас графиками и формулами расчета, лучше накидаю пример.

Pcq-rate=2M

pcq-burst-rate=4M

pcq-burst-threshold=1M

pcq-burst-time=10s



Максимальная скорость работы пользователя равна 2 мегабитам. Если скорость его работы в данный момент менее 1 мегабита (pcq-burst-threshold), ему станет доступна скорость в 4 мегабита (pcq-burst-rate) на 10 секунд (на практике меньше) это pcq-burst-time. Счетчик начинает тикать с того момента как будет превышен порог в 1 мегабит (pcq-burst-threshold), по истечении времени скорость упадет до pcq-rate, чтобы Burst снова стал доступен — скорость пользователя должна упасть ниже 1 мегабита и находится там не менее 10 секунд (pcq-burst-time)



Понятно, что это очень грубое объяснение, на самом деле время доступности burst рассчитывается по непростому алгоритму — время делится на 16 отрезков и учитывая почти все переменные скорости и лимитов рассчитывается время действия.

Данная функция потребляет значительное количество ресурсов, используйте ее с умом.



Для справки: При внесении любых изменений, в любую очередь и в любом ее проявлении (Tree или Simple) — все счетчики обнуляются в т.ч. и счетчики Burst. Если вы используете скрипты для автоматической коррекции значений Max-Limit типа QOSEvxController — будьте готовы отказаться от Burst или использовать циклы проверки очередей в QOSEvxController не так часто.



Ведро с болтами (Bucket)



Так же с недавнего времени в шестой версии ROS для очередей появился новый параметр bucket-size (размер ведра). Данный параметр может быть изменен в пределах от 0.1 до 10 и используется для задания емкости ведра с токенами. Емкость ведра рассчитывается по форумуле:

Емкость в МЕГАБАЙТАХ=bucket-size * max-limit

Над каждой очередью нависает ведро с гомном токенами, пока трафик в данной очереди не превышает лимит (max-limit) токены накапливаются в данном ведре. При переполнении ведра токен падающий в полное ведро уничтожается.



На что тратятся токены.



/queue tree add name=download parent=global packet-mark=PC1-traffic max-limit=10M bucket-size=10;





В данном примере, емкость ведра будет равна: (max-limit=10M) * (bucket-size=10) = 100 мегаБАЙТАМ

Если пользователь или пользователи потока пакетов с маркировкой «PC1-traffic» до недавнего времени ничего не качали на полной скорости — ведро с токенами в данной очереди будет полным, а это целых сто мегабайт трафика. И вот решили они дружно, что то качнуть, так вот, первых 100 мегабайт трафика они получат без ограничения скорости по max-limit, когда 100 мегабайт будет скачано очередь начнет ограничивать скорость согласно заданному max-limit=10M.



Кроме этого, если у очереди есть родитель с более жирным max-limit, то после того как потомок выжрет все свои токены, из своего ведра, он начнет забирать токены у родительской очереди.



Для чего это нужно?

Bucket-size это как своеобразный Burst, только не по скорости а по объему трафика. Применение его совместно с PCQ очередями даст лишь сомнительную пользу. В одиночных сеялках типа pfifo, red и sfq может быть крайне полезен. Для PCQ очередей — единственное, что приходит в голову, это то, что мы лимитируем родительскими очередями скорость, которая чуть ниже реальной скорости канала. Грамотное использование данной функции может кратковременно более полно эксплуатировать всю доступную скорость канала и сглаживать пики активности пользователей.



Более подробная диаграмма работы ведра:



image




Эквиваленты маркировки трафика





В данном примере я указал, что у нас одна подсеть (192.168.0.0/24) с тремя пользователями (192.168.0.1, 192.168.0.2, 192.168.0.3). Мы пометили трафик к данным адресам одним правилом в mangle и одним адрес-листом.

На всякий случай скажу, что для mangle нет разницы, как мы ему скормим адреса для пометки — обработаны они будут одинаково.



Подсеть целиком:

/ip firewall address-list add address=192.168.0.0/24 disabled=no list=LAN;





Диапазон адресов:

/ip firewall address-list add address=192.168.0.1-192.168.0.3 disabled=no list=LAN;





Отдельные адреса:

/ip firewall address-list add address=192.168.0.1 disabled=no list=LAN;



/ip firewall address-list add address=192.168.0.2 disabled=no list=LAN;



/ip firewall address-list add address=192.168.0.3 disabled=no list=LAN;





Аналогично обстоит дело и с PCQ очередями. PCQ очередь без проблем разбирает один поток пакетов, помеченный одним правилом, состоящий из адресов разных подсетей на подочереди.



Допустим, что мы подмешали еще трех пользователей из другой подсети (192.168.1.1, 192.168.1.2, 192.168.1.3). Просто добавив нужные записи в адрес-лист. Тогда получим такую картину:



image




Исходя из всего вышеперечисленного, можно сделать вывод, что оперируем мы не подсетями, а группами ip адресов, которые создаем с помощью адрес-листов



В данном случае нет смысла раздельно маркировать трафик, делать два профиля и две очереди.

Такой подход необходим только в следующих случаях:



Когда требуется задать индивидуальный Max-Limit для выбранной группы адресов.

Когда требуется различный приоритет для групп адресов или типа трафика.

Когда требуется реализация различных тарифных планов для группы адресов. (pcq-rate)

И во всех возможных комбинациях вышеперечисленных случаев.



А вот пример того, как делать не надо:



image




Полный листинг примера:



/ip firewall mangle add action=mark-packet chain=forward comment=LAN disabled=no dst-address-list=LAN new-packet-mark=LAN passthrough=yes;



/ip firewall address-list add address=192.168.0.0/24 disabled=no list=LAN;



/queue type add kind=pcq name= PCQ_DOWNLOAD_LAN pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;



/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=30M name=DOWNLOAD parent=global priority=8;



/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=LAN packet-mark=LAN parent=DOWNLOAD priority=8 queue=PCQ_DOWNLOAD_LAN;





Пример второй. Приоритет одних, над другими.





Допустим, что мы администратор организации с небольшим количеством сотрудников.



Имеем исходные данные:



WAN интерфейс с белым адресом (1.1.1.1) и входящей скоростью 32 мегабита в секунду

LAN — c подсетью 192.168.0.0/24 (Рабочие станции Директоров)

LAN2 — c подсетью 192.168.1.0/24 (Рабочие станции Менеджеров)



В данном примере мы как раз, имеем один канал и две группы потребителей с разными приоритетами. Где директора имеют приоритет над менеджерами. Именно в этом случае для реализации данной схемы потребуется раздельная маркировка пакетов и раздельные очереди для групп пользователей.



Правила для маркировки:

/ip firewall mangle add action=mark-packet chain=forward comment=GROUP-A_DW disabled=no dst-address-list= GROUP-A new-packet-mark= GROUP-A_DW passthrough=yes;



/ip firewall mangle add action=mark-packet chain=forward comment=GROUP-B_DW disabled=no dst-address-list= GROUP-B new-packet-mark= GROUP-B_DW passthrough=yes;





Два правила для маркировки трафика с разными packet-mark и два списка для присвоения адресам принадлежности к группам.



/ip firewall address-list add address=192.168.0.0/24 disabled=no list=GROUP-A;

/ip firewall address-list add address=192.168.1.0/24 disabled=no list=GROUP-B;





Пришло время создать профили PCQ для очередей.

Сколько нужно профилей? По идее на загрузку хватит и одного профиля, но я всегда создаю по отдельному профилю на каждую группу и на каждое направление. Это позволяет иметь гибкие настройки на будущее, без дополнительного вмешательства в уже созданные правила и очереди



/queue type add kind=pcq name= GROUP-A_DW pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;



/queue type add kind=pcq name= GROUP-B_DW pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;





Создаем дерево очередей:



Родительская очередь:

/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=30M name=DOWNLOAD parent=global priority=8;





Потомки:

/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name= GROUP-A_DW packet-mark= GROUP-A_DW parent=DOWNLOAD priority=7 queue= GROUP-A_DW;



/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name= GROUP-B_DW packet-mark= GROUP-B_DW parent=DOWNLOAD priority=8 queue= GROUP-B_DW;





В данном примере нет ничего сложного, разница между очередями лишь в разных маркировках пакетов и разных приоритетах.



При низких скоростях данная схема будет прозрачно пропускать трафик через себя и любой из потребителей может получить все 30М указанных в родительской очереди.



При нехватке скорости в родительской очереди скорость начнет перераспределяться между потребителями по следующей схеме:



Группа с адресами GROUP-A_DW имеет более высокий приоритет (priority=7), ей будет отдана вся скорость родительской очереди (30M) и равномерно разделена между активными потребителями в пределах этой очереди.



Если данная группа не утилизировала весь доступный лимит скорости (30М), остатки этого лимита будут переданы в очередь с более низким приоритетом GROUP-B_DW (priority=8), где данные остатки будут равномерно разделены между активными потребителями в пределах этой очереди.



Если группа GROUP-A_DW утилизировала весь доступный лимит в 30 мегабит, группа GROUP-B_DW не получит вообще никакой скорости и никакой возможности передавать и получать пакеты из сети.



Для того чтобы группе с низким приоритетом оставалось хотя бы некоторое количество скорости, можно задать в очереди параметр limit-at=5M. Но данный параметр можно задать только совместно с параметром Max-Limit, ограничивать максимальную скорость группы нам не требуется — поэтому просто скопируем его из родительской очереди.



И вторая очередь после правок будет выглядеть так:

/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=5M max-limit=30M name=GROUP-B_DW packet-mark=GROUP-B_DW parent=DOWNLOAD priority=8 queue=GROUP-B_DW;





В таком случае при нехватке скорости в родительской очереди, очередь с низким приоритетом будет всегда получать минимум 5 мегабит, которые сможет равномерно разделить между активными потребителями в пределах этой очереди.



Пример третий. Реализация тарифных планов с разделением на группы с разными приоритетами.





В данном примере будет рассмотрен своеобразный гибрид, который включает реализации из первых двух примеров.

Предположим, что мы субпровайдер с ограниченными финансовыми и техническими возможностями. У нас есть узкий канал в интернет, пара тарифных планов и две категории абонентов (физ.лица и юр.лица). Чаще всего, при предоставлении услуг юридическим лицам мы получаем от них большую выгоду, чем от физических лиц на тех же показателях скорости. Вместе с этим, мы предоставляем юридическим лицам некоторые дополнительные гарантии в виде гарантированной скорости и более оперативной технической поддержки.



Ну и как чаще всего бывает — мы немного увлеклись и подключили чуть больше абонентов, чем может вытянуть наш канал в интернет. По правильному — нужно расширить канал или подключить дополнительный с последующей балансировкой нагрузки. Но как уже было сказано, на это пока нет возможностей.



Но скорости в прайм-тайм не хватает, юридические лица начинают звонить и жаловаться на несоответствующую тарифному плану скорость, задержки пакетов, заикания телефонии и пр.



Частично облегчить данную ситуацию поможет шейпер с приоритетами как во втором примере, единственные отличия в том, что в данном примере скорость на одного абонента строго лимитирована и присутствует несколько тарифных планов.



Так же как и в предыдущих примерах, мы рассмотрим только входящую скорость. Однако во избежание путаницы в комментариях, именах маркировок и именах очередей будет присутствовать upload скорость.



Сокращения:

FIZ — физическое лицо.

UR — юридическое лицо.

1024K-1024K — Скорости по тарифу: Download-Upload

DW- Download

UL — Upload



Маркировка пакетов:



/ip firewall mangle add action=mark-packet chain=forward comment=FIZ_1024K-1024K_DW disabled=no dst-address-list= FIZ_1024K-1024K new-packet-mark= FIZ_1024K-1024K_DW passthrough=yes;



/ip firewall mangle add action=mark-packet chain=forward comment=FIZ_3072K-3072K_DW disabled=no dst-address-list= FIZ_3072K-3072K new-packet-mark= FIZ_3072K-3072K_DW passthrough=yes;



/ip firewall mangle add action=mark-packet chain=forward comment=UR_1024K-1024K_DW disabled=no dst-address-list= UR_1024K-1024K new-packet-mark= UR_1024K-1024K_DW passthrough=yes;



/ip firewall mangle add action=mark-packet chain=forward comment=UR_3072K-3072K_DW disabled=no dst-address-list= UR_3072K-3072K new-packet-mark= UR_3072K-3072K_DW passthrough=yes;





Четыре правила маркировки, которые выдадут нам четыре потока помеченных пакетов, рассортированных по четырем тарифным планам (Два для физ.лиц и два для юр.лиц.)



Чтобы привязать абонента к определенному тарифному плану, нужно поместить его ip адрес в нужный адрес-лист:



/ip firewall address-list add address=192.168.0.1 disabled=no list= FIZ_1024K-1024K;

/ip firewall address-list add address=192.168.0.2 disabled=no list= FIZ_3072K-3072K;

/ip firewall address-list add address=192.168.0.3 disabled=no list= FIZ_3072K-3072K;

/ip firewall address-list add address=192.168.0.4 disabled=no list= UR_3072K-3072K;

/ip firewall address-list add address=192.168.0.5 disabled=no list= UR_3072K-3072K;



И т.д.



Теперь необходимо добавить необходимые профили для очередей:



/queue type add kind=pcq name= FIZ_1024K-1024K_DW pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=1M pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;



/queue type add kind=pcq name= FIZ_3072K-3072K_DW pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=3M pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;



/queue type add kind=pcq name= UR_1024K-1024K_DW pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=1M pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;



/queue type add kind=pcq name= UR_3072K-3072K_DW pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=3M pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;





Опять же я создал четыре профиля вместо двух, для сохранения гибкости настроек на будущее.



Далее построим дерево очередей:



Родительская очередь:

/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=30M name=DOWNLOAD parent=global priority=8





Потомки:

/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=FIZ_1024K-1024K_DW packet-mark=FIZ_1024K-1024K_DW parent=DOWNLOAD priority=8 queue= FIZ_1024K-1024K_DW;



/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=FIZ_3072K-3072K_DW packet-mark=FIZ_3072K-3072K_DW parent=DOWNLOAD priority=8 queue= FIZ_3072K-3072K_DW;



/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=UR_1024K-1024K_DW packet-mark=UR_1024K-1024K_DW parent=DOWNLOAD priority=7 queue= UR_1024K-1024K_DW;



/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=UR_3072K-3072K_DW packet-mark=UR_3072K-3072K_DW parent=DOWNLOAD priority=7 queue= UR_3072K-3072K_DW;





При реализации данного примера все будет работать следующим образом:



При низких скоростях абоненты без проблем получают свою тарифную скорость, которая ограничена параметром pcq-rate. Но самое интересное, начинается, когда активных абонентов больше чем может выдать канал.



Родительская очередь ограничена 30 мегабитами.



Тарифные планы физических лиц и сами физические лица между собой равноправны.

Тарифные планы юридических лиц и сами юридические лица тоже между собой равноправны.

Но в связи с тем, что очередь юридических лиц имеет более высокий приоритет, отсюда следует, что и сами юридические лица с их тарифными планами тоже имеют более высокий приоритет — и они будут обрабатываться первыми.



Вся доступная скорость отдается в тарифы для юридических лиц, каждый такой абонент ограничен скоростью тарифа заданной в параметре pcq-rate. Тем не менее, если данные абоненты интенсивно работают и их потребление трафика превышает в сумме 30 мегабит, то получим такую картину:

30 мегабит будут разделены поровну между юридическими лицами, на основании текущего количества пакетов в каждой PCQ очереди. На самом деле объяснить данную ситуацию не так просто, но я попробую.

Предположим, что у нас все перечисленные юридические лица качают «по полной». В данный момент есть четыре абонента с тарифом в 1 мегабит и двенадцать абонентов с тарифом в 3 мегабита.



4 * 1М = 4 мегабита

12 * 3M = 36 мегабит

4М + 36М = 40 мегабит требуется абонентам с одинаковым приоритетом.



Но у нас всего 30 мегабит. Все бы было просто в случае одинаковых тарифных планов: 30 мегабит поровну поделились бы между абонентами и все. Но как будет распределена скорость, если тарифы у нас разные в пределах одной приоритетной группы.



Как распределится недостаток скорости?

В голову приходит два варианта развития событий, но лишь один из них верный.



Недостаток скорости будет распределен в процентном соотношении исходя из скорости тарифного плана. Примерно как то так:



(100% / 40 мегабит которые требуются) = 2.5

30 мегабит которые есть * 2.5 = 75% от того что требуется мы имеем.



(1 мегабит / 100%) * 75% = 0.75 мегабита

(3 мегабита / 100%) * 75% = 2.25 мегабита



Проверяем:

4 абонента с тарифом в 1М (4 * 0.75) = 3 мегабита.

12 абонентов с тарифом в 3М (12 * 2.25) = 27 мегабит.

27+3 = 30 мегабит.



В принципе логично и относительно честно, только вот к сожалению данный сценарий будет обработан несколько иначе, а именно:

Вся доступная скорость (30 мегабит) будет распределятся равномерно, между участниками в равные единицы времени.

Представьте чан с 30 литрами воды, из которого отходят трубки одинакового сечения и N- количество стаканов разных размеров на столе, в которые одновременно разливают ограниченный объем воды одинаковыми струйками. В нашем примере самый маленький стакан имеет объем один литр, стакан побольше — три литра. (Три литра! Карл!) Как только мелкие стаканы будут наполнены — в них перестают лить воду. Вся оставшаяся вода будет продолжать разливаться в более крупные стаканы. Если и после этого вода в чане останется — она будет разлита в стаканы на другом низкоприоритетном столе. Но воды, то у нас не хватает даже на один стол.



Сложные вычисления:



Первый этап, первый временной промежуток:

4 стакана по литру = 4 литра

12 стаканов по три литра, но данном промежутке времени в них залит только литр = 12 литров.



30 литров — (4+12) =14 литров воды осталось в чане.



Второй этап, второй временной промежуток:

В связи с тем, что стаканов более трех литров в примере нет — просто разделим остатки воды между трехлитровыми стаканами.

14 литров / 12 стаканов= 1,1666666666666666666666666666667



Итог вычислений:

Пользователь на тарифе 1 мегабит получит весь мегабит целиком.

Пользователь на тарифе 3 мегабита получит 1+ 1,16 = 2,16 мегабита



Тоже самое если использовать простые вычисления:

(30 литров — 1 литр * 4) / 12 =2,16



Если внимательно посмотреть на оба примера (неправильный и верный) можно увидеть что в первом примере общая нехватка скорости по тарифу у всех ровно четверть от заявленной скорости и пострадали все тарифы одинаково. Во втором случае мелкие тарифные планы не почувствовали нехватки и получили заявленную скорость, однако тарифы с более высокой скоростью ощутили нехватку почти на треть.



Исходя из излишне-изложенной и не самой удачной метафоры, можно условно сказать, что тарифы с низкими скоростями имеют некий приоритет над тарифами с более высокими скоростями, при нехватке скорости, даже с одинаковым приоритетом.



Да это не совсем честно, но, к сожалению, данное поведение шейпера никак нельзя изменить.

Вот на этом моменте точка зрения господина Шарикова резко ушла в аут.

Страдать будут не все равномерно, а лишь те, кто имеет более веселый тарифный план. Ну и как водится чем больше скорость — тем больше платит абонент. Если данная ситуация еще более-менее допустима с физ.лицами, то с юр.лицами это даже досадным недоразумением назвать нельзя.



Ну да вернемся к дальнейшему обсуждению…

При данных условиях видно, что канала в 30 мегабит не хватает даже для обслуживания тарифных планов юридических лиц. Следовательно, пока юридические лица интенсивно получают данные, физические лица не получают вообще никакой скорости. Эту проблему можно решить заданием параметра limit-at, но в данном случае это еще сильнее снизит доступную скорость для юридических лиц.



Понятное дело, что подобная ситуация в реальности будет равна катастрофе. Но отодвинем катастрофу подальше и представим что юридических лиц не так много. А именно: 2 с тарифами в 1 мегабит и два с тарифами в 3 мегабита. И качают они «по полной».



Путем нехитрых вычислений (2*1 + 2*3 = 8, 30-8=22) понимаем, что после обслуживания юридических лиц, до очереди физических лиц дойдет всего 22 мегабита и разделятся они между ними согласно их тарифам. Если физических лиц слишком много и данной скорости на них не хватает — начнется дележка как в вышеописанном случае с большим количеством юридических лиц.

Но как бы, ни хватало скорости физическим лицам, юридические лица будут обслужены первыми.



Пример четвертый. Приоритет одного типа трафика над другим.





Дополнительно к классической системе приоритетов, когда поток разделен на несколько групп абонентов с разными приоритетами можно прикрутить дополнительные критерии разделения на приоритеты.



На эту тему можно спорить часами. Одни люди скажут, что при особых обстоятельствах, безусловно, стоит использовать приоритеты. И, конечно же, предоставят весомые аргументы в пользу данных решений. Другие начнут кричать про производительность и как бы этичность данного решения — мол, кто мы такие, чтобы решать за пользователя или абонента какой тип трафика ему важнее.

Я в этот дурацкий холивар никогда не влезал. Просто в виду большого опыта у меня своя точка зрения на этот счет. Все зависит от каждого конкретного случая и типа применения данной технологии.

Есть системы, в которых применение приоритетов только вредит общей работе — напрасно нагружает оборудование, следовательно, жрет электричество, мешает конечному пользователю самостоятельно определить какие либо проблемы с сетью (прим. — высокий приоритет icmp). Так же встречались системы на мыльницах с полностью загруженным маршрутизацией процессором, на который еще навешали приоритезацию и удивлялись, почему упала скорость.



Так же есть масса примеров, где данные решения нашли свое место и значительно улучшили работу сети и репутацию данных субпровайдеров. В некоторых случаях казалось, что применение приоритезации в каком-то конкретном случае было неоправданно (широкие каналы, всем всего хватает и данная фича просто нагружает процессор) тем не менее, при отвале сразу четырех аплинков из шести, скорости стало катастрофически не хватать. И эта якобы ненужная фича очень сильно снизила количество звонков в техническую поддержку. Да, существенно просела скорость загрузки торрентов тем не менее жалоб от «танкистов» на длинный пинг и лаги в игре не поступало.

Кроме всего этого, те люди у кого больше опыта знают, что под словом приоритезация понимается очень обширная тема и различные области применения. Думаю, что стоит перечислить основные типы:



Приоритезация по типу пользовательского трафика


Пользовательский поток делится на два, с разными приоритетами. Критериями разделения могут быть порты, протоколы, адреса назначения, адреса источники и целые подсети.

Производительность для высокого приоритета достигается за счет выделения дополнительной полосы скорости сверх тарифа абонента и более высокого приоритета очереди. Таким образом, абонент получает скорость тарифа под высокий приоритет + скорость тарифа под остальной трафик. По факту: абонент получает скорость тарифа умноженную на два. На практике, при свободном аплинке и полном использовании абонентом своей скорости по тарифу, абонент в среднем использует скорость тарифа+20%. При нехватке аплинка, низкоприоритетный трафик задерживается (полоса сужается), высокоприоритетный пропускается (отдельная полоса с более высоким приоритетом).



Приоритезация по направлению внешний <-> внутренний


Пользовательский поток делится на два, с разными приоритетами. Критериями разделения обычно служат подсети. В одном потоке идет внешний трафик в мир, во втором внутренний или межабонентский трафик. Используется крайне редко, обычно в распределенных системах, состоящих из нескольких маршрутизаторов.



Приоритезация по направлению внешнего трафика Download <-> Upload


Почти не используется в проводных сетях. Администраторы беспроводных сетей знают, что при односторонней передаче данных через радиооборудование (симплекс), скорость в разы выше чем при наличии встречного трафика (дуплекс). Чаще всего при наличии встречного трафика более 30% линк сильно деградирует



Для примера:

UDP тест на мостах UBNT через AirOS

симплекс ~130-160 мегабит/c.

Дуплекс ~40-50 мегабит/c.



В шестой версии ROS с ее изменениями (корневая очередь global и пометка в forward) появилась возможность контролировать дуплексный трафик с ограничением и снижением приоритета исходящего трафика от абонентов.



Данная теория в основном относится к B/G/N, при использовании оборудования работающего в AC режиме встречный трафик уже не так страшен.





Суровая практика





Ну, хорошо, теория и основы понятны. Стоит реальная задача сделать некий умный шейпер. С чего начать? Какие факторы нужно учесть, чтобы не собрать все грабли и впоследствии не переделывать все сначала?



Перед тем, как создать некоторую конструкцию шейпера необходимо в первую очередь определится с множеством параметров, которые имеет ваша сеть, или будет иметь в будущем. Если вы не сделаете этого сейчас, то в будущем могут возникнуть проблемы, которые заставят вас переделывать конструкцию с нуля. Так же стоит помнить, что каждая новая функция, требование или критерий будет стоить процессорного времени. Чаще всего эта стоимость будет возрастать в геометрической прогрессии. Поэтому дважды подумайте, на сколько критична и уместна данная функция в вашей конфигурации.



Первое с чего мы начинаем — это каналы в интернет.



Первое на что нужно обратить внимание — это число каналов. Если у вас несколько каналов в интернет или только планируется использовать несколько каналов в будущем, то, скорее всего, вам понадобится делать под каждый канал уникальный шейпер.

Сейчас объясню почему.

При создании общего шейпера, в кореневой очереди нужно будет прописать значение max-limit, которое будет равно сумме скоростей ваших каналов. В теории это будет работать, но на практике не все так сказочно как кажется.



Во первых, какой бы крутой у вас не стоял балансировщик нагрузки между каналами — всегда будет определенный дисбаланс. Разная нагрузка на каналы хотя бы в 1% нарушит стабильную работу шейпера и минимум 1 абонент на каждом канале будет недополучать тарифной скорости.



Во вторых, скорость некоторых каналов время от времени может «плыть» и в составе балансировки это приведет к краху т.к. ни балансировщик, ни шейпер не будут знать о реальных скоростях аплинков. И даже искусственно созданный запас по емкости в данном случае не спасет.



В третьих, при падении одного из каналов общая емкость изменится, и значение max-limit в очереди станет неактуальным. В результате этого шейпер будет прозрачно пропускать трафик, соблюдая лишь pcq-rate. Кто-то из абонентов будет получать полную скорость, а кто-то вообще ничего.



Исходя из вышеперечисленного — если у вас несколько каналов, считайте данный функционал обязательным, даже при условии что цена ему довольно высока.

А цена данного функционала — умножение нагрузки процессора от шейпера и числа его правил на количество обслуживаемых каналов.



Второе на что нужно обратить внимание — это гарантированная скорость каналов.

Если скорость на канале плавает в пределах более 20% это очень плохо. Выходов из данной ситуации несколько:



1. Использовать только гарантированные каналы. Это почти миф. Такие каналы предоставляют в основном юр.лицам со всеми вытекающими. Во вторых, если канал приходит в роутер по радио — толку от этого будет мало.

2. Использование не всей емкости канала. Достигается путем длительных тестов и вычисления его средней скорости. Думаю, что вас не сильно порадует фиксированное использование только половины потенциала канала. Зато стабильность значительно возрастет.

3. Использование коммерческих (QOSEvxController) или самописных скриптов для актуализации значения max-limit на канале. Данное решение чуть лучше второго варианта и позволяет получать с канала чуть больше его средней скорости.



Цена вопроса — Договор на юр.лицо или внешние скрипты и некоторые ресурсы процессора.



Третье и последнее по каналам — Тип подключения аплинков.

Да, я имею ввиду подключение по радио, со всеми вытекающими. При встречном трафике производительность данного канала снижается, и скорость значительно плывет. Решение тоже, что и выше, плюс добавление в конструкцию различных приоритетов для Download/Upload трафика. Данный функционал не добавляет существенной нагрузки на ЦП



Второе на что мы обратим внимание это число тарифных планов в сетке. Тут можно сказать одно — соблюдайте золотую середину. Не стоит прописывать только те тарифы которые у вас есть сейчас, сетку тарифных планов нужно продумать заранее т.к. значительно проще поднять их на этапе создания, чем добавлять их в будущем совершая ошибки и путаясь в тысячах правил mangle. Но также не увлекайтесь, каждый лишний тарифный план умножает нагрузку на процессор.



Третий вопрос для обсуждения — это: «Нужно ли выделять какому либо типу трафика более высокий приоритет?»

Безусловно, стоит хорошо задуматься о внедрении в конструкцию данного функционала. Разделение потока пакетов хотя бы на два приоритета приведет к увеличению нагрузки на процессор вдвое, а при использовании регулярных выражений хотя бы в одном правиле mangle в десятки раз.

Поэтому использовать данную фишку стоит только владельцам роутеров серии CCR, CHR, X86 с достаточным количеством свободных мегагерц на ядрах процессоров.



Однако полезность данной функции тоже очень положительно влияет на работу сети.

Во первых, многое зависит от того, кому вы предоставляете интернет.



Есть абоненты, которые с компьютером строго на «вы» и это самая болезненная для технической поддержки группа. Они собирают все тизеры на страницах интернета, соответственно на их компьютере просто зоопарк из вирусов, троянов и загрузчиков, да еще центр обновления у них сам качает, что захочет и когда захочет. А после школы возвращается их ребенок, запускает танки, ловит лаги и начинаются звонки в техническую поддержку. Вы вежливо объясняете, что у них проблемы с компьютером и чаще всего получаете ответ что им «все починили и настроили две недели назад» и что у них проблем быть не может. Ведь папины веселые картинки на весь экран, которые просили положить денег на какой-то номер телефона, удалил мамин знакомый программист с работы.



И чаще всего до таких абонентов трудно достучатся и найти нужные слова для убеждения. Увы, но это так!



При выделении в более высокий приоритет (отдельная полоса) к примеру, тех же танкистов, подобные проблемы переходят из разряда «острые» в разряд «вялотекущие». И очень часто со временем решаются сами собой (машина начинает тупить, Winlocker-ы портят папе настроение, шифровальщики добивают файлы) и это все как бы намекает, что специалиста все-таки придется пригласить для решения этих проблем.



Абоненты, которые с компьютером на «ты» обычно не звонят по пустякам в техподдержку, сначала проверяют свою машину, потом скорость, а потом уже набирают вас. И боже упаси вас, сказать им, что у них с машиной или сетевой картой, что-то не так, они вам горло перегрызут. Хотя в некоторых, из таких случаев провайдер действительно прав, т.к. человеческий фактор никто не отменял, мы все ошибаемся, забываем про роутер, про ноутбук который качает торренты на кухне и т.д.



Во втором случае, когда нас выручает приоритезация по типу трафика — это некоторые проблемы с нашим оборудованием или каналами в интернет. Когда суммарной полосы наших каналов существенно не хватает, низкоприоритетный трафик равноправных абонентов прижимается чтобы пропустить высокоприоритетный. Тут тот же бонус, геймеры а тем более танкисты в разгар игровых баталий — очень нервный народ и пока вы занимаетесь решением проблемы вам будет значительно легче пережить эту неисправность если в это время вам не так сильно будут обрывать телефон как при падении всех сервисов в целом.



Четвертый вопрос для обсуждения коснется только тех, у кого локальный трафик от абонентов превышает возможности внутренних линков до сегмента сети.



Наиболее остро вопрос стоит у тех субпровайдеров, кто раздает интернет по радио на распространенном оборудовании.



Для примера возьмем базовую станцию Ubiquiti Rocket M5 c хорошей панельной антенной, установленной по всем правилам и работающей на свободной частоте без помех.

К данной базе подключено максимальное число абонентов (30 устройств) и для чистоты теории они все находятся на одинаковом расстоянии и с одинаковыми сигналами.



И вот мы создали тепличные условия для красивой коробочки внутри которой китайское г…



Не скажу что у других производителей все супер внутри корпуса, но данный производитель очень тщательно скрывает очень важный параметр — пакетную производительность данного устройства.

По своему опыту скажу, что для данного устройства она лежит в пределах 16000-20000. Для Rocket M5 Titatium в районе 20000-25000.



И что это нам дает? При закачке торрентов скоростью 1 мегабит в секунду (не самые мелкие пакеты, если что) генерируется порядка 800-1100 пакетов в секунду.

Это говорит нам, что при самом плохом положении вещей максимальная производительность базы равна 15 мегабитам в секунду. А не 300 мегабит как пишут многие продаваны и не 150 как пишут более честные. А агрегация в суперфрейм тут пустой звук.

Но это самое плохое развитие событий, не все же абоненты качают только торренты, кто-то серфит, кто-то в скайпе сидит, кто-то фильм смотрит и т.д.

Количество пакетов снижается, но скорость растет. Так вот, средняя пропускная способность данной базовой станции в реальных условиях составляет порядка 35-45 мегабит. Ее максимум 70-80 мегабит на крупных пакетах при TCP трафике.



К чему я собственно веду: при 30 абонентах с тарифами в 5 мегабит, данная база не справится в глобальный прайм-тайм, который случается не так уж редко. (Выход ожидаемых фильмов, трансляции спортивных событий и пр.



Даже 20*5 это уже сто мегабит, понятное дело, что на базе есть свои очереди, таймслоты при использовании TDMA и прочее, база как бы обязана раздавать трафик честно и поровну. Но в реальных условиях, когда она явно перегружена по пакетам или радио, при наличии помех, разности расстояний и сигналов, равномерное деление по TDMA просто невозможно.



Если ближе к теме, назовем базовую станцию сегментом, т.к. у нормальных провайдеров сети сегментированы и броадкаст по ним без разрешения не гуляет.

И на каждый сегмент сделаем дополнительное разделение и ограничение скорости, чтобы в случае нехватки ресурсов базы скорость делилась бы равномерно между теми, кому она нужна.



Легко сказать, но очень дорого сделать. Ведь каждый сегмент (VLAN).

Будет умножать нагрузку от шейпера на количество введенных в шейпер сегментов.

Данный функционал, несомненно, нужен беспроводным субпровайдерам, но он приводит к огромному количеству правил и гигантской трате системных ресурсов.



Но его все, же используют, просто данный функционал легко настраивается на терминирующем роутере, из двух роутеров получается распределенная система.

Первый роутер следит за скоростями каналов в интернет, приоритезацией и нарезкой скоростей. Далее трафик проходит во второй роутер, на котором шейпер следит за нагрузкой на сегменты сети. А так же за межабонентским трафиком, о котором я и расскажу.



Последний вопрос: «Зачем нужен межабонентский трафик и как больно грабли ударят по лбу?»



Межабонентский трафик нужен в первую очередь для снижения нагрузки на интернет каналы.

В сети может быть поднят локальный ретрекер, либо другие различные сервисы, либо совсем без них.

Суть заключается в том, чтобы при закачке какого либо торрента, торрент-клиент обращался в первую очередь к другим абонентам и в случае наличия у них запрашиваемых частей или файлов целиком получал их внутри сети на максимальной скорости.

Так же возможна реализация внутренних серверов и сервисов самим провайдером.



Ну, тут я уже предвижу: «Да кому нужны ваши внутренние серваки и ретрекеры? Тут у каждого второго оптика»



У меня есть клиент, официальный провайдер. У него три канала по 4 мегабита от спутниковых модемов и около 400 абонентов. В радиусе 700км нет ни оптики, ни кабеля, ни файфая, ни жопорезов с 3-4g. В общем, ничего нет. Пинг 700мс. А вы тут как сырки в масле, с оптикой и 21 веком. Еще будут вопросы, зачем субпровайдерам кеширующие прокси, ретрекеры и прочие примочки?



Так что межабонентскому трафику быть!

Как бы это хорошо не звучало, это единственная вещь, которую ROS шестой версии не в силах победить. Связано это с тем, что при замене global-in, global-out и global-total которые были в пятой версии, на global который теперь есть в шестой, пропала возможность дважды помечать трафик и дважды прогонять его через HTB.



Проблема в том, что мы физически не сможем пометить трафик от одного абонента до другого в пределах одного сегмента (базы), т.к. для одного абонента пакет будет помечен как исходящий, а для второго он является входящим. Для mangle это пакет соответствующий критериям двух правил, сначала он получит одну метку, а потом будет переразмечен другим правилом. И все бы получилось, если бы между маркировками можно было бы принудительно отправить пакет в обработку очередей. Но чудес не бывает.

Кто-то скажет или спросит: «В пятой же версии все получится?» Да, конечно. Проверял, работает на ура! Только вот пятая версия имеет свои минусы и уже не подходит под те задачи, которые требуются от этого роутера.



Как же быть? Есть некоторые варианты решения подобной задачи, трафик будет зарегистрирован лишь в одном направлении и с более низким приоритетом, интернет трафик будет иметь более высокий приоритет. Кроме этого данный поток полезно лимитировать. Схема довольно сложная и создается под отдельно взятые конфигурации. Если кто-то из специалистов сейчас прочитал это и понял, о чем я говорю — свяжитесь со мной, возможно, вместе мы придумаем что-то более продвинутое.



Кроме всего этого межабонентский трафик нельзя маркировать на одном роутере с контролем нагрузки на интернет аплинки. Даже если вы решили рискнуть производительностью роутера и сделать комбаин «все в одном» (Контроль нагрузки на каналы+нарезка скорости по тарифам+приоритеты+контроль внутренних сегментов+маркировка межабонентского трафика) то вы через некоторое время заметите, что в корневых очередях каналов в интернет регистрируется нагрузка, которой на самом деле не существует. Это межабонентский трафик маркируется, попадает в очередь, передается в корневую очередь сегмента, а оттуда попадает в очередь канала.

Изменение родителя у очереди канала или сегмента не даст никакого положительного результата. По факту получится, что канал свободен, но шейпер будет думать, что нагрузка на нем есть. Решение данной проблемы — распределенная система.



Ну, вот как бы и решилось что к чему, естественно если есть биллинг, то он должен поддерживать работу с адрес-листами для сообщения микротику какому ip адресу и сколько скорости выдать. Тоже самое относится к скрипту балансировки, он должен сообщать своими списками какой ip адрес, к какому каналу привязан в данный момент времени. Кроме этого если вы создаете распределенную систему на двух роутерах, вам потребуется синхронизация адрес листов между роутерами, реализовать ее можно написав скрипт, либо внешний обработчик на api. Так же в скором времени такой скрипт можно будет приобрести (EvxListSync).



Практическая и заключительная часть:





Думаю что после того как мы определились с необходимыми параметрами, следует приступить от слов к делу. В данном примере я опишу основную конструкцию, в которую можно добавить некоторый функционал по своему вкусу или удалить лишний.



Предположим, что у нас есть два канала в интернет и балансировщик, который раскидывает абонентов по каналам и формирует динамически нужные адрес листы ISP1 и ISP2.



Для каждого канала будет создан индивидуальный шейпер.



В примере будут рассмотрены четыре тарифных плана, два для физ.лиц и два для юр.лиц.

Если есть биллинг — он должен добавлять ip адреса пользователей в соответствующие списки для привязки абонента к нужному тарифному плану. Если биллинга нет — заполнять данные адрес листы потребуется вручную.



Кроме всего этого мы разделим трафик по типу на два приоритета.



Разметка




Маркируем весь входящий трафик к адресам из списка «SHAPER_TARGET» назначая пакетам метку «CLASS-B-DL»



/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-B-DL dst-address-list=SHAPER_TARGET new-packet-mark=CLASS-B-DL;





Далее отлавливаем пакеты с меткой «CLASS-B-DL» и переразмечаем их, назначая метку более приоритетного класса. В более выскокий приоритет попадут: ICMP, DNS, SSH, TELNET, RDP и пакеты у которых в качестве адреса источника указан любой адрес из списка CLASS-A-SITES.



/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-ICMP-DL new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=icmp;



/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-DNS_TCP-DL dst-port=53 new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=tcp;



/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-DNS_UDP-DL dst-port=53 new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=udp;



/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-SSH-DL dst-port=22 new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=tcp;



/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-TELNET-DL dst-port=23 new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=tcp;



/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-RDP-DL dst-port=3389 new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=tcp;



/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-SITES-DL new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL src-address-list=CLASS-A-SITES;







Выполняем аналогичную процедуру для исходящего трафика:



/ip firewall mangle add action=mark-packet chain= forward comment=CLASS-B-UL new-packet-mark=CLASS-B-UL src-address-list=SHAPER_TARGET;



/ip firewall mangle add action=mark-packet chain= forward comment=CLASS-A-ICMP-UL new-packet-mark=CLASS-A-UL packet-mark=CLASS-B-UL protocol=icmp;



/ip firewall mangle add action=mark-packet chain= forward comment=CLASS-A-DNS_TCP-UL new-packet-mark=CLASS-A-UL packet-mark=CLASS-B-UL protocol=tcp src-port=53;



/ip firewall mangle add action=mark-packet chain= forward comment=CLASS-A-DNS_UDP-UL new-packet-mark=CLASS-A-UL packet-mark=CLASS-B-UL protocol=udp src-port=53;



/ip firewall mangle add action=mark-packet chain= forward comment=CLASS-A-SSH-UP new-packet-mark=CLASS-A-UL packet-mark=CLASS-B-UL protocol=tcp src-port=22;



/ip firewall mangle add action=mark-packet chain= forward comment=CLASS-A-TELNET-UL new-packet-mark=CLASS-A-UL packet-mark=CLASS-B-UL protocol=tcp src-port=23;



/ip firewall mangle add action=mark-packet chai
Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Mikrotik QOS в распределенных системах или умные шейперы

Суббота, 06 Августа 2016 г. 10:40 (ссылка)

Mikrotik QOS в распределенных системах или умные шейперы





image

А что бы вы со своей стороны могли предложить?

— Да что тут предлагать… А то пишут, пишут… конгресс, немцы какие-то… Голова пухнет. Взять все, да и поделить.

— Так я и думал, — воскликнул Филипп Филиппович, шлепнув ладонью по скатерти, — именно так и полагал.

М. Булгаков, «Собачье сердце»



Про разделение скорости, приоритезацию, работу шейпера и всего остального уже много всего написано и нарисовано. Есть множество статей, мануалов, схем и прочего, в том числе и написанных мной материалов. Но судя по возрастающим потокам писем и сообщений, пересматривая предыдущие материалы, я понял — что часть информации изложена не так подробно как это необходимо, другая часть просто морально устарела и просто путает новичков. На самом деле QOS на микротике не так сложен, как кажется, а кажется он сложным из-за большого количества взаимосвязанных нюансов. Кроме этого можно подчеркнуть, что крайне тяжело освоить данную тему руководствуясь только теорией, только практикой и только прочтением теории и примеров. Основным костылем в этом деле является отсутствие в Mikrotik визуального представления того, что происходит внутри очереди PCQ, а то, что нельзя увидеть и пощупать приходится вообразить. Но воображение у всех развито индивидуально в той или иной степени.





Поэтому я решил написать еще один материал, в котором я смешаю теорию с практикой, визуальными примерами и разобью данный материал на блоки от простого, к сложному. С каждым новым примером я буду добавлять необходимую информацию, и в самом конце вы получите полное представление, как это все работает. Думаю, так будет значительно проще понять основные принципы построения шейпера на микротике.



В данном материале я буду рассматривать только Queue Tree очереди с использованием PCQ. Уж извиняйте, Simple Queues для меня это — несколько не тот уровень возможностей. Так же не будет описан устаревший материал, который применим только для пятых версий ROS, хотя в некоторых моментах я буду на него ссылаться для сравнения.



Начнем с простого примера





Имеем микротик:

WAN интерфейс с белым адресом (1.1.1.1) и входящей скоростью 32 мегабита в секунду

LAN — c подсетью 192.168.0.0/24



Задача нарезать входящую в различных комбинациях (Download) скорость для подсети 192.168.0.0/24. Исходящую скорость (Upload) пока трогать не будем, но отмечу, что ее реализация почти ничем не отличается от реализации входящей скорости.



Для того чтобы что то нарезать на микротике мы должны определится с критериями отбора нужного нам трафика и выделить его. Для этого нам понадобится /ip firewall mangle.



Мангл можно представить в виде своеобразного фильтра, способного отбирать из общего потока пакеты и соединения по определенным критериям и выполнять с ними определенные действия.



Наш единственный критерий известен: нам из общего потока нужны только пакеты, которые идут в подсеть 192.168.0.0/24. В качестве действия с этими пакетами мы выберем — назначение пакету маркировки, впоследствии на основе этой маркировки пакеты можно будет обработать в Queue Tree.



Чтобы правильно промаркировать пакет — нужно знать по каким цепочкам в Mangle он проходит. Для этого нужно знать диаграммы движения пакетов (Packet Flow) причем не абы какие, а именно свежие диаграммы т.к. в шестой версии ROS схема немного изменилась. И естественно, посмотрев на эти диаграммы впервые, у вас на устах ничего кроме матерных слов не будет.



image




Опять же не все так сложно как кажется, данные диаграммы показывают, как ходит трафик во всех случаях, нам же для работы с шейпером понадобится лишь малая их часть.



Исходя из данной диаграммы, можно понять, что интересующий нас трафик идет по пути:



Input Interface > PREROUTING ->FORWARD ->POSTROUTING -> Output Interface



Схема при включенном NAT будет чуть пожирнее:



Input Interface > PREROUTING > DST-NAT >FORWARD > POSTROUTING > SRC-NAT > Output Interface



Какую из цепочек выбрать?



В пятых версиях ROS кроме того где находится NAT, нужно было еще знать где находится обработка очередей global-in, global-out и global-total.

В шестой версии стало все проще, т.к. вышеуказанные обработки упразднили и заменили одним global. И находится этот global в самом конце POSTROUTING, после него обрабатываются очереди SimleQueue и пакет отпускается на волю. Исходя из этого — нам неважно, где он теперь, т.к. все обработки по маркировке производятся до него.



А раз так, то единственное ограничение нам создает только NAT и выбор будет зависеть от направления трафика, который мы хотим промаркировать. По этому случаю накидал свою диаграмму:



image




Как видно из диаграммы, для маркировки полученных пакетов, нам нужны цепочки, в которых доступны серые адреса подсети 192.168.0.0/24 (dst-address).

А видно их только в FORWARD и POSTROUTING.



Для того чтобы промаркировать Upload пакеты нужны цепочки со второй половины диаграммы, в которых доступны серые адреса подсети 192.168.0.0/24 (src-address).

А доступны они во всех трех цепочках PREROUTING, FORWARD, POSTROUTING.



Я рад, что не поленился и написал так много лишних букаф. И все для того, чтобы донести до вас информацию о том, что независимо от направления, которое мы хотим промаркировать, можно выбрать цепочку FORWARD в обоих случаях. Но так нельзя делать в пятых версиях ROS.



С цепочкой определились, теперь нужно определиться с тем, как мы будем помечать пакеты. Сначала пометить соединения, а уже потом в них пометить нужные пакеты? Или просто пометим пакеты и все взлетит?

Как то давно во времена первых версий из шестой линейки, мне написал один хороший человек (за что ему огромное спасибо!), и сказал, что у него в системе интересный глюк. Дал он мне соединение на TeamViewer и показал, как обычная маркировка пакетов помечает на треть (треть! Карл!) пакетов больше, чем маркировка при тех же параметрах но в пределах соединений. Соответственно и скорости в дереве были в норме, а вот на интерфейсах были на треть выше. Ковырялся долго, ничего не нашел. Делал повторую маркировку по тем же критериям вне коннекшена, предварительно отключив дальнейшие передачи уже помеченных пакетов в вышестоящих правилах. Все это с занесением в лог. Нормальные обычные пакеты, почему они не попали в коннекшен так и не понял.

Поставил ту же версию себе на тестовый стенд (один WAN, один LAN и все это под двойной NAT) настроил правила и поймал тот же глюк у себя. На протяжении четырех-пяти (уже не помню) версий я ловил данный глюк. Потом тупо сделал нагрузочный тест и понял — не такое уж и великое снижение нагрузки на камень, чтобы использовать маркировку в соединениях. С тех пор, на маркировку пакетов в соединениях — я забил. Как руки дойдут — проверю, а пока маркирую пакеты так.



Ну, с этим закончили. Правило в студию!




Данным правилом мы помечаем все пакеты, у которых dst-address равен адрес листу «LAN» ну и назначаем им packet-mark тоже «LAN»

/ip firewall mangle add action=mark-packet chain=forward comment=LAN disabled=no dst-address-list=LAN new-packet-mark=LAN passthrough=yes;





Так же добавим и сам адрес лист:

/ip firewall address-list add address=192.168.0.0/24 disabled=no list=LAN;





На этом маркировка в одном направлении закончена, чтобы промаркировать исходящий трафик, нам нужна копия правила, где dst-address-list=LAN заменен на src-address-list=LAN



Но как я уже писал, для примера мы возьмем только входящий трафик.



Ловим трафик в Queue Tree




Для того чтобы создать очередь PCQ в данном случае требуется одно правило и профиль в Queue Type. Но я создам два правила, чтобы на одном примере показать как в том, или ином случае ведет себя очередь при установке лимитов.



Родительская очередь

/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=30M name=DOWNLOAD parent=global priority=8





Тут стоит прояснить несколько моментов:

parent=global — В данном параметре можно указать либо «global» либо имя интерфейса. Имя интерфейса тут играет роль определенного фильтра направления трафика и используется в сложных конфигурациях для исключения всех направлений кроме указанного интерфейса и действует только для этой очереди и ее потомков. Всегда указывайте в данном параметре «global» эффект будет тот же, а проблем меньше.

max-limit=30M — в условии задачи указано что канал у нас выдает 32 метра, но прописывать нужно чуть меньше доступной скорости. В противном случае вы упретесь в шейпер своего провайдера, ваш же просто не будет работать.



burst-limit=0 burst-threshold=0 burst-time=0s — отключены т.к. их использование мало чего дает при PCQ, но в профиле они имеют достаточную актуальность для использования.



priority=8 — приоритет очереди, 1 — высший приоритет, 8 — низший приоритет. НЕ РАБОТАЕТ если очередь имеет потомков.



Приоритеты работают только у потомков, причем конкурируют они друг с другом не только в пределах своего родителя, но и с потомками других родителей и только в случае общего дедушки, который лимитирует этим дармоедам скорость. При одинаковых приоритетах они распределят между собой всю доступную дедушкой скорость. При разных — сначала из общей дедушкиной миски едят высокоприоритетные, потом едят те у кого приоритет пониже и то только если что-то осталось, ну или родители развели дедушку на Limit-at. Хотя и родители могут устроить битву титанов среди своих потомков, если у них установлен не только Limit-at, но и Max-limit. Это будет в стиле: «не сжирайте все, у деда есть и другие дети с внуками от первого брака!»

Ну да постебались и хватит! Про лимиты и приоритеты расскажу более наглядно чуть позже.



В общем, мы создали родителя, теперь ему нужен потомок. Но для добавления потомка (конечной очереди) сначала необходимо добавить профиль. Добавляем.



/queue type add kind=pcq name= PCQ_DOWNLOAD_LAN pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;





kind=pcq — Указываем что очередь которая использует данный профиль является инициатором подочередей PCQ

pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s — Настройки Burst Скоростей, об этом чуть позже.

pcq-classifier=dst-address — Данный параметр указывает по какому классификатору будут создаваться PCQ очереди. В данном случае по адресу назначения (входящий трафик)



pcq-dst-address-mask=32 и pcq-src-address-mask=32 — задают количество адресов в одной очереди. (32=одна очередь на один ip адрес)



pcq-rate=0 — Устанавливает верхний лимит скорости для одной PCQ очереди (в нашем случае для одного ip адреса) Если указан ноль — скорость не ограничена и будет разделена поровну между очередями (ip адресами). В нашем случае 30 мегабит будут разделены поровну между активными очередями (ip адресами).



pcq-limit=50 — лимит размера одной очереди (для одного ip адреса) Все данные в этой очереди при достижении лимитов задерживаются, все что в нее не влезло — уничтожается.



pcq-total-limit=2000 — лимит размера всех очередей.



Теперь, когда у нас есть родительская очередь и профиль под потомка, мы добавим самого потомка:



/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=LAN packet-mark=LAN parent=DOWNLOAD priority=8 queue=PCQ_DOWNLOAD_LAN;





packet-mark=LAN — вот тут мы ловим в очередь поток промаркированных в мангле пакетов.

parent=DOWNLOAD — указали родителя, который ограничил нам скорость.

queue=PCQ_DOWNLOAD_LAN — ссылаемся на профиль с настройками в Queue Type



Ну, вот и закончили с правилами. Посмотрим на визуальную диаграмму.



Все что происходит наверху, вы уже знаете, далее смешанные промаркированные пакеты в хаотичном порядке, кучей подхватываются очередью потомком. И тут начинается самое интересное.



image




Допустим, у нас сейчас в подсети работают три машины: 192.168.0.1, 192.168.0.2 и 192.168.0.3.



В связи с тем, что потомок привязан к профилю с именем «PCQ_DOWNLOAD_LAN», профиль ему сообщил: что нужно создать под каждый встреченный в промаркированном потоке dst-ip адрес отдельную PCQ очередь.



У нас внутри Queue Tree очереди будет создано три PCQ очереди (потока) с одинаковыми параметрами pcq-rate, pcq-limit и настройками Burst скоростей.



В данном случае очередь сработала как своеобразный сортировщик пакетов. И для каждого пользователя создала индивидуальную очередь.



Каждая очередь проходит через pcq-rate, именно эта штука и задерживает пакеты в индивидуальных очередях.

Далее пакеты смешиваются и поступают во вторую часть Queue Tree очереди c именем «LAN», где проходят проверку на суммарную скорость по Max-Limit, если он есть и исчерпан, то этот Max-limit будет поделен поровну между PCQ-очередями (потоками), задержка производится на уровне pcq-rate, какие-то очереди ускоряются, какие-то притормаживаются. Все что не влезло в pcq-limit — уничтожается.



Но у нас этого параметра в очереди «LAN» не установлено и поэтому трафик ползет вверх к родительской очереди (DOWNLOAD). Там все происходит по аналогии, проверяется Max-Limit и если он достигнут — родительская очередь пинает pcq-rate на закрытие дышла. Скорости потоков выравниваются, и все приходит в норму.

Представим на секунду, что мы не установили Max-Limit в родительской очереди. Так вот, если нигде по пути трафика при pcq-rate=0 не было обнаружено значения Max-Limit, то и вся очередь не будет работать, весь трафик пройдет сквозь шейпер без задержек, т.к. некому сообщить pcq-rate что канал не резиновый.



Многих мучает вопрос, если в данном случае pcq-rate=0, пользователей три, двое спят, а один качает. Он выжирает все 30 мегабит? — Да!



А что будет, если проснется еще один и тоже начнет качать? — Будет произведено перестроение и выравнивание скоростей. 30 мегабит они поделят поровну. Единственный нюанс — на это требуется время, второй пользователь будет немного медленнее набирать скорость, чем обычно.



Суть механизма заключается в задержке и уничтожении пакетов, которые не влезли в лимит. Протокол TCP устроен таким образом, что в рамках соединения — сервер который отправляет данные клиенту, проверяет как они дошли до него, если у пакетов выросла задержка или пакет потерялся (нарушение последовательности) сервер снижает скорость отправки чтобы увеличить стабильность.



pcq-limit и pcq-total-limit задаются экспериментально, чем больше лимит — тем больше задержка и больше занято оперативной памяти роутера. Чем меньше лимит — тем больше пакетов будет уничтожено.



Что будет, если задать pcq-rate=5M?

Каждый пользователь получит не более 5 мегабит. 3 активных пользователя * 5 мегабит =15 мегабит.



Три активных пользователя, все качают по полной, pcq-rate=11M?

Скорость упрется в Max-limit родительской очереди (30M) и данная скорость будет поделена между пользователями равномерно по 10 мегабит. Если один из них уйдет с закачки или снизит свою скорость минимум до 8 мегабит, двое остальных разгонятся до 11 мегабит.



Я очень надеюсь, что по данному примеру все понятно, если непонятно — прочтите еще раз и еще раз, далее будет сложнее.



Burst



Технология Burst предназначена для подачи увеличенной скорости при назначенном лимите на короткое время. Использовать данную функцию целесообразно на небольших по скорости тарифах, для ускорения веб-серфинга или быстрой подгрузки данных в приложения. Данная функция работает только в случае если pcq-rate не равен нулю.

Не буду до посинения грузить вас графиками и формулами расчета, лучше накидаю пример.

Pcq-rate=2M

pcq-burst-rate=4M

pcq-burst-threshold=1M

pcq-burst-time=10s



Максимальная скорость работы пользователя равна 2 мегабитам. Если скорость его работы в данный момент менее 1 мегабита (pcq-burst-threshold), ему станет доступна скорость в 4 мегабита (pcq-burst-rate) на 10 секунд (на практике меньше) это pcq-burst-time. Счетчик начинает тикать с того момента как будет превышен порог в 1 мегабит (pcq-burst-threshold), по истечении времени скорость упадет до pcq-rate, чтобы Burst снова стал доступен — скорость пользователя должна упасть ниже 1 мегабита и находится там не менее 10 секунд (pcq-burst-time)



Понятно, что это очень грубое объяснение, на самом деле время доступности burst рассчитывается по непростому алгоритму — время делится на 16 отрезков и учитывая почти все переменные скорости и лимитов рассчитывается время действия.

Данная функция потребляет значительное количество ресурсов, используйте ее с умом.



Для справки: При внесении любых изменений, в любую очередь и в любом ее проявлении (Tree или Simple) — все счетчики обнуляются в т.ч. и счетчики Burst. Если вы используете скрипты для автоматической коррекции значений Max-Limit типа QOSEvxController — будьте готовы отказаться от Burst или использовать циклы проверки очередей в QOSEvxController не так часто.



Ведро с болтами (Bucket)



Так же с недавнего времени в шестой версии ROS для очередей появился новый параметр bucket-size (размер ведра). Данный параметр может быть изменен в пределах от 0.1 до 10 и используется для задания емкости ведра с токенами. Емкость ведра рассчитывается по форумуле:

Емкость в МЕГАБАЙТАХ=bucket-size * max-limit

Над каждой очередью нависает ведро с гомном токенами, пока трафик в данной очереди не превышает лимит (max-limit) токены накапливаются в данном ведре. При переполнении ведра токен падающий в полное ведро уничтожается.



На что тратятся токены.



/queue tree add name=download parent=global packet-mark=PC1-traffic max-limit=10M bucket-size=10;





В данном примере, емкость ведра будет равна: (max-limit=10M) * (bucket-size=10) = 100 мегаБАЙТАМ

Если пользователь или пользователи потока пакетов с маркировкой «PC1-traffic» до недавнего времени ничего не качали на полной скорости — ведро с токенами в данной очереди будет полным, а это целых сто мегабайт трафика. И вот решили они дружно, что то качнуть, так вот, первых 100 мегабайт трафика они получат без ограничения скорости по max-limit, когда 100 мегабайт будет скачано очередь начнет ограничивать скорость согласно заданному max-limit=10M.



Кроме этого, если у очереди есть родитель с более жирным max-limit, то после того как потомок выжрет все свои токены, из своего ведра, он начнет забирать токены у родительской очереди.



Для чего это нужно?

Bucket-size это как своеобразный Burst, только не по скорости а по объему трафика. Применение его совместно с PCQ очередями даст лишь сомнительную пользу. В одиночных сеялках типа pfifo, red и sfq может быть крайне полезен. Для PCQ очередей — единственное, что приходит в голову, это то, что мы лимитируем родительскими очередями скорость, которая чуть ниже реальной скорости канала. Грамотное использование данной функции может кратковременно более полно эксплуатировать всю доступную скорость канала и сглаживать пики активности пользователей.



Более подробная диаграмма работы ведра:



image




Эквиваленты маркировки трафика





В данном примере я указал, что у нас одна подсеть (192.168.0.0/24) с тремя пользователями (192.168.0.1, 192.168.0.2, 192.168.0.3). Мы пометили трафик к данным адресам одним правилом в mangle и одним адрес-листом.

На всякий случай скажу, что для mangle нет разницы, как мы ему скормим адреса для пометки — обработаны они будут одинаково.



Подсеть целиком:

/ip firewall address-list add address=192.168.0.0/24 disabled=no list=LAN;





Диапазон адресов:

/ip firewall address-list add address=192.168.0.1-192.168.0.3 disabled=no list=LAN;





Отдельные адреса:

/ip firewall address-list add address=192.168.0.1 disabled=no list=LAN;



/ip firewall address-list add address=192.168.0.2 disabled=no list=LAN;



/ip firewall address-list add address=192.168.0.3 disabled=no list=LAN;





Аналогично обстоит дело и с PCQ очередями. PCQ очередь без проблем разбирает один поток пакетов, помеченный одним правилом, состоящий из адресов разных подсетей на подочереди.



Допустим, что мы подмешали еще трех пользователей из другой подсети (192.168.1.1, 192.168.1.2, 192.168.1.3). Просто добавив нужные записи в адрес-лист. Тогда получим такую картину:



image




Исходя из всего вышеперечисленного, можно сделать вывод, что оперируем мы не подсетями, а группами ip адресов, которые создаем с помощью адрес-листов



В данном случае нет смысла раздельно маркировать трафик, делать два профиля и две очереди.

Такой подход необходим только в следующих случаях:



Когда требуется задать индивидуальный Max-Limit для выбранной группы адресов.

Когда требуется различный приоритет для групп адресов или типа трафика.

Когда требуется реализация различных тарифных планов для группы адресов. (pcq-rate)

И во всех возможных комбинациях вышеперечисленных случаев.



А вот пример того, как делать не надо:



image




Полный листинг примера:



/ip firewall mangle add action=mark-packet chain=forward comment=LAN disabled=no dst-address-list=LAN new-packet-mark=LAN passthrough=yes;



/ip firewall address-list add address=192.168.0.0/24 disabled=no list=LAN;



/queue type add kind=pcq name= PCQ_DOWNLOAD_LAN pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;



/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=30M name=DOWNLOAD parent=global priority=8;



/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=LAN packet-mark=LAN parent=DOWNLOAD priority=8 queue=PCQ_DOWNLOAD_LAN;





Пример второй. Приоритет одних, над другими.





Допустим, что мы администратор организации с небольшим количеством сотрудников.



Имеем исходные данные:



WAN интерфейс с белым адресом (1.1.1.1) и входящей скоростью 32 мегабита в секунду

LAN — c подсетью 192.168.0.0/24 (Рабочие станции Директоров)

LAN2 — c подсетью 192.168.1.0/24 (Рабочие станции Менеджеров)



В данном примере мы как раз, имеем один канал и две группы потребителей с разными приоритетами. Где директора имеют приоритет над менеджерами. Именно в этом случае для реализации данной схемы потребуется раздельная маркировка пакетов и раздельные очереди для групп пользователей.



Правила для маркировки:

/ip firewall mangle add action=mark-packet chain=forward comment=GROUP-A_DW disabled=no dst-address-list= GROUP-A new-packet-mark= GROUP-A_DW passthrough=yes;



/ip firewall mangle add action=mark-packet chain=forward comment=GROUP-B_DW disabled=no dst-address-list= GROUP-B new-packet-mark= GROUP-B_DW passthrough=yes;





Два правила для маркировки трафика с разными packet-mark и два списка для присвоения адресам принадлежности к группам.



/ip firewall address-list add address=192.168.0.0/24 disabled=no list=GROUP-A;

/ip firewall address-list add address=192.168.1.0/24 disabled=no list=GROUP-B;





Пришло время создать профили PCQ для очередей.

Сколько нужно профилей? По идее на загрузку хватит и одного профиля, но я всегда создаю по отдельному профилю на каждую группу и на каждое направление. Это позволяет иметь гибкие настройки на будущее, без дополнительного вмешательства в уже созданные правила и очереди



/queue type add kind=pcq name= GROUP-A_DW pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;



/queue type add kind=pcq name= GROUP-B_DW pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;





Создаем дерево очередей:



Родительская очередь:

/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=30M name=DOWNLOAD parent=global priority=8;





Потомки:

/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name= GROUP-A_DW packet-mark= GROUP-A_DW parent=DOWNLOAD priority=7 queue= GROUP-A_DW;



/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name= GROUP-B_DW packet-mark= GROUP-B_DW parent=DOWNLOAD priority=8 queue= GROUP-B_DW;





В данном примере нет ничего сложного, разница между очередями лишь в разных маркировках пакетов и разных приоритетах.



При низких скоростях данная схема будет прозрачно пропускать трафик через себя и любой из потребителей может получить все 30М указанных в родительской очереди.



При нехватке скорости в родительской очереди скорость начнет перераспределяться между потребителями по следующей схеме:



Группа с адресами GROUP-A_DW имеет более высокий приоритет (priority=7), ей будет отдана вся скорость родительской очереди (30M) и равномерно разделена между активными потребителями в пределах этой очереди.



Если данная группа не утилизировала весь доступный лимит скорости (30М), остатки этого лимита будут переданы в очередь с более низким приоритетом GROUP-B_DW (priority=8), где данные остатки будут равномерно разделены между активными потребителями в пределах этой очереди.



Если группа GROUP-A_DW утилизировала весь доступный лимит в 30 мегабит, группа GROUP-B_DW не получит вообще никакой скорости и никакой возможности передавать и получать пакеты из сети.



Для того чтобы группе с низким приоритетом оставалось хотя бы некоторое количество скорости, можно задать в очереди параметр limit-at=5M. Но данный параметр можно задать только совместно с параметром Max-Limit, ограничивать максимальную скорость группы нам не требуется — поэтому просто скопируем его из родительской очереди.



И вторая очередь после правок будет выглядеть так:

/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=5M max-limit=30M name=GROUP-B_DW packet-mark=GROUP-B_DW parent=DOWNLOAD priority=8 queue=GROUP-B_DW;





В таком случае при нехватке скорости в родительской очереди, очередь с низким приоритетом будет всегда получать минимум 5 мегабит, которые сможет равномерно разделить между активными потребителями в пределах этой очереди.



Пример третий. Реализация тарифных планов с разделением на группы с разными приоритетами.





В данном примере будет рассмотрен своеобразный гибрид, который включает реализации из первых двух примеров.

Предположим, что мы субпровайдер с ограниченными финансовыми и техническими возможностями. У нас есть узкий канал в интернет, пара тарифных планов и две категории абонентов (физ.лица и юр.лица). Чаще всего, при предоставлении услуг юридическим лицам мы получаем от них большую выгоду, чем от физических лиц на тех же показателях скорости. Вместе с этим, мы предоставляем юридическим лицам некоторые дополнительные гарантии в виде гарантированной скорости и более оперативной технической поддержки.



Ну и как чаще всего бывает — мы немного увлеклись и подключили чуть больше абонентов, чем может вытянуть наш канал в интернет. По правильному — нужно расширить канал или подключить дополнительный с последующей балансировкой нагрузки. Но как уже было сказано, на это пока нет возможностей.



Но скорости в прайм-тайм не хватает, юридические лица начинают звонить и жаловаться на несоответствующую тарифному плану скорость, задержки пакетов, заикания телефонии и пр.



Частично облегчить данную ситуацию поможет шейпер с приоритетами как во втором примере, единственные отличия в том, что в данном примере скорость на одного абонента строго лимитирована и присутствует несколько тарифных планов.



Так же как и в предыдущих примерах, мы рассмотрим только входящую скорость. Однако во избежание путаницы в комментариях, именах маркировок и именах очередей будет присутствовать upload скорость.



Сокращения:

FIZ — физическое лицо.

UR — юридическое лицо.

1024K-1024K — Скорости по тарифу: Download-Upload

DW- Download

UL — Upload



Маркировка пакетов:



/ip firewall mangle add action=mark-packet chain=forward comment=FIZ_1024K-1024K_DW disabled=no dst-address-list= FIZ_1024K-1024K new-packet-mark= FIZ_1024K-1024K_DW passthrough=yes;



/ip firewall mangle add action=mark-packet chain=forward comment=FIZ_3072K-3072K_DW disabled=no dst-address-list= FIZ_3072K-3072K new-packet-mark= FIZ_3072K-3072K_DW passthrough=yes;



/ip firewall mangle add action=mark-packet chain=forward comment=UR_1024K-1024K_DW disabled=no dst-address-list= UR_1024K-1024K new-packet-mark= UR_1024K-1024K_DW passthrough=yes;



/ip firewall mangle add action=mark-packet chain=forward comment=UR_3072K-3072K_DW disabled=no dst-address-list= UR_3072K-3072K new-packet-mark= UR_3072K-3072K_DW passthrough=yes;





Четыре правила маркировки, которые выдадут нам четыре потока помеченных пакетов, рассортированных по четырем тарифным планам (Два для физ.лиц и два для юр.лиц.)



Чтобы привязать абонента к определенному тарифному плану, нужно поместить его ip адрес в нужный адрес-лист:



/ip firewall address-list add address=192.168.0.1 disabled=no list= FIZ_1024K-1024K;

/ip firewall address-list add address=192.168.0.2 disabled=no list= FIZ_3072K-3072K;

/ip firewall address-list add address=192.168.0.3 disabled=no list= FIZ_3072K-3072K;

/ip firewall address-list add address=192.168.0.4 disabled=no list= UR_3072K-3072K;

/ip firewall address-list add address=192.168.0.5 disabled=no list= UR_3072K-3072K;



И т.д.



Теперь необходимо добавить необходимые профили для очередей:



/queue type add kind=pcq name= FIZ_1024K-1024K_DW pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=1M pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;



/queue type add kind=pcq name= FIZ_3072K-3072K_DW pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=3M pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;



/queue type add kind=pcq name= UR_1024K-1024K_DW pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=1M pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;



/queue type add kind=pcq name= UR_3072K-3072K_DW pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=3M pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000;





Опять же я создал четыре профиля вместо двух, для сохранения гибкости настроек на будущее.



Далее построим дерево очередей:



Родительская очередь:

/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=30M name=DOWNLOAD parent=global priority=8





Потомки:

/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=FIZ_1024K-1024K_DW packet-mark=FIZ_1024K-1024K_DW parent=DOWNLOAD priority=8 queue= FIZ_1024K-1024K_DW;



/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=FIZ_3072K-3072K_DW packet-mark=FIZ_3072K-3072K_DW parent=DOWNLOAD priority=8 queue= FIZ_3072K-3072K_DW;



/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=UR_1024K-1024K_DW packet-mark=UR_1024K-1024K_DW parent=DOWNLOAD priority=7 queue= UR_1024K-1024K_DW;



/queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=UR_3072K-3072K_DW packet-mark=UR_3072K-3072K_DW parent=DOWNLOAD priority=7 queue= UR_3072K-3072K_DW;





При реализации данного примера все будет работать следующим образом:



При низких скоростях абоненты без проблем получают свою тарифную скорость, которая ограничена параметром pcq-rate. Но самое интересное, начинается, когда активных абонентов больше чем может выдать канал.



Родительская очередь ограничена 30 мегабитами.



Тарифные планы физических лиц и сами физические лица между собой равноправны.

Тарифные планы юридических лиц и сами юридические лица тоже между собой равноправны.

Но в связи с тем, что очередь юридических лиц имеет более высокий приоритет, отсюда следует, что и сами юридические лица с их тарифными планами тоже имеют более высокий приоритет — и они будут обрабатываться первыми.



Вся доступная скорость отдается в тарифы для юридических лиц, каждый такой абонент ограничен скоростью тарифа заданной в параметре pcq-rate. Тем не менее, если данные абоненты интенсивно работают и их потребление трафика превышает в сумме 30 мегабит, то получим такую картину:

30 мегабит будут разделены поровну между юридическими лицами, на основании текущего количества пакетов в каждой PCQ очереди. На самом деле объяснить данную ситуацию не так просто, но я попробую.

Предположим, что у нас все перечисленные юридические лица качают «по полной». В данный момент есть четыре абонента с тарифом в 1 мегабит и двенадцать абонентов с тарифом в 3 мегабита.



4 * 1М = 4 мегабита

12 * 3M = 36 мегабит

4М + 36М = 40 мегабит требуется абонентам с одинаковым приоритетом.



Но у нас всего 30 мегабит. Все бы было просто в случае одинаковых тарифных планов: 30 мегабит поровну поделились бы между абонентами и все. Но как будет распределена скорость, если тарифы у нас разные в пределах одной приоритетной группы.



Как распределится недостаток скорости?

В голову приходит два варианта развития событий, но лишь один из них верный.



Недостаток скорости будет распределен в процентном соотношении исходя из скорости тарифного плана. Примерно как то так:



(100% / 40 мегабит которые требуются) = 2.5

30 мегабит которые есть * 2.5 = 75% от того что требуется мы имеем.



(1 мегабит / 100%) * 75% = 0.75 мегабита

(3 мегабита / 100%) * 75% = 2.25 мегабита



Проверяем:

4 абонента с тарифом в 1М (4 * 0.75) = 3 мегабита.

12 абонентов с тарифом в 3М (12 * 2.25) = 27 мегабит.

27+3 = 30 мегабит.



В принципе логично и относительно честно, только вот к сожалению данный сценарий будет обработан несколько иначе, а именно:

Вся доступная скорость (30 мегабит) будет распределятся равномерно, между участниками в равные единицы времени.

Представьте чан с 30 литрами воды, из которого отходят трубки одинакового сечения и N- количество стаканов разных размеров на столе, в которые одновременно разливают ограниченный объем воды одинаковыми струйками. В нашем примере самый маленький стакан имеет объем один литр, стакан побольше — три литра. (Три литра! Карл!) Как только мелкие стаканы будут наполнены — в них перестают лить воду. Вся оставшаяся вода будет продолжать разливаться в более крупные стаканы. Если и после этого вода в чане останется — она будет разлита в стаканы на другом низкоприоритетном столе. Но воды, то у нас не хватает даже на один стол.



Сложные вычисления:



Первый этап, первый временной промежуток:

4 стакана по литру = 4 литра

12 стаканов по три литра, но данном промежутке времени в них залит только литр = 12 литров.



30 литров — (4+12) =14 литров воды осталось в чане.



Второй этап, второй временной промежуток:

В связи с тем, что стаканов более трех литров в примере нет — просто разделим остатки воды между трехлитровыми стаканами.

14 литров / 12 стаканов= 1,1666666666666666666666666666667



Итог вычислений:

Пользователь на тарифе 1 мегабит получит весь мегабит целиком.

Пользователь на тарифе 3 мегабита получит 1+ 1,16 = 2,16 мегабита



Тоже самое если использовать простые вычисления:

(30 литров — 1 литр * 4) / 12 =2,16



Если внимательно посмотреть на оба примера (неправильный и верный) можно увидеть что в первом примере общая нехватка скорости по тарифу у всех ровно четверть от заявленной скорости и пострадали все тарифы одинаково. Во втором случае мелкие тарифные планы не почувствовали нехватки и получили заявленную скорость, однако тарифы с более высокой скоростью ощутили нехватку почти на треть.



Исходя из излишне-изложенной и не самой удачной метафоры, можно условно сказать, что тарифы с низкими скоростями имеют некий приоритет над тарифами с более высокими скоростями, при нехватке скорости, даже с одинаковым приоритетом.



Да это не совсем честно, но, к сожалению, данное поведение шейпера никак нельзя изменить.

Вот на этом моменте точка зрения господина Шарикова резко ушла в аут.

Страдать будут не все равномерно, а лишь те, кто имеет более веселый тарифный план. Ну и как водится чем больше скорость — тем больше платит абонент. Если данная ситуация еще более-менее допустима с физ.лицами, то с юр.лицами это даже досадным недоразумением назвать нельзя.



Ну да вернемся к дальнейшему обсуждению…

При данных условиях видно, что канала в 30 мегабит не хватает даже для обслуживания тарифных планов юридических лиц. Следовательно, пока юридические лица интенсивно получают данные, физические лица не получают вообще никакой скорости. Эту проблему можно решить заданием параметра limit-at, но в данном случае это еще сильнее снизит доступную скорость для юридических лиц.



Понятное дело, что подобная ситуация в реальности будет равна катастрофе. Но отодвинем катастрофу подальше и представим что юридических лиц не так много. А именно: 2 с тарифами в 1 мегабит и два с тарифами в 3 мегабита. И качают они «по полной».



Путем нехитрых вычислений (2*1 + 2*3 = 8, 30-8=22) понимаем, что после обслуживания юридических лиц, до очереди физических лиц дойдет всего 22 мегабита и разделятся они между ними согласно их тарифам. Если физических лиц слишком много и данной скорости на них не хватает — начнется дележка как в вышеописанном случае с большим количеством юридических лиц.

Но как бы, ни хватало скорости физическим лицам, юридические лица будут обслужены первыми.



Пример четвертый. Приоритет одного типа трафика над другим.





Дополнительно к классической системе приоритетов, когда поток разделен на несколько групп абонентов с разными приоритетами можно прикрутить дополнительные критерии разделения на приоритеты.



На эту тему можно спорить часами. Одни люди скажут, что при особых обстоятельствах, безусловно, стоит использовать приоритеты. И, конечно же, предоставят весомые аргументы в пользу данных решений. Другие начнут кричать про производительность и как бы этичность данного решения — мол, кто мы такие, чтобы решать за пользователя или абонента какой тип трафика ему важнее.

Я в этот дурацкий холивар никогда не влезал. Просто в виду большого опыта у меня своя точка зрения на этот счет. Все зависит от каждого конкретного случая и типа применения данной технологии.

Есть системы, в которых применение приоритетов только вредит общей работе — напрасно нагружает оборудование, следовательно, жрет электричество, мешает конечному пользователю самостоятельно определить какие либо проблемы с сетью (прим. — высокий приоритет icmp). Так же встречались системы на мыльницах с полностью загруженным маршрутизацией процессором, на который еще навешали приоритезацию и удивлялись, почему упала скорость.



Так же есть масса примеров, где данные решения нашли свое место и значительно улучшили работу сети и репутацию данных субпровайдеров. В некоторых случаях казалось, что применение приоритезации в каком-то конкретном случае было неоправданно (широкие каналы, всем всего хватает и данная фича просто нагружает процессор) тем не менее, при отвале сразу четырех аплинков из шести, скорости стало катастрофически не хватать. И эта якобы ненужная фича очень сильно снизила количество звонков в техническую поддержку. Да, существенно просела скорость загрузки торрентов тем не менее жалоб от «танкистов» на длинный пинг и лаги в игре не поступало.

Кроме всего этого, те люди у кого больше опыта знают, что под словом приоритезация понимается очень обширная тема и различные области применения. Думаю, что стоит перечислить основные типы:



Приоритезация по типу пользовательского трафика


Пользовательский поток делится на два, с разными приоритетами. Критериями разделения могут быть порты, протоколы, адреса назначения, адреса источники и целые подсети.

Производительность для высокого приоритета достигается за счет выделения дополнительной полосы скорости сверх тарифа абонента и более высокого приоритета очереди. Таким образом, абонент получает скорость тарифа под высокий приоритет + скорость тарифа под остальной трафик. По факту: абонент получает скорость тарифа умноженную на два. На практике, при свободном аплинке и полном использовании абонентом своей скорости по тарифу, абонент в среднем использует скорость тарифа+20%. При нехватке аплинка, низкоприоритетный трафик задерживается (полоса сужается), высокоприоритетный пропускается (отдельная полоса с более высоким приоритетом).



Приоритезация по направлению внешний <-> внутренний


Пользовательский поток делится на два, с разными приоритетами. Критериями разделения обычно служат подсети. В одном потоке идет внешний трафик в мир, во втором внутренний или межабонентский трафик. Используется крайне редко, обычно в распределенных системах, состоящих из нескольких маршрутизаторов.



Приоритезация по направлению внешнего трафика Download <-> Upload


Почти не используется в проводных сетях. Администраторы беспроводных сетей знают, что при односторонней передаче данных через радиооборудование (симплекс), скорость в разы выше чем при наличии встречного трафика (дуплекс). Чаще всего при наличии встречного трафика более 30% линк сильно деградирует



Для примера:

UDP тест на мостах UBNT через AirOS

симплекс ~130-160 мегабит/c.

Дуплекс ~40-50 мегабит/c.



В шестой версии ROS с ее изменениями (корневая очередь global и пометка в forward) появилась возможность контролировать дуплексный трафик с ограничением и снижением приоритета исходящего трафика от абонентов.



Данная теория в основном относится к B/G/N, при использовании оборудования работающего в AC режиме встречный трафик уже не так страшен.





Суровая практика





Ну, хорошо, теория и основы понятны. Стоит реальная задача сделать некий умный шейпер. С чего начать? Какие факторы нужно учесть, чтобы не собрать все грабли и впоследствии не переделывать все сначала?



Перед тем, как создать некоторую конструкцию шейпера необходимо в первую очередь определится с множеством параметров, которые имеет ваша сеть, или будет иметь в будущем. Если вы не сделаете этого сейчас, то в будущем могут возникнуть проблемы, которые заставят вас переделывать конструкцию с нуля. Так же стоит помнить, что каждая новая функция, требование или критерий будет стоить процессорного времени. Чаще всего эта стоимость будет возрастать в геометрической прогрессии. Поэтому дважды подумайте, на сколько критична и уместна данная функция в вашей конфигурации.



Первое с чего мы начинаем — это каналы в интернет.



Первое на что нужно обратить внимание — это число каналов. Если у вас несколько каналов в интернет или только планируется использовать несколько каналов в будущем, то, скорее всего, вам понадобится делать под каждый канал уникальный шейпер.

Сейчас объясню почему.

При создании общего шейпера, в кореневой очереди нужно будет прописать значение max-limit, которое будет равно сумме скоростей ваших каналов. В теории это будет работать, но на практике не все так сказочно как кажется.



Во первых, какой бы крутой у вас не стоял балансировщик нагрузки между каналами — всегда будет определенный дисбаланс. Разная нагрузка на каналы хотя бы в 1% нарушит стабильную работу шейпера и минимум 1 абонент на каждом канале будет недополучать тарифной скорости.



Во вторых, скорость некоторых каналов время от времени может «плыть» и в составе балансировки это приведет к краху т.к. ни балансировщик, ни шейпер не будут знать о реальных скоростях аплинков. И даже искусственно созданный запас по емкости в данном случае не спасет.



В третьих, при падении одного из каналов общая емкость изменится, и значение max-limit в очереди станет неактуальным. В результате этого шейпер будет прозрачно пропускать трафик, соблюдая лишь pcq-rate. Кто-то из абонентов будет получать полную скорость, а кто-то вообще ничего.



Исходя из вышеперечисленного — если у вас несколько каналов, считайте данный функционал обязательным, даже при условии что цена ему довольно высока.

А цена данного функционала — умножение нагрузки процессора от шейпера и числа его правил на количество обслуживаемых каналов.



Второе на что нужно обратить внимание — это гарантированная скорость каналов.

Если скорость на канале плавает в пределах более 20% это очень плохо. Выходов из данной ситуации несколько:



1. Использовать только гарантированные каналы. Это почти миф. Такие каналы предоставляют в основном юр.лицам со всеми вытекающими. Во вторых, если канал приходит в роутер по радио — толку от этого будет мало.

2. Использование не всей емкости канала. Достигается путем длительных тестов и вычисления его средней скорости. Думаю, что вас не сильно порадует фиксированное использование только половины потенциала канала. Зато стабильность значительно возрастет.

3. Использование коммерческих (QOSEvxController) или самописных скриптов для актуализации значения max-limit на канале. Данное решение чуть лучше второго варианта и позволяет получать с канала чуть больше его средней скорости.



Цена вопроса — Договор на юр.лицо или внешние скрипты и некоторые ресурсы процессора.



Третье и последнее по каналам — Тип подключения аплинков.

Да, я имею ввиду подключение по радио, со всеми вытекающими. При встречном трафике производительность данного канала снижается, и скорость значительно плывет. Решение тоже, что и выше, плюс добавление в конструкцию различных приоритетов для Download/Upload трафика. Данный функционал не добавляет существенной нагрузки на ЦП



Второе на что мы обратим внимание это число тарифных планов в сетке. Тут можно сказать одно — соблюдайте золотую середину. Не стоит прописывать только те тарифы которые у вас есть сейчас, сетку тарифных планов нужно продумать заранее т.к. значительно проще поднять их на этапе создания, чем добавлять их в будущем совершая ошибки и путаясь в тысячах правил mangle. Но также не увлекайтесь, каждый лишний тарифный план умножает нагрузку на процессор.



Третий вопрос для обсуждения — это: «Нужно ли выделять какому либо типу трафика более высокий приоритет?»

Безусловно, стоит хорошо задуматься о внедрении в конструкцию данного функционала. Разделение потока пакетов хотя бы на два приоритета приведет к увеличению нагрузки на процессор вдвое, а при использовании регулярных выражений хотя бы в одном правиле mangle в десятки раз.

Поэтому использовать данную фишку стоит только владельцам роутеров серии CCR, CHR, X86 с достаточным количеством свободных мегагерц на ядрах процессоров.



Однако полезность данной функции тоже очень положительно влияет на работу сети.

Во первых, многое зависит от того, кому вы предоставляете интернет.



Есть абоненты, которые с компьютером строго на «вы» и это самая болезненная для технической поддержки группа. Они собирают все тизеры на страницах интернета, соответственно на их компьютере просто зоопарк из вирусов, троянов и загрузчиков, да еще центр обновления у них сам качает, что захочет и когда захочет. А после школы возвращается их ребенок, запускает танки, ловит лаги и начинаются звонки в техническую поддержку. Вы вежливо объясняете, что у них проблемы с компьютером и чаще всего получаете ответ что им «все починили и настроили две недели назад» и что у них проблем быть не может. Ведь папины веселые картинки на весь экран, которые просили положить денег на какой-то номер телефона, удалил мамин знакомый программист с работы.



И чаще всего до таких абонентов трудно достучатся и найти нужные слова для убеждения. Увы, но это так!



При выделении в более высокий приоритет (отдельная полоса) к примеру, тех же танкистов, подобные проблемы переходят из разряда «острые» в разряд «вялотекущие». И очень часто со временем решаются сами собой (машина начинает тупить, Winlocker-ы портят папе настроение, шифровальщики добивают файлы) и это все как бы намекает, что специалиста все-таки придется пригласить для решения этих проблем.



Абоненты, которые с компьютером на «ты» обычно не звонят по пустякам в техподдержку, сначала проверяют свою машину, потом скорость, а потом уже набирают вас. И боже упаси вас, сказать им, что у них с машиной или сетевой картой, что-то не так, они вам горло перегрызут. Хотя в некоторых, из таких случаев провайдер действительно прав, т.к. человеческий фактор никто не отменял, мы все ошибаемся, забываем про роутер, про ноутбук который качает торренты на кухне и т.д.



Во втором случае, когда нас выручает приоритезация по типу трафика — это некоторые проблемы с нашим оборудованием или каналами в интернет. Когда суммарной полосы наших каналов существенно не хватает, низкоприоритетный трафик равноправных абонентов прижимается чтобы пропустить высокоприоритетный. Тут тот же бонус, геймеры а тем более танкисты в разгар игровых баталий — очень нервный народ и пока вы занимаетесь решением проблемы вам будет значительно легче пережить эту неисправность если в это время вам не так сильно будут обрывать телефон как при падении всех сервисов в целом.



Четвертый вопрос для обсуждения коснется только тех, у кого локальный трафик от абонентов превышает возможности внутренних линков до сегмента сети.



Наиболее остро вопрос стоит у тех субпровайдеров, кто раздает интернет по радио на распространенном оборудовании.



Для примера возьмем базовую станцию Ubiquiti Rocket M5 c хорошей панельной антенной, установленной по всем правилам и работающей на свободной частоте без помех.

К данной базе подключено максимальное число абонентов (30 устройств) и для чистоты теории они все находятся на одинаковом расстоянии и с одинаковыми сигналами.



И вот мы создали тепличные условия для красивой коробочки внутри которой китайское г…



Не скажу что у других производителей все супер внутри корпуса, но данный производитель очень тщательно скрывает очень важный параметр — пакетную производительность данного устройства.

По своему опыту скажу, что для данного устройства она лежит в пределах 16000-20000. Для Rocket M5 Titatium в районе 20000-25000.



И что это нам дает? При закачке торрентов скоростью 1 мегабит в секунду (не самые мелкие пакеты, если что) генерируется порядка 800-1100 пакетов в секунду.

Это говорит нам, что при самом плохом положении вещей максимальная производительность базы равна 15 мегабитам в секунду. А не 300 мегабит как пишут многие продаваны и не 150 как пишут более честные. А агрегация в суперфрейм тут пустой звук.

Но это самое плохое развитие событий, не все же абоненты качают только торренты, кто-то серфит, кто-то в скайпе сидит, кто-то фильм смотрит и т.д.

Количество пакетов снижается, но скорость растет. Так вот, средняя пропускная способность данной базовой станции в реальных условиях составляет порядка 35-45 мегабит. Ее максимум 70-80 мегабит на крупных пакетах при TCP трафике.



К чему я собственно веду: при 30 абонентах с тарифами в 5 мегабит, данная база не справится в глобальный прайм-тайм, который случается не так уж редко. (Выход ожидаемых фильмов, трансляции спортивных событий и пр.



Даже 20*5 это уже сто мегабит, понятное дело, что на базе есть свои очереди, таймслоты при использовании TDMA и прочее, база как бы обязана раздавать трафик честно и поровну. Но в реальных условиях, когда она явно перегружена по пакетам или радио, при наличии помех, разности расстояний и сигналов, равномерное деление по TDMA просто невозможно.



Если ближе к теме, назовем базовую станцию сегментом, т.к. у нормальных провайдеров сети сегментированы и броадкаст по ним без разрешения не гуляет.

И на каждый сегмент сделаем дополнительное разделение и ограничение скорости, чтобы в случае нехватки ресурсов базы скорость делилась бы равномерно между теми, кому она нужна.



Легко сказать, но очень дорого сделать. Ведь каждый сегмент (VLAN).

Будет умножать нагрузку от шейпера на количество введенных в шейпер сегментов.

Данный функционал, несомненно, нужен беспроводным субпровайдерам, но он приводит к огромному количеству правил и гигантской трате системных ресурсов.



Но его все, же используют, просто данный функционал легко настраивается на терминирующем роутере, из двух роутеров получается распределенная система.

Первый роутер следит за скоростями каналов в интернет, приоритезацией и нарезкой скоростей. Далее трафик проходит во второй роутер, на котором шейпер следит за нагрузкой на сегменты сети. А так же за межабонентским трафиком, о котором я и расскажу.



Последний вопрос: «Зачем нужен межабонентский трафик и как больно грабли ударят по лбу?»



Межабонентский трафик нужен в первую очередь для снижения нагрузки на интернет каналы.

В сети может быть поднят локальный ретрекер, либо другие различные сервисы, либо совсем без них.

Суть заключается в том, чтобы при закачке какого либо торрента, торрент-клиент обращался в первую очередь к другим абонентам и в случае наличия у них запрашиваемых частей или файлов целиком получал их внутри сети на максимальной скорости.

Так же возможна реализация внутренних серверов и сервисов самим провайдером.



Ну, тут я уже предвижу: «Да кому нужны ваши внутренние серваки и ретрекеры? Тут у каждого второго оптика»



У меня есть клиент, официальный провайдер. У него три канала по 4 мегабита от спутниковых модемов и около 400 абонентов. В радиусе 700км нет ни оптики, ни кабеля, ни файфая, ни жопорезов с 3-4g. В общем, ничего нет. Пинг 700мс. А вы тут как сырки в масле, с оптикой и 21 веком. Еще будут вопросы, зачем субпровайдерам кеширующие прокси, ретрекеры и прочие примочки?



Так что межабонентскому трафику быть!

Как бы это хорошо не звучало, это единственная вещь, которую ROS шестой версии не в силах победить. Связано это с тем, что при замене global-in, global-out и global-total которые были в пятой версии, на global который теперь есть в шестой, пропала возможность дважды помечать трафик и дважды прогонять его через HTB.



Проблема в том, что мы физически не сможем пометить трафик от одного абонента до другого в пределах одного сегмента (базы), т.к. для одного абонента пакет будет помечен как исходящий, а для второго он является входящим. Для mangle это пакет соответствующий критериям двух правил, сначала он получит одну метку, а потом будет переразмечен другим правилом. И все бы получилось, если бы между маркировками можно было бы принудительно отправить пакет в обработку очередей. Но чудес не бывает.

Кто-то скажет или спросит: «В пятой же версии все получится?» Да, конечно. Проверял, работает на ура! Только вот пятая версия имеет свои минусы и уже не подходит под те задачи, которые требуются от этого роутера.



Как же быть? Есть некоторые варианты решения подобной задачи, трафик будет зарегистрирован лишь в одном направлении и с более низким приоритетом, интернет трафик будет иметь более высокий приоритет. Кроме этого данный поток полезно лимитировать. Схема довольно сложная и создается под отдельно взятые конфигурации. Если кто-то из специалистов сейчас прочитал это и понял, о чем я говорю — свяжитесь со мной, возможно, вместе мы придумаем что-то более продвинутое.



Кроме всего этого межабонентский трафик нельзя маркировать на одном роутере с контролем нагрузки на интернет аплинки. Даже если вы решили рискнуть производительностью роутера и сделать комбаин «все в одном» (Контроль нагрузки на каналы+нарезка скорости по тарифам+приоритеты+контроль внутренних сегментов+маркировка межабонентского трафика) то вы через некоторое время заметите, что в корневых очередях каналов в интернет регистрируется нагрузка, которой на самом деле не существует. Это межабонентский трафик маркируется, попадает в очередь, передается в корневую очередь сегмента, а оттуда попадает в очередь канала.

Изменение родителя у очереди канала или сегмента не даст никакого положительного результата. По факту получится, что канал свободен, но шейпер будет думать, что нагрузка на нем есть. Решение данной проблемы — распределенная система.



Ну, вот как бы и решилось что к чему, естественно если есть биллинг, то он должен поддерживать работу с адрес-листами для сообщения микротику какому ip адресу и сколько скорости выдать. Тоже самое относится к скрипту балансировки, он должен сообщать своими списками какой ip адрес, к какому каналу привязан в данный момент времени. Кроме этого если вы создаете распределенную систему на двух роутерах, вам потребуется синхронизация адрес листов между роутерами, реализовать ее можно написав скрипт, либо внешний обработчик на api. Так же в скором времени такой скрипт можно будет приобрести (EvxListSync).



Практическая и заключительная часть:





Думаю что после того как мы определились с необходимыми параметрами, следует приступить от слов к делу. В данном примере я опишу основную конструкцию, в которую можно добавить некоторый функционал по своему вкусу или удалить лишний.



Предположим, что у нас есть два канала в интернет и балансировщик, который раскидывает абонентов по каналам и формирует динамически нужные адрес листы ISP1 и ISP2.



Для каждого канала будет создан индивидуальный шейпер.



В примере будут рассмотрены четыре тарифных плана, два для физ.лиц и два для юр.лиц.

Если есть биллинг — он должен добавлять ip адреса пользователей в соответствующие списки для привязки абонента к нужному тарифному плану. Если биллинга нет — заполнять данные адрес листы потребуется вручную.



Кроме всего этого мы разделим трафик по типу на два приоритета.



Разметка




Маркируем весь входящий трафик к адресам из списка «SHAPER_TARGET» назначая пакетам метку «CLASS-B-DL»



/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-B-DL dst-address-list=SHAPER_TARGET new-packet-mark=CLASS-B-DL;





Далее отлавливаем пакеты с меткой «CLASS-B-DL» и переразмечаем их, назначая метку более приоритетного класса. В более выскокий приоритет попадут: ICMP, DNS, SSH, TELNET, RDP и пакеты у которых в качестве адреса источника указан любой адрес из списка CLASS-A-SITES.



/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-ICMP-DL new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=icmp;



/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-DNS_TCP-DL dst-port=53 new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=tcp;



/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-DNS_UDP-DL dst-port=53 new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=udp;



/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-SSH-DL dst-port=22 new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=tcp;



/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-TELNET-DL dst-port=23 new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=tcp;



/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-RDP-DL dst-port=3389 new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL protocol=tcp;



/ip firewall mangle add action=mark-packet chain=forward comment=CLASS-A-SITES-DL new-packet-mark=CLASS-A-DL packet-mark=CLASS-B-DL src-address-list=CLASS-A-SITES;







Выполняем аналогичную процедуру для исходящего трафика:



/ip firewall mangle add action=mark-packet chain= forward comment=CLASS-B-UL new-packet-mark=CLASS-B-UL src-address-list=SHAPER_TARGET;



/ip firewall mangle add action=mark-packet chain= forward comment=CLASS-A-ICMP-UL new-packet-mark=CLASS-A-UL packet-mark=CLASS-B-UL protocol=icmp;



/ip firewall mangle add action=mark-packet chain= forward comment=CLASS-A-DNS_TCP-UL new-packet-mark=CLASS-A-UL packet-mark=CLASS-B-UL protocol=tcp src-port=53;



/ip firewall mangle add action=mark-packet chain= forward comment=CLASS-A-DNS_UDP-UL new-packet-mark=CLASS-A-UL packet-mark=CLASS-B-UL protocol=udp src-port=53;



/ip firewall mangle add action=mark-packet chain= forward comment=CLASS-A-SSH-UP new-packet-mark=CLASS-A-UL packet-mark=CLASS-B-UL protocol=tcp src-port=22;



/ip firewall mangle add action=mark-packet chain= forward comment=CLASS-A-TELNET-UL new-packet-mark=CLASS-A-UL packet-mark=CLASS-B-UL protocol=tcp src-port=23;



/ip firewall mangle add action=mark-packet chai
Комментарии (0)КомментироватьВ цитатник или сообщество

Следующие 30  »

<приоритеты - Самое интересное в блогах

Страницы: [1] 2 3 ..
.. 10

LiveInternet.Ru Ссылки: на главную|почта|знакомства|одноклассники|фото|открытки|тесты|чат
О проекте: помощь|контакты|разместить рекламу|версия для pda