О системах контроля версий

Всем привет! Уже на следующей неделе в OTUS стартует «Супер-практикум по использованию и настройке GIT». Этому я и решил посвятить сегодняшнюю публикацию.


Введение

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

Системы контроля версий

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

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

Copy-paste

Известный метод при применении к данной задаче может выглядеть следующим образом: будем называть файлы по шаблону filename_{version}, возможно с добавлением времени создания или изменения.

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

Локальная система контроля версий

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

Одним из примеров таких систем является система контроля версий RCS, которая была разработана в 1985 году (последний патч был написан в 2015 году) и хранит изменений в файлах (патчи), осуществляя контроль версий. Набор этих изменений позволяет восстановить любое состояние файла. RCS поставляется с Linux’ом.

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

Централизованная система контроля версий

Централизованная система контроля версий предназначена для решения основной проблемы локальной системы контроля версий.

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

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

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

Распределенная система контроля версий

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

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

К данному виду систем контроля версий относятся Mercurial, Bazaar, Darcs и Git. Последняя система контроля версий и будет рассмотрена нами далее более детально.

История Git

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

Заключение

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

ссылка на оригинал статьи https://habr.com/ru/company/otus/blog/521290/

Как свозить свой продукт на международную IT-выставку, зачем и почём

image

Дальше будут размышления, проверенные рецепты и подводные камни. За последние годы мы съездили штук на 15 или больше таких крупных мероприятий как ISE, CeBIT, InfoComm, GITEX, Enterprise Connect. Хочу в это смутное время поделиться с вами накопленным опытом, рано или поздно он пригодится многим отечественным IT-компаниям, заинтересованным в экспорте своих решений.

— Зачем вообще ездить на выставки
— Выбираем выставку
— Планируем расходы
— Важно правильно выбрать место
— Дизайн и застройка стенда
— Еще тонкости на заметку
— Едем
— Профит

Выставки уже всё или еще нет? После отмены в Барселоне в конце февраля Всемирного мобильного конгресса (MWC 2020) по медийному пространству наряду со страданиями по потерянным деньгам пронесся некоторый вздох облегчения. Выставки — последний оплот офлайновых коммуникаций, который пока никому не удавалось сокрушить — пали под натиском коронавируса.

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

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

Выставочная индустрия сейчас не сидит сложа руки, просит поддержки у правительств и разрабатывает пути выхода из кризиса, пытаясь отмежеваться от термина «массовое мероприятие». На текущий момент горизонт планирования в отрасли сдвинулся на лето 2021 года. CES 2021 в начале следующего года пройдет полностью онлайн. Организаторы ISE 2021 пока еще надеются провести выставку в офлайне, но уже не в феврале, а в июне. MWC 2021 тоже сдвинули на июнь. И это, возможно, не последние переносы данных мероприятий.

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

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

Зачем вообще ездить на выставки

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

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

image

Степень готовности нужных людей. Можно искать партнеров в сети по отдельности и презентовать свой продукт. Но в этом случае вы лишаетесь шанса вырвать человека из контекста, вероятность удачного исхода снижается. Ваш продукт будет как очередные курсы и статьи, которые вы очень хотите изучить и прочитать, а потом просто очищаете все закладки разом, потому что ну сколько можно уже. На выставку организаторы заманили для вас нужных людей, не занятых ничем кроме изучения новинок и ГОТОВЫХ смотреть и слушать по собственному желанию.

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

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

image

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

Выбираем выставку

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

Логичнее и проще всего оценивать выставки по тому, кому предназначается продукт. Предприятиям — b2b, физлицам — b2c. Во втором случае в роли покупателя все равно выступают представители розницы, а также журналисты и разные лидеры мнений, которые «продадут» вас потом в виде информации на большую аудиторию. Выставки-ярмарки, где цель — продажа конечному покупателю, мы сейчас не рассматриваем, это работает только когда маржа за проданный товар (а в идеале за единицу товара) покрывает сразу все расходы на выставку. На этот случай у вас с собой должен быть Боинг, ну или хотя бы Камаз.

Например, ISE (Integrated Systems Europe) — для профессионалов AV-индустрии. MWC (Mobile World Congress) больше для конечных покупателей и пользователей электроники, Enterprise Connect для профессионалов в области видеоконференцсвязи и телефонии. Все это можно почерпнуть с сайтов выставки, а также из прошлогодних списков экспонентов.

