-Поиск по дневнику

Поиск сообщений в rss_rss_hh_new

 -Подписка по e-mail

 

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 17.03.2011
Записей:
Комментариев:
Написано: 51

Habrahabr/New








Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.

Исходная информация - http://habrahabr.ru/rss/new/.
Данный дневник сформирован из открытого RSS-источника по адресу http://feeds.feedburner.com/xtmb/hh-new-full, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

[Обновить трансляцию]

[Перевод] Данные: красивые и ужасные

Четверг, 27 Июля 2017 г. 14:26 + в цитатник


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

Информационная журналистика




Яркая и совершенно ужасающая инфографика. Проект, который называется «С глаз долой, из сердца вон», — это хронология ударов беспилотных дронов в Пакистане с июля 2004 года по декабрь 2013 года.

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

Визуализация создается в HTML5 и JavaScript
drones.pitchinteractive.com

Разговор о визуализации данных в действительности не будет полным без упоминая d3.js — удивительной библиотеки javascript, которую создал Майк Босток, ранее ответственный за визуализацию данных New York Times (по ссылке коллекция его работ с кодом). Большинство проектов с визуализацией данных, которые вы видите в Интернете сегодня, построены с помощью d3.js.



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


Ханс Рослинг, который, к сожалению, скончался в начале этого года, в своей знаменитой лекции TED Talk представил данные, которые развенчали несколько мифов о мировом развитии. Это было нереально круто:




У него также было собственное шоу на BBC, The Joy of Stats:




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




Вот итоговая карта:



Больше интересных примеров с d3.js:


Количественное самоопределение




Николас Фелтрон, один из ведущих дизайнеров Facebook’s timeline, много лет собирал о себе множество данных, изначально тщательно описывая свою жизнь на бумаге, а затем создав приложение. Затем эти данные были превращены в годовые отчеты. Ознакомиться с ними можно здесь: feltron.com




Больше примеров:


GPS и трекинг




Just Landed — это визуализация твитов людей, передвигающихся по всему миру на самолете. Проект Джерома Торпа ищет твиты, содержащие фразы «только что приземлились ...» или «только что прибыл ...», а затем визуализирует путешествие в зависимости от местоположения в момент твита и места жительства человека.
datavisualization.ch/showcases/just-landed-a-twitter-visualization-in-processing




Больше работ Джерома Торпа


Micro-геолокации:




Отслеживание делегатов конференции через Wi-Fi и визуализация их движения и связей — это проект, который Джордж Галли сделал несколько лет назад. Wi-Fi действительно может быть использован для точного определения местоположения людей.
radarboy.com/george/internetix.php

Больше GPS-визуализации:

  • Один день из жизни такси: nyctaxi.herokuapp.com
  • Визуализация Metropolitan Transportation Authority (Нью-Йорк):




Сторителлинг с визуализацией


Масштаб Вселенной: htwins.net




Простая, но эффективная визуализация о протяжённости времени: hereistoday.com

Визуализация данных о последствиях разделения Германии Берлинской стеной: zeit.de/feature/german-unification-a-nation-divided

Данные как искусство:




Диллон Марш создаёт композиции для визуализации данных о производстве на южноафриканских шахтах: www.dillonmarsh.com



«Счастливое шоу» Стефана Сагмайстера — выставка, целью которой является измерить и контролировать уровень счастья: www.thisiscolossal.com/2013/08/the-happy-show-by-stefan-sagmeister

Надеемся, что вам понравилась эта подборка визуализаций. Знаете ещё не мало ярких примеров? поделитесь со всеми в комментариях.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334234/


Метки:  

Неожиданные результаты опросов Kotlin: маленькое расследование

Четверг, 27 Июля 2017 г. 14:15 + в цитатник
Недавно JetBrains провели исследование среди пользователей языка Kotlin. Простой опрос об ожидаемых новых функциях дал неожиданные результаты. Вместе с организатором опроса мы решили расследовать, почему так могло произойти.

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


Рисунок 1. Фотографии с результатами опросов.

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

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

Исследование проводилось в 2 этапа. Часть пользователей языка голосовали на митапах, посвященных Kotlin 1.1, вторая часть заполняла on-line анкеты. В результате получилось 2 рейтинга с 3 явными фаворитами в каждом (рис. 2).
И фавориты не совпали.


Рисунок 2. Рейтинги ожидаемых новых функций в Kotlin 1.2: результаты off-line и on-line опросов.

Почему результаты двух опросов так отличаются друг друг от друга?
Организаторы предложили 2 объяснения:
1. Отличия групп. Участники митапов отличаются от остальных пользователей Kotlin.
2. Предвзятость. На off-line голосовании участники видели, за какую функцию голосуют другие, и это могло повлиять на их мнение.

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

1. Действительно ли между участниками митапов и остальными пользователями есть различия?
2. Действительно ли на голоса участников митапов повлияло мнение коллег?
3. Одинаково ли воспринимали условия голосования участники митапов и остальные пользователи?
4. Почему в рейтинге on-line голосования первая тройка набрала существенно больше голосов, чем остальные функции?

Для начала, восстановим, как проходило исследование.

Процедура исследования


Опрос состоял из 2 частей.

Off-line часть заполнялась участниками митапов. Большинство митапов прошло в одно время, 23 марта, в 21 стране мира (всего 30 митапов). Их участники смотрели прямую трансляцию демонстрации функций Kotlin 1.1, а после могли проголосовать за появление новых функций. Некоторые митапы голосовали до демонстрации (рис. 3). Для этого им раздали по 3 круглых оранжевых стикера, которые нужно было прикрепить к карточкам с описанием функций. Можно было использовать по 1 стикеру за функцию, или проголосовать двумя, или всеми тремя стикерами за одну функцию. Сейчас невозможно восстановить, сколько человек принимало участие в голосовании в каждом митапе, так как каждое сообщество назвало организаторам исследования только рейтинг: общее количество стикеров, оставленных за каждую функцию. Свои рейтинги передали 22 сообщества.


Рисунок 3: Фотографии из твитов сообществ Kotlin (на стенах видны карточки для голосования).

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

Участникам предлагалась on-line анкета с такими же, казалось бы, вопросами – об ожидаемых функциях языка. В конце анкеты были приложены такие же карточки с описанием каждой функции, которые были использованы после митапов. Дополнительно в анкету добавили вопрос о самой нежелательной функции. На on-line анкету был получен 851 ответ.

Результаты исследования


Данные обоих опросов обрабатывались простым суммированием. В результате получилось 2 списка – on-line и off-line рейтинги с 3 явными фаворитами в каждом (рис. 2), фавориты не совпали.

Только функция #18 «Truly immutable data» попала в первую тройку одновременно в обоих опросах. Более-менее совпала первая шестерка, с перемешанным порядком, за исключением двух функций: функция #4 «Private members accessible from tests» в on-line опросе оказалась всего лишь на 12 строчке и набрала максимум голосов против, а функция #9 «Inline classes/Value classes» в off-line опросе оказалась на 17 строчке.

Итак, лидерами в обоих опросах стали:
#18 Truly immutable data
#1: Multi-catch
#13: SAM conversions for Kotlin interfaces
#6: Collection literals
#8: Slices for lists and arrays

Обсуждение


1. А есть ли на самом деле различия?

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

Проверим гипотезу
Такие догадки проверяют статистикой. Но в нашем случае получилось 2 разных вида сырых данных: номинальные данные в on-line голосовании и количественные в off-line голосовании. Поэтому попробуем посмотреть просто на корреляции итоговых списков. Если получится, что корреляция между двумя списками сильнее, чем корреляции между списками митапов, это будет значить, что среди участников разных митапов согласия меньше, чем между всеми участниками митапов и участниками on-line голосования. А это будет значить, что нельзя делать вывод о том, что участники митапов и участники on-line голосования – это две существенно разные группы.

Коэффициент корреляции Спирмена между on-line и off-line голосованиями получился таким: r=0,680, p=0,001. В классификации Дж. Коэна для социальных исследований это довольно высокий показатель взаимосвязи (>0,5 – значительная корреляция).
Теперь посмотрим, как оценки митапов коррелируют между собой. Оказалось, что между списками митапов нет ни одной корреляции, превышающей значение 0,680. Самая сильная корреляция (0,618) проявилась между Бельгией и Берлином. Более того, были даже отрицательные корреляции (например, -0,454 между Лимой и Будапештом: интересно было бы узнать, есть ли объяснение этих отличий).

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

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

Так, в разных странах проводились исследования математических способностей у мальчиков и девочек. В части стран лучше успевали мальчики, в других странах – девочки. Везде различия были статистически значимыми. И если бы мы знали только об одном таком исследовании, это бы могло сформировать наше представление о математических способностях мужчин и женщин. Но ученые провели мета-исследование и проверили разбросы внутри групп. В большинстве стран различия между мальчиками и девочками оказались меньше, чем различия внутри групп мальчиков и девочек (D. Baker, D. Jones, 1993).

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

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

2. Участники влияли друг на друга?

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

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

Проверим гипотезу

Попробуем восстановить, как проходили голосования. Поищем в твиттере. Здесь под хештегами #kotlin и #kotlinevent можно обнаружить много фотографий митапов и голосований (рис. 4). Действительно, на фото видно, что участники голосовали вместе и, возможно, обсуждали свои оценки.


Рисунок 4. Твиты участников митапов с фотографиями голосований.

Отобразим на одной диаграмме голосования митапов (рис. 5). Визуально оценить, как проголосовал каждый митап, здесь сложно, зато хорошо видно, как по-разному рапределились оценки (это распределение еще раз подтверждает и нашу гипотезу о слабой взаимосвязи между группами).


Рисунок 5. Распределение голосов в митапах.

На диаграмме видно, что оценка «1» ставилась чаще остальных. То есть, во всех группах, за исключением Берлина и Бельгии, были функции, за которые проголосовал один человек одним стикером. В Бельгии участвовало всего 6 голосов (они распределились по 2 голоса за 3 функции), а в Берлине было просто много участников (90 голосов). Итак, почти во всех сообществах были участники, чье мнение не совпадало с большинством.

Чтобы проверить единогласие участников в каждом сообществе, оценим разброс оценок в группах. Из-за специфического типа данных, применить среднеквадратичное отклонение внутри групп не получится. Зато получится посмотреть, сколько оценок, отличных от 0, было поставлено в каждой группе. Так мы узнаем, в каких группах участники голосовали примерно за одни и те же функции, а в каких – за разные (Таблица 1).

Таблица 1. Количество функций и общее число голосов в голосованиях митапов.


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

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

Чтобы это проверить, посмотрим на данные по-другому. На диаграмме видно, что во многих митапах были выбросы: некоторые функции получали значительно больше баллов, чем остальные, за них голосовало большинство участников. Проверим нормальность распределения оценок в митапах с помощью критерия Колмогорова-Смирнова. При использовании критерия Колмогорова-Смирнова отклонение от нормального распределения считается существенным при значении р < 0,05.

Итак, близким к нормальному оказалось распределение оценок только в группах Лаоса, Лондона, Минска, Рио и Кракова (на границе, p=0,047). В остальных группах оценки существенно сместились. Чтобы лучше рассмотреть эти выбросы, я подсчитала, сколько участников митапа предположительно проголосовали за одну функцию.

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



Посмотрим теперь, какая доля участников проголосовала за самую популярную функцию в каждом митапе (Таблица 2).

Таблица 2. Максимальные оценки и доли проголосовавших за них участников митапов*.

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

Выходит, почти во всех группах больше половины участников голосовали за одну и ту же функцию. В самых малочисленных группах доля единогласных участников достигала самых высоких значений: Бангкок –  71% из 14 участников; Манчестер – 80% из 5 участников, Нетания – 100% из 3 участников; Бельгия – 100% из 3 участников. А в крупных группах, наоборот, согласованность была более низкой: Берлин – 40% из 30 участников; Лондон – 43% из 23 участников; Лаос – 32% из 19 участников, но на их фоне Минск оказался довольно согласованным при большой группе – 50% из 28 участников.

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

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

В эксперименте С. Милгрэма на оживленной улице Нью-Йорка сообщники экспериментатора останавливались и начинали смотреть в одну точку, подняв головы. Оказалось, что число присоединившихся к ним прохожих росло по мере увеличения группы. Обычные люди тоже останавливались и начинали смотреть вверх, не зная, куда смотрят остальные. Эксперимент проводился с разным количеством сообщников. Чем больше их было (от 1 до 5), тем больше подражателей они привлекали. Но после того, как размер группы сообщников превышал 5 человек, рост подражателей останавливался. Группа становилась больше, но подражателей больше не становилось.

В других исследованиях – Герарда (1968) и Розенберга (1961) – также было показано, что увеличение группы сверх 5 человек приводит к снижению конформности.

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

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

3. Одинаковые ли были условия исследования?

Это более интересный, с точки зрения методологии исследований, вопрос. У двух распределений есть 3 явных фаворита. Почему они выделились, если разброс оценок был большим? Насколько одинаковыми были условия у обоих групп? И было ли это одно исследование, или два совершенно разных исследования?

Представим, как проходило голосование.
Когда участникам митапов давали по 3 круглых оранжевых стикера, у них была возможность использовать их, как монетки: голосовать двумя, или тремя стикерами за одну функцию. А условия on-line исследования могли восприниматься по-другому. Хотя в инструкции было написано, что одну функцию можно выбрать дважды, или трижды, формулировки вопросов («The most expected feature 1», «The most expected feature 2», «The most expected feature 3»), похоже, чаще вызывали желание выбрать в каждом вопросе новую функцию (первую, вторую, третью).

Проверим гипотезу
В сырых данных on-line опроса видно, что дважды проголосовали за одну функцию всего только 10 человек, а трижды – 8 человек из 851. При этом, 11 участников не использовали все возможности голосования, ответив только на 2 вопроса из 3.

А что было в off-line голосованиях? Из сырых данных мы можем делать только косвенные выводы. Например, из 22 митапов у 10 итоговое количество голосов не кратно 3. То есть, в 10 митапах (как минимум) один, или несколько участников тоже использовали при голосовании не все стикеры.

Далее, в рейтингах митапов видно, что в 20 митапах из 22 есть функции с 1 голосом (за них проголосовал один участник одним стикером). Значит, на митапах тоже были люди, отдававшие не все свои голоса за одну функцию. Но сколько таких людей было по сравнению с on-line голосованием, из данных понять сложно.

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

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

4. «Тройка – семерка – туз». А может, было внушение?

Меня не оставляет вопрос: почему в on-line голосовании выделились именно такие лидеры: #6 (с отрывом) – #13 – #18?

128 человек из 851 выбрали в качестве первой функции, 98 человек в качестве второй и 60 – третьей. Из них только двое выбрали функцию #6 дважды. 15 человек проголосовали за нее, как за нежелательную. То есть, за функцию #6 проголосовало положительно 284 участника, или каждый третий участник голосования.

При этом, в off-line голосовании в половине групп за нее никто, или почти никто не голосовал: в 10 группах функция #6 получила 0, или 1 голос. Однако, в 1 группе она получила больше всего голосов и в двух других группах разделила первое место с функцией #18. Общее количество голосов, отданных за #6 в off-line голосованиях, оказалось 60 из 941. Значит, максимум 19% участников в off-line голосованиях выбирали функцию #6. На самом деле, их было меньше, так как не все использовали по 3 голоса, а некоторые могли голосовать за функцию повторно.

Почему on-line голосовали именно за #6, если в off-line опросах она оказалась только на 6 месте в общем рейтинге? Может, еще что-то повлияло на ответы участников?

Проверим гипотезу
Для начала, проверим, действительно ли характер on-line рейтинга отличается от off-line? Визуально распределение оценок в off-line рейтинге кажется более плавным. Сравним распределения оценок с нормальным распределением с помощью статистического критерия Колмогорова-Смирнова.

Действительно, ошибка отклонения от нормального распределения в off-line рейтинге p=0,087, в то время как в on-line рейтинге ошибка значительно меньше, p=0,016. Значит, оценки в off-line опросе распределились нормально, а в on-line опросе 3 функции были оценены существенно выше. Визуальная оценка не подвела.

Итак, остается понять, почему именно эти функции: #6 – #13 – #18 победили в голосовании с таким отрывом.

Оценим еще раз условия on-line опроса.
В блоге Kotlin публикуется пост, в котором написано, что off-line опрос привлек много внимания. Затем читателей приглашают также принять участие в голосовании и размещают ссылку на on-line опрос.

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

Итак, я специально выбрала заглавной картинкой к статье тот же коллаж из фотографий, который был размещен в блоге Kotlin прямо над приглашением принять участие в опросе. Рассмотрим его подробнее (рис. 6). Оказывается, на самом первом (левом) и самом крупном снимке отчетливо видно, что больше всего голосов отдано за функции #6, #13 и #18. Карточки размещены именно в таком порядке, карточка #6 видна лучше других и считывается первой.


Рисунок 6. Фрагмент поста в блоге Kotlin, приглашающего к on-line тистированию.

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

«Эффект привязки» был описан в одном из исследований Д. Канемана. Если одну группу испытуемых спросить: «Дожил ли Ганди до 114 лет? В каком возрасте он умер?», а другую: «Дожил ли Ганди до 35 лет? В каком возрасте он умер?», то первая группа оценит жизнь Ганди как гораздо более долгую, чем вторая.

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


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

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

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

Выводы


Ответим на вопросы, поставленные в начале статьи:

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

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

3. Одинаково ли воспринимали условия голосования участники митапов и остальные пользователи? – Разные условия исследования могли привести к разной манере голосования, из-за чего двойные и тройные голоса за дну функцию чаще отдавались в митапах, а не при on-line голосовании. Для того, чтобы это доказать, не достаточно данных. Напротив, косвенные аргументы свидетельствуют, что большинство участников предпочитали голосовать за 3 разные функции.

