![image](https://habrastorage.org/getpro/habr/post_images/67f/ce8/1d3/67fce81d37695fffc6ec5b57882d5796.jpg)
Под катом обсудим методы компенсирования ненадежности оборудования, каналов связи и персонала с помощью ПО; проблемы отказоустойчивости и их решения; человеческий фактор; изоленту и носки как универсальное средство починки космических кораблей и передачу данных грузовиками.
О спикере: Станислав Елизаров занимается отделом сетевой инфраструктуры в компании «СТРИЖ», которая производит счетчики, датчики, базовые LTE-станции, а также собирает показания там, где любые другие системы связи просто не работают.
Ненадежность
«Если что-то не работает, то оно уже устарело».
Это цитата канадского философа Маршалла Маклюэна, которая точно описывает состояние техники. Отказывает всё: компьютеры зависают, смартфоны тормозят, лифты останавливаются между этажами, космические зонды сбиваются с курса, а люди ошибаются.
Первые ошибки
Тема надежности, особенно ее часть — отказоустойчивость, такая же большая, как и безопасность. Буква S в термине IoT отвечает за Security, а буква R отвечает за Reliability — надежность.
Если говорить про надежность и ошибки, то давайте вспомним Иоганна Гутенберга. Официально он первый печатник, а по версии Ильфа и Петрова — первый опечатник, потому что в своей Библии допустил много ошибок.
![image](https://habrastorage.org/getpro/habr/post_images/8b6/ef6/799/8b6ef679977e50047b759a6270facd4f.jpg)
Технология Гутенберга прогрессировала, рынок книг рос, увеличивались объемы, а с ними и ошибки. Через 50 лет после первой отпечатанной книги, Габриэль Пьерри придумал эррату — список опечаток в конце книги. Это был хороший трюк, потому что перепечатывать большие партии неудобно и экономически невыгодно. Если читатель заметит опечатку, то просто откроет список ошибок и посмотрит на критические исправления. Лидером опечаток был Фома Аквинский и его «Сумма теологии» — 180 страниц ошибок в официальной эррате.
Современные эрраты выпускают производители железа. На картинке ниже официальная эррата самого популярного чипа CC1101, которая действует до сих пор. В списке ошибок чип иногда что-то не принимает, иногда передает что-то не то, а иногда не всегда срабатывает PLL. Это не то, чего ожидаешь от массового процессора, который выпускают уже десятилетиями.
![image](https://habrastorage.org/getpro/habr/post_images/f70/2a5/ea0/f702a5ea086032d04194b13437748354.jpg)
Еще пример — микропроцессор MSP430, построенный на наборе команд. Микропроцессор примерно такой же, как PDP-11, на котором Керниган и Ритчи разрабатывали Unix. Это не эррата Фомы Аквинского, но 27 страниц ошибок производитель нам предлагает, многие из которых даже сам не знает, как решать.
Это именно то, что неочевидно в интернете вещей. Мы читаем datasheet дешёвого чипа и видим, что всё хорошо и всё работает, пока не открываем последние страницы со списком ошибок.
![image](https://habrastorage.org/getpro/habr/post_images/881/f21/5e2/881f215e21ed88bee9c8015560296e16.jpg)
Человеческий фактор
С железом более-менее понятно, ошибки описаны и воспроизводимы, но самый больший источник ошибок в IoT-системах — человек.
13 января 2018 года всем жителям Гаваев на мобильные телефоны пришел alert о ракетной угрозе и о том, что нужно скрыться в бомбоубежище.
![image](https://habrastorage.org/getpro/habr/post_images/68e/c24/bd7/68ec24bd7caa5a5fc077ff208e440241.jpg)
Непонятно, кто именно ошибся: оператор или человек, который проектировал интерфейс. Но если посмотреть на картинку, то ответ напрашивается сам собой. На что нажать, чтобы вызвать тестовое, а не боевое, оповещение о ракетной угрозе? Если вы не знаете ответ, то ошибетесь.
![image](https://habrastorage.org/getpro/habr/post_images/d5d/b17/ac3/d5db17ac32925132622185440151dd45.jpg)
Оператор нажал не на ту кнопку, и запустилась массовая рассылка. У системы не было никаких параметров, по которым можно было бы предотвратить или подтвердить отправку: «Вы уверены, что хотите предупредить о ракетной угрозе?». 30 минут потребовалось сотрудникам центра, чтобы осознать произошедшее и выслать сообщение, в котором говорилось, что атака ложная.
Человек — надежная система
Почему мы не видим этих ошибок и не считаем, что что-то не так? Потому что сам человек и исправляет все ошибки.
Мы привыкли исправлять ошибки.
Если чувствуем, что компьютер не очень хорошо работает — мы его перезагружаем. Если видим, что мобильная связь пропала, то ищем место, где ловит. Если машина не работает, мы ее ремонтируем.
На фотографии ниже изображена человеческая смекалка, которой можно гордиться. Три человека болтались в «Аполлон-13» между Землей и Луной и смогли решить нетривиальную задачу — засунуть квадратный фильтр в круглое отверстие. Кроме квадратных фильтров, миссии не везло и в другом: взрыв кислородного баллона, нехватка воды, повреждение двигателя. Команда пыталась выжить с помощью носков, изоленты и упаковок от костюмов.
![image](https://habrastorage.org/getpro/habr/post_images/f2e/6e9/5c6/f2e6e95c68a588b7d25e0a0b30ee1d82.jpg)
Человек, как говорили в NASA, — очень хорошая резервная система и многое исправляет. Решение проблем на космическом корабле с помощью изоленты и носков можно назвать почти надежным: оно выполнено в короткие сроки, гарантированно сработает и люди вернутся живыми, но в продакшн это пускать нельзя.
Проблема отказоустойчивости
Проблема отказоустойчивости для интернета вещей очень важна, потому что количество устройств растет. В отчете консалтинговой компании McKinsey, в 2013 году в мире работало 10 млрд. устройств IoT, а к 2020 году это число вырастет до 30 млрд.
![image](https://habrastorage.org/getpro/habr/post_images/f8d/7cc/44d/f8d7cc44d4b9ff08cb9a9fc0ef05e027.jpg)
Мы просто физически не сможем чинить все эти счетчики — просто не хватит времени. Системы, которые были рассчитаны на обслуживание людьми, не будут помогать нам, вместо этого мы будем заниматься их починкой.
В 2018 году в СМИ и научных журналах промелькнула новость, что китайцы покрыли 100 000 датчиков 2 канала общей длиной 1400 км. Всего 130 видов датчиков: воды, ветра, камеры. С точки зрения операционных расходов, система просто катастрофическая: какое количество людей нужно, чтобы протирать камеры или убирать коряги? Весь штат будет занят только чисткой и обслуживанием системы — она очень не автономна.
Поэтому я хочу поговорить немного об отказоустойчивости, об обеспечении работы системы. На простых примерах я расскажу про трюки, которые помогут в короткие сроки получить гарантированно рабочее решение, чтобы презентовать инвесторам продукт, а дальше думать, как инкрементально наращивать надежность. Эти трюки достаточно универсальные и всегда помогут. Единственное, что их не очень-то рекомендуется использовать в продакшене, потому что они такие, как тот фильтр.
Представим: настанет тот день, когда к вам придут инвесторы за отчетом о проекте, и вам требуется показать работающий продукт. С чего начать, чтобы не облажаться?
Упрощение
На картинке ниже два не связанных друг с другом прибора. Слева — игрушка, которая называется «сортер»: вставляем круглое в круглое, а квадратное в квадратное. Годовалый ребенок научится пользоваться игрушкой за 2-3 попытки, потому что с «прибором» невозможно ошибиться — треугольник в квадрат не залезет.
![image](https://habrastorage.org/getpro/habr/post_images/b0c/a7e/63b/b0ca7e63be5fcdf8cadbcdc5c7f3c81b.jpg)
Эту же идею предложила компания Harris, которая выпускает военные радиостанции. На картинке справа — Harris Falcon 3, чудо инженерной мысли. Посмотрите на интерфейсы, они все различные. В состоянии боя, в условиях, когда нет времени подумать, оператор физически не сможет сделать что-то не то. В разъем от антенны не войдет кабель питания, и простым перебором радист подключит все системы, даже не включая мозг. Это простой и работающий способ, чтобы не допустить ошибок и снизить их вероятность. Вы скажете:
— А если у нас завтра презентация. Нам что, все интерфейсы перепаивать? Мы там всё сделали одинаково: 4 usb-порта, 5 ethernet-портов, мы точно ошибемся.
Не вопрос, упрощение здесь тоже работает — всё закрыть. Если у вас 4 usb-порта и один их них гарантированно работает — оставьте, а все остальные закройте. Например, изолентой — почувствуйте себя астронавтом.
Упрощение — это не только создание интерфейса, в котором невозможны ошибки, но и удаление всего лишнего. С этого начинается надежность.
Мы создали простое устройство — прототип, готовый к показу. Что дальше? Дальше подумаем об избыточности.
Избыточность
Устройства интернета вещей работают на основе теории информации: есть источник сигнала, приемник, кодер, модулятор, среда распространения и источник ошибок, который создает помехи и искажает реальную ситуацию. Хороший способ уменьшить помехи — добавить избыточности, с помощью которой мы сможем детектировать критическую ситуацию и нивелировать эффект от нее: оповестить оператора или исправить ошибку.
![image](https://habrastorage.org/getpro/habr/post_images/f7e/e62/101/f7ee62101ec3b3ee2a411e7bac4e931f.jpg)
Пример избыточности — сеть «СТРИЖ». Большинство устройств в сети передаются без подтверждения: устройство излучает сигнал, и базовая станция его принимает.
Представим ситуацию. У нас есть зона с помехами, в которой вероятность доставки сообщения на базовую станцию 90%, а на презентации требуется показать не больше 1% потерь. Кажется, что работы много: исправлять протоколы, уменьшать дальность, но быстрое и простое решение — избыточность. Рядом со станцией, которая принимает сигнал с вероятностью доставки 0,9 ставим вторую, с такой же вероятностью доставки, и вероятность отказа обеих станций одновременно равна 0,01. Здесь действует теорема умножения вероятностей: вероятность отказа каждой станции по отдельности — 0,1, а отказа сразу обеих как раз 1% при условии, что базовые станции независимы. В этой зоне между базовыми станциями будет самая высокая вероятность приема.
![image](https://habrastorage.org/getpro/habr/post_images/5cc/ddd/490/5ccddd4908805944cff5f1afee993b1d.jpg)
Еще один способ демонстрации принципа избыточности — Watchdog Timer. Это физическое устройство, которое встраивается большинством производителей процессоров. Если Watchdog Timer не принял сигнал от компьютера спустя определенный интервал времени, то устройство перезагружает компьютер.
![image](https://habrastorage.org/getpro/habr/post_images/e7f/634/945/e7f634945436748c0a9ec30b390a6597.jpg)
При использовании WT повышается не надежность, а доступность. Компьютер детектирует проблему, принимает управляющие действия и перезагружает компьютер. Это очень любит NASA и знает множество разных способов использования Watchdog Timer.
Ниже пример многоступенчатого Watchdog Timer: при наступлении определенных событий он посылает NMI — аппаратное прерывание, которое будет обязательным в работе над процессором. Когда наступает некоторое событие, Watchdog сообщает компьютеру: «Попробуй перезагрузиться сам, иначе отключим питание». Если первый таймер не сработал, то будет работать второй.
![image](https://habrastorage.org/getpro/habr/post_images/672/26a/11f/67226a11f48ea0d9c380e456d6ae45ca.jpg)
Избыточность хорошо работает в рамках операционной системы. Наша базовая станция примерно так и устроена. Она состоит из различных и независимых модулей. Автономность модулей предотвращает попадание ошибки из одного модуля в другой — создается «бассейн» с ошибками, который мы блокируем. Выше по иерархии — набор супервайзеров: скрипты, которые мониторят ситуацию по определенным параметрам. Например, что процесс есть в операционной системе, он не Зомби и не течет по памяти. Корневой элемент — планировщик, например, cron.
![image](https://habrastorage.org/getpro/habr/post_images/11a/5e9/7fc/11a5e97fce09fe97e9203dd07d2f7f8d.jpg)
Иерархическая структура создает хорошие параметры по доступности системы: если модуль падает, супервайзер это видит и перезагружает, есть некоторая избыточность по модулям, некоторые модули выполняют функцию других.
Переход в другую систему отсчета
Мой самый любимый и популярный среди математиков метод. Если известно, при каких условиях работает оборудование, то в этих условиях и нужно проводить пилот. Покажу на примерах.
Пример № 1. Мы создали устройство, которое хорошо работает при комнатной температуре, а нам сообщают:
— Проект демонстрируем на Дальнем Севере. Сейчас там ?40, но сделайте так, чтобы все работало.
Мы бежим в интернет и ищем решение:
— Нам нужны термостабильные кварцы и флешки, которые не откажут при ?40.
Время идет, ресурсов всё меньше, а паники — больше. Мы думаем, что проект провален, но нас спасёт переход в систему отсчета, в которой работает базовая станция. Поместим устройство в ящик, в котором находятся подогреватель и термореле. Они достаточно стабильные ребята и работают практически всегда. Когда снаружи холодно — ящик подогревается, и устройство работает в нормальных условиях — мы перешли в систему отсчета, в которой знаем и используем решение.
![image](https://habrastorage.org/getpro/habr/post_images/30d/bda/d62/30dbdad62aed5277dd85425fe8ef7a5b.jpg)
Пример № 2. Переход в движущиеся системы отсчета. Представим, что собираем данные контейнеров с поезда. Первое стандартное решение — использовать gsm-модемы. Этот способ не подходит: для быстро перемещающихся объектов следует использовать LTE или 5G устройства, которые хорошо справляются с доплером, а это дорого. Если поезд двигается по России, то когда он прибудет на ж/д станцию, все модемы подключатся к станции и она просто упадет из-за перегрузки сети.
Решение: переход в неподвижную систему отсчета. Вспомним про относительность движения: поместим базовую станцию внутри поезда и относительно движущегося состава она неподвижна. Станция будет собирать информацию со всех датчиков и передавать дальше с помощью шлюза, спутника или LTE-модема.
Этот подход повышает надежность, помогает решать невозможные задачи и организовать delay-tolerant networking — сеть, устойчивую к разрывам. Подход почему-то не любят в России, но активно продвигает подразделение Disney Research той же корпорации. У них не интернет вещей, а интернет игрушек — Internet of Toys. В компании беспокоятся, что африканские дети не смотрят Диснеевские мультики. Проводить сети передачи данных, устанавливать вышки, тянуть оптоволокно в Африке дорого, и всё равно всё украдут, поэтому они пошли другим путём и использовали идеи Ричарда Хэмминга:
Передача на расстоянии — то же самое, что передача во времени, то есть хранение. Если вы не можете передать — сохраните информацию и перевезите её к приемнику.
В Disney так и сделали: оснастили автобусные станции и автобусы системой из самых дешевых Wi-Fi роутеров и набора жестких дисков. Автобус подъезжает к станции, быстро закачивает на диски набор фильмов Disney по Wi-Fi и едет дальше. Приезжает в одну деревню, в другую, и в каждой выгружает фильмы — африканские дети довольны. Это, так называемая Мул-Нетворкс — дешевые мулы, которые передвигаются медленно, плохо справляются с доплером, но доставляют информацию во все точки.
![image](https://habrastorage.org/getpro/habr/post_images/c3e/7b3/2ae/c3e7b32ae231de30c77e82d89440af4a.jpg)
Подобные разработки в Disney существуют и для передачи email — письмо приедет к вам на автобусе. Очень забавная технология, но ее любит, например, компания Amazon.
У Amazon есть сервис для перевозки эксабайт данных — одного миллиона терабайт. Если у вас большой дата-центр и вы думаете перемещаться на Amazon, потому что все уже там, то в Америке они могут подогнать к вам такой грузовик и перевезти ваши данные. Если вам не важны задержки, то это хороший способ: скорость передачи данных порядка десятков или сотен Гбит/с. Кроме грузовиков, Amazon может прислать к вам сумку с жесткими дисками — snowball.
![image](https://habrastorage.org/getpro/habr/post_images/d2c/043/bb0/d2c043bb0de94a2652dd761f3d930e60.jpg)
Мы поняли, что надежность важна, потому что отказывают и люди, и техника. О надежности нужно думать так же, как о безопасности. Для проведения пилотных презентаций включайте Watchdog, добавляйте избыточность и упрощайте, чтобы невозможно было ошибиться. Думайте о том, как перейти в условия, при которых система гарантированно сработает. А теперь перейдем к последнему методу, который отличается от остальных, и технари часто его игнорируют.
Красота
Вам многое простят, если ваш прототип выглядит красиво. Если во время презентации что-то пойдет не так и всё откажет, вы услышите: «Да, всё сломалось, но у вас такой классный продукт. Думаю, что вам надо дать еще одну попытку, чтобы исправиться». Принцип работает для Тесла: у компании проблемы с отгрузкой, автопилотом, авариями, но их все любят, потому что у машин классный дизайн. За это им все прощают.
![image](https://habrastorage.org/getpro/habr/post_images/25d/5c5/b73/25d5c5b73c2ce83e6bc827a66301649f.jpg)
Выводы
Будущее интернета вещей — ненадежность: IoT нацелен на массовые рынки, а для масс-маркета решающий фактор — это цена. Значит интернет вещей будет состоять из множества дешевых и ненадежных устройств. С ростом числа устройств будет расти и число отказов. У нас просто не хватит рук, чтобы исправлять все ошибки. Поэтому единственный путь — устройства должны самостоятельно бороться с последствиями отказов. Это автономные системы, которые должны учиться чинить себя сами.
Я бы предложил вам заняться темой надежности и научиться классно показывать пилоты, используя три способа: упрощать всё, что можно, добавлять избыточность и создавать условия, при которых пилот гарантированно сработает. Не забывайте, что все мы люди и руководствуемся не логикой, а чувствами, поэтому создавайте красивые проекты.
Книг или набора статей по надежности нет. Чтобы углубиться в тему, начните со статьи о работоспособности, надежности, безопасности, а дальше изучайте опыт лаборатории реактивного движения NASA. Они создали Voyager и Curiosity и знают про надёжность всё. Вдохновляйтесь великими.
До следующей конференции разработчиков интернета вещей InoThings++ осталось чуть больше месяца, она пройдет 4 апреля. Мы подготовим программу, которая охватит все аспекты мира интернета вещей: разработку аппаратного и программного обеспечения устройств, безопасность для пользователей, способы передачи информации между устройствами и «сервером» и их тестирование, эксплуатацию и изменение бизнес-процессов под влиянием IoT-технологий. Но, возможно, именно вашего доклада не хватает, чтобы осветить все темы — подайте заявку до 1 марта.
Комментарии (13)
jaha33
25.02.2019 15:21Как минимум для счетчиков стрижевская система бесполезна и тут даже не в надежности дело. Через пару лет будут только «умные» счетчики с большим количеством данных. Им каждый день в устройства сбора надо отдавать достаточно приличное количество трафика и иметь при этом обратную связь от БС. Узкополосные системы для таких целей непригодны. Плюс, как говорят люди «трогавшие» их систему, среднее количество простых(!) счетчиков на одну БС — в районе 500 шт (!!). Т.е. чтобы такой технологией покрыть микрорайон с многоэтажками надо будет ставить 1 БС на 3-4 дома. А БС у них очень дорогие. Плюс неясно как несколько БС уживутся в близкой видимости, проблему скрытой точки врят ли решали разработчики.
Так что на данный момент с отечественным IoT все печально: дорого и с крайне сомнительными тех. показателями :)JanisV
25.02.2019 16:54В моем доме ~300 квартир и это далеко не муравейник. В каждой квартире должен быть счетчик электричества и 4 счетчика воды. Это 3 БС на дом? А если добавить газ и счетчики тепла…
Кроме LPWAN есть и другие технологии, которые с переменным успехом шагают по стране — ZigBee и NB IoT. Какая из этих трех станет наиболее массовой — очень интересный вопрос.
PS Через пару лет даже половина счетчиков еще не будут «умными». Хотя бы по причине того, что обновить весь парк — дело не на пару лет.
romanetz_omsk
25.02.2019 19:43В проекте требований к "умным" счётчикам электроэнергии заложено обязательное наличие RS-485 и, насколько помню, оптопорта. Эзернет и прочее PLC, а, тем более, стрижи — опционально.
Да, я с трудом представляю, как DLMS будет на 100 бит/сек работать: по оптопорту минимальная скорость 9600.jaha33
25.02.2019 20:39У узкополосников еще огромная проблема в том, что в БС из счетчика сигнал выходит тоненький и через препятствия пролазит неплохо. Но вот из БС в счетчик идет по сути самый обычный «жирный» канал и у него с пробивной способностью все очень плохо, так что обратная связь у них далеко не так хороша, как из счетчика БС и радиус действия уже не «десятки км», а сильно скромнее. А уже если на улице дождик или туман, то вообще караул)
romanetz_omsk
27.02.2019 05:14Из чего следует, что downlink должен быть "жирный"? Пока единственное ограничение, которое просматривается — регуляторное. Суммарная мощность 1000 счётчиков — 25 Вт (я не буду вдаваться в детали решений гкрч по поддиапазонам, да это не важно в данном контексте — важно, что безлицензионные устройства в одном диапазоне равноправны по излучаемой мощности). При этом базовая станция может ответить им лишь 25 мВт мощностью.
jaha33
27.02.2019 08:06Из описаний вавиота (тот же стриж). Uplink у них 50 гц и в БС стоит дорогое оборудование которое такие пакетики может оцифровывать. Из БС в счетчик такой сигнал не пройдет по причине разбежек кварца. У них в обратную сторону работает канал шириной 100 кгц(!). Тут уже о одинаковой пробивной способности в обе стороны и речи быть не может. Как минимум для умных счетчиков применение узкополосных систем — это утопия. Это просто красивая идея за которую все схватились, но работает она так себе. Например как 3D в телевизорах, есть в каждом телеке, но им никто не пользуется. Или как пару лет назад было с очками виртуальной реальности, все ведущие производители бегали по выставкам и кричали что это будущее, а как повыпускали модели на рынок, оказалось что это неудобно и нафиг никому не надо)
romanetz_omsk
27.02.2019 05:19Корректировать частоту абонентских станций по сигналу базовой сотовики умеют уже лет 30, так что ценой небольшого повышения энергопотребления (на периодическое уточнение собственной опоры) unb-система поимеет полноценный симметричный downlink
xDimus
25.02.2019 17:16На картинке справа — Harris Falcon 3, чудо инженерной мысли. Посмотрите на интерфейсы, они все различные. В состоянии боя, в условиях, когда нет времени подумать, оператор физически не сможет сделать что-то не то. В разъем от антенны не войдет кабель питания, и простым перебором радист подключит все системы, даже не включая мозг.
И в чём чудо? Насколько я помню у всех радиостанций аналогично…
HiMem-74
26.02.2019 10:55Посмотрел видео, хотя обычно читаю текст.
Станислав ме-е-едленный, переключил на скорость 1.5.
potan
26.02.2019 16:04Удивительно, что в этой области редко применяют формальную верификацию. Такое впечатление, что бюджеты проектов обычно очень низкие, у разработчиков даже нет возможности попробовать современные технологии.
Dr_Faksov
27.02.2019 04:19+1Начало статьи писал Магистр Йода:
" промелькнула новость, что китайцы покрыли 100 000 датчиков 2 канала общей длиной 1400 км. " Перевод наверно это подумал я. Заголовок раз еще посмотрел. Ошибся я. По-русски говорили. Наверное…
Еще вот:
«Еще пример — микропроцессор MSP430, построенный на наборе команд. » Там действительно ТОЧКА после слова «команд»!
«Буква S в термине IoT отвечает за Security, а буква R отвечает за Reliability — надежность.»
Ты буквы S и R термине IoT видишь? А они есть!
vvzvlad
27.02.2019 06:06Ты буквы S и R термине IoT видишь? А они есть!
Ну, сдается мне, их там нет, и это именно так задумано. А остальное да, что-то странное.
gerasimenkoao
Все по делу!
Я — бы еще добавил, что нужно посмотреть как аналогичные части задачи реализуют все остальные, а затем хорошо подумать, и сделать по-своему.
Ибо интернет не только дает доступ к информации, но и является крупнейшим источником клонированных ошибок.
В итоге, условное устройство IoT собирается на распространенном модуле A от производителя X, с драйвером/библиотекой B.
И стартует конвейер копипасты сырого решения, к которому каждый пользователь приделывает свои костыли.
Мир Arduino наиболее показателен в этом отношении.
Ну а по поводу красоты — так это 100% — все авторы любят и лелеют свои, пусть даже уродливые детища.
А времени/желания/умения сделать красиво — не хватает.
Ибо в голове роятся уже другие мысли, а руки собирают следующее устройство.