Планируем расходы

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

Если на выставку вы едете первый раз, для разведки боем возьмите не больше 15 м2, лучше около 9-ти. Размер тут не главное, важнее расположение. Молодые компании с небольшими стендами тоже могут быть привлекательными для реселлеров, от них ожидают выгодных партнерских условий по сравнению с монстрами индустрии.

imageНаш небольшой стенд на CeBIT

Из чего складывается бюджет:

  1. Цена за квадратный метр умножить на их количество — так называемое raw space, то есть голое пространство.
  2. Производство стенда и его застройка.
  3. Услуги: электричество, интернет, угощение для гостей (так называемый кейтеринг), аренда оборудования. Интернет очень дорогой, хорошая скорость при этом редкость, лучше сразу готовьтесь к автономным демонстрациям.
  4. Визитки, промо-материалы, подарки.
  5. Доставка, размещение и прокорм себя любимых до, после и во время мероприятия.

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

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

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

Вот для примера некоторые цифры по пунктам 1-4:

ISE 2018, 22 м2, € CeBIT 2018, 12 м2, €
1. Площадь 8624 6357
2. Дизайн стенда и застройка 6969 входит в сумму выше
3. Электричество, аренда мониторов, услуги, кейтеринг 2038 1417
4. Полиграфия и подарки 757 561

Итого

18388 8335

Цена за м2

835/м2 694/м2

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

P.S. Если вы экспортер и ваша выставка достаточно крупная, есть вариант, что Российский экспортный центр сможет вам возместить часть расходов на нее. Подайте заявку на официальном сайте РЭЦ от юридического лица компании, приготовьтесь заполнить много разных анкет и запаситесь терпением. Но сильно не надейтесь, при ближайшем рассмотрении это может оказаться не самое выгодное предложение. Можно еще посмотреть, что предлагает Московский экспортный центр. Если вы из столицы, то очень рекомендуем. Иногда на зарубежные выставки совсем бесплатно возят региональные власти, поинтересуйтесь в своем городе.

imageСтенд Новосибирской области на CeBIT 2018

Важно правильно выбрать место

Вы должны стоять на потоке или в местах скопления людей. Идеально — на маршруте от/к известным якорным экспонентам, на которых все придут посмотреть, но это уж как повезет. Хорошо, если вас будет видно от такого крутого стенда издалека вдоль прохода. Для этого можно повесить такую конструкцию над стендом (на фото ниже). Стоила порядка $1500 за все: аренда точек подвеса, конструкция, полиграфия и работа монтажников.

image

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

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

image

По нашему опыту, с точки зрения застройки самый хороший стенд — это открытый стенд типа «остров», к которому с любой стороны можно подойти, а еще лучше срезать через него путь. Но организаторы бдят. Открытые островные стенды редко бывают по площади меньше 50 м2, поэтому стоят дорого. Еще хороший вариант — «полуостров», когда всего одна стена. Три стены имеет смысл брать только в том случае, если ширина стенда в 3 раза больше его глубины, или под какие-то специальные нужды типа дополнительной переговорки (под нее, кстати, можно снять еще одну будочку в другом конце зала).

image

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

Дизайн и застройка стенда

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

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

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

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

image

image

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

image

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

Еще тонкости на заметку

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

Перевозка оборудования

2. Если у вас есть большое, но распространенное оборудование типа телевизора, а билеты с пересадками и прочими трудностями, легче будет его вместе с прочей мебелью и урнами арендовать через личный кабинет экспонента. Но обычно это дорого. Из личного опыта: иногда покупка телевизоров/мониторов обходится дешевле, чем их аренда на 4 дня. Если вдруг кому-то из знакомых нужен новый телевизор, купите на месте в магазине электроники и увезите с собой домой. Аэрофлот позволяет перевозить до 203 см по габаритам как дополнительное место багажа за разумные деньги, а это ТВ целых 49".

3. Если вам нужно дорогостоящее оборудование на 1 раз, попробуйте попросить его у производителя для выставки бесплатно. Вряд ли он будет против лишний раз засветиться и продемонстрировать возможности своего продукта. Cisco, Logitech, Sennheiser нам никогда не отказывали.