4. Почему в рейтинге on-line голосования первая тройка набрала существенно больше голосов, чем остальные? – Три функции в рейтинге on-line голосования (#6 – #13 – #18), действительно, существенно выше оценены участниками. Возможно, это связано с действием «эффекта привязки» из-за публикации в приглашении к on-line опросу фотографии, на которой карточки с такими номерами были оценены выше других.

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

Я благодарна Алине Долгих за предоставленные материалы и критическое обсуждение статьи, а также участникам facebook-сообщества «Статистика и анализ данных» за готовность помочь в выборе методов статистики.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334262/


Enjoy! Сервер аутентификации Isolate в Open Source

Четверг, 27 Июля 2017 г. 14:03 + в цитатник
isolate

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

У нас 300 клиентов. Кому-то это «всего», а для нас — это почти 2000 серверов на обслуживании. Чтобы хранить, обновлять и управлять базой из 2000 паролей для 60 сотрудников, управлять доступом к ней и не объяснять каждый раз клиенту, что пароли к его серверам будут одновременно знать 60 человек, мы сделали сервер аутентификации и назвали его Isolate. Под катом описание функций и ссылка на Github — мы выложили его в Open Source.

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

Итак, Isolate — набор утилит auth сервера и ansible-playbook для быстрого его разворачивания. Он позволяет нам авторизовываться по аппаратному ключу (безопасность превыше всего!) и удобно управлять огромным количеством проектов/серверов. При этом:

  • сотрудники не знают root пароль (опять же безопасность);
  • при нештатных ситуациях аппаратный ключ сотрудника деактивируется на auth сервере, и он теряет доступ к клиентским серверам (к счастью, у нас таких ситуаций не было);
  • все SSH-сессии записываются — можно считать время, проведенное на серверах.

Принимая сервер на поддержку, мы создаем на нем sudo-пользователя и прописываем ключ auth серверов. Дальше сотрудник авторизуется на auth сервере с использованием аппаратного ключа (мы используем yubikey), командой s (search) находит нужный сервер (по имени проекта, сервера, сайта и т.п.) и командой g (go) подключается к нему по SSH.

Основные моменты Isolate:
  • у пользователей нет доступа к приватному ключу;
  • все исходящие SSH-сессии логируются;
  • используются только системные средства управления доступом (поддержка SELinux в ближайшем будущем);
  • вход на Isolate выполняется по одноразовому паролю (2FA, OTP); можно использовать либо аппаратные ключи, либо всеми любимый Google Authentificator;
  • менеджер конфигураций SSH с возможностью соединения через SSH прокси-сервер, поддержка серверов в VPN через внешний гейт;
  • устанавливается через Ansible, но требует вмешательства в системные файлы (в ручном режиме);
  • поддерживаются CentOS 7, Ubuntu 16.04, Debian 9.


Как это выглядит


Пример списка серверов:

[~]$ s .

myproject
------
10001   | 11.22.22.22   | aws-main-prod
10002   | 11.33.33.33   | aws-dev
10003   | 11.44.44.44   | vs-ci

------
Total: 3

[~]$

точка s. в данном случае — как универсальный патерн для поиска всех серверов.

Пример входа на сервер с кастомным портом и SSH-proxy:

[~]$ g myproject aws-dev
Warning: Permanently added 3.3.3.100 (RSA) to the list of known hosts.
Warning: Permanently added 10.10.10.12 (RSA) to the list of known hosts.

[root@dev ~]$


Пример входа на произвольный сервер (без конфига в ISOLATE) c произвольными параметрами:

[isolate ~]$ g 45.32.44.87 --user support --port 2232 --nosudo
Warning: Permanently added 45.32.44.87 (RSA) to the list of known hosts.


Принцип работы


Установка достаточно подробно описана в README на Github, тут же поговорим о принципах работы.

Сам доступ разграничивается системными пользователями ОС. Как прослойка для доступа используется sudo + ssh.py обертка, цель которой — не допустить попадания за sudo опасных конструкций; ssh.py верифицирует аргументы и запускает SSH-клиент, на этом его обязанности заканчиваются.

Например:

$ sudo -l
    (auth) NOPASSWD: /opt/auth/wrappers/ssh.py

$ sudo /opt/auth/wrappers/ssh.py -h

usage: ssh-wrapper [-h] [--user USER] [--port PORT] [--nosudo]
                   [--config CONFIG] [--debug] [--proxy-host PROXY_HOST]
                   [--proxy-user PROXY_USER] [--proxy-port PROXY_PORT]
                   [--proxy-id PROXY_ID]
                   hostname

positional arguments:
  hostname              server address (allowed FQDN,[a-z-],ip6,ip4)

optional arguments:
  -h, --help            show this help message and exit
  --user USER           set target username
  --port PORT           set target port
  --nosudo              run connection without sudo terminating command
  --debug
  --proxy-host PROXY_HOST
  --proxy-user PROXY_USER
  --proxy-port PROXY_PORT
  --proxy-id PROXY_ID   just for pretty logs

------

Этот скрипт также отвечает за логирование — он формирует имена лог файлов и их расположение, определяет имя пользователя, сделавшего sudo, создает каталоги для лог файлов. Рядом с каждым логом есть *.meta файл, содержащий объект текущего соединения в JSON.

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

В скрипт завернуты функции, используемые в shared/bootstrap.sh.

Например, поиск сервера:

s () {
    if [[ $# -eq 0 ]] ; then
        echo -e "\\n  Usage: s  \\n";
        return
    elif [[ $# -gt 0 ]] ; then
        "${ISOLATE_HELPER}" search "${@}";
    fi
}


Работать с прокси можно без установки дополнительных пакетов. Достаточно SSH-сервера и установленного на нем nc/netcat. Также можно использовать функцию проброса порта в современных SSHD/SSH, но эта методика не рекомендуется, так как еще довольно много устаревших SSHD, которые не поддерживают эту функцию.

При попытке соединиться функцией/alias g, также, вызывается helper.py, который проверяет аргументы, классифицирует адрес/IP/FQDN/project и запускает ssh.py с нужными аргументами. При попытке входа по IP/FQDN без указания project/group будет использован default конфиг для SSH.

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

$ g rogairoga nyc-prod-1


Или, если сервер находится за корпоративным прокси после имени проекта, можно указать любой адрес FQDN/IP.

$ g rogairoga 192.168.1.1

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

$ g rogairoga 192.168.22.22 --port 23 --user support --nosudo

также есть возможность входа по ID сервера.

$ g 12345


Вместо заключения


Исходный код Isolate выложен на Github. Надеемся, что наше решение поможет многим DevOps-командам структурировать и упростить работу с серверами. Ждем комментариев, пожеланий и, конечно же, пул реквестов! Предложить идеи или задать вопросы можно в Телеграм-чате.

Наши дальнейшие планы:
  • разграничение прав доступа (пользователь-проект);
  • хелпер для трансфера файлов через auth сервер с/на конкретную машину;
  • интеграция с Zabbix (Tech Preview уже есть!).
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334148/


Метки:  

Сервер VESNIN: первые тесты дисковой подсистемы

Четверг, 27 Июля 2017 г. 13:58 + в цитатник
Отлаживая экземпляр сервера первой ревизии, мы частично протестировали скорость работы подсистемы ввода-вывода. Кроме цифр с результатами тестов, в статье я постарался отразить наблюдения, которые могут быть полезны инженерам при проектировании и настройке ввода-вывода приложений.



Методика теста и нагрузка


Начну издалека. В наш сервер можно поставить до 4 процессоров (соответственно до 48 ядер POWER8) и очень много памяти (до 8 ТБ). Это открывает много возможностей для приложений, но большой объем данных в оперативной памяти влечёт за собой необходимость где-то их хранить. Данные надо быстро достать с дисков и также быстро обратно запихнуть. В недалёком будущем нас ждёт прекрасный мир дезагрегированной энергонезависимой и разделяемой памяти. В этом прекрасном будущем, может быть, вообще не будет нужды в backing store. Процессор будет копировать байты напрямую из внутренних регистров в энергонезависимую память с временем доступа, как у DRAM (десятки нс) и иерархия памяти сократится на один этаж. Это всё потом, сейчас же все данные принято хранить на блочной дисковой подсистеме.

Определимся с начальными условиями для тестирования:
Сервер имеет относительно большое число вычислительных ядер. Это удобно использовать для параллельной обработки большого объёма данных. То есть один из приоритетов — это большая пропускная способность подсистемы ввода-вывода при большом числе параллельных процессов. Как следствие, логично использовать микробенчмарк и настроить достаточно много параллельных потоков.

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

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

Какие метрики смотреть?


На маленьком блоке 4КБ смотреть будем на IOPS (число операций в секунду) и во вторую очередь latency (время отклика). C одной стороны, фокус на IOPS — это наследие от жёстких дисков, где случайный доступ маленьким блоком приносил наибольшие задержки. В современном мире, all-flash системы способны выдавать миллионы IOPS, часто больше чем софт способен употребить. Сейчас «IOPS-интенсивные нагрузки» ценны тем, что показывают сбалансированность системы по вычислительным ресурсам и узкие места в программном стеке.

С другой стороны, для части задач важно не количество операций в секунду, а максимальная пропускная способность на большом блоке >=64КБ. Например, при сливе данных из памяти в диски (снэпшот базы данных) или загрузке базы в память для in-memory вычислений, прогреве кеша. Для сервера с 8 терабайтами памяти пропускная способность дисковой подсистемы имеет особенное значение. На большом блоке будем смотреть пропускную способность, то есть мегабайты в секунду.

Встроенная дисковая подсистема


Дисковая подсистема сервера может включать до 24 дисков стандарта NVMe. Диски равномерно распределены по четырём процессорам с помощью двух PCI Express свитчей PMC 8535. Каждый свитч логически разделен на три виртуальных свитча: один x16 и два x8. Таким образом, на каждый процессор доступно PCIe x16, или до 16 ГБ/с. К каждому процессору подключено по 6 NVMe дисков. Суммарно, мы ожидаем пропускную способность до 60 ГБ/с со всех дисков.



Для тестов мне доступен экземпляр сервера с 4 процессорами (8 ядер на процессор, максимально бывает 12 ядер). Диски подключены к двум сокетам из четырёх. То есть это половина от максимальной конфигурации дисковой подсистемы. На объединительной плате с PCI Express свитчами первой ревизии оказались неисправны два разъёма Oculink, и поэтому доступна только половина дисков. Во второй ревизии это уже исправили, но тут я смог поставить только половину дисков, а именно получилась следующая конфигурация:

  • 4 x Toshiba PX04PMB160
  • 4 x Micron MTFDHAL2T4MCF-1AN1ZABYY
  • 3 x INTEL SSDPE2MD800G4
  • 1 x SAMSUNG MZQLW960HMJP-00003

Разнообразие дисков вызвано тем, что мы попутно тестируем и их для формирования номенклатуры стандартных компонентов (диски, память, и т.д.) от 2-3 производителей.

Нагрузка минимальной конфигурации


Для начала выполним простой тест в минимальной конфигурации — один диск (Micron MTFDHAL2T4MCF-1AN1ZABYY), один процессор POWER8 и один поток fio с очередью = 16.

[global]
ioengine=libaio
direct=1
group_reporting=1
bs=4k
iodepth=16
rw=randread

[ /dev/nvme1n1 P60713012839 MTFDHAL2T4MCF-1AN1ZABYY]
stonewall
numjobs=1
filename=/dev/nvme1n1


Получилось вот так:
# numactl --physcpubind=0 ../fio/fio workload.fio
 /dev/nvme1n1 P60713012839 MTFDHAL2T4MCF-1AN1ZABYY: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
fio-2.21-89-gb034
time   3233 cycles_start=1115105806326
Starting 1 process
Jobs: 1 (f=1): [r(1)][13.7%][r=519MiB/s,w=0KiB/s][r=133k,w=0 IOPS][eta 08m:38s]
fio: terminating on signal 2
Jobs: 1 (f=0): [f(1)][100.0%][r=513MiB/s,w=0KiB/s][r=131k,w=0 IOPS][eta 00m:00s]
 /dev/nvme1n1 P60713012839 MTFDHAL2T4MCF-1AN1ZABYY: (groupid=0, jobs=1): err= 0: pid=3235: Fri Jul 7 13:36:21 2017
  read: IOPS=133k, BW=519MiB/s (544MB/s)(41.9GiB/82708msec)
  slat (nsec): min=2070, max=124385, avg=2801.77, stdev=916.90
  clat (usec): min=9, max=921, avg=116.28, stdev=15.85
   lat (usec): min=13, max=924, avg=119.38, stdev=15.85
 ………...
 cpu     : usr=20.92%, sys=52.63%, ctx=2979188, majf=0, minf=14


Что мы тут видим? Получили 133K IOPS с временем отклика 119 мкс. Обратим внимание, что загрузка процессора составляет 73%. Это много. Чем занят процессор?

Мы используем асинхронный ввод-вывод, и это упрощает анализ результатов. fio отдельно считает slat (submission latency) и clat (completion latency). Первое включает в себя время выполнения системного вызова чтения до возвращения в user space. То есть все накладные расходы ядра до ухода запроса в железо показаны отдельно.

В нашем случае slat равен всего 2.8 мкс на один запрос, но с учетом повторения этого 133 000 раз в секунду получается много: 2.8 мкс * 133,000 =372 мс. То есть 37.2% времени процессор тратит только на IO submission. А есть еще код самого fio, прерывания, работа драйвера асинхронного ввода вывода.

Общая нагрузка процессора 73%. Похоже, еще одного fio ядро не потянет, но попробуем:

Starting 2 processes
Jobs: 2 (f=2): [r(2)][100.0%][r=733MiB/s,w=0KiB/s][r=188k,w=0 IOPS][eta 00m:00s]
/dev/nvme1n1 P60713012839 MTFDHAL2T4MCF-1AN1ZABYY: (g=0): rw=randread, bs=(R)
 pid=3391: Sun Jul 9 13:14:02 2017
  read: IOPS=188k, BW=733MiB/s (769MB/s)(430GiB/600001msec)
  slat (usec): min=2, max=963, avg= 3.23, stdev= 1.82
  clat (nsec): min=543, max=4446.1k, avg=165831.65, stdev=24645.35
   lat (usec): min=13, max=4465, avg=169.37, stdev=24.65
…………
 cpu     : usr=13.71%, sys=36.23%, ctx=7072266, majf=0, minf=72


С двумя потоками скорость подросла со 133k до 180k, но ядро перегружено. По top утилизация процессора 100% и clat вырос. То есть 188k — это предел для одного ядра на этой нагрузке. При этом легко видим, что рост clat вызван именно процессором, а не диском. Посмотрим ‘biotop’ ():

PID  COMM       D MAJ MIN DISK    I/O Kbytes AVGus
3553  fio       R 259 1  nvme0n1 633385 2533540 109.25
3554  fio       R 259 1  nvme0n1 630130 2520520 109.25


Из-за включенной трассировки скорость несколько просела, но время отклика от дисков ~109 мкс, такое же, как и в предыдущем тесте. Измерения другим способом (sar -d) показывают те же цифры.

Ради любопытства, интересно посмотреть, чем занят процессор:

Профиль нагрузки одного ядра (perf + flame graph) с отключённой многопоточностью и работающими двумя процессами fio. Как видно, он 100% времени что-то делает (idle =0%).

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

Влияние многопоточности POWER8 на скорость ввода-вывода


Итак, мы выяснили, что при активной нагрузке по IO, процессор легко перегрузить. Цифра утилизации процессора показывает, что он занят для операционной системы, но ничего не говорит о загрузке узлов процессора. В том числе, процессор может казаться загруженным во время ожидания внешних компонентов, например, памяти. Здесь у нас нет цели выяснять эффективность использования процессора, но чтобы понять потенциал тюнинга, интересно взглянуть на “CPU counters”, частично доступные через ‘perf’.

root@vesninl:~# perf stat -C 0

Performance counter stats for 'CPU(s) 0':

    2393.117988   cpu-clock (msec)     #  1.000 CPUs utilized
       7,518   context-switches     #  0.003 M/sec
         0   cpu-migrations      #  0.000 K/sec
         0   page-faults        #  0.000 K/sec
   9,248,790,673   cycles          #  3.865 GHz           (66.57%)
    401,873,580   stalled-cycles-frontend  #  4.35% frontend cycles idle   (49.90%)
   4,639,391,312   stalled-cycles-backend  #  50.16% backend cycles idle   (50.07%)
   6,741,772,234   instructions       #  0.73 insn per cycle
                         #  0.69 stalled cycles per insn (66.78%)
   1,242,533,904   branches         # 519.211 M/sec          (50.10%)
    19,620,628   branch-misses       #  1.58% of all branches     (49.93%)

    2.393230155 seconds time elapsed


В выводе выше видно, IPC (insn per cycle) 0.73 – не так плохо, но теоретически на Power8 он может быть до 8. Кроме того, 50% “backend cycles idle” (метрика PM_CMPLU_STALL) может значить ожидание памяти. То есть процессор занят для планировщика Linux, но ресурсы самого процессора не особо загружены. Вполне можно ожидать прироста производительности от включения многопоточности (SMT), при увеличении числа потоков. Результат того, что случилось при включении SMT показан на графиках. Я получил ощутимый прирост скорости от дополнительных процессов fio, работающих на других потоках одного и того же процессора. Для сравнения приведён случай, когда все потоки работают на разных ядрах (diff cores).




По графикам видно, что включение SMT8 даёт почти двукратный рост скорости и снижение времени отклика. Вполне неплохо и с одного ядра мы снимаем > 400K IOPS! Попутно видим, что одного ядра, даже с включённым SMT8 мало, чтобы полностью нагрузить NVMe диск. Раскидав потоки fio по разным ядрам, мы получаем почти вдвое лучшую производительность диска – это то, что может современный NVMe.

Таким образом, если архитектура приложения позволяет регулировать количество пишущих/читающих процессов, то лучше подстраивать их число под количество физических/логических ядер, во избежание замедлений от перегруженных процессоров. Один NVMe диск может легко перегрузить процессорное ядро. Включение SMT4 и SMT8 даёт кратный прирост производительности и может быть полезно для нагрузок с интенсивным по вводом-выводом.

Влияние NUMA архитектуры


Для балансировки нагрузки 24 внутренних NVMe диска сервера равномерно подключены к четырём процессорным сокетам. Соответственно, для каждого диска есть «родной» сокет (NUMA локальность) и «удалённый». Если приложение обращается к дискам с «удалённого» сокета, то возможны накладные расходы от влияния межпроцессорной шины. Мы решили посмотреть, как доступ с удалённого сокета влияет на итоговую производительность дисков. Для теста снова запускаем fio и с помощью numactl привязываем процессы fio к одному сокету. Сначала к «родному» сокету, потом к «удалённому». Цель теста — понять, стоит ли тратить силы на настройку NUMA, и какого эффекта можно ожидать? На графике я привёл в сравнение только один удалённый сокет из трёх, из-за отсутствия между ними разницы.

Конфигурация fio:
  • 60 процессов (numjobs). Число взято из аппаратной конфигурации. У нас в тестовом образце установлены процессоры с 8 ядрами и включен SMT8. C точки зрения операционной системы, могут выполняться 64 процесса на каждом сокете. То есть нагрузку я нагло подгонял под аппаратные возможности.
  • размер блока — 4kb
  • тип нагрузки — случайное чтение 100%
  • объект нагрузки — 6 дисков, подключённых к сокету 0.

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




Как видно на графиках, разница между локальным и удалённым сокетом есть и весьма ощутима на большой нагрузке. Накладные расходы проявляются при очереди 16 (iodepth =16) >2M IOPS с блоком 4КБ (> 8 ГБ/с, проще говоря). Можно было бы сделать вывод, что уделять внимание NUMA стоит только на задачах, где нужна большая пропускная способность по вводу-выводу. Но не все так однозначно, в реальном приложении кроме ввода-вывода будет траффик по межпроцессорной шине при доступе к памяти в удалённой NUMA локальности. Как следствие, замедление может наступать и при меньшем трафике по вводу-выводу.

Производительность под максимальной нагрузкой


И теперь, самое интересное. Нагрузим все имеющиеся 12 дисков одновременно. Причём, с учётом предыдущих экспериментов, сделаем это двумя способами:
  1. ядро выбирает на каком сокете запускать fio без учёта физического подключения;
  2. fio работает только на том сокете, к которому подключены диски.


Смотрим, что получилось:





Для операций случайного чтения с блоком 4KB, мы получили ~6M IOPS при времени отклика < 330 мкс. Для блока 64KB мы получили 26.2 ГБ/с. Вероятно, мы упираемся в шину x16 между процессором и PCIe свитчем. Напомню, это половина аппаратной конфигурации! Опять же, видим, что на большой нагрузке привязка ввода-вывода к «домашней» локальности дает хороший эффект.

Накладные расходы LVM


Отдавать диски приложению целиком, как правило, неудобно. Приложению может оказаться либо слишком мало одного диска, либо слишком много. Часто хочется изолировать компоненты приложения друг от друга через разные файловые системы. С другой стороны, хочется равномерно сбалансировать нагрузку между каналами ввода-вывода. На помощь приходит LVM. Диски объединяют в дисковые группы и распределяют пространство между приложениями через логические тома. В случае с обычными шпинделями, или даже с дисковыми массивами, накладные расходы LVM относительно малы в сравнении с задержками от дисков. В случае с NVMe, время отклика от дисков и оверхед программного стека – цифры одного порядка. интересно посмотреть их отдельно.

Я создал LVM-группу с теми же дисками, что и в предыдущем тесте, и нагрузил LVM-том тем же числом читающих потоков. В результате, получил только 1M IOPS и 100% загрузку процессоров. С помощью perf, я сделал профилирование процессоров, и вот что получилось:



В Linux LVM использует Device Mapper, и очевидно система проводит очень много времени при подсчёте и обновлении статистики по дискам в функции generic_start_io_acct(). Как отключить сбор статистики в Device Mapper я не нашёл, (в dm_make_request() ). Вероятно, тут есть потенциал для оптимизации. В целом, на данный момент, применение Device Mapper может плохо влиять на производительность при большой нагрузке по IOPS.

Поллинг


Поллинг – новый механизм работы работы драйверов ввода вывода Linux для очень быстрых устройств. Это новая фича, и упомяну ее только для того, чтобы сказать почему в данном обзоре она не протестирована. Новизна фичи в том, что процесс не снимается с выполнения во время ожидания ответа от дисковой подсистемы. Переключение контекста обычно выполняется во время ожидания ввода-вывода и затратно само по себе. Накладные расходы на переключение контекста оцениваются в единицы микросекунд (ядру Linux надо снять с выполнения один процесс, вычислить самого достойного кандидата для выполнения и т.д. и т.п.) Прерывания при поллинге могут сохраняться (убирается только переключение контекста) или полностью исключаться. Этот метод оправдан для ряда условий:
  1. требуется большая производительность для однопоточной задачи;
  2. основной приоритет – минимальное время отклика;
  3. используется Direct IO (нет кеширования файловой системы);
  4. для приложения процессор не является бутылочным горлышком.

Обратная сторона поллинга — это повышение нагрузки на процессор.

В актуальном ядре Linux (для меня сейчас 4.10) поллинг по умолчанию включён для всех NVMe устройств, но работает только для случаев, когда приложение специально просит его использовать для отдельных «особо важных» запросов ввода-вывода. Приложение должно поставить флаг RWF_HIPRI в системных вызовах preadv2()/pwritev2().

/* flags for preadv2/pwritev2: */
#define RWF_HIPRI            0x00000001 /* high priority request, poll if possible */


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

Заключение


Хотя у нас тестовый образец с половиной конфигурации дисковой подсистемы, результаты впечатляют: почти 6M IOPS блоком 4KB и > 26 ГБ/с для 64KB. Для встроенной дисковой подсистемы сервера это выглядит более чем убедительно. Система выглядит сбалансированной по числу ядер, количеству NVMe дисков на ядро и ширине шины PCIe. Даже с терабайтами памяти, весь объем можно прочитать с дисков за считанные минуты.

Стек NVMe в Linux легковесный, процессор оказывается перегружен только при большой нагрузке fio >400K IOPS, (4KB, read, SMT8).

NVMe диск быстрый сам по себе, и довести его до насыщения приложением достаточно сложно. Больше нет проблемы с медленными дисками, но возможна проблема с ограничениями шины PCIe и программного стека ввода-вывода, а иногда и ресурсами ядра. Во время теста мы именно в диски практически не упирались. Интенсивный ввод-вывод сильно нагружает все подсистемы сервера (память и процессор). Таким образом, для приложений, интенсивных по вводу-выводу, нужна настройка всех подсистем сервера: процессоров (SMT), памяти (интерливинга, к примеру), приложения (количество пишущих/читающих процессов, очередь, привязка к дискам).

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

Включение в стек ввода-вывода на NVMe дополнительных программных слоев (типа Device Mapper) может ощутимо снижать пиковую производительность.

На большом блоке (>=64KB), привязка IO нагрузки к NUMA локальностям (процессорам), к которым подключены диски, дает снижение времени отклика от дисков и ускоряет ввод-вывод. Причина в том, что на такой нагрузке важна ширина шины от процессора до дисков.

На маленьком блоке (~4KB) все менее однозначно. При привязке нагрузки к локальности есть риск неравномерной загрузки процессоров. То есть можно просто перегрузить сокет, к которому подключены диски и привязана нагрузка.

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

Использование SMT8 сильно повышает производительность при большом числе пишущих/читающих процессов.

Заключительные размышления на тему.


Исторически, подсистема ввода-вывода медленная. С появлением флеша она стала быстрой, а с появлением NVMe совсем быстрой. В традиционных дисках есть механика. Она делает шпиндель самым медленным элементом вычислительного комплекса. Что из этого следует?

  1. Во-первых, у дисков скорость измеряется в милисекундах, и они многократно медленнее всех остальных элементов сервера. Как следствие, шанс упереться в скорость шины и дискового контроллера относительно невысок. Гораздо более вероятно, что проблема возникнет со шпинделями. Бывает, один диск нагружен больше остальных, время отклика от него чуть выше, и это тормозит всю систему. С NVMe пропускная способность дисков огромная, «бутылочное горлышко» смещается.
  2. Во вторых, чтобы минимизировать задержки от дисков, дисковый контроллер и операционная система используют алгоритмы оптимизации, в том числе кеширование, отложенную запись, опережающее чтение. Это потребляет вычислительные ресурсы и усложняет настройку. Когда диски сразу быстрые, необходимость в большом количестве оптимизации отпадает. Вернее, ее цели изменяются. Вместо сокращения ожиданий внутри диска, становится более важно сократить задержку до диска и как можно быстрее донести блок данных из памяти в диск. Стек NVMe в Linux не требует настройки и сразу работает быстро.
  3. И в третьих, забавное о работе консультантов по производительности. В прошлом, когда система тормозила, искать причину было легко и приятно. Ругайся на систему хранения и скорее всего, не ошибёшься. Консультанты по базам данных это дело любят и умеют. В системе, с традиционными дисками всегда можно найти какую-нибудь проблему с производительностью хранилища и озадачить вендора, даже если база данных тормозит из-за чего-то другого. С быстрыми дисками все чаще «бутылочные горлышки» будут смещаться на другие ресурсы, в том числе приложение. Жизнь будет интереснее.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334260/


Метки:  

Planning Poker: как сделать процесс постановки задач максимально прозрачным и четким

Четверг, 27 Июля 2017 г. 13:57 + в цитатник
В прошлом посте мы рассказали о том, как работаем с бэклогом, а сегодня поделимся подробностями о процессе планирования, который в нашем случае не только полезный, но и увлекательный, поскольку оценку задач мы проводим с помощью «Planning Poker».

image


Как и зачем мы проводим планирования


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

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

Заказчик (постановщик задачи – менеджер продукта, маркетолог или даже генеральный директор) обязательно должен присутствовать на планировании, чтобы объяснить суть задачи, рассказать, как он ее понимает, донести до команды почему задача важна и мотивировать исполнителей на ее выполнение. Цель инженерной команды — за счет дополнительных вопросов выяснить максимальное количество подробностей, вытянуть из заказчика скрытые требования, предложить свои идеи по реализации и выработать наилучший способ решения. Либо объяснить, почему выполнение задачи стоит отложить на некоторое время или не брать в работу вообще.

Постановка задачи


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

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

Оценка сложности


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

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

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


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

Советы:


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

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

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

Формат «Planning Poker» хорошо прижился в работу наших команд: разработчиков, аналитиков, админов, и позволяет лучше понимать задачи и пути их решения на этапе постановки.

А как вы обсуждаете задачи и оцениваете сложность и время их выполнения? Делитесь своим опытом в комментариях!
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334256/


Метки:  

[Перевод] XBRL: просто о сложном - Глава 5. Открывая новые измерения

Четверг, 27 Июля 2017 г. 13:56 + в цитатник

5. Открывая новые измерения


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


Глава основывается на спецификации XBRL Dimensions версии 1.0 CR от 19.06.2006. На момент написания книги спецификация находится в статусе Candidate Recommendation, но ожидается, что окончательный вариант не принесет никаких значительных сюрпризов.


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


5.1. Введение


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


  • Продажи в разных периодах;
  • Продажи по продуктовым линиям;
  • Продажи по регионам;
  • Продажи по отделам;
  • Количество сотрудников по возрасту;
  • Количество сотрудников по полу;
  • ...

Две из этих категорий явно определены спецификацией XBRL – период и составитель отчета (компания, департамент, отдел компании). Эти категории всегда присутствуют в контекстах, на которые ссылаются факты отчета.


Желание расширить эти возможности, чтобы позволить авторам таксономии указать свои собственные категории вроде продуктовой линии, пола и т.д., является вполне естественным. Это именно то, что позволяет сделать XBRL Dimensions. В этой спецификации такие категории называются измерениями (dimension).


Как определено в спецификации XBRL, входящие в контекст сценарий и сегмент могут иметь любое валидное XML-содержание. XBRL Dimensions определяет формализованный способ использования таких элементов для добавления новых измерений (категории) в контекст.


Пример, который мы ранее использовали, очень хорошо подходит для иллюстрации:
Нам лишь надо определить концепт nr_employees и пару измерений: gender (пол) со значениями {‘men’, ‘women’} и age group (возрастная группа) со значениями {‘...–20’, ‘21–40’, ‘41–…’}.

Отчет содержит набор контекстов для каждого сочетания периода и измерения, и каждому контексту соответствует свой факт:
Контекст Факт
01-01-2015 nr_employees = 35
01-01-2015 + ‘men’ nr_employees = 23
01-01-2015 + ‘women’ nr_employees = 12
01-01-2015 + ‘...–20’ nr_employees = 5
01-01-2015 + ‘21–40’ nr_employees = 23
01-01-2015 + ‘41–…’ nr_employees = 7
31-12-2015 nr_employees = 41
31-12-2015 + ‘men’ nr_employees = 27
31-12-2015 + ‘women’ nr_employees = 15
31-12-2015 + ‘...–20’ nr_employees = 9
31-12-2015 + ‘21–40’ nr_employees = 21
31-12-2015 + ‘41–…’ nr_employees = 11


5.1.1. Понятия измерений


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


  • Измерение (dimension)
    Измерение – это по сути категоризация фактов. Измерения определяются в Таксономии элементов домена (Domain Members Taxonomy, DMT), а ее элементы могут использоваться в контекстах отчета для категоризации передаваемых фактов.
  • Домен (domain) и Элементы домена (domain members)
    Набор допустимых значений измерения называется его доменом. Элемент домена – это одно из этих значений. Есть два типа элементов: типизированные (typed) и явные (explicit). Типизированные элементы определяются синтаксическими ограничениями, напр. «целые числа от 0 до 100». Явные элементы домена являются item-концептами, которые явно указываются элементами домена измерения. Получается перечисление элементов, напр. ‘men’ и ‘women’ для измерения gender.
  • Гиперкуб (hypercube)
    Измерения могут быть объединены, напр. «продажи по региону и продуктовой линии» или «количество сотрудников по полу и возрастной группе». Набор возможных значений такой комбинации измерений можно представить в виде элементов в n-мерном пространстве:
    • при n = 1 элементы образуют отрезок на прямой;
    • при n = 2 элементы образуют квадрат на плоскости;
    • при n = 3 элементы образуют куб в пространстве;
    • случаи n > 3 не так легко визуализировать, поскольку мы живем в трехмерном пространстве; математический термин для таких случаев – гиперкуб.
  • Первичная таксономия (primary taxonomy)
    Это обычная таксономия в соответствии со спецификацией XBRL. Она определяет концепты, по которым могут формироваться отчеты. Спецификация XBRL Dimensions берет на себя заботу о том, чтобы не требовалось никаких изменений в первичной таксономии.
  • Таксономия элементов домена (domain members taxonomy, DMT)
    Измерения и элементы измерений определяются как концепты DMT.
  • Таксономия шаблонов (template taxonomy)
    Объединяет первичную таксономию и таксономию элементов домена, определяя структуру гиперкубов и связывая их с первичными концептами.

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

5.2. Таксономии измерений


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


image


Следующие подразделы описывают каждый компонент архитектуры более подробно.


5.2.1. Измерения


DMT определяет измерения как абстрактные item-концепты со значением xbrldt:dimensionItem атрибута substitution group.


Примечание: Атрибуты xbrli:balance, xbrli:periodType и nillable игнорируются.


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


5.2.1.1. Типизированное измерение (typed dimension)

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


Домен определяется с использованием типов XML Schema:


  • Тип SimpleType может, к примеру, определить в качестве идентификатора клиента компании значения от 0 до 100 в виде целого числа или строки длиной 5 символов;
  • Тип ComplexType может быть использован для определения адреса, включающего в себя город, улицу, номер дома, индекс и т.д.

5.2.1.2. Явное измерение (explicit dimension)

Домен явного измерения идентифицируется связью dimension-domain от измерения к корню сети связей domain-member между элементами домена. В явном измерении не может содержаться атрибут xbrldt:typedDomainRef.


Элементами домена измерения являются все qname-элементы в сети связей domain-member. Каждый элемент – это определение item-концепта со значением xbrli:item атрибута substitution group (он не может принадлежать к группе xbrldt:hypercubeItem или xbrldt:dimensionItem).


Связи domain-member образуют иерархию элементов. Можно добавлять элементы в иерархию, например, чтобы создать корень вложенной иерархии, который не предназначен для использования в качестве элемента домена. Для этого в булевом атрибуте usable, имеющего по умолчанию значение true, указывается значение false.


У явного измерения может быть указан элемент по умолчанию, это делается с помощью связи dimension-default к элементу домена. Это значение по умолчанию используется в контексте, если не задано ни одного элемента измерения. Само значение по умолчанию в не может быть явно указано в контексте, оно всегда определяется автоматически.


Обратите внимание, что связь dimension-default сама по себе не добавляет элемент в домен и не является эквивалентом связи domain-member.


5.2.2. Связи domain-member и наследование (inheritance)

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


Предположим, у нас есть два первичных концепта, один из которых (item) связан с гиперкубом hc_age, а другой (another item) – связью domain-member с первым концептом:

image

Так как у первого концепта есть связь с измерением age_group через гиперкуб hc_age, а второй концепт имеет связь domain-member с первым концептом – второй концепт наследует измерение age_group.

5.2.3. Гиперкубы (hypercube)

Гиперкубы определяются в таксономии шаблонов (template taxonomy) путем объединения нуля (гиперкуб может быть пустым) и более измерений.


Объявляющий элемент является абстрактным концептом, который должен иметь значение xbrldt:hypercubeItem атрибута substitution group.


Измерения связываются с гиперкубом дугами с ролью hypercube-dimension. Эти отношения упорядочены значением атрибута order в каждой дуге. Дуги не могут образовывать циклических связей.


5.2.4. Связь первичных концептов с гиперкубами

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


Есть два типа связей has-hypercubeall и notAll:


  • связь типа all используется для определения измерений (и элементов измерений), которые разрешены для концепта;
  • связь типа notAll используется для определения измерений (и элементов измерений), которые не разрешены.

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


Предположим, у нас есть два гиперкуба:

image

Первичный концепт со связью has-hypercube типа all с кубом hc_age_x_gender может иметь все элементы измерений gender и age_group. Если мы добавим к этому концепту связь типа notAll с гиперкубом hc_exclude, элемент ‘Female’ измерения gender и элемент ‘...–20’ измерения age_group станут ему недоступны.

Связь has-hypercube должна указывать, в какой части контекста должны быть определены измерения – segment или scenario, для этого предназначен атрибут contextElement:


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

Чтобы указать, что концепту доступны только элементы внутри измерений гиперкуба, в необязательном булевом атрибуте closed связи has-hypercube указывается значение true. Этот атрибут применяется только к сегменту сценария в соответствии со значением атрибута contextElement в связи. Значением по умолчанию является false, которое оставляет сегмент или сценарий открытым.


5.2.5. Наборы взаимосвязей измерений (dimensional relationship sets, DRS)


Определенные в XBRL Dimensions взаимосвязи включаются в базы ссылок определений (definition linkbase). В соответствии со спецификацией XBRL, взаимосвязи группируются в сети в соответствии с их ролями. Это называют базовым набором взаимосвязей.


Спецификация XBRL Dimensions расширяет понятие базового набора путем введения атрибута targetRole для таких типов связей как all, notAll, hypercube-dimension, dimension-domain и domain-member. Атрибут targetRole ссылается на другую роль и определяет переход от базы ссылок в одном базовом наборе к базе ссылок в базовом наборе с указанной в атрибуте ролью. Набор таких сгруппированных взаимосвязей называется Набором взаимосвязей измерений, DRS.


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


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

Спецификация XBRL Dimensions использует понятие последовательных взаимосвязей (consecutive relationship). Оно означает, что, например, элементы гиперкуба определяются сначала по взаимосвязи hypercube-dimension, а затем для всех найденных измерений – последовательно по каждой из связей domain-member.

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

Взаимосвязи, которые могут быть объединены как последовательные, ограничены тем, что вы бы логично ожидали – связи has-hypercube (all, notAll) могут иметь hypercube_dimension в качестве последовательных взаимосвязей, но не dimension_domain или domain_member, так как они пропускают связи.

5.3. Измерения в отчетах XBRL


Как говорилось во введении, измерения используются в сегменте или сценарии контекстов отчета. Выбор между ними производится с помощью атрибута contextElementType связи has-hypercube.


5.3.1. Типы элементов измерений


5.3.1.1. Типизированные элементы (typed member)


Для типизированных измерений значения указываются как дочерние элементы xbrldi:typedMember внутри сегмента или сценария. Атрибут dimension таких элементов должен ссылаться на определение типизированного измерения. Содержанием typedMember является элемент с типом как у измерения, указанного в атрибуте xbrldt:typedDomainRef. Значением для измерения является значение этого элемента.


Предположим, у нас есть измерение ageDim типа age с целочисленными значениями от 0 до (будем оптимистами) 150. Значение измерения 45 задается как дочерний элемент age внутри, к примеру, сегмента следующим образом:

  45


5.3.1.2. Явные элементы (explicit member)


Для явных измерений значения указываются с помощью элементов xbrldi:explicitMember. Атрибут dimension таких элементов должен ссылаться на определение явного измерения. Значением для измерения является содержание этого элемента и оно должно быть qname-элементом одного из явно определенных значений измерения.


Предположим, у нас есть измерение ageGroupDim со следующими явно определенными элементами: ageLessThan20, ageFrom21To40 и age41OrMore. Значение измерения для возрастной группы 21–40 задается дочерним элементом внутри, к примеру, сегмента следующим образом:
d:ageFrom21To40


5.3.2. Валидация (validation)


Спецификация XBRL Dimensions дополняет набор правил валидации из спецификации XBRL.


5.3.2.1. Валидация первичных фактов


Факты по первичным концептам должны валидироваться на основании концепта и контекста. Факт автоматически считается валидным по измерениям, если для его концепта не определены связи has-hypercube.


Если в концепте определены связи has-hypercube, указанные ими гиперкубы должны быть валидными по измерениям. Контекст факта должен содержать валидную комбинацию элементов домена или значений для каждого из связанных с ним измерений гиперкуба в пределах как минимум одного базового набора. Если не задано ни одного значения измерения, используется значение измерения по умолчанию (при его наличии). Недопустимо указывать более одного значения измерения.


Обратите внимание, что при определении валидности указанного значения в пределах измерения учитываются такие атрибуты как usable в связях domain-member и closed в связях has-hypercube.


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

5.3.3. Равенство по измерениям


Спецификация XBRL Dimensions добавляет новый тип равенства к приведенному в спецификации XBRL обширному перечню – d-равенство (d-equal). Два факта считаются d-равными для одного измерения, если они имеют одно и то же значение этого измерения.

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334252/


Метки:  

IT-события, которые вы можете посетить до конца лета

Четверг, 27 Июля 2017 г. 13:44 + в цитатник
По сложившейся традиции, продолжаем свой бесконечный перечень российских мероприятий, связанных с разработкой и смежными темами. Под конец сезона в IT-сообщество наступило некоторое затишье, но тем, кто твердо намерен посвятить остаток лета самообразованию, все-таки есть из чего выбирать: в сегодняшнем выпуске фигурируют frontend, C++, блокчейн и управление IT-проектами.




DevNotes #1. Рецепты приготовления web в enterprise

Когда: 29 июля
Где: Рязань, ул. Мюнстерская, д. 2, конгресс-отель «Старый город», зал «Санкт-Петербург»
Условия участия: бесплатно, требуется регистрация

Специалисты из СберТеха организуют митап на темы, связанные с разработкой крупных систем уровня Enterprise. В своих выступлениях спикеры расскажут об опыте построения отказоустойчивых распределенных систем на базе микросервисов с точки зрения backend и frontend, а также поделятся рецептами создания инфраструктуры DevOps, способной выдерживать высокий темп разработки и поставки сервисов Единой Фронтальной Системы. Доклады рассчитаны на широкий круг слушателей — новички в IT могут смело приходить наряду с мастерами своего дела.



Konnect 2017

Когда: 29 июля
Где: Москва, Берсеневский переулок, д. 2, корпус 1
Условия участия: 1000 руб.

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

Pizza Pitch: открытые презентации в Бизнес-инкубаторе ВШЭ

Когда: 3 августа
Где: Москва, ул.Кирпичная, д. 33, стр. 2
Условия участия: 200 руб.

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

RamblerFront& meetup #2

Когда: 3 августа
Где: Москва, Варшавское шоссе, д. 9, стр. 1, подъезд №5. Мансарда Rambler&Co
Условия участия: бесплатно, требуется регистрация

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



A!Hack Summer

Когда: 5-6 августа
Где: Москва, Берсеневская набережная, д. 6, корпус 3
Условия участия: бесплатно

Альфа-Банк приглашает программистов, дизайнеров и разработчиков, которые чувствуют в себе заряд энергии для тридцатичасового нон-стоп марафона, принять участие в бесплатном хакатоне. Задача, которая ставится перед командами, — создать прототип lifestyle продукта, который был бы интересен для состоятельных клиентов банка. Организаторы открыты для креативных идей от участников, но готовы также предложить собственные наработки для тех, кто не успеет определиться с темой. Итоговые проекты будут оцениваться жюри, в состав которого войдут топ-менеджеры Альфа-банка, alfalab и Alfa Private, а также профильные специалисты в сфере IT и финтеха. Победителей ждут денежные призы, карьерные возможности и приглашение протестировать свой продукт на данных Alfa Private.

Руководство проектами в IT: Составление плана проекта. Ведение проекта

Когда: 5-6 августа
Где: Санкт-Петербург, Красногвардейский пер., д.23, литера Е, офис ГК «Скаут»
Условия участия: 10 500 руб.

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

Внутреннее устройство и вывод на рынок блокчейн проектов: введение в блокчейн

Когда: 5 августа
Где: Санкт-Петербург, ул. Медиков, д.3, литера А, Технопарк Санкт-Петербурга
Условия участия: от 1777 руб.

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

Внутреннее устройство и вывод на рынок блокчейн проектов: ICO и криптовалюты

Когда: 6 августа
Где: Санкт-Петербург, ул. Медиков, д.3, литера А, Технопарк Санкт-Петербурга
Условия участия: от 1777 руб.

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

Вторая практическая конференция «Bank.Bot — 2017: банковские чат-боты и робоэдвайзинг»

Когда: 22 августа
Где: Москва, Гамсоновский пер., д. 2
Условия участия: 15 000 руб.

Финтех-сектору также есть что обсудить — например, искусственный интеллект, робоадвайзинг и то, какое отношение все эти модные слова на деле имеют к российской банковской сфере. Мероприятие посетят представители крупных отечественных банков (Открытие, Citibank, Сбербанк Технологии) и финансовых компаний. Спикеры выступят с докладами о том, как происходило внедрение чат-ботов в их сервисах, какие трудности оно вызывало и какие возможности обеспечило, коснутся мировых практик робоадвайзинга. На панельной дискуссии будут предложены такие темы, как машинное обучение и обработка языка, предиктивная аналитика, блокчейн, внедерние ботов для различных плафторм, инструменты для мониторинга и монетизации и многое другое.



C++ Siberia

Когда: 25 — 26 августа
Где: Томск, пр. Ленина, д. 36, Томский государственный университет
Условия участия: 2500 руб. (+3000 руб. за мастер-классы)

Кочевое сообщество российских любителей С++ добралось и до Сибири: очередная двухдневная встреча состоится в Томске на исходе лета. В первый день участники получат возможность поучаствовать в мастер-классах по двум направлениям (Applied Functional Programming in C+ и Continuous Integration для C++ Разработчика); второй будет отведен под доклады экспертов. Организаторы подчеркивают, что материалы конференции рассчитаны на опытных разработчиков с хорошей подготовкой. Программа еще формируется, поэтому те, кому есть, что сказать на такие темы, как C++, STL, Boost, Qt и прочих библиотеках, тестировании и сборке крупных проектов на С++, асинхронности и конкурентности, могут предложить свою кандидатуру и в качестве спикера.

Системный и бизнес анализ в разработке ПО. Интенсивный курс

Когда: 28 августа — 1 сентября
Где: Санкт-Петербург, Невский пр., д. 104, БЦ Tempo, литера 6, 4 этаж 
Условия участия: 49 900 руб.

Всего 40 часов упорного умственного труда — и вы системный аналитик. Для желающих отметить День Знаний новым сертификатом компания LevelUp предлагает недельный курс занятий по бизнес-анализу. Программа рассчитана на IT-специалистов, архитекторов и ведущих разработчиков с хорошим уровнем английского и опытом работы в программной инженерии. Курс включает шесть теоретических модулей: Обзор практик системного и бизнес-анализа (краткая вводная часть, основные понятия, обзор необходимых компетенций), Определение ИС: Элементы инженерии требований (техники выявления и анализа заинтересованных сторон, матрица отвественности, классификация требований, валидация и инженерия требований в контексте управления проектами), Моделирование ИС в UML 2 (UML-диаграммы и их интерпретация, концептуальное моделирование), Основы моделирования бизнес-процессов и корпоративной архитектуры (ключевые элементы моделей, основные практики бизнес-анализа), Моделирование бизнес-процессов в BPMN 2.0 и Обзор правил и принципов моделирования бизнес процессов, а также четыре лабораторных практикума для закрепления материала.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334238/


Метки:  

[Из песочницы] Как ускорить сайт или факторы, влияющие на загрузку сайта

Четверг, 27 Июля 2017 г. 11:18 + в цитатник
Цель: Дать базовые понятия о факторах, влияющих на скорость загрузки сайта. Разобрать каждый этап загрузки. Дать понятие о способах ускорения за счёт оптимизации каждого фактора загрузки, на который можно повлиять.

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

Целевая аудитория: владельцы сайтов, web-студии, специалисты и любители. Постараюсь написать статью таким образом, чтобы она была доступна в понимании всем.

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

Мощность и качество устройства клиента, а так же скорость его интернета и удалённость от локации сервера


Мы можем купить клиенту нормальный компьютер и подключить ему высокоскоростной интернет и более не будем испытывать проблем с этим фактором (конечно же, я шучу). Хотя я бы определённо чаще посещал сайты, владельцы которых обновляли бы мне компьютер и оплачивали интернет. Кроме шуток, что мы на самом деле можем сделать, если у клиента слабый интернет и маломощное устройство?

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

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

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

image

image

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

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

Разобьём этот промежуток на подпункты:

1.1 Отправка запроса браузером клиента.

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

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

1.2 Запрос принимается web-сервером, он находит в списке виртуальных хостов тот, что подойдёт под запрос и производит обработку виртуального хоста, в нашем примере сайт на php, значит web-сервер обратится к php для генерации странички, тот в свою очередь для наполнения странички данными обратится в БД. После формирования странички она будет передана web-сервером браузеру клиента.

Очень важную роль играет кэширование на каждом этапе, кэширование на уровне web-сервера, кэширование на уровне php (opcache), кэширование запросов в БД (memcache), могут быть и другие варианты кэширования, я привёл эти как наиболее распространённые. Это как раз тот этап на который Вы можете повлиять и этому этапу нужно уделить время.

Вот способы его ускорения.

  • Выбрать быстрый хостинг или даже лучше VPS, VDS или даже физический сервер. Если вы не компетентны в таком выборе, лучше попросите помощь у специалиста или спросите рекомендации от знакомых, которые уже пользуются теми или иными хостерами. Обратите внимания на т, о где расположен дата-центр хостера: идеально, если он будет располагаться в непосредственной близости от ваших потенциальных клиентов. Я лично использую зарубежные сервера, если только на сайт осуществляются DDOS-атаки, Российские хостеры предосталяют защиту от DDOS низкого качества, и тут уже приходится мириться с пингами и задержкой.

  • Правильная настройка сервера поможет ускорить ответ от него. Тут играют роль выбор более шустрого ПО и правильное его конфигурирование. Для web-сервера я использую Nginx, где по возможности использую hhvm совместно с php 7.1, выбор версии php, а так же hhvm по большей части ещё и зависит от кода вашего сайта: если сайт использует устаревшие функции, то вам или придётся обновлять его или довольствоваться старыми версиями, имеющими не столь высокую производительность. Ну и в качестве БД использовать MariaBD или даже Perсona, если у вас более крупный проект. Также не стоит забывать о защите: антибруты, фильтры от типовых атак, http-авторизация как дополнительная авторизация на всех админках, антиспамы, антивирусы и прочее.

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

Хочу сделать поправку, у меня на скрине ответ сервера для сайта Хабра равен 3,48 с — это плохое время, но Хабр тут по сути не виноват. У меня 3G интернет посредственного качества. Поэтому конкретно этот этап загрузки рекомендую отслеживать при помощи сервиса. Я использую для этого сервис проверки ответа сервера от Яндекс.

image

Код статуса HTTP должен быть 200.

Ответ сервера тут заметно меньше, чем на моём 3G интернете. В идеале время ответа сервера должно стремиться к нулю, но как минимум он не должен превышать 300 мс, хотя это лично мой критерий. Хотя нет, не только мой. Google PageSpeed если я не ошибаюсь тоже следит, чтобы ответ сервера не превышал 300мс и, если сайт превышает рекомендованное время, то предупреждает, что нужно сократить ответ сервера.

Ну и в самом низу мы можем увидеть, что ответ сжат при помощи gzip.

Хабр прошёл первый этап загрузки на пятёрочку (нет-нет, я вовсе не подлизываюсь).

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

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

На что тут нужно обратить внимание.

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

Как же их сократить? В http/1.0 и http/1.1 для каждого отдельного файла создаётся отдельное соединение, значит наша задача сократить количество подгружаемых файлов на страничке.

  • Объединить все css в один файл и все js в один файл, эта процедура называется конкатенация.

  • Поместить мелкие картинки в закодированном виде прямо в css или в тело страницы чтобы для них не создавались отдельные соединения.

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

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

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

image

Вот тут наглядно видно на сколько меньше соединений создаётся при использовании http/2

2.2 Вес страницы и элементов, подгружаемых с неё.

  • Убрать лишние комментарии в коде.
  • Использовать сжатие.
  • Оптимизировать контент сайта, сжать и объединить css и js, сжать картинки и пр.

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

Модуль для web-сервера PageSpeed. Он есть и для nginx — ngx_pagespeed и для apache2 — mod_pagespeed. О том что он может делать, лучше подробнее почитать в официальной документации, его настройки очень гибкие. Я только отмечу, что он способен выполнять конкатенацию на лету что поможет сократить количество соединений и он же отлично жмёт контент, сокращая вес странички и её содержимого.

На этом этапе я могу поставить Хабру твёрдую 4 и то только за отсутствие http/2, хотя я бы наверное ещё сократил объём подгружаемых элементов и сделал конкатенацию.
Этот этап загрузки странички в идеале не должен превышать 2-3 сек(хотя предела совершенству нет конца и у меня есть клиенты, которые хотят быстрее даже при скорости загрузки меньше 1сек). Если у вас это время больше, вам стоит задуматься над рекомендациями, которые я дал выше.

3. Load — это тот момент, когда колёсико браузера перестало крутиться, то есть произошла полная загрузка страницы. Это менее критичный этап загрузки и он зачастую затормаживается сторонними чатами для общения с клиентами на сайте и прочими второстепенными элементами. Если вы выполните рекомендации, которые я дал выше, то этот этап тоже станет быстрее. Ещё хотел бы отметить что если у вас не высоконагруженный проект и при этом у вас VPS, VDS или физ. сервер, постарайтесь, чтобы вся статика грузилась только с вашего сервера. Размещение статики на сторонних сайтах и в CDN принесёт пользу только при высоких нагрузках, а для не нагруженных сайтов сыграет только в минус.

4. На этот этап можно не смотреть вообще, так как по сути страничка загружена и тут браузер всегда будет что-то подгружать, общаясь с сайтом.

5. Данной цифрой на скриншоте я обозначил место, где отображается количество загружаемых элементов на страничке и вес странички со всеми элементами. Нужно учитывать что если для ПК не проблема загрузить страничку в 2,5 Мб, то для мобильного браузера со слабым 3G это становится более проблематично. В частности у меня 3G интернет и Хабр у меня грузится не так быстро как другие сайты. Для мобильных устройств в идеале, чтобы страничка весила меньше 1 Мб. Тут или сокращать размер всего контента на страничках или делать мобильную версию.

P.S.


Плюсы загрузки контента со стороны:

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

Минусы загрузки контента со стороны:

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

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

Надеюсь, данная статья оказалась для вас познавательной.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334236/


Метки:  

Неклассическое поступление в вуз

Четверг, 27 Июля 2017 г. 10:44 + в цитатник

История о том, как любопытство, знания и вовремя опубликованный пост на Хабре могут дать пропуск в Университет ИТМО


/ Фотография hackNY.org CC-BY

Как это было


Герой этой истории – Илья Глебов, школьник из Мончегорска, небольшого города в Мурманской области. В сорокатысячном городе есть несколько средних школ, гимназия, лицей и не так уж много хороших репетиторов – поэтому когда в семье зашла речь о подготовке к ЕГЭ по информатике, Илья решил положиться на интернет-ресурсы. И, как выяснилось, не прогадал – набрал по информатике 97 баллов. Но в этой истории процесс подготовки оказался еще интереснее, чем результат:

Все действительно произошло, когда я готовился к ЕГЭ по информатике. Там была задача под номером 27. Смысл в том, что в ней было очень много параметров — х1, х2, х3, х4, х5 и так далее. Надо было пробовать, перебирать.

И мне так надоело это делать, что я просто решил отвлечься и что-нибудь почитать. Наткнулся на статью об уязвимости в Facebook и решил попробовать этот способ на ВК

– Илья Глебов в интервью порталу ITMO.News

Сработало – Илье действительно удалось найти критическую уязвимость, которая затронула не только «Вконтакте», но и ICQ. Пример атаки и весь процесс поиска уязвимости Илья подробно описал в своем посте на Хабре:

  • Отправляем запрос на отправку SMS абоненту A с session_id C, ему приходит код 1234
  • Отправляем запрос на отправку SMS абоненту B с session_id C, ему приходит код 1234
  • Теперь, если абонент A знает номер телефона абонента B, он может восстановить его страницу.

Восстанавливать можно было только ту страницу, на номер которой пришла последняя SMS с сходным session_id.


Первым делом Илья сообщил об уязвимости в репорте на HackerOne. «Вконтакте» отреагировали оперативно и устранили уязвимость через 17 часов, после чего холдинг Mail.Ru Group, в состав которого входит «Вконтакте», выплатил Илье 3000$ – две тысячи за нахождение уязвимости и еще тысячу – по программе bug bounty от ICQ (мессенджер использовал ту же библиотеку ilbverify, что и «Вконтакте»).

От поста на Хабре к поступлению в университет


В июле, уже сдав все экзамены, Илья написал об уязвимости на Хабре. Этот материал стал для него дебютным на площадке, собрал почти 70 тысяч просмотров и, само собой, заинтересовал Университет ИТМО:

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

– Николай Пшеничный, начальник отдела профориентации и работы с талантами Департамента по стратегическим коммуникациям



В разговоре с Ильей выяснилось, что проблема состоит только в полученных им 60 баллах ЕГЭ по математике – Илья считал, что из-за этого у него не будет возможности учиться в Университете ИТМО, кроме как на платной основе. Однако осечка на одном экзамене не должна быть фатальной, особенно когда речь идет о школьнике, который демонстрирует совсем не школьные знания по профильному предмету.

Пост на Хабре Илья написал 9 июля. А уже через четыре дня он встретился с представителями Приемной комиссией и деканом факультета информационной безопасности и компьютерных технологий Университета ИТМО.

Данил Заколдаев (декан) отметил, что по уровню знаний Илья не уступает другим сильным абитуриентам. Более того, разбирается в таких дисциплинах как «Программно-аппаратная защита информации» и «Веб-программирование» на уровне студента 3-4 курса:

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

– Данил Заколдаев

В ИТМО Илье порекомендовали подать документы на обучение по образовательной программе «Технологии защиты информации» мегафакультета «Компьютерные технологии и управление». Поскольку сумма баллов ЕГЭ не позволяла школьнику пройти на бюджет, руководство вуза предложило ему обучаться за счет университета, – а в дальнейшем, если Илья будет учиться на «хорошо» и «отлично», перевести его на бесплатное обучение.


Алексей Итин, Данил Заколдаев, Илья Глебов, Наталья Глебова (мама Ильи) и Николай Пшеничный. Фотография Университета ИТМО

«Илья – не первый абитуриент, которому Университет ИТМО предложил обучаться за счет вуза. Проактивая работа со школами и поиск талантливых целеустремленных школьников, которые не являются победителями олимпиад или высокобалльниками, одна из стратегических задач вуза. В рамках развития единого сообщества университета ITMO.FAMILY на следующий год планируется реализовать отдельную программу поиска и поддержки таких абитуриентов. Мы ждем новых «звезд» на Хабре», – говорит Анна Веклич, первый заместитель председателя Приемной комиссии, начальник Департамента по стратегическим коммуникациям Университета ИТМО.

Поиск талантов


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

Системный поиск абитуриентов на Хабре невозможен по объективным причинам: хоть и IT-компетенции покорны всем возрастам, но чаще всего самые молодые хабражители, если и участвуют в дискуссиях и публикуют записи, то не акцентируют внимание на том, что ещё учатся в школе […]

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

– Николай Пшеничный

Если вы регулярно делитесь с сообществом своими идеями и наработками, то можете, во-первых, получить обратную связь от других хабражителей – о том, насколько выбранная тема актуальна и как ее можно развить, расскажут люди, по уровню знаний порой ничем не уступающие вашим преподавателям. А опыт создания сильных материалов и фидбек от сообщества помогут подготовить доклады для научно-практических конференций, таких как, например, Конгресс молодых учёных Университета ИТМО. Кстати, участие в Конгрессе — одно из многих индивидуальных достижений, за которые мы даем дополнительные баллы к ЕГЭ.

Итак, как заявить о себе талантливому абитуриенту:

1. Старайтесь выходить за пределы «зоны комфорта» – то есть, в случае с поступающими, за пределы школьной программы. История Ильи – отличный пример того, что для поступления в вуз важны не только баллы ЕГЭ, но и ваша любознательность, упорство и трудолюбие – а также ваши интересы в тех областях, которые в школьную программу не входят.

2. Обращайте внимание на то, что вам действительно интересно – помимо решения «обязательных» задач. Развивайте свои увлечения, находите друзей в тематических сообществах, участвуйте в профильных онлайн-активностях, не ленитесь потратить силы на олимпиады, результаты которых могут зачесть в вузах вашей мечты.

3. Не бойтесь заявить о себе на профильных ресурсах вроде Хабра – делитесь своими знаниями и опытом, не обращая внимания на возраст. Скрывать, что вы еще учитесь в школе, тоже не нужно – помните, что Университет ИТМО ценит и внимательно читает Хабр.

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

5. Во многих вузах при поступлении ценят индивидуальные достижения – они могут сыграть свою роль при зачислении. Например, в Университете ИТМО есть целый перечень достижений, за которые вам могут добавить баллов к результатам ЕГЭ. Среди них – Олимпиада «ИТМО.Вконтакте», «Турнир двух столиц», языковые сертификаты, достижения в спорте и многое другое.

6. И главное – выбирайте то, что вас вдохновляет. Если это IT, новые технологии, робототехника, фотоника, биоинженерия – мы будем рады увидеть вас в числе наших студентов!
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334232/


Метки:  

Информационные сервисы, роботы и торговый софт: применение API в мире финансов

Четверг, 27 Июля 2017 г. 10:32 + в цитатник


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

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

API брокера: роботы и торговые приложения


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



Программирование простых роботов с помощью языка Tradescript в терминале SmartX

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

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

Интерфейс для подключения к торговой инфраструктуре ITinvest создан с использованием компонентной объектной модели (COM).Это означает, что к торговым серверам можно подключить роботов, разработанных на платформах, поддерживающих эту технологию, от C++ и Delphi до Visual Basic for Application из MS Excel.

Недавно состоялся релиз новой версии API (SmartCOM 4.0), которая работает c торговой системой под названием MatriX (для ее создания мы использовали технологии IBM Data Power).

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

  • StockSharp —бесплатная платформа для торговых роботов и автоматизации полного цикла алготрейдинга.
  • QScalp — торговый привод для анализа и скоростного выполнения операций на рынке при краткосрочной и высокочастотной биржевой торговле.
  • Volfix — мощный инструмент поддержки торгового решения, новейший структуризатор данных, аналитический сервис, включающий все самые современные способы подачи и обработки котировки.
  • COM X-Trade — бесплатная торговая платформа, включающая в себя весь необходимый функционал для активной торговли (скальпинг) и интрадей-трейдинга.
  • LiveTrade Scalping SmartCOM — торговых терминал для активной торговли (scalping).
  • Option-lab — профессиональная лаборатория опционного трейдера, обладает мощными аналитическими возможностями.
  • TSLab — современный биржевой терминал со встроенной средой для разработки механических торговых систем.
  • EasyScalp — современный торговый терминал, разработанный для скальпинга и торговли внутри дня.

Более полный список доступных функций API можно посмотреть здесь.

Когда скорость превыше всего: прямой доступ на биржу


Во времена, когда на бирже для многих трейдеров все решают доли секунды, работа по схеме «пользователь — брокерская система — ядро биржи» подойдет не всем. Именно поэтому появилась технология, позволяющая максимально оптимизировать эту цепочку – прямой доступ на биржу (Direct Market Access, DMA).

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

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

Протокол FIX (Financial Information eXchange) – протокол обмена финансовой информацией, который стал мировым стандартом для обмена данными между участниками биржевых торгов в режиме реального времени. Поддерживается крупнейшими мировыми биржевыми площадками, в том числе Московской биржей.



Схема передачи сообщений протокола FIX. Изображение: Wikimedia

Для получения рыночной информации (Market Data) используется протокол FAST (Fix Adapted for STreaming)стандарт, разработанный создателями протокола FIX, который позволяет добиться значительных возможностей компрессии данных для передачи больших объемов рыночной информации с минимальными временными задержками. Помимо Московской биржи, используется на NYSE, Nasdaq-OMX и многих других мировых площадках.

Также для прямого подключения используются нативные протоколы. Данные протоколы возникли еще до объединения бирж ММВБ и РТС в Московскую биржу. Так на рынках относившихся к бирже РТС, для прямого совершения операций и получения данных в режиме подключения используется протокол Plaza II.

Для выполнения торговых операций и получения биржевых данных на площадках, ранее относившихся к бирже ММВБ (валютный и фондовый рынки) используется двунаправленный шлюз MICEXBridge (TEAP).

При такой организации процесса торговли трейдер может рассчитывать на значительный выигрыш по времени. Например, при прямом подключении к фондовому и валютному рынкам Московской биржи время обработки заявки снижается до 0.5 мс, а на рынке FORTS – не превышает 2 мс. При использовании же брокерской системы, заявки обрабатываются за время от 5 -10 мс до 150- 500 мс в зависимости от брокерской системы, типа рынка и способа подключения. Т.е. через брокерские системы заявки обрабатываются в 10-100 раз медленнее, чем при прямом подключении (хотя и такая скорость вполне устраивает большинство торговцев).

Более подробно протоколы передачи финансовых данных мы рассматривали в нашем цикле статей:


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

Заключение: если нужна только информация


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

Список таких API для зарубежных биржевых можно найти по ссылке. В России Московская биржа продает подписки на различные варианты трансляции данных о торгах. В числе других способов есть и полноценный информационный API.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334230/


Метки:  

«Google для смысла»: стартап Node представил платформу для семантического профилирования

Четверг, 27 Июля 2017 г. 10:13 + в цитатник
В начале этой недели Фалон Фатеми (Falon Fatemi), основатель и руководитель проекта, рассказала о новом инвестиционном раунде. В нем принял участие Марк Кьюбан (Mark Cuban), легенда венчурного бизнеса, и ряд фондов (Avalon Ventures, NEA и Canaan Partners).

Общая сумма инвестиций, которые привлек Node, превысила 16 миллионов долларов.

/ фото Ryan Van Etten CC

В 19 лет Фалон устроилась на работу в Google. На тот момент она была самой молодой из 3000 сотрудников (2005 год). Параллельно с этим — получала высшее образование.

Работа в компании заключалась в развитии бизнеса Google на рынках Европы, Ближнего Востока и Африки. Вместе с этим Фалон отвечала за сопровождение стратегических партнеров YouTube и проводила консультации для стартапов. Ожидаемое развитие ситуации — успешная карьера в корпорации, но на этот раз все получилось иначе.

История Node берет начало в 2014 году с аналитического эксперимента. Он заключался в сборе и изучении статистики, отражавшей «результативность» networking'а. Если говорить простыми словами — поиске бизнес-партнеров среди людей, которых познакомила Фалон.

Она выяснила, что результатом более 85% знакомств стали инвестиционные сделки, долговременное сотрудничество и многомиллионные контракты, которые заключили ее коллеги.

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

За 2,5 года работы в «стелс-режиме» Node «заработал» более 100 миллионов долларов для своих клиентов. В качестве примеров сотрудничества стартап рассказывает о помощи тысячам маркетологов и специалистов по развитию бизнеса, представляющих такие компании как BlueJeans Network, Periscope Data, Pagerduty и Outreach.io.

На данный момент известно о том, что Node планирует сосредоточить свое внимание на трех основных направлениях развития для собственной платформы:

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

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

  • Кроссплатформенность — масштабирование и внедрение технологии в различных отраслях.

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

Другие материалы из «Первого блога о корпоративном IaaS»:

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334206/


Метки:  

Без заголовка

Четверг, 27 Июля 2017 г. 10:07 + в цитатник


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

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



Следующий ивент будет особенным. По нескольким причинам.

§ Хардкорная тема


Мы расскажем, как C++ разработчику начать писать под мобилки. Разберём тему с трёх сторон: выясним, зачем следует смотреть на мобилки -> поглядим, как писать под них код -> обсудим, как мигрировать и надо ли это вообще.

§ Программа


DevDay пройдет 11 августа.
18:30 — Препати с чаем, кофе и экскурсией.
19:00 — Кирилл Казаков (главный по мобилкам в «2ГИС») с мобильными трендами.
19:30 — Серёга Хомяков (крайний за Android) с Qt в 2ГИС.
20:10 — Тёма Кудзев (крайний за DevDay) с квартирником. V
20:50 — Афтепати с пивом и пиццей.

§ Квартирник


Это такой дискуссионный формат, где эксперты и участники делятся мнениями друг с другом. Мнения часто бывают (кардинально) разными. Но это и хорошо, потому что картина получается полной и взвешенной. Что нам и надо. Мы с вами обсудим, стоит ли C++ разработчикам переходить на мобилки, как это сделать, да и вообще зачем?



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

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

Увидимся на DevDay!
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334156/


Метки:  

Берегите ваши баллы, или Как противостоять мошенничеству в программах лояльности

Четверг, 27 Июля 2017 г. 10:00 + в цитатник
Первые программы лояльности для пассажиров авиакомпаний появились в начале 1980-х, когда American Airlines решила предложить своим часто летающим клиентам определенные преимущества. Благодаря различным выгодам и преимуществам, которые получают пассажиры, накапливая баллы, а также благодаря возможностям накопления этих баллов с помощью кредитных карт, ценность этих предложений постоянно растет. Зачастую людям удается набрать тысячи баллов, эквивалентные тысячам рублей возможных преимуществ, но многие даже не подозревают, что эти накопленные баллы могут быть похищены.



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

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

Наиболее распространенными видами атак являются попытки фишинга (phishing) – когда пользователь получает на первый взгляд подлинное письмо от программы лояльности. При этом, чтобы установить вредоносное ПО на ваш компьютер или войти со своими реквизитами на поддельный веб-сайт, требуется сделать всего лишь один клик мыши, но в результате этого ваши учетные записи могут будут похищены.

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

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

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

В частности, поставщикам программ лояльности следует следить за тем:

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

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

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

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

Хорошего отдыха, удачных полетов, и берегите ваши баллы!
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/333980/


Метки:  

Нестандартная кластеризация, часть 3: приёмы и метрики для кластеризации временных рядов

Четверг, 27 Июля 2017 г. 09:55 + в цитатник
Пока другие специалисты по машинному обучению и анализу данных выясняют, как прикрутить побольше слоёв к нейронной сети, чтобы она ещё лучше играла в Марио, давайте обратимся к чему-нибудь более приземлённому и применимому на практике.

Кластеризация временных рядов — неблагодарное дело. Даже при группировке статических данных часто получаются сомнительные результаты, что уж говорить про информацию, рассеянную во времени. Однако нельзя игнорировать задачу, только потому что она сложна. Попробуем разобраться, как выжать из рядов без меток немного смысла. В этой статье рассматриваются подтипы кластеризации временных рядов, общие приёмы и популярные меры расстояния между рядами. Статья рассчитана на читателя, уже имевшего дело с последовательностями в data science: о базовых вещах (тренд, ARMA/ARIMA, спектральный анализ) рассказываться не будет.


Здесь и далее $P, Q, R$ — временные ряды со временными отсчётами $t_1 \dots t_n$ и уровнями $x_1 \dots x_n$, $y_1 \dots y_n$ и $z_1 \dots z_n$ соответственно. Значения временных рядов — $x_i, y_i, z_i$ — одномерные вещественные переменные. Переменная $t$ считается временем, но рассмотренные ниже математические абстракции, как правило, применимы и к пространственным рядам (развёрнутая кривая), к сериям символов и последовательностям других видов (скажем, график эмоциональной окрашенности текста). $D(P, Q)$ — функция, измеряющая насколько $P$ отличается от $Q$. Проще всего думать о ней, как о расстоянии от $P$ до $Q$, однако следует помнить, что она не всегда отвечает математическому определению метрики.

Подтипы «похожести» временных рядов


При работе со временными рядами встречаются многие типичные трудности data science: высокая размерность входных данных, пропущенные данные, коррелированный шум. Однако в задаче кластеризации последовательностей есть пара дополнительных трудностей. Во-первых, в рядах может быть разное количество отсчётов. Во-вторых, при работе с последовательными данными, у нас больше степеней свободы в определении того, насколько один элемент похож на другой. Дело тут не только в количестве переменных в экземпляре датасета; сам способ изменения данных во времени, тоже вносит вклад. Это очевидный, но важный момент: мы можем независимо преобразовывать или перенумеровывать значения экземпляров статических данных, но с последовательностями такое не пройдёт. Следовательно, метрики и алгоритмы должны принимать во внимание локальную зависимость данных.



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



Что здесь более важно для исследователя? Средний уровень $y$ или наличие скачков? Если сам $y$, то первое разбиение 1234/5678 подходит лучше, если его изменения, то лучшим окажется 1278/3456. Более того, важно ли, когда именно происходит скачок? Может стоит разбить группу 3456 на подгруппы 34 и 56? В зависимости от того, что именно есть $y$, на эти вопросы можно дать разные ответы.

Поэтому в связи с возможными семантическими отличями данных полезно выделять несколько типов подобия, которые могут встречаться в практических задачах[1]

  • Ряды похожие во времени. Самый простой тип подобия. Мы ищем ряды, где особые точки и интервалы возрастания точно или почти точно соответствуют друг другу во времени. При этом, не обязательно, чтобы значения экстремумов и наклоны кривых точно друг с другом совпадали, лишь бы были близки в среднем. Такой тип подобия возникает, например, в задачах анализа рынка, когда мы хотим обнаружить кластеры компаний, акции которых падают и возрастают вместе. На представленном ниже рисунке графики 1 и 2 похожи во времени.
  • Ряды похожие по форме. Мы ищем ряды имеющие одинаковые характерные особенности, но не налагающиеся друг на друга. Они могут быть как просто разнесены по времени, так и растянуты или ещё как-то преобразованы. Такой тип подобия встречается, например, при кластеризации звуковых сэмплов — невозможно произнести одну и ту же фразу в абсолютно одинаковом темпе. Графики 3 и 4 на рисунке похожи по форме.
  • Ряды похожие по структуре. Поиск последовательностей с одинаковыми законами изменения; как глобальными — периодичность (5 и 6), тренд (7 и 8) — так и локальнами, например, сколько раз в последовательности встречается определённый паттерн.



Чёткое понимание, какой тип подобия характерен для вашей задачи — неотъемлемая часть в создании осмысленных кластеров.

Приёмы по представлению данных


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

  • Наилучший случай — когда заранее известна математическая модель, которой отвечают данные (например, дано, что последовательность представляет собой сумму конечного набора функций и шума, или известна порождающая модель). Тогда стоит перевести последовательности в пространство параметров модели, и кластеризировать уже в нём[17]. К сожалению, такое счастье выпадает редко.
  • Стоит посмотреть, насколько хороший результат можно получить, собрав по датасету простые статистические показатели:

    • минимум, максимум, средний и медианный элементы (после сглаживания)
    • количество пиков и впадин
    • дисперсия элементов
    • площадь под графиком (до нормализации и вычитания среднего, если есть желание их провести)
    • сумма квадратов производной
    • показатель тренда
    • коэффициенты ARIMA, если применимо[2]
    • количество пересечений отметок в 25-ый, 50-ый, 75-ый перцентиль, пересечений среднего и нуля

    Даже если кластеризация одних лишь статистических сводок по рядам не даст хороших результатов, попробуйте прикрепить эти глобальные параметры к исходным данным. Это поможет разделять ряды с подобием по структуре.
  • Можно попытаться применить подход bag of features. Характерные формы можно как задать и найти вручную, так и определить автоматически при помощи автоэнкодера. Вообще, подходы, основанные на кластеризации подпоследовательностей пережили в недавнем времени взлёт и падение популярности. Было показано, что слишком часто они производят бессмысленные результаты. Но если вы точно уверены что ряды из датасета имеют какие-то характерные подпоследовательности, дерзайте[3].
  • Если не хочется возиться с частотной областью, но тем не менее, мысль кластеризировать ряды исходя из цикличных особенностей кажется здравой, попробуйте преобразовать ряд в автокорреляционную область и группировать данные уже в ней.



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

  • Если данные шумные или имеют очень большую размерность, то стоит их проредить. Воспользуйтесь вашим любимым методом поинтервальной интерполяции (самое простое — линейное приближение, Piecewise Linear Approximation, PLA, или поинтервальная интерполяция сплайнами) или алгоритмом поиском особых точек (Perceptually Important Points, PIP).
  • В случае очень шумных данных также можно построить верхнюю и нижнюю огибающую для каждой временной последовательности, и кластеризовать уже получившиеся пары. Вместо одного ряда получается два, что совсем не выглядит как упрощение, но будучи применённым по назначению, такой подход делает данные более понятными как для человека, так и для компьютера[4].
  • В биоинформатике и обработке символьных последовательности часто бывает полезно применить к ряду кодирование символами (Symbolic Approximation, SAX).
  • Частотные показатели. Дискретное преобразование Фурье, вейвлет-преобразование, косинусное преобразование. Это не самый лучший вариант, так как мы от одной последовательности переходим к другой, часто ещё более непонятной, но иногда может помочь. Кстати, если преобразование Фурье настолько хорошо помогает, возможно, стоит воспользоваться и другими инструментами цифровой обработки сигналов.

Метрики


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

  • Евклидово или $L_1$-расстояние. Эти любимые всеми метрики работают только в случае поиска рядов похожих во времени. Да и в этом случае, они могут выдавать сомнительные результаты, если последовательности длинные или шумные. Но раз в год и shuffle sort стреляет.

    Тривиальным улучшением $L_1$/$L_2$-метрики является её ограничение сверху, мягкое или жёсткое: создание максимального порога для вклада разницы между уровнями отсчётов с одним $t$. Применяйте его, если ожидаете, что одинарные отсчёты-выбросы могут испортить массив расстояний.

    Пример жёсткого ограничения:

    $ \hat{L_2}(x_i, y_i)=\begin{cases} L_2(x_i, y_i), L_2(x_i, y_i) < \sigma \\ \sigma, L_2(x_i, y_i) \geq \sigma \end{cases}$


    Пример мягкого ограничения (вблизи нуля функция ведёт себя как $L_2$, но при большой разнице между $x_i$ и $y_i$ выходит на уровень):

    $\hat{L_2}(x_i, y_i)= \frac{(x_i - y_i)^2}{1 + (x_i - y_i)^2}$


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

  • Минимальная прыжковая стоимость (Minimum Jump Cost, MJC)[5]. Интересная функция непохожести, имеющая простой интуитивный смысл. Мы ставим графики вровень друг к другу, после чего двигаемся слева направо, перепрыгивая с одного графика на ближайшую (в некотором смысле) точку другого и обратно. При этом накладывается ограничение, что можно выбирать только точки, находящиеся вперёд по времени. Длина проделанного пути и будет представлять собой MJC.



    Формальное определение авторами статьи:

    $MJC_{XY} = \sum_{i}{c^i_{min}}$

    $c^i_{min} = \min{( c^{t_y}_{t_x}, c^{t_{y}+1}_{t_x}, \dots c^{t_{y}+N}_{t_x} )}$

    $c^{t_{y}+\Delta}_{t_x} = (\phi\Delta)^2 + (x_{t_i} - y_{t_y + \Delta})^2$

    $\phi = \beta\frac{4\sigma}{\min{(M, N)}}$


    Где $\phi$ — стоимость продвижения во времени, желательно сделать его пропорциональным $\sigma$, стандартному отклонению распределения уровней в последовательностях, и обратно пропорциональным размеру сравниваемых рядов. $\beta$ — управляющий параметр, чем меньше $\beta$, тем эластичнее получается мера. При $\beta=0$ прыжок будет совершён на самый близкий по значению уровень вне зависимости, где он находится; при $\beta \rightarrow \infty$ прыжок по сути всегда будет совершаться на точку с $t_{i+1}$.

    Несложно заметить, что функция получилась асимметричной, но это можно исправить, если положить $MJC(P,Q)$ = $\min(MJC_{XY}(P,Q),$ $MJC_{XY}(Q,P))$ или $MJC(P,Q)$ = $\frac{MJC_{XY}(P,Q) + MJC_{XY}(Q,P)}{2}$

    $\beta$ имеет смысл подбирать таким образом, чтобы избежать ситуации, когда ближайшей по $c^i_{min}$ оказывается точка где-нибудь в конце ряда, и алгоритм «проскакивает» весь ряд (см. рисунок). Конкретные значения зависят от амплитуды значений $y$ и $t$.



    Собственно, коварное «в некотором смысле» парой абзацев выше относится именно к $\phi$: $c^{t_{y}+\Delta}_{t_x}$ получилась перекошенной. На самом деле, не обязательно останавливаться на простом перевзвешивании евклидовой метрики. Почему бы не заменить $(\phi\Delta)^2$ на $(\phi\Delta)^4$ с корректированием $\beta$? (Подумать, как это скажется на поведении $MJC(P,Q)$ — задача для любопытного читателя ;))

    MJC — развитие идеи евклидовой метрики с верхней границей на вклад отсчётов. Если в $\hat{L_2}$ выбросы вносят фикисрованный вклад, то в MJC играет роль предыстория ряда. В самом простом случае штраф возрастает квадратично. Более того, какой уровень считается выбросом для данной пары рядов, определяется автоматически. Полная история чуть сложнее, но будет не слишком большим искажением резюмировать, что MJC «прощает» единичные выбросы, но выдаёт большое значение чем $\hat{L_2}$, если в рядах есть длинные сильно различающиеся участки.



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

  • Кросс-корреляция. Эту меру близости следует использовать когда особые точки и интервалы в рядах могут быть сдвинуты во времени друг от друга, но сдвиг фиксированный — внутреннее расстояние между важными элементами сохраняется. Характерные точки могут появляться и исчезать, плюс, сравниваемые временные ряды могут быть разной длительности. Отличный выбор, если известно, что структура последовательностей не искажена во времени («жёсткое» подобие по форме). Также в этом случае можно просто-напросто посчитать $L_2$ для каждого возможного смещения одного ряда относительно другого.

    Изредка кросс-корреляция очень выручает, но, как правило, где смещение, там и искажения. Так что гораздо чаще используется…

  • Динамическая трансформация временной шкалы (Dynamic Time Warping, DTW).

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

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

    Формальное описание алгоритма можно прочитать на Википедии, я же попробую полуформально пройти по основным пунктам. Возьмём две последовательности $P=\{2, 6, 5, 3, 2\}$; $Q=\{1,2,4,1,1\}$. Они имеют похожую форму, но их пики смещены друг относительно друга. Посчитаем матрицу расстояний $d$ между каждой парой уровней. На этом шаге обычно используется обычный $L_1$ или $L_2$. После чего построим матрицу трансформаций $D$. Будем заполнять её слева-направо, сверху-вниз, по правилу $D_{i,j} = d_{i,j} + \min{(D_{i,j}, D_{i-1,j}, D_{i,j-1})}$. $D_{1, 1} = d_{1,1}$, для верхнего столбца и левого ряда части членов в $\min$ нет.

    Построим путь из $D_{M, N}$ в $D_{1, 1}$, каждый раз переходя в клетку с как можно меньшим числом. Каждая посещённая клетка $(i, j)$ будет означать, что при оптимальной трансформации точка $j$ первого ряда отображается на $j$-тую точку второго. Стоимость такой трансформации складывается из разницы между уровнями этих точек и стоимости оптимальной трансформации всех точек до этой пары. Можно сопоставлять одной точке несколько других, но двигаться будем только влево, вверх либо (желательно) влево-вверх, чтобы был прогресс.

    Таких путей можно построить много, но оптимальным из них будет тот, который минимизирует $\frac{\sum^K_i{d_{i, j}}}{K}$, где K — длина пути, а $d_{i, j}$ — значение в матрице расстояний.

    DTW — замечательная функция для вычисления различия временных рядов, фактически baseline для сравнения c другими метриками. Она широко используется как в задачах сопоставления отрезков звука таки и при сопоставлении участков генома. Смело применяйте её, когда ряды должны быть похожи по форме, но ничего неизвестно про максимальную величину сдвига или искажения. Тем не менее, и у неё есть недостатки. Во-первых, она долго считается и/или требует дополнительной памяти, во-вторых DTW не всегда показывает адекватное расстояние, при добавлении в последовательность новых характерных точек. Что ещё хуже, не так просто прикинуть на глазок, как изменение одного из рядов скажется на пути по $D$.

    Стоит упомянуть про функцию близости Edit Distance with Real Penalty (ERP) с похожим поведением, но более снисходительно относящуюся к отсчётам-выбросам, которые не удаётся сопоставить. Кроме того, нельзя обойти стороной Time Warp Edit Distance with Stiffness (TWED)[6]. Авторы этой метрики разработали более общий подход к описанию функций близости, основанных на операциях delete-match-insert (алгоритм Вагнера-Фишера снова передаёт привет), так что DTW и ERP — частные случаи TWED.

    ERP и TWED — параметрические; DTW — нет. С одной стороны, это удобно, с другой стороны иногда такая бесконечная эластичность вредит. Существует быстрая версия DTW, версия для разреженных данных, и огромное количество реализаций этого алгоритма.

  • Длиннейший общий отрезок/длиннейшая общая подстрока (Longest Common Distance, LCD / Longest Common Subsequence, LCSS). LCSS находит применение в последовательностях, где значения отсчётов — метки классов, или где просто малое количество уровней. В последнем случае, LCSS можно модифицировать, чтобы находить длиннейший отрезок, на котором разность значений рядов меньше некоторого порога.

  • Дискретное расстояние Фреше, оно же сцепленное расстояние. Полуформально объяснение звучит так: будем двигать точку A по последовательности P, а точку B — по Q, возможно неравномерно. В таком случае, расстоянием Фреше между P и Q будет минимально возможное расстояние между A и B, с которым можно провести обе точки через кривые. Бррр… лучше посмотрите пример с собакой на поводке в Википедии. В нашем случае $Fr(P, Q) = \max_i{|x_i - y_i|}$, но возможны модификации. Подходит для редких случаев, когда известно, что в датасете нет отсчётов-выбросов, но есть вертикально смещённые друг относительно друга ряды одинаковой формы.

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

  • Расстояние с поправкой на сложность (Complexity Invariant Distance, CID)[7]

    Иногда бывает полезно вводить в метрику дополнительные факторы, помогающие разрешать спорные случаи. Например, бывает так, что ряды P и Q совпадают друг с другом на протяжении почти всего отрезка времени, но сильно отличаются в нескольких точках, а ряд R совсем не похож на ряд P по форме, но, тем не менее, близок к нему в среднем. Как правило, мы бы хотели считать P и Q как более похожие друг на друга.



    В качестве дополнительного фактора можно взять «сложность» последовательности. Если кривые P, Q и R имеют одинкавое попарное расстояние, но кривые P и Q вдобавок одинаковую «сложность», то будем счиать P и Q более похожими.

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

    $CID(P, Q) = D(P, Q) \times CF(P, Q) $

    $CF(P, Q) = \frac{\max(CE(P), CE(Q))}{\min(CE(P), CE(Q))} $

    $CE(Q) = \sum^m_{i=1}{\sqrt{(y_{i} - y_{i-1})^2 + (t_{i} - t_{i-1})^2}}$


    Где $D(P, Q)$ — основная метрика (в статье использовалась евклидово расстояние). Для рядов с одинаковым расстоянием между отсчётами возможно упрощение — сумма квадратов производной:

    $CE(Q) = \sqrt{\sum^m_{i=1}{(y_{i} - y_{i-1})^2}}$





    Авторы приводят в статье довольно странные примеры с серией чисел, образованной «обкаткой» плоской фигуры вокруг — не совсем конвенциональное использование рядов — но утверждают, что CID стабильно немного ($\approx2\%$) лучшает результаты и на других задачах.

  • Расстояние с поправкой на взаимную компрессию (Compression Rate Distance, CRD)[8]

    Создатели CRD, применяют теоретико-информационный подход для модификации $D(P, Q)$. Уровни последовательностей дискретизуются, затем используется функция информационной энтропии, чтобы посчитать насколько сложно восстановить $Q$, имея $P$. Если нужно мало дополнительной информации, чтобы это сделать, то будем считать $P$ и $Q$ более похожими друг на друга в контексте кластеризации. Вообще говоря, посчитать такую «взаимную архивируемость» можно разными способами, но самый простой — вычислить энтропию от их дискретизированной разности.

    $ \forall t_i \leftarrow round[\frac{t_i - \min{T}}{\max{T} - \min{T}}(2^b - 1)] + 1$

    $E(Q) = -\sum_t{P(T=t)\log_2{P(T=t)}}$

    $DL(Q) = len(Q) \times E(Q)$

    $CR(P, Q) = \frac{DL(Q-P)}{\min{(DL(Q), DL(P))} + \epsilon}{}$


    И, наконец:

    $CRD(P, Q) = D(P, Q) \times CR(P, Q)^\alpha$


    или:

    $ECRD(P, Q) = D(P, Q) \times (1 + CR(P, Q))^\alpha$


    Где $\alpha$ — степень влияния CRD, а $\epsilon$ позволяет избежать деления на ноль. В качестве $D$ в статье использовалась евклидова метрика. Авторы провели эксперименты с $\epsilon = 0.0001, \alpha = 2$ и $\epsilon = 0.0001, \alpha = 5$ на наборах данных с UCR Time Series Data Mining Site. Утверждается, что CRD в среднем рабоает немного лучше, чем просто евклидово расстояние ($\approx4\%$) и евклид с CID ($\approx2\%$). Также говорится, что евклидова метрика + CRD работает на тестовых датасетах чуть-чуть лучше, чем DTW, но представленные графики, на мой взгляд, не очень убедительны. Кроме того, авторы рассмотрели несколько дополнительных возможностей и свойств CID: ранний останов в вычислении расстояния, неравенство треугольника и нижнее ограничение на CID для децимированной последовательности.

    CRD-поправку можно использовать и как самостоятельную метрику в задаче кластеризации последовательностей символов, но вряд ли такое выйдет, когда $y$ — действительная переменная. Дело в том, что CRD выдаёт малые значения, когда $P$ и $Q$ имеют мало возможных уровней вертикального смещения друг относительно друга. При этом неважно, как именно расположены отсчёты этих рядов, для которых выполняется каждое отдельное отличие. Ряды на рисунках 1 и 2 имеют одинаковое значение CRD, так как и в том, и в другом случае их разность имеет ровно один уровень. Ряды на рисунках 3 и 4 тоже имеют одинаковый CRD, хоть и больший, чем в 1 и 2 случаях. Здесь есть два уровня возможной разницы. Неважно, как они расположены — последовательно или вразнобой. Заметьте, что CID бы показал, что в четвёртом случае красный график заметно сложнее синего.



    При использовании CRD играют важную роль выделение тренда и использование дополнительных предположений, за счёт которых можно «взаимно архивировать» ряды. Так, ряды на графиках 5 и 6 по умолчанию имеют одинаковое компрессионное расстояние, но если в шестом случае выделить тренд, картина изменится.

  • Расстояние Махаланобиса[9]

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

    $D(P, Q) = \sqrt{(x - y)^T S^{-1} (x - y)}$


    Где S — матрица ковариаций. В случае диагональной матрицы ковариаций формула приобретает более простой вид:

    $D(P, Q) = \sqrt{\sum_i \frac{(x_i - y_i)^2}{\sigma_i^2}}$


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


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


Заключение


Увы, я не нашёл адаптированных алгоритмов кластеризации последовательных данных, о которых бы было интересно поведать. Быть может, я чего-то не знаю, но несколько вечеров, проведённых в ArXiv и IEEE, не принесли мне прозрения. Складывается ощущение, что учёные ограничиваются лишь исследованием новых метрик для сравнения временных рядов, но не горят желанием изобретать специализированные алгоритмы. Вся хитрость происходит на этапе вычислении матрицы расстояний, а само разбиение на группы проводится старыми добрыми алгоритмами для статических данных: производные k-means, DBSCAN, Affinity propagation, тривиальная иерархическая кластеризация и прочими. Есть несколько, на которые можно взглянуть[10][11][12][13], но не то чтобы их результаты намного лучше старых методов.

K-means даёт приличные результаты реже, чем в случае статических данных. Некоторым исследователям удавалось успешно применять DBSCAN, но для него очень нетривиально подобрать хорошие параметры: основная область его применения — отнюдь не временные ряды. Гораздо интереснее выглядят два последних кандидата в списке, особенно часто применяется иерархическая кластеризация[14][15][16]. Также современные подходы предополагают вычисление и комбинирование нескольких матриц расстояния при помощи разных метрик.

Резюме. У вас в руках пачка временных рядов, и вы не знаете, что с ней делать?

Первым делом проверьте нет ли в данных пропущенных значений или явных отсчётов-выбросов. Затем попробуйте вывести часть датасета и посмотреть

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

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

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

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

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

Источники


[1] Saeed Aghabozorgi, Ali Seyed Shirkhorshidi, Teh Ying Wah — Time-series clustering – a Decade Review
[2] Konstantinos Kalpakis, Dhiral Gada, and Vasundhara Puttagunta — Distance Measures for Effective Clustering of ARIMA Time-Series.
[3] Subsequence Time Series (STS) Clustering Techniques for Meaningful Pattern Discovery
[4] Li Junkui, Wang Yuanzhen, Li Xinping — LB HUST: A Symmetrical Boundary Distance for Clustering Time Series
[5] Joan Serria, Josep Lluis Arcos — A Competitive Measure to Assess the Similarity Between Two Time Series
[6] P.F. Marteau — Time Warp Edit Distance with Stiffness Adjustment for Time Series Matching
[7] Gustavo E.A.P.A. Batista, Xiaoyue Wang, Eamonn J. Keogh — A Complexity-Invariant Distance Measure for Time Series
[8] Vo Thanh Vinh, Duong Tuan Anh — Compression Rate Distance Measure for Time Series
[9] Dinkar Sitaram, Aditya Dalwani, Anish Narang, Madhura Das, Prafullata Auradkar — A Measure Of Similarity Of Time Series Containing Missing Data Using the Mahalanobis Distance
[10] John Paparrizos, Luis Gravano — K-Shape: Efficient and Accurate Clustering of Time Series // Fast and Accurate Time-Series Clustering
[11] Leonardo N. Ferreiraa, Liang Zhaob — Time Series Clustering via Community Detection in Networks
[12] Zhibo Zhu, Qinke Peng, Xinyu Guan — A Time Series Clustering Method Based on Hypergraph Partitioning
[13] Shan Jicheng, Liu Weike — Clustering Algorithm for Time Series Based on Peak Interval
[14] Sangeeta Rani — Modified Clustering Algorithm for Time Series Data
[15] Pedro Pereira Rodrigues, Joao Gama, Joao Pedro Pedroso — Hierarchical Clustering of Time Series Data Streams
[16] Finding the Clusters with Potential Value in Financial Time Series based on Agglomerative Hierarchical Clustering
[17] Goktug T. Cinar and Jose C. Principe — Clustering of Time Seriess Using a Hierarchical Linear Dynamical System
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334220/


Метки:  

CASL. Авторизация для JavaScript приложения

Четверг, 27 Июля 2017 г. 09:49 + в цитатник

В наше время почти каждое приложение имеет понятие прав доступа и предоставляет различные функции для разных групп пользователей (например, admin, member, subscriber и т.д.). Эти группы обычно называются "роли".


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


CASL — это библиотека для авторизации в JavaScript, которая заставляет задумываться о том, что пользователь может делать в системе, а не какую роль он имеет (проверка звучит так: если пользователь имеет эту способность, то он может сделай это). Например, в приложении для блогинга пользователь может создавать, редактировать, удалять, просматривать статьи и комментарии. Давайте разделим эти способности между двумя группами пользователей: анонимными пользователями (теми, кто не идентифицировался в системе) и писателями (теми, кто идентифицировался в системе).


Анонимные пользователи могут только читать статьи и комментарии. Писатели могут делать то же самое плюс управлять своими статьями и комментариями (в этом случае "управлять" означает создавать, читать, обновлять и удалять). При помощи CASL это можно записать вот так:


import { AbilityBuilder } from 'casl'

const user = whateverLogicToGetUser()
const ability = AbilityBuidler.define(can => {
  can('read', ['Post', 'Comment'])

  if (user.isLoggedIn) {
    can('create', 'Post')
    can('manage', ['Post', 'Comment'], { authorId: user.id })
  }
})

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


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


can('delete', 'Post', { 'comments.0': { $exists: false } })

Проверяем возможности


Существует 3 метода у экземпляра Ability, которые позволяют проверять права доступа:


import { ForbiddenError } from 'casl'

ability.can('update', 'Post')
ability.cannot('update', 'Post')

try {
  ability.throwUnlessCan('update', 'Post')
} catch (error) {
  console.log(error instanceof Error) // true
  console.log(error instanceof ForbiddenError) // true
}

Первый метод вернет false, второй true, а третий выбросит ForbiddenError для анонимного пользователя, так как они не имеют права обновлять статьи. В качестве второго аргумента, эти методы могут принимать экземпляр класса:


const post = new Post({ title: 'What is CASL?' })

ability.can('read', post)

В этом случае can ('read', post) возвращает true, потому что в способностях мы определили, что пользователь может читать все статьи. Тип объекта вычисляется на основе constructor.name. Его можно переопределить создав статическое свойство modelName на классе Post, это может понадобится если для продакшн сборки используется минификация имен функций. Также можно написать свою функцию по определению типа объекта и передать ее как опцию в конструктор Ability:


import { Ability } from 'casl'

function subjectName(subject) {
  // custom logic to detect subject name, should return string or undefined
}

const ability = new Ability([], { subjectName })

Давайте теперь проверим случай, когда пользователь пытается обновить статью другого пользователя (я буду ссылаться на идентификатор другого автора как anotherId и к идентификатору текущего пользователя как myId):


const post = new Post({ title: 'What is CASL?', authorId: 'anotherId' })

ability.can('update', post)

В этом случае can('update', post) возвращает false, поскольку мы определили, что пользователь может обновлять только свои собственные статьи. Конечно же, если проверить то же самое на собственной статье то получим true. Подробнее о проверках прав доступа можно посмотреть в разделе Check Abilities в официальной документации.


Интеграция с базой данных


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


Для конвертации прав доступа в Mongo запрос существует toMongoQuery функция:


import { toMongoQuery } from 'casl'

const query = toMongoQuery(ability.rulesFor('read', 'Post'))

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


// { $or: [{ authorId: 'myId' }] }
const query = toMongoQuery(ability.rulesFor('update', 'Post'))

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


Также CASL предоставляет плагин под mongoose, который добавляет accessibleBy метод к моделям. Этот метод под капотом вызывает функцию toMongoQuery и передает результат в метод find mongoose-a.


Пример использования с mongoose
const { mongoosePlugin, AbilityBuilder } = require('casl')
const mongoose = require('mongoose')

mongoose.plugin(mongoosePlugin)

const Post = mongoose.model('Post', mongoose.Schema({
  title: String,
  author: String,
  content: String,
  createdAt: Date
}))

// by default it asks for `read` rules and returns mongoose Query, so you can chain it
Post.accessibleBy(ability).where({ createdAt: { $gt: Date.now() - 24 * 3600 } })

// also you can call it on existing query to enforce visibility.
// In this case it returns empty array because rules does not allow to read Posts of `someoneelse` author
Post.find({ author: 'someoneelse' }).accessibleBy(ability, 'update').exec()

По умолчанию accessibleBy создаст запрос на базе read прав доступа. Чтобы построить запрос для другого действия, просто передайте его вторым аргументом. Более детально можно посмотреть в разделе Database Integration.


И напоследок


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

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334076/


Метки:  

[Перевод] Почему хорошие люди покидают крупные IT-компании?

Четверг, 27 Июля 2017 г. 09:41 + в цитатник

Если ты хочешь построить корабль, не надо созывать людей,
планировать, делить работу, доставать инструменты.
Надо заразить людей стремлением к бесконечному морю.
Антуан де Сент-Экзюпери

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

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

Лучше бы я этого не делал.

Переведено в Alconost

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

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

Большая часть сотрудников этой компании занята в производстве, однако группа этого инженера состояла из опытных разработчиков ПО. Учитывая, что они могут получить новую работу, просто показавшись в местной кофейне, я был поражен ответом финансового директора: «Печально, но нам нужно больше места. Им повезло работать у нас. И если они уйдут, то, по крайней мере, смогут похвастаться именем нашей компании в своем резюме».

ШТА?! Я не был уверен, кто из нас был более шокирован – инженер или я.

После ухода главного инженера, я, должно быть, выглядел весьма удивленным, поскольку финансовый директор сказал мне следующее: «У нас десятки тысяч сотрудников, и при нашем темпе роста практически невозможно использовать и дальше те помещения, которые у нас есть в области залива. Ты знаешь, с первого дня наш генеральный внедрял политику «люби нас или уходи от нас». (По совпадению, генеральный был моим интерном в одном из моих стартапов более двух десятков лет назад.) Я спросил: «А теперь, когда компания стала публичной и такой большой, политика изменилась?» Ответ финансового директора был таков: «Нет, наш генеральный верит, что наша миссия состоит в том, чтобы изменить мир. И нужно действительно хотеть работать здесь, иначе придется уйти. И раз уж мы получаем море резюме от людей, которые хотят работать на нас, он не видит причин для изменений».

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

Контроль взрослыми


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

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

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

Проблема была в том, что в какой-то момент после того, как был нанят тысячный сотрудник, закончились большие выплаты от первичных ценных бумаг и от последующих взносов от их первичного размещения. Но CEO ни разу не заметил, что для 95% его компании выплаты закончились. Летая в отдаленные офисы компании на частном самолете в окружении сотрудников, которые присоединились к нему в самом начале и которые сейчас стоят десятки миллионов долларов, генеральный даже не задумывается, что мантра «нужно действительно хотеть работать здесь, иначе придется уйти» не имеет никакого смысла для новоприбывших сотрудников.

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

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

Сигнал к пробуждению


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

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

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

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

Постскриптум


Я смог поделиться этой историей только сейчас, потому что инженер ушел из компании и основал собственный стартап в другом сегменте рынка. В течение следующих шести месяцев уволились 55 из 70 сотрудников его группы, которых попросили переехать. Из них 25 присоединились к его новому стартапу. А что же с оставшимися 30? Появилось 6 новых стартапов.

Извлеченные уроки


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

О переводчике

Перевод статьи выполнен в Alconost.

Alconost занимается локализацией приложений, игр и сайтов на 68 языков. Переводчики-носители языка, лингвистическое тестирование, облачная платформа с API, непрерывная локализация, менеджеры проектов 24/7, любые форматы строковых ресурсов, перевод технических текстов.

Мы также делаем рекламные и обучающие видеоролики — для сайтов, продающие, имиджевые, рекламные, обучающие, тизеры, эксплейнеры, трейлеры для Google Play и App Store.

Подробнее: alconost.com
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334228/


СХД Infortrend — альтернатива А-брендам. Обзор и тестирование

Четверг, 27 Июля 2017 г. 08:38 + в цитатник
Системы хранения данных все чаще используются в IT-инфраструктуре сегмента малого и среднего бизнеса. Рабочие места мигрируют в виртуальную среду, а для хранения данных уже не достаточно обычной «файловой помойки» в виде старого железа набитого дисками. Поэтому для многих небольших компаний рано или поздно встаёт вопрос выбора Enterprise СХД начального уровня. Задачи перед системой хранения становятся типовые: обеспечить необходимую производительность, отказоустойчивость и совместимость с существующей IT-инфраструктурой. Но, к сожалению, решающим фактором выбора является обоснованность стоимости решения.
У производителей первого эшелона есть подходящие продукты, отвечающие всем требованиям к функционалу и уровню сервиса. Но вот с совместимостью и стоимостью владения подобных решений есть определённые трудности. Поэтому данная статья посвящена альтернативе А-брендам — системе хранения данных Infortrend.
Infortrend — это представитель Тайваньских производителей с узкой специализацией на системы хранения данных. За более чем 20-летний период работы по проектированию и производству собственных СХД, Infortrend создал продукт, успешно конкурирующий с представителями крупных мировых брендов.


Основная продуктовая линейка Infortrend


EonStor GS — унифицированное SAN и NAS хранилище с файловым, блочным и объектным доступом в рамках одного устройства.

EonStor GSe — 1-контроллерный бюджетный вариант EonStor GS

EonServ — гибридные решения, классический x86-сервер + программный RAID Infortrend.

EonStor DS — наиболее распространённая линейка СХД. Представляет собой классический SAN с блочным доступом, функционал и производительность которого мы рассмотрим далее в этой статье на примере модели Infortrend ESDS 3012 Gen2.

Спецификация стенда


Система хранения данных Infortrend ESDS 3012 Gen2 в составе:
Форм-фактор: 2U Rackmount (глубина — 529 мм)
Набор для монтажа в 19" стойку. Расстояние между рамами от 24" до 36"
    Dual RAID controller (High IOPS)
RAID level 0, 1(0+1), 3, 5, 6, 10, 30, 50, 60
    4GB DDR-III Dual Controller (опционально до 32GB DDR-III Dual Controller)
    2 x Модуль FBWC
    Host-порты штатные: (4 + 4) x 1GbE — RJ-45 (iSCSI)
    Host-порты опциональные: (2 + 2) x 10GbE — RJ-45 iSCSI
                                (4 + 4) x 1GbE — RJ-45
                                (2 + 2) x 10GbE — SFP+ (iSCSI)
                                (4 + 4) x 8/4/2Gb FC
                                (2 + 2) x 16Gb FC
                                (4 + 4) x 8Gb FC / (2 + 2) x 16Gb FC / (4 + 4) x 10Gb iSCSI (converged)
                                (2 + 2) x 6Gb x4 SAS
                                (2 + 2) x 12Gb SAS
    Порты расширения: (1 + 1) x SAS 6G x4
      До 312 HDD в одной системе (с подключением дополнительных JBOD Infortrend)
      12 дисковых отсеков HotSwap SerialATA/SAS
      4 х SSD 200GB SATA 6G eMLC NAND Enterprise (84K/12K R/W IOps, 550/230 MB/s R/W, 1.1PB ресурс записи)
      8 х HDD 6000GB SAS 12G 7200rpm
      Отказоустойчивый БП с возможностью горячей замены 1+1 530Вт
      CacheSafe
      Multi-pathing
      Thin Provisioning
      Automated Storage Tiering (опционально 2 tiers / 4 tiers)
      Local replication
      Advanced Local Replication: Snapshot and Volume Copy/Mirror (опционально)
      Remote Replication (опционально)

      Управление: SANWatch management suite, Terminal via RS-232C, Telnet/SSH, LCD keypad panel
      Уведомления: Email, Fax, LAN broadcast, SNMP traps, SMS, Skype
      SSD Cache
      Гарантия Infortrend 36 месяца. Ремонт и обслуживание в сервисном центре STSS.

Фото-отчёт




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



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



Контроллеры СХД этой серии поддерживают установку одной платы хост-интерфейсов.



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



Корзины для дисков универсальные — позволяют устанавливать как 2,5", так и 3,5" диски без использования дополнительных переходников.



Уникальная особенность систем хранения данных Infortrend — это использование SATA-дисков в 2-контроллерных конфигурациях. Это реализуется при помощи специализированной платы, которая позволяет имитировать 2 порта на одном SATA интерфейсе, что обеспечивает подключение к двум контроллерам для отказоустойчивости.



Например, для построения бюджетного решения с высоким уровнем IOPS, в данной СХД можно использовать классические Enterprise SSD с SATA интерфейсом.



Тестирование


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

Конфигурации:

1. RAID10: 4 x Intel SSD 200Gb S3610

2. RAID5: 8 x Seagate HDD SAS 6000Gb, Enterprise Capacity 3.5, SAS 12Gb/s, 7200 rpm, 128Mb buffer

3. RAID5 + SSD Cache: 8 x Seagate HDD SAS 6000Gb, Enterprise Capacity 3.5, SAS 12Gb/s, 7200 rpm, 128Mb buffer + 1 х Intel SSD 200Gb S3610

4. RAID6: 8 x Seagate HDD SAS 6000Gb, Enterprise Capacity 3.5, SAS 12Gb/s, 7200 rpm, 128Mb buffer

5. RAID6 + SSD Cache: 8 x Seagate HDD SAS 6000Gb, Enterprise Capacity 3.5, SAS 12Gb/s, 7200 rpm, 128Mb buffer + 1 х Intel SSD 200Gb S3610

Сценарии нагрузки:

1. База данных
Access 100% / Read 67% / Random 100%


2. Файловое хранилище
Access 2-60% / Read 80% / Random 100%


3. VDI
Access 100% / Read 20% / Random 80%


4. WEB-сервис
Access 1-23% / Read 100% / Random 100%



Сводная таблица результатов:



Далее рассмотрим сравнительные графики.
Результаты SSD и HDD помещать в один график бессмысленно и нечитабельно — теряется разница между режимами HDD, но один график я всё же оставлю.



И вот почему. Есть заказчики, которые для базы данных сравнительно небольшого размера, но с большим количеством пользователей, выбирают массивы на HDD и пренебрегают использованием SSD. В качестве доводов приводят «низкий» ресурс твердотельных дисков и «высокую» надёжность SAS HDD. А чтобы «повысить» производительность берут диски не 7,2K, а SAS 15K. В нынешних же реалиях, согласно статистике, вероятность выхода из строя шпиндельного диска, молотящего на скорости 15000 оборотов в минуту, гораздо выше, чем у серверного SSD с гигантским ресурсом перезаписи и не имеющего движущихся элементов.
И этот график, в дополнение, отражает пропасть в производительности между массивом SSD и HDD, причём не важно какие диски используются — SSD выдадут результат минимум на порядок лучше (при использовании SAS SSD производительность будет ещё выше).

Так как мы тестируем всё таки СХД, а не диски, рассмотрим подробнее производительность массивов в различных режимах.





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

Преимущества СХД Infortrend


Не буду высасывать из пальца, а напишу откровенно — преимуществ всего 2:

1. СХД Infortrend поддерживает большинство моделей классических Enterprise-дисков, доступных на рынке. Это значит во-первых — нет необходимости переплачивать, в момент покупки СХД, за брендированные (те же самые) диски, как в случае с А-брендами, и во-вторых — нет проблем с заменой негарантийных дисков в будущем, через 3-5 и т.д. лет эксплуатации. На рынке всегда найдётся подходящая замена, и не придётся покупать брендированные диски через сервисный канал в разы дороже современных аналогов.

2. Как я уже упоминал — Infortrend без проблем (с определённой потерей производительности) работает с SATA Enterprise-дисками как SDD, так и HDD. Но, использовать SATA HDD не выгодно, т.к. стоимость SATA диска + MUX-карта = стоимости NL SAS, такого же объёма. А вот с SSD ситуация другая — мало того, что SAS SSD пока редкость, так и стоят они существенно дороже SATA-аналогов. К тому же, по ресурсу перезаписи SAS SSD не захватывают сегмент корпоративных накопителей начального и среднего уровней. Используя SATA SSD (например Intel S3520 или S3610), можно построить бюджетную систему хранения с высокими показателями производительности. Когда я говорю бюджетную — это значит в 3-4 раза дешевле A-брендов.

Есть ещё одна особенность СХД Infortrend. Её можно отнести как к недостаткам, так и к преимуществам — всё зависит от того, где Вы её покупали. Это гарантия, а точнее — отсутствие официальной гарантии на территории РФ. Но мы даём свою гарантию на Infortrend от 2 до 3 лет (в зависимости от модели), с обслуживанием в СЦ по всей России. Чтобы обеспечить оперативную замену, у нас предусмотрен гарантийный склад.

Для расчёта модели и подбора необходимой спецификации у нас на сайте есть удобный конфигуратор. Там же представлена модель ESDS 4024B, которая поддерживает установку 2-х интерфейсных плат на каждый контроллер.

Выводы


За последнее время, системы хранения данных Infortrend стали популярным решением в сфере малого и среднего бизнеса за счёт вышеописанных преимуществ. Возможность использования в полибрендовых решениях позволяет интегрировать СХД в уже существующую инфраструктуру без привязки к производителю серверного и сетевого оборудования. Одним из самых частых сценариев использования данных систем хранения является построение отказоустойчивого кластера. Также не малую долю проектов занимает замена брендовой СХД на Infortrend. Это происходит, когда заказчик становится перед выбором — замена негарантийных брендированных дисков или новая СХД с дисками за те же деньги.

Спасибо за внимание, жду Ваших комментариев.
Знакомы ли Вы с СХД Infortrend?

Никто ещё не голосовал. Воздержавшихся нет.

Альтернатива ли?

Никто ещё не голосовал. Воздержавшихся нет.

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

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334226/


Истории успеха Kubernetes в production. Часть 1: 4200 подов и TessMaster у eBay

Четверг, 27 Июля 2017 г. 08:37 + в цитатник
Как это часто бывает в первые годы жизни инфраструктурных проектов, стремительно набирающих популярность, пока многие только присматриваются к Kubernetes, оценивая его возможности и зрелость, другие успевают продвинуться дальше, протестировать и запустить в production (полностью или частично), получив свой первый «взрослый» опыт эксплуатации. Эта статья начинает обзорный цикл примеров из мировой практики достаточно известных компаний, использующих Kubernetes в production.



Примечание: все примеры рассказывают об использовании оригинального upstream-дистрибутива Kubernetes, а не его производных вроде OpenShift (Red Hat) и Tectonic (CoreOS).

Начнём с eBay, специалисты которой серьёзно работают с Kubernetes уже более 2 лет и значительно продвинулись в этом…

2015 год: начало


Итак, в 2015 году один из крупнейших онлайн-магазинов eBay (входит в топ-10 мировых интернет-компаний по прибыли) начал внедрять Kubernetes. Как рассказывал Ashwin Raveendran из облачной команды eBay на конференции KubeCon 2015, его компания, имевшая на тот момент более 150 тысяч серверов, стала одним из первых публичных примеров внедрения системы Kubernetes поверх облачной Open Source-платформы OpenStack.


(Слайд из презентации «Kubernetes on OpenStack at eBay» на OpenStack Day Seattle 2015)

Ранние этапы адаптации Kubernetes в eBay «были не только о переходе на контейнеры для деплоя приложений, но и об изменении жизненного цикла приложений в компании», что стало ответом на потребности разработчиков. Тогда же в eBay рассказывали о планах «перейти к более гибкой модели деплоя с использованием контейнеров в качестве исполняемой среды и Kubernetes поверх OpenStack для управления этими контейнерами». Инсталляция Kubernetes в eBay получила внутреннее название Tess.IO, но публичной информации об особенностях этого форка(?) найти не удалось. (Не сообщается и о каких-либо планах eBay по открытию кода Tess.IO: на GitHub-аккаунте компании есть форк кодовой базы Kubernetes, который не обновлялся с 2015 года.)

2016 год: первые результаты


Через год после первого упоминания Tess.IO от директора облачной инфраструктуры компании (Suneet Nandwani) стало известно, что в eBay функционировало семь кластеров Kubernetes, каждый из которых обслуживал примерно по 100 физических серверов. Для работы с ними в компании подготовили единый административный интерфейс, интегрированный с OpenStack и названный TessMaster.

Новый проект eBay, до сих пор опубликованный на GitHub лишь как небольшое README без каких-либо исходников, позиционировался как альтернатива для OpenStack Magnum — официального API, предлагаемого в OpenStack для интеграции инструментов оркестровки (Docker Swarm, Kubernetes и Apache Mesos) с облачной платформой. Magnum использует Heat (ключевой сервис оркестровки в OpenStack для управления жизненным циклом инфраструктуры и приложений) для оркестровки образа операционной системы и его запуска на виртуальных машинах или на голом железе в кластерной конфигурации.

Из слов Suneet Nandwani в 2016 году:
«Мы очень целеустремлённо занимались адаптацией Kubernetes. Команды разработки в eBay любят контейнеры Docker для dev- и test-окружений, а Kubernetes поддерживает работу с Docker и берёт на себя управление им. В дополнение к окружениям dev и test мы начали запускать production-приложения в контейнерах. Каждое приложение представлено набором из контейнеров, реализующих различные компоненты и зависимости. [..] В этом году мы запустили в Kubernetes четыре приложения. Видим огромный потенциал в том, как приложения работают и какая гибкость появляется у разработчиков».

По состоянию на конец 2016 года, около 2000 контейнеров в production у eBay управлялись с Kubernetes, и это количество обещали увеличить «до десятков тысяч в ближайшем будущем».

Kubernetes или Apache Mesos?


Что делает этот случай ещё более интересным: за полтора года до первых новостей про eBay и Kubernetes, в апреле 2014 года, инженеры компании рассказывали о своём подходе к непрерывной интеграции, реализованном с помощью прямого конкурента Kubernetes — Apache Mesos (а также Marathon, ZooKeeper, Jenkins):



Более того, eBay по сей день значится в актуальном списке Organizations using Mesos. Однако материал InformationWeek от 28 декабря 2016 года ссылается на слова всё того же Suneet Nandwani (директора облачной инфраструктуры и платформ в eBay), который утверждает, что компания выбирала между имеющимися решениями оркестровки в 2015 году*. Несмотря на то, что разработчики оценили удобство контейнеров при тестировании и доставке кода, «запуск Docker сам по себе [в рамках имеющейся инфраструктуры] был очень непростым» и требовал удобного обслуживания. Docker Swarm на тот момент ещё не было, а выбор между Apache Mesos и Kubernetes пал в пользу последнего, поскольку эту систему сочли наиболее зрелым решением по итогам внутреннего тестирования вместе с Docker-контейнерами.

* В статье указан 2016 год, однако другое выступление Suneet (см. ниже) + профиль одного из разработчиков Tess.IO указывают, что активное использование Kubernetes в eBay (создание Tess.IO) началось всё же раньше, в 2015 году:



2017 год: настоящее и перспективы


Выступая в мае 2017 года на OpenStack Summit в Бостоне, Suneet Nandwani заявил, что Kubernetes в eBay по-прежнему запущен поверх частного облака OpenStack и на сегодняшний день обслуживает 178 приложений в 4200 подах.



На заметку: Всё облако OpenStack в eBay (по состоянию на май 2017 года) насчитывает 167 тысяч виртуальных машин и 4000 приложений, обслуживает 95 % трафика. Это одна из крупнейших инсталляций OpenStack в мире!

В рамках того же доклада специалист из eBay подробнее рассказал о причинах выбора Kubernetes. Таковыми были названы:
  • ориентированность на приложения (app centric) в противовес (а точнее — в дополнение) ориентированности на инфраструктуру (в OpenStack);
  • Open Source («Мы имеем большой опыт работы с OpenStack, мы вносим и свой вклад в развитие этого проекта»; «Все большие платформы, которые мы используем, должны быть открытыми»);
  • поддержка Docker-контейнеров (стала очевидной необходимостью для разработчиков после перехода на микросервисную архитектуру);
  • архитектура, управляемая моделью (model driven);
  • декларативный подход;
  • активное сообщество;
  • продвинутые механизмы планирования;
  • географическая федеративность («Будучи крупным предприятием, мы запускаем всё в разных дата-центрах»).

Инженеры eBay запускают в Kubernetes и stateful-, и stateless-приложения, а среди конкретных применений называются: платформа искусственного интеллекта, решения для автоматизации управления сетью, ElasticSearch, Apache Kafka, распределённые NoSQL-решения.

Основные группы проблем, с которыми им пришлось столкнуться при внедрении и эксплуатации Kubernetes, перечислены на этом слайде:



О некоторых технических подробностях их преодоления на ранних этапах внедрения Kubernetes можно послушать в докладе 2015-го года «Cloud-Scale Kubernetes at eBay» (Ashwin Raveendran на KubeCon 2015). А более законченную форму решение некоторых из этих проблем нашло в разработке собственного продукта.

TessMaster


Уже упомянутое решение TessMaster, созданное в eBay, задаётся целью обеспечить управление всем жизненным циклом для кластеров Kubernetes, размещённых у разных провайдеров (публичные/приватные облачные окружения, bare metal). Из виртуализации (т.е. ВМ, образующих инфраструктуру в дополнение к железным серверам) в TessMaster на настоящий момент поддерживается OpenStack и VirtualBox.

Для конечного пользователя (DevOps-инженера) TessMaster предлагает веб-интерфейс, в котором наглядно представляется вся инфраструктура (кластеры Kubernetes). Она разбита по регионам, зонам доступности, сетевым контурам (например, dev и prod). Для каждого кластера показаны используемые ресурсы и доступные узлы, в которые можно «зайти» с тем, чтобы посмотреть список виртуальных/физических серверов и узлов в кластере… и буквально в пару кликов изменить количество узлов (т.е. поменять конфигурацию кластера Kubernetes и увидеть наглядно, «в реальном времени», как это изменение приводится в действие).



Самое приятное в презентации TessMaster — обещание eBay опубликовать свою разработку как Open Source-проект «в течение пары месяцев». Учитывая, что мероприятие состоялось в мае, ожидать этого события следует в самое ближайшее время. Тогда-то мы узнаем о других возможностях этой разработки, скрывающихся за остальными табами её веб-интерфейса, а действующие и потенциальные крупные пользователи Kubernetes получат весьма интересный инструмент для удобной эксплуатации масштабных кластеров.

P.S.


Подписывайтесь на наш блог, чтобы не пропустить следующие статьи из этого цикла, а также обратите внимание на другие уже доступные публикации:
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334140/


ICO: основные риски

Четверг, 27 Июля 2017 г. 08:31 + в цитатник


Итак, опыт "Первой книги об ICO" (в двух пока частях) и прошлой статьи показал, что: во-первых, очень многие не понимают, что же есть ICO, для чего именно оно нужно и главное — в чём его уникальность; во-вторых, и с другой стороны — среди этого явления слишком много хайпа.

Попробуем же начать ставить точки над ё, пока бед не стало слишком много.

№0. Пузырь

Самое обидное и страшное в том, что Bitcoin — первое блокчейн-решение в мире — появился именно как ответный удар на кризис 2007-2009 (или 2008 года — как удобней). Люди получили уникальный инструмент, который за счёт автоматизации, псевдо-анонимности, децентрализации смог решить множество проблем. Но что дальше?

Дальше из него сделали: а) сверхдорогой, б) спекулятивный и в) не интересный из-за этого многим сервис. И более того — внедрили в него то, против чего он был создан.

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

Что и случилось буквально вчера, впрочем, ничего нового лично я не увидел. Вопрос сейчас не в том, сможет США, например, что-то предъявить возможному соучредителю биржи btc-e, и даже не в том — когда закончит действия палочная система в России против крипто-активов, а в том — когда же само криптосообщество поймёт, что старая логика (идеология тоже — в хорошем смысле) не действует в новой формации, в рамках новых техник.

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

№1. Команда

В ICO, как и любой другой сфере, есть проекту, куда вкладываться уж точно не стоит: Мавр, OneCoin, E-dinar, Kibo… Но всегда есть страх того, что проект не запуститься не потому, что это скам, а потому — что внутри команды станет что-то не ладно.

Человеческий фактор, если одним словом.

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

Более того — именно благодаря изучению этого аспекта можно установить взаимосвязи разных проектов: как, скажем, тот же Kibo & OneCoin; или — банка Полибиус.

Но главное, о чём забывают ныне инвесторы, это то, что ВСЕ команды, вышедшие на ICO, — новые команды: даже если что-то запущено ими в рамках старых проектов или на базе старых (как, скажем, Brave) — это всё равно а) новая сфера и б) новый подход.

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

