Все распределённые системы — базы данных, мобильные приложения, корпративные SaaS и так далее — следует разрабатывать с учётом сбоев. Например, компания Stripe во время тестов убивала случайные инстансы — и смотрела, что произойдёт. Компания Netflix рандомно уничтожала инстансы прямо в продакшне с помощью программы Chaos Monkey (проект Simian Army).
Симуляция сбоев — необходимое средство тестирования. Проблема в том, что ситуации не делятся только на чёрное и белое, Есть огромная «серая» зона, где сбои явно не выражены, а проявляются в плохих условиях сети: ненадёжное соединение, узкий канал, потери пакетов, высокая задержка, дубликаты пакетов и так далее.
Другими словами, система должна быть устойчива не только к сбоям, но и к враждебным окружающим условиям — плохой сети. Специально для таких тестов был разработан симулятор Comcast 1 , представляющий удобную «обёртку» вокруг стандартных системных инструментов типа iptables и tc .
Инструмент работает путём упаковки некоторых системных инструментов в переносимый «контейнер». В системах семейства BSD, таких как mac OS, для «инъекции сбоя» используются ipfw и pfctl . В Linux — iptables и tc .
СДЕЛАЛ НАСТОЯЩИЕ ФЕЙК ЛАГИ В CS:GO
В любом случае, поддерживается несколько параметров: устройство, задержка, целевая/дефолтная пропускная способность, потеря пакетов, протокол и номер порта.
Например, такая команда…
$ comcast —device=eth0 —latency=250 —target-bw=1000 —default-bw=1000000 —packet-loss=10% —target-addr=8.8.8.8,10.0.0.0/24 —target-proto=tcp,udp,icmp —target-port=80,22,1000:2000
… добавит 250 мс задержки, ограничит пропускную способность до 1 Мбит/с и отбросит 10% пакетов на указанные адреса по указанным протоколам на указанных портах. Ограничение 1 Мбит/с действует для всего исходящего трафика.
В принципе, соответствующие команды можно запускать и без помощи comcast , а напрямую через iptables или tc .
Например, дропнуть 10% входящих и исходящих пакетов с помощью iptables в Linux:
$ iptables -A INPUT -m statistic —mode random —probability 0.1 -j DROP
$ iptables -A OUTPUT -m statistic —mode random —probability 0.1 -j DROP
В tc ещё больше параметров:
$ tc qdisc add dev eth0 root netem delay 50ms 20ms distribution normal
$ tc qdisc change dev eth0 root netem reorder 0.02 duplicate 0.05 corrupt 0.01
Comcast поддерживает следующие сетевые профили:
GPRS (good) | 500 | 50 | 2 |
EDGE (good) | 300 | 250 | 1.5 |
3G/HSDPA (good) | 250 | 750 | 1.5 |
DIAL-UP (good) | 185 | 40 | 2 |
DSL (poor) | 70 | 2000 | 2 |
DSL (good) | 40 | 8000 | 0.5 |
WIFI (good) | 40 | 30000 | 0.2 |
Starlink | 20 | — | 2.5 |
Как видим, разработчик уже добавил в профили Starlink с задержкой 20 мс и потерей пакетов 2,5%. Судя по всему, размер пинга взят из планов Илона Маска на будущее. В реальности же пока средние параметры по итогам практического опыта использования Starlink выглядят иначе:
Фишки по Standoff 2 #11
Уникальность проекта Starlink состоит именно в том, что используется большое количество не стационарных, а низкоорбитальных спутников, чтобы гарантировать минимальную задержку, сравнимую с наземными каналами.
Естественно, профили Comcast можно редактировать или добавлять.
Разработчик Comcast допускает поддержку Windows через wipfw или встроенный сетевой стек. Но вообще под Windows уже есть похожие симуляторы. Например, программа clumsy на КДПВ, которая для работы задействует библиотеку WinDivert (Windows Packet Divert).
В браузере Google Chrome тоже частично реализована такая функциональность. Этот режим работы (Device Mode) можно включить в инструментах разработчика ( F12 ), нажав сочетание клавиш Ctrl + Shift + M или кликнув соответствующую иконку в левом верхнем углу панели инструментов разработчика. Но здесь всего три варианта симуляции слабого железа и мобильного интернета.
Для macOS есть продвинутый инструмент под названием Network Link Conditioner, который можно найти в пакете “Additional Tools for Xcode” или скачать со страницы для разработчиков (Additional Tools).
Здесь тоже изменяются стандартные параметры сети: полоса (аплинк и даунлинк), задержка и уровень потери пакетов.
В наличии следующие профили:
- 100% потеря пакетов
- 3G
- DSL
- EDGE
- Большая задержка DNS
- LTE
- Очень плохая сеть
- WiFi
- WiFi 802.11ac
Более того, Network Link Conditioner реализован в iOS, если подключить гаджет к персональному компьютеру и активировать настройки для разработчиков через Xcode (Window — Devices https://habr.com/ru/companies/itsumma/articles/571190/» target=»_blank»]habr.com[/mask_link]
Clumsy (кламси) и как он работает в so2
Проще говоря, это набор алгоритмов для грубого перехвата интернет-пакетов, их удаления, задержки отправки к серверу от устройства на какое-то количество времени и т. д. Поэтому кламси также называют фейклагfakelag — искусственная задержка. Действительно, при использовании clumsy как будто случайно пропадает интернет (lag), но это действие контролируется самим пользователем (fake).
Android
Clumsy для Android работает по такому же принципу — он, используя wi-fi и vpn соединение (для этого потребуется любой vpn-сервис, который выдает хоть сколько-то стабильный коннект, и работающий wi-fi), отрубает интернет и врубает его через промежуток времени на ползунке delay. Все пакеты станка замораживаются(фризятся). Что же происходит в этот момент в игре?
Ваша точка зрения очевидна — вы бегаете по карте, полной статуй ваших тиммейтов и противников, стреляете в них, видите серые крестики попаданий (но не красные убийств!) и это сказочное наслаждение идет, пока работает фриз пакетов. К вам не приходит ни один пакет данных, от вас не уходит ни один. Поэтому на карте никто не двигается (к вам не приходят данные об их движении), но и никто не умирает (чтобы понять, мертв ли игрок, серверу надо вычесть нанесенный вами урон из количества жизней игрока и послать вам ответ о том, что у него отрицательное здоровье и вы крутой и сделали килл. Он не может этого сделать, ведь ему даже не приходит инфа о ваших выстрелах).
Однако!
Поскольку от вас не приходит никаких запросов к серверу стандофф 2 о смене местоположения вашего персонажа на карте (интернет-то отрубили!), выстрелов и тому подобных данных, которыми ваш телефон обменивается с сервером, остальные игроки видят, что вы стоите там, где нажали на иконку clumsy и ни черта не делаете. Что тиммейты, что враги. В момент работы кламси вы совершенно беспомощны.
Вас может убить кто и что угодно, для них вы просто стоите на одном месте. Если вас найдет противник и выпустит пулю из калаша в голову, сервер будет считать, что вы мертвы. Для всех ваш персонаж будет валяться на земле, но не для вас самих, ведь у вас отрублен интернет и эта информация просто до вас не может дойти! Пока работает clumsy, клиент станка на смартфоне считает, что вы живы.
Даже если по факту вы мертвы. И это же показывается у вас на экране.
Но, когда кламси перестает замораживать пакеты, они все кучей радостно устремляются к серверу, и он их столь же радостно начинает обрабатывать. Очевидно, если к нему уже пришел запрос о нанесении вам более чем 99 урона (вас нашли противники и постреляли по вам), сервер, увидев информацию о том, что вы побегали по всей карте и поубивали всех, лишь покрутит пальцем у виска и кинет на ваш девайс инфу о том, что вы вообще-то откинулись. Ничего не произойдет, вас дисконнектнет на пару секунд, потом вы обнаружите, что вас персонаж принял критическое число урона и сдох. Но если же вас никто не успел убить, пока работал кламси и вы стояли с точки зрения сервера и остальных игроков на одном месте, наступает момент вашего триумфа.
Сервер получает информацию о вашем последнем местонахождении, количестве нанесенного урона каждому игроку, выстрелам, дропам оружия и вообще всему непотребству, что вы натворили. И честно принимает ее как данное, ведь вы еще живы, а значит, в теории вполне могли все это совершить. «Может, он киберспортсмен», — думает сервер и посылает эту информацию всем игрокам. Ваши тиммейты видят, как вы телепортируетесь на то место, где находились, когда кламси закончил фризить пакеты, как погибают все противники, по которым вы постреляли, как раунд кончается вашей победой и т. д. и т. п. Аплодисменты, вы отвратительным и совершенно неэстетичным образом выиграли игру. Вы такой молодец.
Что же не забывать, если вы решили использовать кламси?
- Рабочий vpn и wi-fi! Иначе кламси не будет работать.
- Только соревновательные режимы! В кб, гв, бс и так далее настолько дерьмовое соединение, что кламси там бесполезен.
- Не ставим слишком большой delay/задержку! Вас может кикнуть с сервера.
- Запускаем кламси в безопасном месте на карте! Если вас найдут противники, вы ничего не сможете сделать.
- Не злоупотребляем возможностями чита! Банхаммер не спит, то, что не забанило вашего друга, не значит, что не забанит вас. Случаи были.
P. S. Тащемта, Clumsy клиент совершенно не нужен для подобного рода читерства. Вы можете просто жмать на иконку с вайфаем со включенным впн, и итог будет точно такой же. Clumsy просто удобненький. Главное, не забыть вовремя включить обратно вайфай, а то сервер подумает, что у вас конкретно залагало и выкинет вас к чертям из игры.
Источник: telegra.ph
Что случилось с Clumsy Ninja?
Через несколько недель уже пройдет год с того момента, как Apple официально представила iPhone 5 и iPod touch пятого поколения. Как мы помним, во время презентации была с помпой продемонстрирована инновационная игра Clumsy Ninja про неуклюжего воина, который способен интеллектуально реагировать на действия пользователя и со временем обучаться приемам единоборств. Релиз игры был обещан в «сезон праздников», однако в App Store она не появилась до сих пор.
Разработчиком игры является компания Natural Motion, и если попытаться открыть страничку ее сайта, посвященную Clumsy Ninja, то мы с горечью обнаружим сообщение «Запрашиваемая страница не найдена». Судя по всему, мы имеем дело с еще одним случаем, когда разработчикам была предоставлена сцена для демонстрации своего продукта, но доверие, оказанное Apple, не было оправдано.
В прошлый раз досадным провалом обернулась презентация игры Infinity Blade: Dungeons, которая была торжественно представлена во время мероприятия 2012 года, когда был анонсирован iPad третьего поколения. В июле этого года компания Chair официально объявила о закрытии проекта.
О причинах таких действий разработчиков ничего внятного не сообщается, однако вряд ли можно рассчитывать на то, что их следующие продукты появятся в разделе «Выбор редакции» в App Store, и уж тем более участия этих разработчиков в презентациях Apple можно не ждать. Будем надеяться, что представленный этим летом продукт ANKI Drive с самоуправляемыми машинками все же дойдет до своих покупателей. По крайней мере, соответствующее приложение в App Store уже есть.
Источник: appleinsider.ru