4. Если не обойтись без транспортировки своего оборудования, то рекомедую сделать Carnet ATA, который позволяет в большинство стран мира беспошлинно ввезти, а затем вернуть на родину любое выставочное оборудование. Делается он в Торгово-промышленной палате за 12-15 тыс. рублей. Туда придется вписывать серийные номера каждого проводочка и железки. Делается документ неделю, зато таможенники большинства стран мира при виде этой бумаги сразу же потеряют к вам интерес. Есть нюанс — в США это не работает. Там мы лепим на девайсы наклейки-обереги Not for resale, но убедиться в их работоспособности нам пока не довелось, так как никто не заинтересовался.

5. Люди, которые везут оборудование, должны лететь прямым рейсом либо заранее, чтобы минимизировать риски, связанные с задержкой/потерей багажа на стыковочных рейсах. Если нет возможности взять оборудование с собой или оно очень громоздкое, то придется воспользоваться услугами логистических компаний. Это дорого и все равно потребует оформления Carnet ATA.

Монтаж стенда

image

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

image

7. Оборудование на стенде нужно смонтировать самим и все тщательно проверить и отрепетировать.Обычно день -2 (это когда выставка послезавтра) уходит на приемку стенда от застройщика. Поэтому нужно сразу в договоре прописать, что он закончит все свои дела не позже вечера -2 дня или утра последнего дня перед выставкой. А вот день -1 (накануне) весь резервируйте на монтаж своего оборудования и демок. Накладки никто не отменял. Рекомендую заранее поставить себе на карте метки у ближайших Медиамаркта, IKEA, Home Depot и прочих RadioShack. На площадке часто не разрешают оставаться по ночам, не рассчитывайте на последнюю ночь перед открытием, можно получить штраф. Мы всегда монтируем стенд еще в России в режиме «на входе только розетка на 220В», тестируем на предмет перегрева и прочих технических нюансов, отмеряем кабели нужной длины, берем с собой запас мелочей. На то, чтобы смонтировать это еще раз на выставке, уходит целый рабочий день перед открытием.

image

Общение с посетителями

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

image

9. Свои собственные визитки делайте такими, чтобы с вами было удобно связаться. Указывайте контакты в деловых соцсетях (LinkedIn) и мессенджерах (WhatsApp).

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

image

11. Не забудьте подготовить раздаточные материалы, небольшие подарки и сувениры для гостей стенда. Желательно чтобы это было что-то полезное, что можно использовать безотносительно вашей рекламы, иначе они очень быстро окажутся в урне. Спланируйте, кто и как их повезет. Мы обычно печатаем все в России и везем с собой. Дешевле и надежнее доплатить Аэрофлоту 3 тыс. за дополнительный чемодан, чем платить 30 тыс. логистической компании.

12. Договоритесь о том, как должен выглядеть стенд и демо-зоны по умолчанию. После демонстрации каждый сотрудник возвращает все на свои места, чтобы его коллега мог начать общаться со следующим посетителем по уже отлаженному сценарию. Это реально очень важно, так как оборудование работает в режиме шоу на пределе своих возможностей — 60fps вместо 30, 4К-разрешение вместо 1080p и так далее. Кто-то технически подкованный должен постоянно бдеть и быть готовым очень быстро перезапустить зависшие демки и устройства и вернуть их в боевую готовность.

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

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

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

image

Едем

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

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

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

Еще у вас должен быть план. Активного поиска и сбора информации.

1. Это модное слово нетворкинг. До отъезда посмотрите список экспонентов и выберете компании, которые представляют для вас интерес. Заранее назначьте встречи с полезными людьми при помощи специальных сервисов от организаторов или через LinkedIn. На выставке можно провести больше полезных переговоров, чем за год разъездов. Потому что все нужные люди есть здесь и сейчас, они готовы к потреблению новой информации и охотно идут на контакт. Эту звучит абсурдно, но существенную часть встреч с российскими интеграторами мы проводим в Амстердаме за четыре февральских дня на ISE, а не в Москве в течение года. У вас будет всего 3-4 вечера для пьянок и угощения самых важных партнеров. И у них тоже. Поэтому договоритесь с ними хотя бы за месяц-два. На выставке бесполезно приглашать кого-то на ужин день в день, как правило, все серьезные люди уже давно ангажированы.