И всё же клиент оператора как абонент и как человек с банковским счётом — это две большие разницы. Здесь, в ICO, ровно то же самое: это могут быть мотивы, ожидания и что угодно.

Факт команды же сам по себе для многих стал очевидным и всё же, судя по обращениям клиентов, а их с каждым месяцем — только больше, понимаю, что чёткой схемы ни у кого нет. Но, открою секрет, её нет в принципе, есть, скорее сценарии оценки. Я их называю антифрод-оценка ICO. Но за пару абзацев навряд ли опишешь, поэтому сделаю акцент на принципах:

  1. Геолокация создателей: скажем, те, кто получил прибыль на первой волне ICO, начали выступать советниками, гарантами для тех, кто приходит сегодня. Всё хорошо и правильно, только возникает сразу же несколько вопросов: а знает ли гарант о своих подопечных и что именно? второй, ещё более важный — а может ли гарант вообще заниматься курируемым проектом, если сам находится в постоянном движении по миру. Нет, удалённо работать — никто не запрещал, тем более в этой сфере: вопрос в том, что перелёты, конференции и так далее — всё это отнимает массу времени, которое, между прочим, не так трудно рассчитать. Надеюсь,
    суть ясна.
  2. Трудовые связи: когда и откуда пришёл, ушёл, зачем и почему. С кем работал,
    какие есть данные от коллег. Поиск старых резюме и вакансий. Общий стаж, профессиональные навыки. Ведь зачастую адвизорами сейчас выступают люди, которые а) известны и б) представляют некий бренд или имя. Но возникает вопрос, а на сколько этот бренд и имя соответствует тому, что курирует конкретный специалист? Ещё одни немаловажный фактор — это возраст: банальный пример — доступ к ключу для мультиподписи лица, которому 50+: если знакомы со скоринг-анализом, то поймёте, что страхование личной ответственности,
    скажем, в 20, 30, 40 и 50 отличаются по коэффициентам. Здесь — почти то же самое.
  3. Прошлые наработки: очень не многие, опять же — по опыту меня и из тех источников, что открыты к изучению, обращают должно внимание на этот фактор. Между тем,
    он — говорящий: скажем, у того же OneCoin это очень хорошо прослеживается.
  4. Открытость: считаю, что это — принципиальный момент для блокчейна. Если человек не открыт для диалога, пусть на это будет уходить даже 48 часов в сутки, он изначально а) не умеет планировать, б) не поддерживает принципы самого blockchain и лично для меня является в лучшем случае тем, кто хочет заработать на взрывной волне ICO. Проверить легко — написать ему/ей.
  5. Понимание юридичесской, экономической, бизнес- составляющей проекта: здесь,
    к сожалению, как минимум, с первой и второй — всегда проблемы. Понимаю, что прежде всего на арене — технари и их это интересует мало, но, если посмотрим на опыт прошлых лет и сфер,
    скажем, e-commerce, e-money, то увидим, что именно не учёт этих факторов стал роковым даже для самых продвинутых проектов.

