Facebook представил (https://code.facebook.com/posts/1561127100804165/augmented-t.../) новый открытый проект ATC (http://facebook.github.io/augmented-traffic-control/) (Augmented Traffic Control), предназначенный для организации тестирования приложений в условиях их применения в сетях различного качества. ATC позволяет симулировать такие ситуации, как падение пропускной способности, возникновение задержек в передаче пакетов, различные уровни потери и повреждения пакетов, нарушение порядка следования пакетов. ATC позволяет значительно упростить оценку качества работы любых сервисов и приложений в различных условиях подключения пользователя к сети, например, при работе через сеть 2G.
Код ATC написан на языке Python и распространяется под лицензией BSD. Инструментарий состоит из двух компонентов: web-интерфейс (https://github.com/facebook/augmented-traffic-control/tree/m...) на базе фреймворка Django для управления процессом симуляции и демон atcd (https://github.com/facebook/augmented-traffic-control/tree/m...), который запускается на сетевом шлюзе и вносит те или иные изменения в характер прохождения трафика. Для влияния на трафик применяются штатные механизмы ядра Linux, доступ к которым производится через API netlink, для работы с которым применяется pyroute2 (https://github.com/svinota/pyroute2). Взаимодействие web-интерфейса и демона управления трафиком построено с использованием REST API (https://github.com/facebook/augmented-traffic-control/tree/m...) и интерфейса Apache Thrift (https://thrift.apache.org/).<center><img src="http://www.opennet.me/opennews/pics_base/0_1427141024.png" style="border-style: solid; border-color: #e9ead6; border-width: 15px;max-width:100%;" title="" border=0></center>
Для оценки влияния сетевых аномалий, достаточно обеспечить выход исследуемой системы через сетевой шлюз, на котором установлен atcd. Симуляция применяется выборочно только к участвующим в эксперименте IP-адресам, что позволяет применять ATC на обычных шлюзах, обрабатывающих реальный трафик. Для маркировки участвующих в эксперименте пакетов применяется iptables (цель MARK в таблице mangle). Урезание трафика и внесения изменений в его характер производится с использованием методов классификации трафика (filter, class, qdisc), задаваемых утилитой tc из состава пакета iproute2.
<center><img src="http://www.opennet.me/opennews/pics_base/0_1427141103.png" style="border-style: solid; border-color: #e9ead6; border-width: 15px;max-width:100%;" title="" border=0></center>
URL: https://code.facebook.com/posts/1561127100804165/augmented-t.../
Новость: http://www.opennet.me/opennews/art.shtml?num=41896
>Facebook открыл код инструментария для симуляции работыКто? Что открыл?
Ну и пусть.
P.S. Кому интересно, тот и так знает про старую GNU утилиту для эмулирования плохого канала. Даже я, программист, знаю про такую штуку.
Но это же фейсбук. Все должны восторгаться. Ну восторагайтесь.
Так имя утилиты хотя бы приведите, раз уж заинтересовали.
Я программист. Честно - сейчас по-пьяне не вспомню. Но что-то из разряда netstat или около того. Протрезвею -- вспомню. Или кто-то из профессиональных админов напомнит.
Ты не tc имел в виду? Если что - сабж - это управлялка для него.
Ха, я что то такое и подозревал! :)
Наверное, он имеет ввиду проект netem от Linux Foundation. Программа называется tc. http://www.linuxfoundation.org/collaborate/workgroups/networ...
GNU-утилиту
> Код ATC написан на языке PythonТеперь я понимаю почему оно эмулирует плохую, медленную сеть. Хорошая бы все-равно на этом не получилась бы :)
Абсолютно идеальное применение для питона. Там всю раюоту делает стандартная механика ядра. а в управлялках, где важна не скорость и даже не поддерживаемость (потому что код прямой как бревно, начудить сложно), а простота написания - питон очень хорош.Это когда на нём пытаются писать большое или то, где нагрузка - там уже беда-печаль.
Исповедь питониста --- именно наш питон идеально подходит для system("tc bla-bla-bla");
да неужели.
Хм, записать меня в питонисты - это сильно :-) Я, если что, большой сторонник мощных, прагматичных, статически типизированных компилируемых языков - если о реальных задачах говорить. Которых в настоящее время из распространённых примерно полтора - плюсы да C# ещё сошел бы, если б был не завязан на MS и нормально компилировался. Ну и если чудо случится - может D взлететь, что было бы очень приятно.А так - да, для ситуаций, где нужно много тривиальной управляющей логики с малым количеством вычислительной или ещё какой работы, да чтобы легко это дело править было - питон вполне на месте. Читается/пишется он в таких штуках хорошо (синтаксис не "замусорен" тем, что нужно для более сложных случаев), производительности не требуется никакой - самое оно.
Почти все перепробовал на роль - "тривиальной управляющей логики", все фигня, питоны-перлы-пхп-явы, монстры кто-то больше, кто-то меньше, луа наболее подходит, но он какой-то не такой, дефолтно глобальные переменные, не то, была надежда на js, были реализации не жирнее awk, но загнулись проекты, остались только монстры, кстате awk при правильном приготовлении иногда доставляет. Но тем не менее для задачи запустить 1000 процессов единовременно, которые бы извлекли данные из "облака" и туда же запихали после минимальной модификации абсолютный вакуум.
> для задачи запустить 1000 процессов единовременно, которые бы извлекли данные из
> "облака" и туда же запихали после минимальной модификации абсолютный вакуум.Потому что you're doing it wrong, Luke. Представляешь себе какой пипец будет когда 1000 процессов начнут стартовать? Тебе потребуется крутой энтерпрайзный сервер, и даже там все это будет оставлять желать.
Чтобы понять насколько это злобно: берешь апач без лимитов и напускаешь на него хотя-бы родной апачевский ab2. Получаешь 1000 процессов. Если конечно все не загнется еще раньше.
Дык сервера есть "крутые" "ынтерпрайзные", речь не о том что нужно реально 1000, а о том, чтобы тысяча копий не была нештатной, ну пусть медленно, но чтоб оно пережевалось корректно, а не дропнуло половину процессов оом киллером, причем пойди еще разберись каких, конечно можно обойти проблему, всегда можно, написать некую шину которая бы буфферизировала очередь запросов и грузила ими обозначенное кол-во исполнителей, сосбтвенно и апач, и нжинкс, и пхп-фпм и др, так и работают, только скрипт туда не подвязать, на луа можно бы, но тоже не из каробки далеко, вот отсюда ноги и растут, вот и приходится выбирать между костылями.
AnyEvent::Util::fork_call
man Erlang, однако.
> пусть медленно, но чтоб оно пережевалось корректно, а не дропнуло половину
> процессов оом киллeром,Пардон, а ничего что oom killer вызывается ядром ОС? Программа в общем виде ничего с этим сделать не может: если ядро решит что программа свое отлетала, оспорить это программа может только в спортлото. Более того - в общем случае программа не может даже знать сколько памяти ей дадут. А с оверкоммитом и вовсе все весело. Но о таких мелочах бидонисты не знают - им надо чтобы за них подумал ЯП и рантайм, а своего мозга у них обычно нет.
> причем пойди еще разберись каких, конечно можно обойти
> проблему, всегда можно, написать некую шину которая бы буфферизировала очередь запросовНормальные люди давно в курсе что такое "машина состояний" (FSM) и просто не имеют таких проблем. Для того чтобы что-то делать в 1000 соединений достаточно 1 процесса. И даже 1 потока. Ну может несколько, e.g. по числу процессоров, если нагрузки совсем уж дофига.
> и грузила ими обозначенное кол-во исполнителей, сосбтвенно и апач, и нжинкс,
> и пхп-фпм и др, так и работают,Нжинкс - как раз таки машина сотояний. Поэтому и может даже в 1 процесс и поток держать тысячи соединений, с весьма умеренным потреблением ресурса, в отличие от опача, который по процессу на запрос плодит в дефолтном виде. И именно поэтому у него есть немного своих заморочек по части блокирующих операций.
> только скрипт туда не подвязать,
Для FSM критерий прост: в FSM нельзя надолго вставать колом, так что операции вызывающие длительное блокирование потока (команд, треда) - FSM не друг.
> вот отсюда ноги и растут, вот и приходится выбирать между костылями.
А у питонистов судьба такая :)
> Программа в общем виде ничего с этим сделать не можетПрограмма нет, а программист может, еще на стадии разработки не ориентироваться на то, что оперативы дофига и на долбанный списочек памяти хватит.
> Нормальные люди давно в курсе что такое "машина состояний" (FSM)
Ага и используют epoll, сигналы и прочие няшки, только в скриптах этого нет, разработать дизайн и написать "под ключ" можно, но нет гарантии, что через пол года совершенно тривиальная хотелка не упрется в невозвожность "байдизайн", и не придется городить огород костылей.
> А у питонистов судьба такая :)
Не знаю как у конкретно питонистов, но не думаю что лучше чем у остальных.
Если тебе нужно 1000 процессов для чего-то не числодробильного(да и там больше чем ядер не сильно нужно), то у тебя проблемы с архитектурой. Тем более если тебе надо по сети данные извлекать откуда-то из облака, подход с потоками это wrong wayОсиль асинхронную модель. Например связка EV+AnyEvent+Coro в перле позволяет писать асинхронные проги обрабатывающие тысячи и десятки тысяч конектов вообще не заморачиваясь и не сильно вдаваясь в оптимизацию. При этом Coro отлично маскирует асинхронную логику и не надо писать кучи колбеков, выглядит все будто у тебя потоки, десятки тысяч легковесных корутин - легко, хотя поток на самом деле один. Если нужно больше можно форкать, но для работы с сетью не нужно обычно.
>Ну и если чудо случится - может D взлететь, что было бы очень приятно.А что вы понимаете под взлётом?
Создание Qt-подобного фреймвёрка для него, поддержка в cmake, не помню как правильно называется тип этой утилиты?
Или в самом языке D чего-то не хватает, или не удобно сделано?
О, у меня очень простой и довольно слабый критерий - хотя бы одно приложение, ставшее в своей области стандартом де-факто - хотя бы одним из. Как Docker для Go или рельсы для Ruby. Ну и более сильный - наличие вакансий для D-разработчиков.
ещё хорошо бы наличие достаточного количества грамотных разработчиков на D - без этого стартовать проект на D - довольно рискованно.
Ну так хорошие проекты не растут из ничего. Если хоть один взлетел и стал известен - значит, на него приходится 100 неизвестных и 1000 умерших. И, соответственно, есть люди, которые всё это писали.
> Абсолютно идеальное применение для питона.Так я и говорю: настоящий питонист придумает как из бага сделать фичу. Ну или по крайней мере будет убеждать всех что это - фича. А так то да, чтобы tc вызвать - крайне необходимо полкило питонятины и куча заморочек с какой-нибудь там неправильной версией оного.
Фишка в том, что для той же задачи всего другого будет полтора кило. И да, скриптовые языки примерно для этого и делались - чтобы склеить возможности ОС в удобоваримом виде.
"всё равно"
Уж лучше чем на тормозной джаве
Реал? С каких это пор питончик стал быстрее жабки?
"Яве"
"Джаве"
Тогда не Индия, а Индиэ, ведь https://en.m.wikipedia.org/wiki/India
Джава не такая уж и тормозная. Более-менее приемлимо, но если надо делать что-нибудь быстрее - то есть для этих целей C#.
P.S. Ваши всякие С, С++ не нужны. Забудьте про них. Это технологии 25-летней давности, не надо насиловать трупы
>Ваши всякие С, С++ не нужны.Когда я начинаю пистать на Java у меня возникает ощущение что над моей работой наблюдают толпа бюрократов, и все знают как лучше мне нужно делать работу, но при этом никто из них не умеет программировать.
Когда я начинаю писать на Си у меня возникает ощущение что сейчас мне предстоит показать уровень владения "Кун-фу", и здесь и сейчас, и именно от меня и моего уровня мастерства зависит исход ситуации.
PS: Ну нужно говорить за всех - каждый волен выбирать то что ему больше подходит. Говорите за себя. Лично мне Си ближе - он лучше подходит для меня.
PPS: С++ комментировать не буду, т.к. код который я пишу он ближе к Си, а код который чаще всего - к Java.
C# - это .NET и вообще-то медленнее явы судя по бенчмаркам.
benchmarksgame.alioth.debian.org
Чисто теоретически - и то и то перегоняется в байткод, который бегает в виртуалке, так что класс производительности у них достаточно близкий.Собственно на это указывают и то что всякие твитторы и иже с ними сползают с рубей и рельсов на JVM, когда производительность начинает поджимать.
"Ява"
В методичке прочел?
> P.S. Ваши всякие С, С++ не нужны. Забудьте про них. Это технологии
> 25-летней давности, не надо насиловать трупыСразу после того как ты перепишешь операционку на своем фетише и выставишь с рынка существующие ОС :)
Адский велосипед сатаны!
Не знаю, кому что не нравится. Оболочка, дающая возможность удобным образом создать сценарии и управлять ими, реальную работу делегирующая тому, что её отлично умеет делать - ядру и netem. Абсолютно правильная штука же.
"работу, делегирующую"
Плохой грамма, запятую поставил, а согласование перестал.
Мысленно выбрось первый причастный оборот: "Оболочка, реальную работу делегирующая тому, что её умеет делать". Неграмотный какой-то граммар наци попался...
А симуляцию действий юзеров в соцсетях, позволяющую заменять её контингент, когда откроют? :)
sudo tc qdisc add dev lo root netem delay 100ms
sudo tc qdisc del dev lo root netem delay 100ms
Изобрели велосипед? В смысле dummynet из состава ipfw, который был придуман и реализован ещё 18 лет назад. Ну молодцы, чо.
+bpf +ng - это чтобы модифицировать пакеты и менять очередность доставки.
> +bpf +ng - это чтобы модифицировать пакеты и менять очередность доставки.Так в линухе это тоже сто лет все есть. И умений tc и соотв. ядерных подсистем хватит на дюжину чертей. А новость - о том что фэйсбучик написал гламурную запускалку tc, собственно :)
БСДшникам лишь бы ipfw гду угодно увидеть. А изобрели управлялку, которая удобно конфигурирует инструменты, которые сто лет как доступны в линуксе.
Открыли бы офис где-нибудь в российских е..нях - и площади дешевле, и тормозной канал автоматом прилагается.
а чо они сами ей не пользуются? в "проблемных сетях" работать с фб не возможно же - все постоянно сыпется.
С фэйсбуком можно работать?
"невозможно", позорище!
> а чо они сами ей не пользуются? в "проблемных сетях" работать с
> фб не возможно же - все постоянно сыпется.Вот тебя они через неё и пользуют?
Лично я для имитации "плохих каналов" пользуюсь wanulator'ом (http://wanulator.de/). В настоящее время проект, правда, заброшен, но того, что есть- с лихвой хватает