imageУ нас в гостях известный аналитик Айра Вайнштайн из Recon Research (справа)

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

image

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

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

image

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

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

Профит

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

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

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

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

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

  1. Оценка реакции рынка на ваш продукт, проверка гипотез.
  2. Демонстрация рынку своей боеспособности и актуальности.
  3. Ценная информация про то, чем гордятся и как себя позиционируют конкуренты, куда глобально дует ветер.
  4. Прояснение в процессе подготовки к выставке собственных целей и ожиданий, корректировка позиционирования.
  5. Мотивация и апгрейд сотрудников, сплочение команды.

image

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

ссылка на оригинал статьи https://habr.com/ru/post/521096/

Готовим видеосервис к нагрузке в сотни Гбит/с. Доклад Яндекса

Классический CDN — anycast, GeoDNS, веб-сервер с кешем — отлично работает с простыми файлами и небольшим количеством пользователей. Но если возникает необходимость раздавать потоковое видео, всё становится намного интереснее. Вместо одного короткого запроса появляется сессия, которая длится десятки минут. Без правильной балансировки пользователей и контента уже не прожить: кеша на всё не хватает, а когда Россия играет против Испании, это хотят смотреть сразу все. Руководитель разработки платформы видеостриминга Андрей Василенков рассказал, благодаря чему наш CDN позволяет обслуживать сотни тысяч пользовательских сессий одновременно и переживать отключения серверов и дата-центров. А в качестве бонуса показал на примере, как современная поп-культура мешает обучению.

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

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

В основе любого стримингового протокола лежит манифест [manifest] или плейлист . Это небольшой текстовый файл, который содержит метаинформацию о контенте. Там описан тип контента — live-трансляция или VoD-трансляция (video on demand). Например, в случае live это футбольный матч или онлайн-конференция, как у нас сейчас с вами, а в случае VoD ваш контент заранее подготовлен и лежит на ваших серверах, готовый к раздаче в сторону пользователей. В этом же файле описана длительность контента, информация о DRM.

Там же описаны вариации контента — видеодорожки, аудиодорожки, субтитры. Видеодорожки могут быть представлены в разных кодеках. Например, универсальный H.264 поддерживается на любом устройстве. С его помощью вы сможете проиграть видео на любом утюге у вас дома. Или есть более современные и более эффективные кодеки HEVC и VP9, которые позволяют вам передавать картинку 4K с поддержкой HDR.

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

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

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

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

После этого он начинает формировать ссылки на видео- и аудиосегменты. На самом деле это обычные HTTP-ссылки, такие же, как во всех остальных сценариях в интернете. И он начинает скачивать видео- и аудиосегменты, складывать их в буфер друг за другом и бесшовно проигрывать. Такие видеосегменты, как правило, имеют длительность 2, 4, 6 секунд, может быть, 10 секунд в зависимости от вашего сервиса.

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

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

Тут важно понимать, что время ответа сервера тоже имеет значение. Если мы показываем какую-нибудь live-трансляцию в реальном времени, то не можем делать большой буфер просто потому, что пользователь хочет смотреть видео настолько близко к реальному времени, насколько возможно. Ваш буфер в принципе не может быть большим. Соответственно, если сервер не успевает отвечать за то время, пока пользователь успевает просматривать контент, видео в какой-то момент просто зависнет. К тому же контент довольно тяжеловесный. Стандартный битрейт для Full HD 1080p — 3-5 Мбит/с. Соответственно, на одном гигабитовом сервере вы не сможете обслужить больше 200 пользователей одновременно. И это идеальная картинка, потому что пользователи, как правило, равномерно по времени со своими запросами не ходят.

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

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

Задача всей нашей системы сводится к тому, что мы хотим сформировать правильную ссылку на эти сегменты и подставить туда правильный домен какого-нибудь нашего CDN-хоста. В этом месте мы пользуемся следующей стратегией: сразу в плейлисте отдаем нужный CDN-хост, куда пользователь пойдет. Этот подход лишен многих недостатков, но обладает одним важным нюансом. Вам нужно гарантировать, что у вас есть механизм, который позволит увести пользователя с одного хоста на другой бесшовно в процессе проигрывания, не прерывая просмотр. На самом деле такая возможность есть у всех современных стриминговых протоколов, и HLS, и DASH такое поддерживают. Нюанс: довольно часто даже в очень популярных опенсорс-библиотеках такая возможность не реализована, хоть и существует по стандарту. Нам самим приходилось посылать пачки в опенсорс-библиотеку Shaka, она джаваскриптовая, используется для веб-плеера, для проигрывания DASH.