№2. Технология

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

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

Или SONM? Особенно хорошо это видно, если проследить не очень удачные проекты, скажем, filecoin. И сравнить, скажем, с собратьями: такими, как Storj.

Но самое лучше — это задать вопрос специалистам: благо форумы и чаты никто не отменял. Да и toster.ru, например, тоже. Только вот, опять же исходя из первичного анализа, прихожу к выводу, что в русскоязычной среде этого почти никто не делает. Да и в англо- не сказать, чтобы было популярным решением.

Меж тем, это а) дёшево, б) быстро, в) несомненный плюс для инвестиций.

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

№3. Закон

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

В этом смысле Россия — не то, чтобы уникальна, но, скорее, сама делает всё, чтобы растерять лимит доверия. Вот краткое содержание предыдущих серий: в 2014 году выходит не Письмо или какой-то нормативный акт ЦБ, а… информация — своего рода пресс-релиз от PR-службы Центробанка, где говорится, что биткоин и иже с ним — это денежные суррогаты. Никаких оснований, как доказал я в совместном исследовании, это под собой не имело (и не имеет).

В 2015 году Минфин, руководствуясь лобби МВД-СК-Прокуратуры и частично — Росфинмониторинга и Роспотребнадзора начинает разработку пресловутых законов с административным, а потом и вовсе — уголовным наказанием за «производство» и «распространение» крипто-активов. Но Минэкономразвития и крупные игроки рынка поняли, что в таких формулировках пострадают все их мили, бонусы, карты лояльности, сертификаты и другие маркетинговые инструменты и начали войну сомнений — в результате которой появилась поправка, которая в общем-то на корню убила само начинание Минфина, которому, к тому же, Центробанк сказал, что не хочет вообще заниматься в качестве регулятора подобной сферой.

Бизнес меж тем, связанный с p2p, ушёл из России.

В 2016 же госорганы поняли все грехи, совершённые ранее и встали на позицию: «блочейн — да, биткоин — нет». И даже начали кое-какие наработки в сфере. В частности, на сегодня есть мастерчейн в банках и попытки создания разного рода госреестров на основе блокчейна.

Но уже в 2017 году комиссия по изучению крипто (куда, например, входит Элина Сидоренко, Ольга Скоробогатова). Обращу внимание вот на что: Э. Сидоренко — это профессор кафедры уголовного права, процесса и криминалистики МГИМО, а также она — руководитель группы по оценка рисков оборота криптовалют в России.

То есть из всей плеяды юристов выбрали не абы кого, а профессора, который знает толк в уголовном праве. И группу назвали: по оценке рисков…

И всё это на фоне таких заявлений: майнеров не будут облагать налогом, Россия — станет первой страной с законом о криптоактивах, «нет смысла запрещать» и так далее.

Но не только Россия отмечена этим: в ЕС хотят уравнять IPO и ICO, про США вы уже в курсе, Китай то запрещает оборот, то вновь разрешает, а Сингапур всё медлит со специальными актами… Примеров на самом деле будет очень много, но суть такова, что государство и блокчейн не совместимы по сути: и не совместимы именно с позиции государства.

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