Есть еще одна схема — anycast-схема, когда вы используете один единый домен и отдаете во всех ссылках именно его. В этом случае вам не нужно думать ни про какие нюансы, — отдаете один домен, и все счастливы. (…)

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

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

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

Таких площадок в Яндексе несколько десятков, серверов на них несколько сотен, и в каждую локацию приходят линки от нескольких операторов, поэтому линков у нас тоже порядка нескольких сотен.

Как мы будем выбирать, на какую локацию отправить конкретного пользователя?

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

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

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

Делаем это довольно простым способом — строим префиксное дерево. А дальше наша задача — используя в качестве ключа IP-адрес пользователя, найти, какая подсеть наиболее точно соответствует этому IP-адресу.

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

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

Обязательно нужно смотреть, как происходит реальное скачивание данных пользователями. Это можно делать и на серверной, и на клиентской стороне. На сервере мы активно собираем в логах TCP info пользовательских соединений, смотрим на round-trip time. С пользовательской стороны мы активно собираем perf-логи браузера и плеера. В этих perf-логах есть подробная информация о том, как происходило скачивание файлов с нашего CDN.

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

Допустим, мы выбрали линк. Можем ли мы прямо на этом этапе отправлять туда пользователей? Не можем, потому что вес довольно статичен на протяжении долгого периода времени, и он не учитывает никакую реальную динамику нагрузки. Мы хотим в реальном времени определять, можем ли мы сейчас использовать линк, загруженный, скажем, на 80%, когда рядом есть чуть менее приоритетный линк, загруженный всего на 10%. Скорее всего, в этом случае мы как раз захотим использовать второй.

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

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

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

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

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

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

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

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

Что мы с ними будем делать? Введем по одной вероятностной величине на каждый такой класс сессии. У нас будет величина под названием Slowdown, определяющая процент новых сессий, которые мы не будем пускать на этот линк. Если Slowdown равен нулю, то мы все новые сессии принимаем, а если он равен 50%, то каждую, грубо говоря, вторую сессию мы отказываемся обслуживать на этом линке. При этом наш алгоритм балансировки на более высоком уровне будет проверять альтернативные варианты для этого пользователя. Drop — то же самое, только для текущих сессий. Мы можем часть пользовательских сессий увести с площадки куда-нибудь в другое место.

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

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

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

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

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

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

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

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

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

Что можно сделать? Мы можем проанализировать динамику системы, при большом росте нагрузки замечать это и немного ее демпфировать. Именно это мы и сделали. Мы взяли текущий момент, взяли окно наблюдений в прошлое за несколько минут, например 2-3 минуты, и посмотрели, насколько сильно меняется загрузка линка на этом интервале. Разницу между минимальным и максимальным значением мы будем называть интервалом колебаний этого линка. И если этот интервал колебаний большой, мы добавим демпфирование, таким образом увеличим наш Slowdown и станем пускать меньше сессий.

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

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

Эту часть мы тоже внедрили. Итоговая формула имеет примерно следующий вид. При этом мы гарантируем, что обе эти величины — extra_slowdown и reduce_slowdown — никогда не имеют ненулевого значения одновременно, поэтому эффективно работает только одна из них. Именно в таком виде эта формула балансировки пережила все топовые матчи чемпионата мира по футболу. Даже на самых популярных матчах она работала довольно хорошо: это «Россия — Хорватия», «Россия — Испания». Во время этих матчей мы раздавали рекордные для Яндекса объемы трафика — 1,5 терабита в секунду. Мы спокойно это пережили. С тех пор формула никак не менялась, потому что такого трафика на нашем сервисе с тех пор не было — до определенного момента.

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

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

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

Но тут есть два нюанса. Первый — в Яндексе не принято писать «единые места принятия решений», просто потому что при наших уровнях нагрузки, при нашем трафике, такое место быстро становится узким местом.

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

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

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

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

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

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

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

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

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