№4. Иные риски

Безусловно, в таком виде это очень широкая и для многих — не ясная категория. Но всё же это именно так, потому что сюда можно отнести: риски политические, когда всё решится, например, национализацией, которая к праву/закону не имеет никакого отношения; риски культурные, когда какой-то продукт может быть воспринят определённым этносом, группой ли по интересам порочным; риски конкурентные: скажем, когда классические провайдеры начнут «войну» против блокчейн сервисов в качестве их же аналогов. И так далее.

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

P.S. Подборка материалов по теме:

  1. Выбор юрисдикции под ICO
  2. Белая книга Golem — хороший пример для тренировки навыков
  3. White paper от Хронобанка — тоже неплохо
  4. Классические сферы против/и «цепиблоковых»
  5. Самые популярные ошибки при оценке блокчейн-проектов
  6. Blockchain и социальные риски
  7. Почему так важно для блокчейн-сервисов быть странонезависимыми?
  8. О том, как к крипто-активам относятся в разных юрисдикциях
  9. Немного об идеологии p2p
Когда на ваш взгляд ICO начнут регулировать?

Проголосовал 1 человек. Воздержавшихся нет.

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

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334224/


Метки:  

[Перевод] Резервное копирование виртуальной машины и скрипты заморозки/оттаивания InterSystems Cach'e