Снизу — картинка трафика на образовательном контенте. Мы увидели, что он в какой-то момент резко упал. Начали паниковать, выяснять, что вообще происходит, что у нас сломалось. Потом мы заметили, что общий трафик на сервис при этом начал расти. Очевидно, случилось что-то интересное.

На самом деле в этот момент произошло следующее.

Вот как быстро танцует человечек.

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

ссылка на оригинал статьи https://habr.com/ru/company/yandex/blog/521092/

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

Замечали, скажешь человеку слово “универ”, как он сразу погружается в душные воспоминания? Там он тратил свою молодость на бесполезные предметы. Там он получал устаревшие знания, и там обитали преподы, давно слившиеся с учебниками, но ничего не понимающие в современной IT-индустрии.

К чёрту всё: дипломы не важны, а ВУЗы не нужны. Так ведь вы все говорите? Я думаю об этом каждый свой день, и, знаете, я с этим не согласен! В универ стоит поступить. Там есть такие же парни с горящими глазами, как и ты сам, там есть сообщество. И вместе вы сможете сделать много нового. К примеру, альтернативу образовательной программе ВУЗа в своём городе.

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

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

Увы, переверстать psd-шаблон я не смог (“сыночка-корзиночка, уже поздно, уходи из-за компьютера”). Я не отчаялся и выложил свой код в блоге на WordPress. Однажды мой бесплатный хостинг рубанул всё, что было в блоге. Я принялся восстанавливать бэкап, и локально довёл WordPress до проявления SQL-Injection.

Открыв тем самым для себя мир безопасности, я пошёл в свободный поиск уязвимостей. Хакнул книжный (заиграл Кровосток), директор заплатил мне за уязвимость, в которой я смог просматривать чужие заказы. Когда я выявил XSS-уязвимость на сайте интернет-магазина бытовой техники, меня даже попросили прислать резюме. Узнав, что мне 15, оператор покинул чат.

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

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

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

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

Я не ожидал, что найду единомышленника сразу, тем более, что он будет учиться со мной в группе. Серега рассказывал много невероятного. В школе он ходил на ивенты от Samsung, где делал проекты по мобильной разработке, да и в самой школе у них было хорошо с программированием. Для меня это звучало больно. Моя школа была другой. Как-то я решил найти любую книжку о программировании в своем родном городе, и не нашел ничего, кроме талмудов о давно вымерших языках, в существовании которых я сомневаюсь до сих пор.

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

Не знаю, читали ли вы мой твиттер, но чего только не случалось в моей новой студенческой жизни. Мы неистово хакатонили. Шерстили все городские айти-ивенты со звенящей головой — то от похмелья, то от недосыпа. Однажды мы писали чат-бота с распознаванием речи для айти дочки РосАтома. Обошлись без модных обучений машин и нейросетей. Обучали эту заразу часов 5 всем твиттером. За пивом придумали свою IDE для Python с очешуенным названием — CreamPy. А на конкурс самой смешной фотки на хакатоне (где призом была пара бутылок вискаря), сделали настолько смешную фотку, что её зареджектили орги как непристойную и целиком отменили конкурс — я заснул на стуле с сигой в зубах, энергетиком в руке и запрокинутой головой… До универа моя жизнь никогда не пульсировала с такой силой и частотой!

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

У нас был кое-какой опыт разработки приложений и мы умели в актуальные технологии в IT. Большинству из них не учат в универе, по крайней мере в нашем, и нас это не устраивало. Мы хотели, чтобы перваки, которые ещё не определились, нашли себя. Предмет «Введение в направление», им в этом не помогал, а на деле оказался пересказом учебного плана с пачкой пассивной агрессии от преподавателя. После твоей попытки ответить на вопрос, он краснел так, что становилось понятно — мужик желает тебе электрического стула. Цитируешь Кнута и Танненбаума, но он просто называет это чушью и приводит слова из книги ныне покойного коллеги с кафедры. При всем уважении, но что эта книжка дала программированию? Вы вот знаете что такое “надные”? Я — нет.

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

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

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

Вау! На открытие пришло 150 человек. Мы рассказали студентам про работу с командной строкой, базами данных, о том, как проектировать и разрабатывать мобильные и web-приложения.

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

А еще было такое. Знаете людей, которые ведутся на модную штуку, а на самом деле она им не интересна, и они просто изображают социальную активность? Бывают такие. И мне до сих пор любопытно, зачем приходить на мое выступление, и при этом сидеть в телефоне или лэптопе? Хэй, я не фоновая музыка! Я вложил в это свои усилия, потратил время, выбил поточку, всполошил людей. Я ночами не спал. Я пришёл рассказать то, что может тебе пригодиться. Камон, ты сам ко мне пришёл, я тебя не тащил! Так какого хрена?

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

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

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

Аллилуйя, на территории кампуса появилась новая площадка — Точка Кипения. Там можно было безнаказанно и с минимальными трудозатратами получить место для лекций практически в любой день. Мы твердо решили больше не раздувать штат и продакшен, окрестили проект Blurred Education (ну а как же). Скорость выхода материала ускорилась до трёх дней. В новой итерации, с новой идеологией, мы стали выходить чаще и собирать куда больше людей, чем это было на старте. Мы заряжали людей и научились заряжаться от них.

У нас был отряд харизматичных спикеров, огромное желание принести пользу, сотни заинтересованных глаз, и целое море интересных тем, технологий и энтузиазма, а так же поддержка GitHub, местных IT-сообществ, полка с классикой Computer Science и запас мемов, чтобы студенты не заскучали. Не то, чтобы всё это было категорически необходимо для организации образовательных мероприятий, но если уж начал критиковать образование, то к делу надо подходить серьёзно.

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

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

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

А всё было просто: мы предлагали студентам технологии, которые можно использовать уже сейчас, чтобы достигнуть результата, чтобы получить опыт работы. Показывали различные области IT, чтобы перваки знали о существовании мира вне лабораторных работ на языке C. Мы подключились к программе HackClub от GitHub, пробили небольшое финансирование. Наши слушатели получили ускоренный доступ к GitHub Education Pack! Мы договаривались с организаторами конференций о скидках для студентов или проходках на конфы (привет, SnowOne).

Сейчас мы заводим дружбу со всеми универами города. Будем проводить соревнования по безопасности и хакатоны под эгидой нашей Blurred Technologies. Хотим, наконец, пригласить к сотрудничеству большие корпорации, и прямо сейчас участвуем в программе Developer Student Clubs от Google.

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

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

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

Просто предметы, которые преподают в универе, не всегда имеют такую связность, которая позволяет понять, зачем вообще это учить. Студенты изо дня в день мучают целый ворох учебников, но связь между предметами не всегда очевидна, либо совсем отсутствует. Поэтому чаще эффект от обучения не такой суперский, каким он мог быть. Каким он должен быть. И дело не в хреновых преподах. В образовании есть очень крутые ребята (привет, Брагилевский Виталий Николаевич, Москвин Денис Николаевич, Романов Евгений Леонидович и Мищенко Полина Валерьевна) — они сильно мотивируют учиться дальше.

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

Ссылки на Blurred Education:

Группа ВКонтакте — vk.com/blur_edu
Интервью с первой итерации
Интервью со второй итерации
Мой твиттер — twitter.com/batyshkaLenin
P.S. С наилучшими пожеланиями, batyshkaLenin

ссылка на оригинал статьи https://habr.com/ru/company/ruvds/blog/521218/

Новый способ изучения психотропных веществ с помощью ЭЭГ и нейронных сетей

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

При планировании и реализации работы мы руководствовались принципами прозрачности и открытости. С этой целью создана страница проекта с детальным описанием исследования и регулярной отчетностью: https://cmi.to/r2/

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

Научная проблема

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

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

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

Нейрофизиологическая основа метода

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

Любое фармакологическое воздействие изменяет биоэлектрическую активность мозга специфическим образом. Это подтверждается богатым накопленным опытом фармако-ЭЭГ исследований.

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

Регистрация сигналов

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

Для записи биоэлектрической активности использовался лабораторный электроэнцефалограф NVX-36 (МКС, Россия).

Полученные данные были собраны в датасет: http://dx.doi.org/10.17632/gmkbhj28jh.1

Анализ сигналов

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

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

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

Код алгоритмов доступен на GitHub

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

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

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

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

Интерпретация и прикладная значимость

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

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

Ближайшие планы

Слева — массив электродов, имплантируемый в мозг. Справа — культура нейронов на поверхности планарной HD-матрицы (расстояние между электродами 17,5 мкм).

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

ссылка на оригинал статьи https://habr.com/ru/post/521362/