Четверг, 27 Июля 2017 г. 04:24 + в цитатник

В этой статье я рассмотрю стратегии резервного копирования Cach'e с использованием систем внешнего резервного копирования и приведу примеры интеграции с решениями на основе снимков состояния виртуальной машины (VM snapshot, снапшот). Большинство решений, с которыми я сталкиваюсь сегодня, развернуты на базе Linux и VMware, поэтому я приведу примеры решений именно с использованием снапшотов VMware.


Список моих статей из серии 'Платформы данных InterSystems и производительность' находится здесь (англ.).


Для лучшего понимания данной статьи вам следует также ознакомиться с руководством по резервному копированию и восстановлению в онлайн-документации Cach'e.


Cach'e backup: батарейки в комплекте?


Встроенное горячее резервное копирование (Cach'e online backup) поставляется вместе с Cach'e «из коробки» и предназначено для резервного копирования баз данных Cach'e без остановки системы. Однако существуют и более эффективные решения для резервного копирования, о которых стоит знать в те моменты, когда вы планируете масштабирование крупной системы. Внешнее резервное копирование (External Backup) с использованием технологий создания снимков — рекомендуемое мною решение для резервного копирования систем, в том числе, использующих базы данных Cach'e.


Что необходимо учитывать при внешнем резервном копировании?


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


«Для обеспечения целостности снимка файловой системы Cach'e предоставляет возможности для заморозки (freeze) записи в базы данных в момент создания снимка. Заморозке подвергаются только попытки физической записи в файлы базы данных, что позволяет пользовательским процессам продолжать бесперебойно выполнять обновления базы данных в памяти».

Важно также отметить, что часть процесса создания снимка в виртуализированных системах вызывает небольшую паузу в работе виртуальной машины, которую принято называть замиранием (stun). Обычно замирание длится меньше секунды, поэтому его не замечают пользователи и оно не оказывает воздействия на работу системы, однако в некоторых случаях замирание может длиться и дольше. Если замирание длится дольше, чем таймаут QoS (Quality of service, показатель качества обслуживания) зеркалирования базы данных Cach'e, то резервный узел зеркала решит, что произошел сбой в основной системе, и произведет переключение зеркала. Позже в этой статье я расскажу как можно замерить время замирания на тот случай, если вам нужно будет внести изменения в настройку таймаута QoS для зеркалирования.


Варианты резервного копирования


Минималистичное решение для резервного копирования – встроенное резервное копирование (Cach'e Online Backup)


Если у вас нет возможности использовать другие средства, остается этот старый добрый способ, который входит в комплект поставки с платформами InterSystems. Учтите, что Cach'e online backup создает резервные копии только для файлов баз данных Cach'e, сохраняя все непустые блоки в базах данных, записывая их последовательно в файл. Cach'e Online Backup поддерживает накопительное (cumulative) и инкрементное (incremental) резервное копирование.


В контексте VMware, Cach'e Online Backup выполняется на гостевой машине. Подобно другим аналогичным решениям, операции, выполняемые Cach'e Online Backup, одинаковы независимо от того, виртуализировано ли приложение или выполняется непосредственно на физическом сервере. Соответственно, копии, полученные Cach'e Online Backup должны быть перемещены на резервный носитель вместе со всеми другими файлами, которыми пользуется ваше приложение. При резервном копировании системы необходимо помнить о каталоге приложения, основном и альтернативном каталогах журнала БД, и любых других каталогах, содержащих файлы, используемые приложением.


Cach'e Online Backup следует рассматривать либо как подход начального уровня для небольших проектов, желающих реализовать недорогое решение для «горячего» резервного копирования баз данных, либо для создания разовых резервных копий. Например, создание подобных копий очень полезно при первоначальной настройке зеркалирования. Однако, поскольку базы данных увеличиваются в размерах и поскольку базы данных Cach'e обычно являются лишь частью клиентского набора данных, внешние резервные копии в сочетании с технологией создания моментальных снимков при использовании сторонних утилит рекомендуются как наилучшее решение с такими преимуществами, как возможность включать в резервную копию файлы, отличных от файлов базы данных, уменьшенное время восстановления, возможность контроля данных в масштабах всей организации и доступность улучшенных инструментов для каталогизации и управления.


Рекомендуемое решение для резервного копирования: внешнее резервное копирование


Рассмотрим его на примере VMware. Использование VMware для виртуализации добавляет новые функции и возможности для защиты виртуальных машин в целом. Виртуализация решения приводит систему (включая операционную систему) к эффективной инкапсуляции вашего приложения со всеми данными внутри одного файла vmdk (и нескольких других файлов). При необходимости этими файлами можно очень легко манипулировать, и они могут использоваться для быстрого восстановления целой системы. Это сильно отличается от восстановления работоспособности вашего приложения на голом железе, где вы должны восстановить и настроить каждый компонент по отдельности — операционную систему, драйверы, сторонние приложения, СУБД и файлы баз данных и т.д.


Снимок состояния VMware


VMware vSphere Data Protection (VDP) и другие сторонние решения для резервного копирования виртуальных машин, такие как Veeam или Commvault, используют функции снимков состояния (snapshot) виртуальных машин VMware для создания резервных копий. Ниже приведено краткое объяснение механизма работы снимков VMware. Для получения более подробной информации обратитесь к документации.


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


Сами по себе снимки VMware не являются резервными копиями!

Снимки позволяют использовать ПО для резервного копирования и сделать резервные копии, но они не являются резервными копиями сами по себе.


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


  • Стороннее программное обеспечение для резервного копирования запрашивает у хоста ESXi выполнение снимка состояния VMware.
  • Файлы .vmdk виртуальной машины переводятся в режим «только для чтения» и для каждого файла .vmdk каждой виртуальной машины создаётся дочерний .vmdk дельта-файл.
  • Любая запись на диск происходит в дельта файл виртуальной машины. Любые операции чтения выполняются сначала из дельта-файла.
  • Программное обеспечение резервного копирования выполняет резервное копирование родительских .vmdk-файлов, находящихся в режиме «только для чтения»
  • Когда резервное копирование завершено, снимок сливается с исходным файлом (диски виртуальной машины становятся доступными для записи и обновлённые блоки из дельта-файлов дописываются к родительским файлам).
  • Снимки VMware удаляются.

Решения для резервного копирования также содержат специальные возможности, как например отслеживание измененных блоков (Changed Block Tracking, CBT), чтобы выполнять инкрементное или накопительное резервное копирование максимально быстро и эффективно (что особо важно для экономии места). Подобные решения обычно также добавляют другие полезные и важные функции, такие как сжатие данных, организация работы по расписанию, восстановление виртуальных машин с другим IP-адресом для проверки целостности, восстановление как всей виртуальной машины, так и отдельных файлов с нее, управление каталогом резервных копий и т.д.


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

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


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


Особенности Cach'e для снимков состояния системы


Перед выполнением снимка база данных должна быть стабилизирована (quiesced): все записи в файлы должны быть завершены и файлы баз данных должны быть в корректном состоянии. Cach'e предоставляет методы и API для завершения, а затем замораживания (freeze) записи в базы данных на короткий период создания снимка. Заморозке во время создания снимка подвергаются только попытки физической записи в файлы базы данных, что позволяет пользовательским процессам продолжать выполнять обновления в памяти бесперебойно. После того как снимок был сделан, возможность записи в базу данных восстанавливается, база данных «оттаивает» (thaw), и резервная копия продолжает копироваться на резервный носитель. Время между замораживанием и оттаиванием должно быть небольшим (не более нескольких секунд).
В дополнение к приостановке записи, заморозка Cach'e также приводит к смене файлов журнала и помещению маркера создания резервной копии в журнал. Запись в файл журнала при этом продолжается нормально, пока запись в физическую базу данных заморожена. Если система рухнет в то время, пока записи в физической базе данных будут заморожены, данные будут восстановлены из журнала как обычно при запуске.


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



Обратите внимание на короткое время между замораживанием и оттаиванием — это время только на создание снимка, а не время, которое требуется на копирование всего родительского объекта в резервную копию.


Заморозка и оттаивание Cach'e


vSphere позволяет автоматически вызывать скрипты до и после создания снимка: это и есть те самые моменты, которые называются заморозкой и оттаиванием Cach'e. Примечание: для правильной работы этого функционала ESXi хост запрашивает у гостевой операционной системы заморозку дисков через VMware Tools.
В гостевой операционной системе должны быть установлены Инструменты VMware.
Скрипты должны соблюдать строгие требования к имени и местоположению. Необходимо также назначить корректные права на файлы. Имена скриптов для VMware на Linux:


# /usr/sbin/pre-freeze-script
# /usr/sbin/post-thaw-script

Ниже приведены примеры скриптов замораживания и оттаивания, которые наша команда использует для резервного копирования с помощью Veeam в наших внутренних тестовых лабораториях. Эти скрипты также должны подойти для работы и с использованием других продуктов. Примеры были протестированы и использовались на vSphere 6 и Red Hat 7.
Хотя эти сценарии могут использоваться в качестве примеров и являются иллюстрацией к описываемому методу, вы должны убедиться в их корректности для вашей собственной среды!
Пример скрипта заморозки:


#!/bin/sh
#
# Script called by VMWare immediately prior to snapshot for backup.
# Tested on Red Hat 7.2
#

LOGDIR=/var/log
SNAPLOG=$LOGDIR/snapshot.log

echo >> $SNAPLOG
echo "`date`: Pre freeze script started" >> $SNAPLOG
exit_code=0

# Только для запущенных экземпляров
for INST in `ccontrol qall 2>/dev/null | tail -n +3 | grep '^up' | cut -c5-  | awk '{print $1}'`; do

    echo "`date`: Attempting to freeze $INST" >> $SNAPLOG

    # Detailed instances specific log    
    LOGFILE=$LOGDIR/$INST-pre_post.log

    # Freeze
    csession $INST -U '%SYS' "##Class(Backup.General).ExternalFreeze(\"$LOGFILE\",,,,,,1800)" >> $SNAPLOG $
    status=$?

    case $status in
        5) echo "`date`:   $INST IS FROZEN" >> $SNAPLOG
           ;;
        3) echo "`date`:   $INST FREEZE FAILED" >> $SNAPLOG
           logger -p user.err "freeze of $INST failed"
           exit_code=1
           ;;
        *) echo "`date`:   ERROR: Unknown status code: $status" >> $SNAPLOG
           logger -p user.err "ERROR when freezing $INST"
           exit_code=1
           ;;
    esac
    echo "`date`:   Completed freeze of $INST" >> $SNAPLOG
done

echo "`date`: Pre freeze script finished" >> $SNAPLOG
exit $exit_code

Пример скрипта оттаивания:


#!/bin/sh
#
# Script called by VMWare immediately after backup snapshot has been created
# Tested on Red Hat 7.2
#

LOGDIR=/var/log
SNAPLOG=$LOGDIR/snapshot.log

echo >> $SNAPLOG
echo "`date`: Post thaw script started" >> $SNAPLOG
exit_code=0

if [ -d "$LOGDIR" ]; then

    # Только для запущенных экземпляров    
    for INST in `ccontrol qall 2>/dev/null | tail -n +3 | grep '^up' | cut -c5-  | awk '{print $1}'`; do

        echo "`date`: Attempting to thaw $INST" >> $SNAPLOG

        # Detailed instances specific log
        LOGFILE=$LOGDIR/$INST-pre_post.log

        # Оттаивание
        csession $INST -U%SYS "##Class(Backup.General).ExternalThaw(\"$LOGFILE\")" >> $SNAPLOG 2>&1
        status=$?

        case $status in
            5) echo "`date`:   $INST IS THAWED" >> $SNAPLOG
               csession $INST -U%SYS "##Class(Backup.General).ExternalSetHistory(\"$LOGFILE\")" >> $SNAPLOG$
               ;;
            3) echo "`date`:   $INST THAW FAILED" >> $SNAPLOG
               logger -p user.err "thaw of $INST failed"
               exit_code=1
               ;;
            *) echo "`date`:   ERROR: Unknown status code: $status" >> $SNAPLOG
               logger -p user.err "ERROR when thawing $INST"
               exit_code=1
               ;;
        esac
        echo "`date`:   Completed thaw of $INST" >> $SNAPLOG
    done
fi

echo "`date`: Post thaw script finished" >> $SNAPLOG
exit $exit_code

Не забудьте установить права на файлы:


# sudo chown root.root /usr/sbin/pre-freeze-script /usr/sbin/post-thaw-script
# sudo chmod 0700 /usr/sbin/pre-freeze-script /usr/sbin/post-thaw-script

Тестирование заморозки и оттаивания


Чтобы проверить работу приведенных сценариев, вы можете вручную запустить выполнение снимка на виртуальной машине и проверить что выведет сценарий. На следующем скриншоте показан диалог «Take VM Snapshot» и его опции.



Сбросьте флажок "Snapshot the virtual machine's memory" (Сохранить оперативную память виртуальной машины)
Отметьте флажок "Quiesce guest file system (Needs VMware Tools installed)" (Стабилизировать гостевую файловую систему). Это приведет к приостановке запущенных процессов в гостевой операционной системе и сбросу буферов, чтобы содержимое файловой системы находилось в известном непротиворечивом состоянии при выполнении снимка.


Важно! После теста не забудьте удалить сделанный снимок!

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


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


Wed Jan  4 16:30:35 EST 2017: Pre freeze script started
Wed Jan  4 16:30:35 EST 2017: Attempting to freeze H20152
Wed Jan  4 16:30:36 EST 2017:   H20152 IS FROZEN
Wed Jan  4 16:30:36 EST 2017:   Completed freeze of H20152
Wed Jan  4 16:30:36 EST 2017: Pre freeze script finished

Wed Jan  4 16:30:41 EST 2017: Post thaw script started
Wed Jan  4 16:30:41 EST 2017: Attempting to thaw H20152
Wed Jan  4 16:30:42 EST 2017:   H20152 IS THAWED
Wed Jan  4 16:30:42 EST 2017:   Completed thaw of H20152
Wed Jan  4 16:30:42 EST 2017: Post thaw script finished

На этом примере видно, что время между замораживанием и оттаиванием составляет 6 секунд (16:30:36 — 16:30:42). В течение этого периода работа пользователей НЕ прерывается. Вам нужно будет собрать статистику с ваших собственных систем, но для информации отметим, что данный пример был запущен во время тестирования производительности приложения на системе без «узких мест» в системе ввода/вывода, в среднем выполнявшей более 2 миллионов операций чтения БД в секунду (Glorefs/sec), 170 000 операций записи БД в секунду (Gloupds/sec) и в среднем 1100 физических операций чтения диска в секунду и 3000 записей за цикл демона записи БД (write daemon cycle).


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


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


01/04/2017 16:30:35: Backup.General.ExternalFreeze: Suspending system

Journal file switched to:
/trak/jnl/jrnpri/h20152/H20152_20170104.011
01/04/2017 16:30:35: Backup.General.ExternalFreeze: Start a journal restore for this backup with journal file: /trak/jnl/jrnpri/h20152/H20152_20170104.011

Journal marker set at
offset 197192 of /trak/jnl/jrnpri/h20152/H20152_20170104.011
01/04/2017 16:30:36: Backup.General.ExternalFreeze: System suspended
01/04/2017 16:30:41: Backup.General.ExternalThaw: Resuming system
01/04/2017 16:30:42: Backup.General.ExternalThaw: System resumed

Замирание виртуальной машины


Во время создания снимка виртуальной машины, а также после завершения резервного копирования и удаления снимка виртуальную машину необходимо заморозить на короткий период времени. Это кратковременное замораживание часто называют замиранием (stun). Хорошая статья о замирании виртуальных машин есть здесь. Я изложу некоторые подробности ниже, применительно базам данных Cach'e.


Выдержка из статьи: «Чтобы создать снимок виртуальной машины, виртуальная машина «замирает», чтобы (i) сериализовать состояние устройства на диск и (ii) закрыть текущий работающий диск и создать точку начала снимка… При слиянии дельта-файлов виртуальная машина «замирает», чтобы закрыть диски для записи и перевести их в состояние, подходящее для слияния.»

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


Если виртуальная машина является основным или резервным участником зеркалирования Cach'e, и время замирания больше, чем таймаут QoS для зеркалирования, зеркало может ошибочно сообщить о сбое основной виртуальной машины и инициировать перехват зеркала резервной системой.

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


Как отмечалось выше, при создании снимка есть несколько опций, которые можно указать. Одна из опций позволяет включать сохранение оперативной памяти в снимке. Помните, что сохранение оперативной памяти не требуется для резервного копирования базы данных Cach'e. Если установлен флаг сохранения памяти, дамп внутреннего состояния виртуальной машины будет входить в снимок. Выполнение снимка с памятью занимает гораздо больше времени. Снимки памяти используются для возврата к такому состоянию виртуальной машины, которое было на момент выполнения снимка. Этого НЕ требуется для резервного копирования файлов базы данных.


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

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


Узнаем время замирания из журналов VMware


Начиная с ESXi 5.0 время замирания регистрируется в файле журнала каждой виртуальной машины (vmware.log) сообщениями, похожими на следующие:


2017-01-04T22:15:58.846Z| vcpu-0| I125: Checkpoint_Unstun: vm stopped for 38123 us

Время замирания указывается в микросекундах, поэтому в примере выше 38123 us это 38123/1,000,000 секунд или 0.038 секунды.


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


Пример загрузки файлов vmware.log


Существует несколько способов скачать журналы, в том числе путём создания пакета поддержки (support bundle) VMware через консоль управления vSphere или из командной строки хоста ESXi. Обратитесь к документации VMware за всеми подробностями, а ниже приведен простой способ создания и сбора минимального пакета журналов поддержки, который включает в себя файл vmware.log, позволяющий узнать продолжительность замирания.


Вам понадобится длинное имя каталога, где расположены файлы виртуальной машины. Зайдите по ssh на тот хост ESXi, где запущена виртуальная машина с базой данных и выполните команду vim-cmd vmsvc/getallvms для получения списка vmx файлов и связанных с ними уникальных длинных имён.


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


26 vsan-tc2016-db1 [vsanDatastore] e2fe4e58-dbd1-5e79-e3e2-246e9613a6f0/vsan-tc2016-db1.vmx rhel7_64Guest vmx-11

Далее выполните команду для сбора файлов журнала:


vm-support -a VirtualMachines:logs

Команда отобразит местоположение созданного пакета поддержки, например:


To see the files collected, check '/vmfs/volumes/datastore1 (3)/esx-esxvsan4.iscinternal.com-2016-12-30--07.19-9235879.tgz'

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


/vmfs/volumes//e2fe4e58-dbd1-5e79-e3e2-246e9613a6f0.

Там вы увидите несколько пронумерованных лог-файлов. Самый последний файл номера не имеет, это vmware.log. Журнал может быть не более 100 КБ, но при этом будет содержать очень много информации. Поскольку мы просто ищем моменты начала и конца замирания, их достаточно легко найти с помощью утилиты grep, например:


$ grep Unstun vmware.log
2017-01-04T21:30:19.662Z| vcpu-0| I125: Checkpoint_Unstun: vm stopped for 1091706 us
--- 
2017-01-04T22:15:58.846Z| vcpu-0| I125: Checkpoint_Unstun: vm stopped for 38123 us
2017-01-04T22:15:59.573Z| vcpu-0| I125: Checkpoint_Unstun: vm stopped for 298346 us
2017-01-04T22:16:03.672Z| vcpu-0| I125: Checkpoint_Unstun: vm stopped for 301099 us
2017-01-04T22:16:06.471Z| vcpu-0| I125: Checkpoint_Unstun: vm stopped for 341616 us
2017-01-04T22:16:24.813Z| vcpu-0| I125: Checkpoint_Unstun: vm stopped for 264392 us
2017-01-04T22:16:30.921Z| vcpu-0| I125: Checkpoint_Unstun: vm stopped for 221633 us

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


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


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


grep Unstun vmware* | awk '{ printf ("%'"'"'d", $8)} {print " ---" $0}' | sort -nr

Итог


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


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


Примечание переводчика: поскольку мы работаем с автором в одном офисе, я могу передать ему ваши вопросы и переслать сюда его ответы. Также обсуждение на английском есть в оригинале статьи на InterSystems Developer Community.

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334144/


Метки:  

Поиск сообщений в rss_rss_hh_new
Страницы: 1437 ... 1067 1066 [1065] 1064 1063 ..
.. 1 Календарь