Русский
Русский
English
Статистика
Реклама

Блог компании itsumma

Microsoft понадобилось 10 дней, чтобы удалить исходники Windows XP с принадлежащего им GitHub

13.10.2020 14:23:08 | Автор: admin

В исходниках Windows XP нашли секретную тему в стиле Mac

В сентябре вся индустрия всполошилась после новости об утечке исходных кодов Windows XP и Windows Server 2003. Новость оказалась не фейком. Исходные коды настоящие, и из них скомпилировали рабочие версии обеих ОС.

Напомним, что всё началось 24 сентября: на портале 4chan неизвестные выложили торрент на 42,9ГБ с полными исходниками Windows XP и Windows Server 2003. Хотя сегодня под XP работает меньше 1% компьютеров в мире, а разработчик не обеспечивает никакой поддержки, утечка исходников всё равно вызвала лёгкую эйфорию среди программистов. Ведь мы много лет гадали, как реализованы те или иные функции или API, а теперь можно посмотреть на код своими глазами.

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

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

Утечка началась через 4chan, торренты и файлообменник Mega. Файл с Mega был удалён практически сразу после жалобы правообладателя.



С торрентами пришлось повозиться. Хотя некоторые торрент-трекеры действительно реагируют на запросы об удалении информации, сайты вроде The Pirate Bay с радостью индексируют практически всё, включая утечки исходного кода. Здесь даже могущественная Microsoft мало что может сделать.

В крупных агрегаторах информации, как Google или Twitter, ссылки на исходный код были удалены практически полностью и очень быстро, но если ввести в строке поиска значение из magnet-ссылки, то оно встречается и у Google, и у Twitter (если вы хотите нарушить закон и скачать исходники, то совет в торренте нужен только файл nt5src.rar).

Это не кликабельная ссылка, а просто хеш, сочетание букв и цифр:

3d8b16242b56a3aafb8da7b5fc83ef993ebcf35b

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

Но через несколько дней после утечки началось самое интересное. 29 сентября некий разработчик под ником shaswata56 решил, что неплохо будет разместить исходный код Windows XP в репозиторий на Github, чтобы мир мог его увидеть и скачать для более удобного обсуждения, исправления ошибок и так далее. Интересно здесь то, что Github принадлежит Microsoft, поэтому Microsoft фактически сама разместила утечку собственного кода.



Учитывая серьёзность инцидента, можно было предположить, что Github мгновенно обнаружит и удалит репозиторий. Но этого не произошло. Несмотря на всю огласку, Microsoft потребовалось целых десять дней, чтобы что-то с этим сделать. Более того, ей пришлось отправить собственной компании уведомление DMCA с просьбой удалить код!

Я работаю в Microsoft Security Incident Response. Код, о котором идёт речь, взят из утечки исходного кода Windows XP, говорится в уведомлении DMCA от 8 октября в адрес Github. Контент на Github извлечён непосредственно из торрента (который также удалён), сказано в документе.

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

Очевидно, Microsoft ошибается в утверждении, что торрент удалён, поскольку magnet-ссылка широко разошлась в интернете.

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

Учитывая то, что в кеше Google тоже до сих пор доступны magnet-ссылки, есть другая версия. Возможно, Microsoft понимает, что все эти меры бесполезны. Может, она не слишком беспокоится или даже рада публикации исходников. Вдруг сообщество найдёт серьёзные баги в тех частях кода, которые до сих пор работают в Windows10 и Windows Server 2019 (а таких частей, наверняка, немало). И Microsoft сможет исправить эти ошибки.
Подробнее..

Эффективный фингерпринтинг через кэш фавиконов в браузере

16.02.2021 20:15:11 | Автор: admin

Демо

Фавикон сайта маленький значок .ico размером 16*16 или 32*32 пикселей на вкладке браузера. Помогает ориентироваться в сотнях вкладок. У твиттера синяя птичка, у Gmail красный символ почты, у Википедии жирное W.

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

Немецкий программист Йонас Штреле (Jonas Strehle) в репозитории на Github описывает метод установки неудаляемого суперкуки через фавиконы: Суперкуки через фавиконы присваивают посетителям сайта уникальные ID. В отличие от традиционных методов отслеживания, этот ID сохраняется практически навсегда и не может быть удалён пользователем с помощью простых методов. Метод отслеживания работает даже в режиме инкогнито. Суперкуки не удаляются при очистке кэша, закрытии браузера или перезапуске системы, использовании VPN или блокировщиков рекламы.

Как работает фингерпринтинг


Чтобы отобразить иконку, в код страницы вставляется такой атрибут:

<link rel="icon" href="http://personeltest.ru/aways/habr.com/favicon.ico" type="image/x-icon">

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

Когда пользователь заходит на сайт, браузер проверяет локальный F-Cache на наличие записи, содержащей URL-адрес активного веб-сайта. Если запись найдена, значок загружается из кэша. Если запись отсутствует, браузер отправляет GET-запрос, чтобы загрузить фавикон с сервера.

Такой механизм позволяет серверу довольно много узнать о посетителе. Комбинируя статусы доставленных и не доставленных фавиконов для определённых URL, клиенту присваивается уникальный шаблон (идентификационный номер). Затем ID сохраняется:

const N = 4;const ROUTES = ["/a", "/b", "/c", "/d"];const ID = generateNewID(); // -> 1010  (select unassigned decimal number, here ten: 10 -> 1010b in binary)

const vector = generateVectorFromID(ID); // -> ["/a", "/c"]  (because [a, b, c, d] where [1, 0, 1, 0] is 1 -> a, c)

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

const visitedRoutes = [];Webserver.onvisit = (route) => visitedRoutes.push(route);  // -> ["/b", "/d"]Webserver.ondone = () => { const ID = getIDFromVector(visitedRoutes) }; // -> 10  (because "/a" and "/b" are missing -> 1010b)

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

В этой уязвимости самое неприятное это то, насколько легко можно обойти традиционные методы, которые люди используют для защиты своей приватности. По словам Штреле, фингерпринтинг пробивает приватный режим Chrome, Safari, Edge и Firefox. Очистка кэша, VPN или блокировщик рекламы ничто не помешает вредоносным фавиконам.

К таким же выводам пришли исследователи из университета Иллинойса в опубликованной недавно научной работе "Tales of Favicons and Caches: Persistent Tracking in Modern Browsers": Мы обнаружили, что сочетание нашей техники отслеживания на фавиконах с фингерпринтингом через неизменяемые атрибуты браузера позволяет сайту восстановить 32-битный идентификатор трекинга за две секунды, говорится в исследовании. В связи с серьёзностью уязвимости мы предлагаем внести изменения в кэширование фавиконов браузерами, чтобы предотвратить эту форму трекинга. Мы передали наши результаты разработчикам поставщикам браузеров, которые в настоящее время изучают варианты смягчения последствий.

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

Браузер

Windows

MacOS

Linux

iOS

Android

Примечания
Chrome (v 87.0) + + + + + ?
Safari (v 14.0) ? + ? + ? ?
Edge (v 87.0) + + ? ? + ?
Firefox (v 85.0) + + ? ? ? Другой фингерпринтинг в режиме инкогнито
Brave (v 1.19.92) + + + ? ? ?

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

Редиректов
(N бит)
Кол-во различимых клиентов Время записи Время чтения Масштаб атаки
2 4 < 300 мс < 300 мс Один юзер с четырьмя браузерами
3 8 < 300 мс ~ 300 мс Примерная численность Кардашьянов
4 16 < 1 с ~ 1 с Кучка ваших соседей
8 256 < 1 с ~ 1 с Все ваши френды на Facebook
10 1024 < 1,2 с ~ 1 с Очень маленькая деревня
20 1 048 576 < 1,8 с < 1,5 с Небольшой город (Сан-Хосе)
24 16 777 216 < 2,4 с < 2 с Все Нидерланды
32 4 294 967 296 ~ 3 с < 3 с Все люди с доступом в интернет
34 17 179 869 184 ~ 4 с ~ 4 с Все люди с доступом в интернет и 4 браузерами у каждого
Подробнее..

Перевод Примеры грамотного применения SSH-шаблонов

17.02.2021 20:19:33 | Автор: admin


SSH-сертификаты очень мощный инструмент. Первоначально в удостоверяющем центре step-ca мы реализовали только минимальный набор функций для аутентификации по сертификатам пользователя и хоста. Затем добавили шаблоны сертификатов X.509, а ещё в августе прошлого года и SSH-шаблоны, в версии 0.15.2. Наконец, мы задокументировали эту функцию и готовы о ней рассказать.

Шаблоны для сертификатов SSH действуют аналогично шаблонам X.509: это JSON-файлы, написанные в Go text/template. Они применяются для настройки SSH-сертификатов, которые выдаёт step-ca. Давайте посмотрим, что представляют собой эти шаблоны и как их можно использовать.

По умолчанию шаблон пользовательского SSH-сертификата выглядит так:

{"type": {{ toJson .Type }},"keyId": {{ toJson .KeyID }},"principals": {{ toJson .Principals }},"extensions": {{ toJson .Extensions }},"criticalOptions": {{ toJson .CriticalOptions }}}

А вот SSH-сертификат, выданный по этому шаблону:

$ step ssh inspect id_ct-cert.pubid_ct-cert.pub:        Type: ecdsa-sha2-nistp256-cert-v01@openssh.com user certificate        Public key: ECDSA-CERT SHA256:iczSh1XiBBE36yfJcDidgp6fqY3qWx1RtEwFfAN9jDs        Signing CA: ECDSA SHA256:MKwRQ/SDKk/pCJbbCk5bfhZACjSjv7uZXLyc5n4Wx6k        Key ID: "carl@smallstep.com"        Serial: 2831574724231262409        Valid: from 2020-11-17T16:48:11 to 2020-11-18T08:49:11        Principals:                carl                carl@smallstep.com        Critical Options: (none)        Extensions:                permit-X11-forwarding                permit-agent-forwarding                permit-port-forwarding                permit-pty                permit-user-rc

Он позволяет юзеру carl (или carl@smallstep.com) пройти аутентификацию на любом SSH-хосте, который доверяет моему SSH CA. Сертификат включает в себя некоторые основные расширения:

  • permit-x11-forwarding: Разрешает переадресацию X11 (с помощью ssh -X) для запуска удалённых программ X11 на локальном дисплее.
  • permit-agent-forwarding: Разрешает переадресацию агента (с помощью ssh -A) для пересылки ключей из локального агента SSH на удалённый хост (подробнее про агента SSH см. здесь).
  • permit-port-forwarding: Разрешает переадресацию портов (туннель) с локального на удалённый порт (ssh -L) или с удалённого на локальный (ssh -R).
  • permit-pty: Очень важное расширение. Если хотите открыть интерактивную сессию в консоли, хост должен выделить вам pty (псевдо-tty). В противном случае не предусмотрено никакой интерактивности. Например, для проверки SSH-аутентификации на GitHub можно запустить ssh -T git@github.com (-T отключает запрос на pty).
  • permit-user-rc: Запуск личного RC-файла после подключения (находится в ~/.ssh/rc на удалённом хосте).

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

Примеры шаблонов сертификатов


Внесём несколько изменений в дефолтный шаблон.

Запрещаем переадресацию агента и портов

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

{"type": {{ toJson .Type }},"keyId": {{ toJson .KeyID }},"principals": {{ toJson .Principals }},"extensions": {           "permit-x11-forwarding": "",           "permit-pty": "",           "permit-user-rc": ""  },"criticalOptions": {{ toJson .CriticalOptions }}}

Встраиваем директиву force-command

ForceCommand это серверная директива конфигурации SSHD, которая вместо интерактивного терминала запускает на хосте альтернативную команду. Но с тем же эффектом можно встроить force-command прямо в сертификат в раздел Critical Options:. Может пригодиться для служебных аккаунтов, которым необходимо выполнить только одну команду, например, запустить задание в удалённой системе.

Ограничиваем соединения по адресам

Чтобы ограничить область использования сертификата, в него можно встроить список разрешённых IP-адресов (блоков CIDR).

Вот шаблон сертификата, который использует и source-address, и force-command.

{"type": {{ toJson .Type }},"keyId": {{ toJson .KeyID }},"principals": {{ toJson .Principals }},"extensions": {{ toJson .Extensions }},"criticalOptions": {"force-command": "echo \"Hello World\"","source-address": "10.20.30.0/24,1.1.1.1/32"}}

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

Вставляем разные значения для разных юзеров

Очевидно, пользователям нельзя давать право редактировать диапазон адресов. Следовательно, динамические значения должны поступать из надёжного источника.

Для этого в step-ca можно через поставщика OpenID Connect (OIDC) настроить провайдера OAuth на добавление к токену нестандартных требований (custom claim), содержащих блоки адресов CIRD, которые мы хотим добавить в сертификат этого пользователя.

Поставщик OIDC представляет собой идеальный способ выдачи SSH-сертификатов в step-ca. В статье DIY Single Sign-On for SSH я рассказывал, как настроить SSH CA, чтобы он выдавал краткосрочные SSH-сертификаты по ID-токенам от доверенного провайдера OAuth. Если step-ca настроен как доверенный клиент OAuth, он будет считывать поле email из токена ID и извлекать оттуда список участников SSH-сертификата (например, по полю carl@smallstep.com сгенерируются сертификаты для carl и carl@smallstep.com).

Но OIDC позволяет через шаблоны считать из токенов ID и другие поля. Вот где начинается настоящая магия. Таким образом, добавляем в каталог пользователей на стороне провайдера идентификации отдельное поле source_address и отражаем его в нашем ID-токене. Затем через шаблон SSH можно ввести значение из токена в сертификат. Вот шаблон:

{"type": {{ toJson .Type }},"keyId": {{ toJson .KeyID }},"principals": {{ toJson .Principals }},"extensions": {{ toJson .Extensions }},{{ if .Token.source_address }}"criticalOptions": {"source-address": "{{ .Token.source_address }}"}{{ else }}"criticalOptions": {{ toJson .CriticalOptions }}{{ end }}}

Аутентификация на GitHub по сертификату

Рассмотрим ещё один пример custom claim. С помощью GitHub Enterprise Cloud или GitHub Enterprise Server можно настроить GitHub на использование SSH-сертификатов. В частности, GitHub будет доверять вашему центру сертификации SSH. Но чтобы всё заработало, нужно создать для каждого пользователя отдельный SSH-сертификат с расширением login@github.com, в котором прописывается имя пользователя на GitHub. С помощью этого расширения сертификат аутентифицирует пользователя на GitHub Enterprise. И это здорово: один и тот же сертификат позволяет и подключиться к вашему серверу по SSH, и запушить код на GitHub.

Вот шаблон сертификата с поддержкой индивидуального расширения GitHub:

{"type": {{ toJson .Type }},"keyId": {{ toJson .KeyID }},"principals": {{ toJson .Principals }},"criticalOptions": {{ toJson .CriticalOptions }},{{ if .Token.ghu }}"extensions": {  "login@github.com": {{ toJson .Token.ghu }}}{{ else }}"extensions": {{ toJson .Extensions }}{{ end }}}

Для использования шаблона нужно добавить к токенам идентификации OIDC индивидуальное требование ghu (GitHub Username). Давайте подробно рассмотрим, как создать этот custom claim с помощью вашего провайдера OAuth.

Регистрация заявления у провайдера идентификации

Не все провайдеры идентификации поддерживают индивидуальные требования, но если поддержка всё-таки есть, то процесс довольно похож. Вот как это делается с помощью Okta:

  1. Добавьте приложение OAuth в Okta и установите доверие к нему у поставщика OIDC в step-ca, как описано в статье DIY SSO for SSH.


  2. Добавьте новое поле в каталог пользователей Okta (например, GitHub Username)
  3. Добавьте к OIDC-токену индивидуальное требование, например, с сокращённым названием ghu
  4. Теперь заполняем поле для тестового юзера и проверяем требование. В Okta есть инструмент тестирования токена ID. Или можно использовать step для проверки всего потока OAuth:

    OIDC_ENDPOINT="http://personeltest.ru/aways/[your organization].okta.com/oauth2/default/.well-known/openid-configuration"CLIENT_ID="[your OAuth client ID]"CLIENT_SECRET="[your OAuth client secret]"step oauth --oidc --provider $OIDC_ENDPOINT \    --client-id $CLIENT_ID --client-secret $CLIENT_SECRET \    --listen=":10000" --bare |step crypto jwt inspect --insecure
    

  5. Наконец, настройте step-ca для использования этого шаблона. Конфигурация поставщика должна ссылаться на файл шаблона:

    {  "provisioners": [    {      "type": "OIDC",      "name": "Okta",      "clientID": "[your OAuth client ID]",      "clientSecret": "[your OAuth client secret]",      "configurationEndpoint": "https://[your organization].okta.com/oauth2/default/.well-known/openid-configuration",      "listenAddress": ":10000",      "options": {        "ssh": {            "templateFile": "templates/certs/ssh/github.tpl"        }      }    },      ...  ]}
    

Что дальше


Мы добавили в документацию раздел о шаблонах SSH, где более подробно рассматриваются все параметры и переменные.

Если есть вопросы не стесняйтесь задавать.
Подробнее..

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

25.02.2021 16:13:17 | Автор: admin
Примечание: проблема решена. Сейчас национальный домен .cd уже не делегирует полномочия скомпрометированному нейм-серверу

TL;DR Представьте, что может произойти, если национальный домен верхнего уровня (ccTLD) суверенного государства попадет в чужие руки. Однако я (@Almroot) купил доменное имя, которое указано для делегирования NS в национальном домене Демократической Республики Конго (.cd), и временно принял более 50% всего DNS-трафика для этой TLD. На моём месте мог оказаться злоумышленник, который использовал бы эту возможность для MITM или других злоупотреблений.



Вступление


За неделю до Рождества я решил провести анализ всех записей NS для всех TLD в мире. И моё внимание привлекло одно обстоятельство. У домена scpt-network.com был указан код статуса EPP redemptionPeriod. Это означает, что владелец не перечислил деньги за продление домена. Если владелец продолжит игнорировать оплату, то у него отберут собственность и домен поступит в свободную продажу.

Довольно проблематичная ситуация, поскольку он входит в список NS-серверов, управляющих зоной .cd:

almroot@x:~$ dig NS +trace cd | grep "cd."cd.172800INNSns-root-5.scpt-network.com.cd.172800INNSigubu.saix.net.cd.172800INNSsangoma.saix.net.cd.172800INNSns-root-2.scpt-network.com.cd.172800INNSsabela.saix.net.cd.172800INNSns-root-1.scpt-network.com.

Я решил на всякий случай написать bash-скрипт, который уведомит меня при любом изменении EPP-статуса.

К моему удивлению, примерно через неделю пришло уведомление, что домен перешёл в статус pendingDelete.

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

Я изменил скрипт и начал поминутно пинговать регистратора на предмет дальнейших изменений статуса.

Вечером 30 декабря пришло уведомление. Я открыл ноутбук и купил доменное имя, чтобы оно не попало в чужие руки.



Поскольку оставались ещё три записи делегирования на SAIX (South African Internet eXchange, Южноафриканская точка обмена трафиком), национальный домен сохранил работоспособность (хотя скорость резолвинга любых доменов немного уменьшилась).

Завладев scpt-network.com, я мог настроить любой поддомен на своё усмотрение. Например, если создать новый поддомен ns-root-1 с A-записью, которая указывает на IP-адрес 1.3.3.7, то на этот адрес 1.3.3.7 пойдут DNS-запросы для зоны .cd. Любой DNS-ответ на эти запросы будет принят как легитимный.



Если не ответить на запрос, то абонент словит таймаут с кодом состояния SERVFAIL. Это хорошо, потому что при получении такого кода он попытается связаться с любым другим сервером имён (NS record) для этой зоны. Так он в конечном итоге попадёт в одну из нормальных записей SAIX и будет соответствующим образом перенаправлен в нужное место назначения.

Потенциальное влияние


Захват национального домена верхнего уровня суверенного государства имеет серьёзные негативные последствия, особенно если этот домен попадёт в руки киберпреступников или иностранного противника. Демократическая Республика Конго (ДРК) немаленькая страна. Это примерно 90 миллионов человек, не говоря о многочисленных международных компаниях и организациях, работающих в этой доменной зоне.

Угон DNS-записи TLD целой страны явление редкое, но не новое. Например, десять лет назад киберпреступники захватили домен бывшего Советского Союза (.su), а в 2015 году вьетнамские сайты Lenovo и Google (.vn) также стали жертвами угона DNS. Перенаправление DNS-трафика с легальных сайтов .cd на фишинговый сайт одна из очевидных возможностей для злоупотреблений, но есть и другие:

  • Пассивный перехват DNS-трафика
    для слежки или эксфильтрации данных
  • Создание новых доменных имён из воздуха
    представьте себе возможности для быстрой генерации новых доменных имён с переключением ботнета на новые командные серверы каждые несколько минут, так что их никто не успевает заблокировать (техника fast flux)
  • Атаки с удалённым выполнением кода (RCE) в локальных сетях
    жертвами станут компании, которые используют протокол WPAD (протокол автоматической настройки прокси)
  • Поддельные DNS-ответы на законные DNS-запросы
    полный захват корневых доменов в зоне .cd или проведение DDoS-атаки.

Например, я мог написать эксплоит для захвата конкретного домена в зоне .cd. Представьте, что для любых NS-запросов к google.cd я всегда возвращаю ответы ns-root-1.scpt-network.com (вместо этих четырёх: [ns1,ns2,n3,ns4].google.com). Абонент получит такой ответ, и отправит любые последующие DNS-запросы к ns-root-1.scpt-network.com.

Это также заставило меня задуматься: а что, если отвечать на все NS-запросы ссылкой на себя. Тогда для любого запроса, на который ответит 1.3.3.7, все поиски домена в конечном итоге пойдут по этой ссылке. И весь последующий сетевой трафик будет перенаправлен на 1.3.3.7, что может привести к DDoS-атаке.

На самом деле это также повлияет на доступность всей TLD, ведь 50% DNS-ответов станут неправильными. Силу (обеих) DoS-атак можно увеличить путём установки высокого TTL в ответах DNS.

Сделаем ещё один шаг вперёд. Скажем, я конкретно подделываю TXT-записи для сервера google.cd. С помощью поддельных текстовых файлов я обманываю
систему проверки DNS-01 у регистратора Lets Encrypt и получаю действительный сертификат для google.cd, после чего эффективно взламываю зашифрованный канал SSL/TLS.

Поскольку я могу контролировать делегирование NS-серверов для любого домена .cd и получить валидные сертификаты, то могу провести MITM-атаку даже если жертва использует SSL/TLS.

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

В то время как Google применяет различные контрмеры против таких злоупотреблений, можно с уверенностью сказать, что это не относится ко всем корневым доменам в зоне .cd. Дополнительную информацию о том, как удостоверяющие центры проверяют право собственности на домены, см. в BR 1.7.3.

И последнее, но не менее важное: имея привилегированный доступ на вышестоящий хост с контролем DNS, я могу проникнуть в локальные сети компаний (пример на скриншоте ниже), которые отправляют DNS-запросы для WPAD можно отслеживать их запросы, подделать ответы и перенаправить жертву для загрузки и выполнения вредоносной конфигурации прокси-сервера на JS. У протокола WPAD своя куча проблем, включая уязвимости RCE, как рассказывали хакеры из команды Project Zero в Google.



Исправление проблемы


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

Хотя один из контактов ответил и направил меня к коллеге, на момент написания этой статьи я не получил письменного подтверждения, что они устранили проблему. Но вскоре DNS-трафик перенаправили на scpt-network.net.

8 января я также отправил отчёт по программе Internet Bug Bounty в HackerOne, которая предлагает вознаграждение за ответственный взлом инфраструктуры интернета.

Заключение


Угон DNS-сервера несёт крайне негативные последствия, особенно если у злоумышленника плохие намерения. Эта уязвимость затрагивает не только один сайт, поддомен или один корневой домен. Жертвой фишинга, MITM или DDoS может стать абсолютно любой сайт .cd, включая сайты крупных международных компаний, финансовых учреждений и других организаций. А это вторая по численности страна Африки и популярная доменная зона.

На момент написания этой статьи я всё ещё владею доменным именем scpt-network.com хотя делегирование NS-запросов из зоны .cd прекратились примерно 8 января 2021 года после того, как я с ними связался. Эту операцию я провёл для того, чтобы предотвратить захват злоумышленниками доменной зоны Демократической Республики Конго, когда любой желающий мог угнать доменное имя одного из серверов, управляющих ccTLD. К счастью, в этом случае всё обошлось.
Подробнее..

Пришло время рассказать всю правду о взломе компании RSA

21.05.2021 12:08:14 | Автор: admin


У сотрудников компании RSA закончился десятилетний срок действия соглашений о неразглашении (NDA), так что они наконец-то смогли рассказать о событиях, которые случились в 2011 году. Эти события навсегда изменили ландшафт мировой индустрии информационной безопасности. А именно, это было первая в истории атака на цепочку поставок (supply chain attack), которая вызвала серьёзную обеспокоенность у американских спецслужб, мягко говоря.

Что такое атака на цепочку поставок? Если вы не можете напрямую атаковать сильного противника типа АНБ или ЦРУ, то вы находите их партнёра и внедряетесь в его продукт. Один такой взлом даёт доступ сразу в сотни серьёзно защищённых организаций. Так произошло недавно с SolarWinds. Но бывшие сотрудники компании RSA смотрят на SolarWinds и испытывают чувство дежавю. Ведь в 2011 году неизвестные хакеры получили доступ к самому ценному, что было в компании RSA хранилищу сидов (векторов генерации). Они используются для генерации кодов двухфакторной аутентификации в аппаратных токенах SecurID, а это десятки миллионов пользователей в правительственных и военных агентствах, оборонных подрядчиках, банках и бесчисленных корпорациях по всему миру.

Впрочем, обо всё по порядку.

Энди Гринсберг из журнала Wired поговорил с несколькими бывшими сотрудниками RSA. Один из них Тодд Литхэм (Todd Leetham), лысый и бородатый аналитик из отдела реагирования на инциденты, которого называли углеродной машиной для поиска хакеров. Именно он первым заподозрил неладное, обратив внимание, что один из пользователей вышел в сеть не со своего компьютера и с нестандартными правами. Он посмотрел логи этого юзера за несколько дней и стало понятно, что тут взлом. Хакеры окопались во внутренней сети.

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

Исходя из этих векторов генерации происходила генерация кодов двухфакторной аутентификации на токенах SecurID, которые раздавались сотрудникам клиента. То есть и токен, и сервер RSA независимо друг от друга генерировали одинаковые коды.

Алгоритм получения токен-кода


Согласно стандарту SecurID, каждому токену соответствует 128-битное случайное число начальный вектор генерации (сид). Также в каждый токен встроены часы. Токен-код результат работы запатентованного компанией RSA алгоритма, который в качестве параметров берёт текущее время и начальный вектор генерации. По токен-коду невозможно восстановить начальный вектор генерации, так как алгоритм работает в одну сторону.

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

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

Изучив сетевые логи, Литхэм пришёл к выводу, что эти ключи к королевству RSA действительно украдены.

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

Использовать взломанную учётку для входа на сервер, принадлежащий другой компании, и возиться с данными там, по признанию Литхэма, в лучшем случае является неортодоксальным шагом, а в худшем серьёзное нарушение законов США о несанкционированном доступе к информации. Но, глядя на украденную святая святых RSA на этом сервере Rackspace, он не колебался: Я был готов к последствиям, говорит он. В любом случае я не мог отдать наши файлы, и он ввёл команду на удаление файла и нажал Enter.

Через несколько мгновений в консоль пришёл ответ: Файл не найден. Он снова изучил содержимое сервера. Папка была пуста. Хакеры забрали базу с сервера за несколько секунд до того, как он попытался её удалить!

Он охотился за хакерами несколько суток днём и ночью, и вот теперь почти схватил за рукав убегавшего вора. Но тот буквально ускользнул сквозь пальцы, скрывшись в тумане с самой ценной информацией (как показало дальнейшее расследование, это могли быть хакеры из подразделения киберразведки APT1 Народно-освободительной армии Китая на базе войсковой части 61398 в пригороде Шанхая. Или кто-то искусно выдавал себя за них).


Расположение войсковой части 61398, источник

Через несколько дней RSA была вынуждена объявить о взломе. И это поистине изменило ландшафт кибербезопасности. Первая успешная атака на цепочку поставок, жертвами которой стали тысячи организаций, самые защищённые агентства и военные подрядчики. Только спустя десять лет случилось нечто подобное с червём NotPetya, а затем с системой компании SolarWinds (18000 клиентов по всему миру), но для того времени история RSA была беспрецедентной. Практически никто даже не предполагал, что можно проводить атаки таким образом через прокси в цепочке поставок.

Это открыло мне глаза на атаки типа supply chain, говорит Микко Хиппонен, главный научный сотрудник F-Secure, которая опубликовала независимый анализ инцидента RSA. И изменило мой взгляд на мир: если вы не можете проникнуть в цель, то находите технологию, которую использует жертва, и вместо этого проникаете туда.

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

Вопрос был вполне буквальным. Кража векторов генерации означала, что у тысяч клиентов RSA скомпрометирована критическая защита 2FA. После кражи векторов генерации злоумышленники могли вводить коды с токенов SecureID практически в любой системе.

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

Анализ инцидента показал, с чего началась атака с невинного письма по электронной почте, которое получил один сотрудник австралийского подразделения, с темой План набора персонала на 2011 год и приложенной электронной таблицей Excel. Внутри был скрипт, который использовал 0day-уязвимость в Adobe Flash, устанавливая на компьютер жертвы хорошо известный троян Poison Ivy.

Точка входа в сеть RSA совершенно банальное внедрение, которое бы не сработало, если бы жертва работала под управлением более новой версии Windows или Microsoft Office или был ограничен доступ к установке программ на свой компьютер, как рекомендуют сисадмины во многих корпоративных и правительственных сетях.

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

На компьютере австралийского сотрудника кто-то использовал инструмент, который извлекает учётные данные из памяти. Затем он использует эти учётки для входа в другие машины. Потом сканируется память этих новых компьютеров в поисках новых учёток и так далее, пока не найдены логины привилегированных администраторов. В конце концов хакеры добрались до сервера, содержащего учётные данные сотен пользователей. Сегодня эта техника кражи учётных данных является распространённой. Но в 2011 году аналитики были удивлены, увидев, как хакеры продвигаются по всей сети: Это был действительно самый жестокий способ эксплойтить наши системы, который я когда-либо видел, говорит Билл Дуэйн (Bill Duane), опытный инженер-программист и разработчик алгоритмов RSA.

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

Именно в разгар этой лихорадочной схватки Литхэм поймал хакеров на краже сидов с центрального хранилища, что предположительно было их приоритетной целью. Вместо обычных подключений каждые 15 минут, Литхэм видел в логах тысячи непрерывных запросов каждую секунду. Хакеры собирали векторы генерации не на одном, а на трёх скомпрометированных серверах, передавая запросы через ещё одну подключённую машину. Они распределили коллекцию сидов на три части, перенесли их на удалённый сервер Rackspace, а затем объединили в полную базу хранилища RSA. Я подумал: это офигенно круто, говорит Литхэм. Я вроде как восхищался этим. Но в то же время понимал, что мы в полном дерьме.

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

Паника


Поздно ночью служба безопасности узнала, что хранилище ограблено. Билл Дуэйн сделал звонок с предупреждением, что они физически отключат столько сетевых соединений, сколько необходимо, чтобы ограничить ущерб и остановить дальнейшую кражу данных. Они надеялись защитить информацию о клиентах, которая сопоставляется с конкретными векторами генерации. Кроме того, они хотели предотвратить кражу приватного ключа шифрования, необходимого для расшифровки сидов. Дуэйн с менеджером вошли в дата-центр и начали один за другим отсоединять кабели Ethernet, отключая все серверы и даже веб-сайт компании: Я фактически закрыл бизнес RSA, говорит он. Я искалечил компанию, чтобы остановить любую потенциальную дальнейшую публикацию данных.

На следующий день генеральный директор RSA Арт Ковиелло (Art Coviello) сделал публичное заявление о том, что взлом продолжается. Масштабы вторжения всё увеличивались по мере раскрытия новых деталей. О взломе хранилища сидов SecurID поначалу не было известно, но когда вскрылся этот факт, руководству нужно было принять решение. Некоторые советовали скрыть этот факт от клиентов (среди них спецслужбы, разведка, армия США). Но всё-таки решили раскрыть информацию персонально обзвонить каждого клиента и заменить все 40 с лишним миллионов токенов. Но у RSA и близко не было в наличии такого количества токенов Только через несколько недель компания сможет возобновить производство, и то в меньшем количестве.

Группа из почти 90 сотрудников RSA заняла конференц-зал и начала многонедельный обзвон всех клиентов. Они работали по сценарию, проводя клиентов через защитные меры, такие как добавление или удлинение PIN-кода как части логина SecurID, чтобы усложнить репликацию хакерами. Во многих случаях клиенты начинали орать, вспоминает Дэвид Кастиньола (David Castignola), бывший директор по продажам RSA в Северной Америке. Каждый сделал по сотне таких звонков, даже топ-менеджерам и руководству пришлось этим заниматься (клиенты встречались слишком важные).

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

На самом деле, к тому времени АНБ и ФБР уже прислали своих людей, чтобы расследованию компании, также как и оборонный подрядчик Northrop Grumman и компания по реагированию на инциденты Mandiant (по случайности, сотрудники Mandiant уже были на месте во время взлома, устанавливая сенсоры для системы безопасности в сети RSA).

Сотрудники RSA начали принимать решительные меры. Обеспокоенные тем, что телефонная система может быть скомпрометирована, компания сменила операторов связи, перейдя с AT&T на Verizon. Руководители не доверяли даже новым телефонам, они проводили личные встречи и передавали бумажные копии документов. ФБР, опасаясь крота в RSA из-за очевидного уровня знаний злоумышленников о системах компании, начало проверять биографические данные всех сотрудников.

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

Тем временем команда безопасности RSA и сторонние специалисты, привлечённые на помощь, начали разрушать здание до фундамента, как они выражались. На каждой машине, к которой прикасались хакеры, форматировались диски, и даже на соседних машинах. Мы физически обошли всё вокруг, и если на компьютере были хакеры, мы всё стирали, говорит Сэм Карри (Sam Curry), бывший директор по безопасности RSA. Если вы потеряли данные, очень жаль.

Вторая волна


В конце мая 2011 года, примерно через два месяца после объявления об инциденте, RSA всё ещё восстанавливалась и извинялась перед клиентами. Но здесь пошла вторая волна.

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

Спустя два дня агентство Reuters раскрыло имя взломанного подрядчика: это был Lockheed Martin, настоящая золотая жила для промышленного шпионажа.


Многофункциональный истребитель-бомбардировщик пятого поколения F-35 Lightning II производства Lockheed Martin

В последующие дни в новостях упоминались оборонные подрядчики Northrop Grumman и L-3 Communications, говорилось о хакерах с векторами генерации для токенов SecurID, хотя конкретных доказательств никто не предоставил, по понятным причинам, ведь речь идёт о военных подрядчиках (см. топ-100 подрядчиков правительства США).

Однако в июне 2011 года исполнительный директор RSA признал, что украденные сиды действительно использовались в атаке на Lockheed Martin. Спустя десять лет он уже отказывается от своих слов. Теперь бывшие руководители компании говорят, что использование сидов RSA никогда не было доказано.

Хотя в 2013 году представители Lockheed Martin на форуме Kaspersky Security Analyst Summit в Пуэрто-Рико подробно рассказали, как хакеры использовали векторы генерации кодов для токенов SecurID в качестве ступеньки для проникновения в сеть.

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

АНБ, со своей стороны, никогда особо не сомневалось в роли RSA в последующих взломах. На брифинге в Сенатском комитете по вооружённым силам через год после взлома директор АНБ генерал Кит Александер (Keith Alexander) заявил, что взлом RSA привёл к тому, что по крайней мере один американский оборонный подрядчик стал жертвой лиц, владеющих поддельными удостоверениями, а Министерство обороны было вынуждено заменить все токены RSA.

Когда стало известно о причастности группировки APT1, Билл Дуэйн распечатал фотографию их штаб-квартиры в Шанхае и приклеил к доске для игры в дартс в своём кабинете.

Дуэйн ушёл из RSA в 2015 году после более чем 20 лет работы в компании. Автор статьи в Wired Энди Гринберг задал ему такой вопрос: Как ты думаешь, в какой момент история со взломом RSA действительно закончилась: после отключения серверов в дата-центре? Или когда АНБ, ФБР, Mandiant и Northrop закончили расследование и ушли?. Инженер ответил: Мы считали, что атака никогда не закончилась. Мы знали, что они оставили бэкдоры и смогут проникнуть в сеть когда захотят.

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

Что касается Тодда Литхэма, то он наблюдал фиаско SolarWinds в течение последних шести месяцев с мрачным чувством дежавю. Выводы из истории RSA он формулирует в более резких выражениях, чем его коллега. По его мнению, это было редкое свидетельство того, как хрупка сегодня мировая система информационной безопасности: Это карточный домик перед началом торнадо, говорит он.

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

Фермеры в США вынуждены взламывать тракторы, чтобы просто починить их

12.02.2021 16:06:23 | Автор: admin


Люди начали выращивать еду около 10000 лет назад, но древние сапиенсы и представить не могли, что в будущем для сбора кукурузы придётся сначала установить пиратскую украинскую прошивку, а потом разбираться в кодах неисправностей по протоколу OBD-II.

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

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

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


John Deere американский вариант трактора Беларус. На фотографии олдскульная модель 1977 года, которую можно отремонтировать своими руками. По этой причине сейчас выросли цены на старые тракторы

Продукты, которые мы используем в повседневной жизни, становятся более технологичными, так что мы всё сильнее зависим от компьютерных систем. Компании это понимают это и стремятся сохранить контроль над программным обеспечением после продажи, чтобы все ремонтные работы приносили прибыль. Здесь три главные статьи дохода: 1) продажа комплектующих; 2)сервисные центры; 3)сертификация партнёров. За их счёт производитель значительно увеличивает маржу. Вместо низкой маржи 5-10% обычного тупого производителя, продвинутый современный бизнес получает 40-50% с каждого устройства за счёт добавленной стоимости. Вот чем топовые бренды 21 века типа Tesla и Apple отличаются от обычных производителей типа Ford и Huawei: они строят бизнес на интеллектуальной собственности, которая приносит гораздо больше прибыли, чем тупая мануфактура.


Тачскрин в салоне. В современном тракторе John Deere всеми системами управляет компьютер

Но из-за того, что всеми системами управляет компьютер, фермер не может отремонтировать технику самостоятельно, потому что не имеет доступа к проприетарным диагностическим инструментам. Ему придётся завезти трактор к официальному дилеру (за десятки километров) или ждать, когда приедет техник из компании John Deere.


Дэйв Алфорд изучает справочник программных кодов, чтобы выяснить причину поломки трактора John Deere 8520T, источник

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

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

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

Сейчас по всей американской глубинке недовольные фермеры используют для взлома прошивки из Восточной Европы (говорят, что из Польши и Украины). Хакерский софт продаётся на форумах, куда вход по инвайтам.




DIY-форум для фермеров

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


Распиновка и схема коннектора J1939 OBD II

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


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

Хотя пиратская прошивка законна, но это не значит, что она безопасна, надёжна или удобна. Вот почему сообщество упорно добивается открытия официальной прошивки. Движение Right to Repair требует принять законы, по которым производители будут обязаны продавать потребителям и независимым мастерским свои запчасти, инструменты и информационные системы. Смысл в том, что если для ремонта не потребуется разрешение производителя, то процедура станет гораздо дешевле.


Модель John Deere 9620RX можно найти у дилеров за $389500 (б/у)

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

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

На сегодняшний день как минимум 20 штатов рассматривают Закон о праве на ремонт (Right to Repair Act), который продвигает Repair Association. Есть надежда, что законодательство сработает и позволит создать более справедливую экосистему по ремонту и апгрейду техники.

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

Перевод Википедия купается в деньгах зачем молить о пожертвованиях?

01.06.2021 16:23:51 | Автор: admin
Проект гораздо богаче, чем кажется.



Некоммерческая организация Wikimedia Foundation (WMF), которая владеет Википедией и другими сайтами UGC, вот-вот достигнет десятилетней цели: собрать $100 млн в долгосрочном резерве Wikimedia Endowment. Это произойдёт на пять лет раньше, чем планировалось. Объём чистых активов (net assets) составляет около $200млн по состоянию на июнь прошлого года. Сейчас уже около $300млн. Доходы непрерывно растут. Согласно внутренним документам, за первые девять месяцев текущего финансового года фонд собрал пожертвований на $142 млн и уже побил рекорд прошлого года.

Эта информация может удивить доноров и пользователей по всему миру, которые видели баннеры для сбора средств в Википедии. Их показывают в разное время в разных странах. В прошлом году их впервые начали крутить в Индии. В настоящее время эти баннеры показывают жителям охваченной пандемией Латинской Америки. Они создают впечатление, что WMF с огромным трудом поддерживает Википедию в рабочем состоянии Послания жалобные: В этот четверг Википедия действительно нуждается в вас. Это уже десятое обращение, которое мы вам показали. 98% наших читателей не жертвуют, они отворачиваются Мы просим вас, пожалуйста, не надо скроллить от нас (We ask you, humbly, dont scroll away).

Согласно примерной оценке вице-президента по разработке WMF Эрика Меллера, в 2013 году для поддержки Википедии вполне хватило бы $10 млн. Что же делает WMF с остальной суммой? Средства идут на зарплату сотням сотрудников и в резерв на чёрный день. У фонда есть амбициозные планы стать инфраструктурой экосистемы свободных знаний. Поэтому он говорит читателям Википедии, что их деньги действительно нужны. Хотя организация сейчас богаче, чем когда-либо в своей истории.

В 2016 году WMF объявил о создании резервного фонда Wikimedia Endowment совместно с Tides Foundation. Это было в день 15-летия Википедии. Цель накопить $100млн в течение десяти лет в качестве постоянного источника финансирования для процветания Википедии в будущих поколениях.

Всего через пять лет фонд собрал более $90 млн, а начальной цели в $100 млн достигнет в этом году благодаря крупным пожертвованиям от Amazon, Google, Facebook и других компаний вкупе с традиционными пожертвованиями, а также $25 млн от самого WMF.

Примечательно, что пожертвования в резервный фонд не включены в отчётность по чистым активам WMF ($180 млн по состоянию на июнь 2020 года) или годовой доход ($130 млн). Однако деньги, которые WMF перечисляет в этот фонд, отражаются в статье расходов (Премии и гранты). Эти два факта скрывают, что WMF в течение последних пяти лет де-факто работает с гораздо большим профицитом, чем указано в финансовых отчётах. Отчёты показывают увеличение чистых активов за данный период всего на $100 млн. На самом деле общий объём средств WMF увеличился вдвое.

Wikimedia Endowment не единственные деньги, которые Wikimedia направляет в Tides Foundation. В прошлом году, когда у WMF буквально не знала, как распорядиться огромным объёмом финансовых поступлений, а общественные мероприятия были отменены из-за пандемии, она дополнительно перевела $8,7 млн в новый фонд Tides Advocacy.

Кроме того, WMF открывает коммерческую фирму под названием Wikimedia, LLC. Она будет продавать API-сервисы крупным технологическим компаниям, облегчая им обработку контента Wikimedia, включая контент для голосовых помощников, такие как Siri от Apple и Alexa от Amazon, а также инфобоксы в поисковой выдаче Google. Все эти умные устройства Интернета вещей сейчас используют контент из Википедии, чтобы создать впечатление всезнаек.

Проект Wikimedia LLC тревожит многих редакторов-добровольцев Википедии. Они рассматривают прибыль как потенциально развращающее влияние. И существует явное неравенство в том, что штатным сотрудникам WMF платят, в то время как волонтёры работают бесплатно. Википедия составлена из примерно трёх миллиардов индивидуальных правок. Средняя правка в настоящее время приносит WMF около 4,3 цента в годовом доходе, и гораздо больше прибыли крупным технологическим компаниям. Википедисты с сотнями тысяч правок могут почувствовать, что кто-то другой наслаждается плодами их труда.

Наличие огромного богатства WMF особо не повлияло на внешний вид Википедии для читателя. Путешественник из 2007 года, когда Википедия вошла в топ-10 сайтов интернета, не заметит особой разницы. Но сам WMF изменился до неузнаваемости. В 2007 году в организации работало 11 сотрудников, а расходы составили $2млн.

Перенесёмся в 2021-й. В апреле из WMF ушла CEO Кэтрин Махер, так что фонд разместил вакансию. Там указана численность сотрудников WMF более 500 человек. Топ-менеджеры зарабатывают от $300000 до $400000 в год. Более 40 человек занимаются исключительно сбором средств. Современные баннеры учитывают количество показов каждому человеку (Привет, канадский читатель, похоже, вы часто используете Википедию; это здорово! Нам неловко, но в этот вторник нужна ваша помощь. Это десятое обращение, которое мы вам показали...) и умоляют: Пожалуйста, не надо скроллить от нас (dont scroll away) фраза показала удивительно высокую эффективность в A/B-тестировании. В декабре прошлого года читателям, отклонившим баннер, демонстрировали плакучий смайлик.



WMF снова и снова подчёркивает, что Википедия ничего не продаёт. Но собственные объявления для сбора средств описаны как баннеры, говорящие Мы никогда не будем показывать рекламу.

Это важный аспект пиара WMF. За несколько дней до ухода из WMF Кэтрин Махер выступила в ежедневном шоу Тревора Ноа (жена PR-консультанта WMF Крейга Минассиана из Clinton Foundation является продюсером шоу).

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

В бодром ответе Махер никак не упомянула огромные денежные резервы WMF. Зато подчёркнула, что отсутствие рекламы причина, по которой Википедии настолько доверяют, см. видео с отметки 4:30:


Это видео опубликовано на YouTube в комплекте с кнопкой для пожертвований: Помогите Википедии оставаться свободной, независимой и живой в онлайне (Help Wikipedia Stay Free, Independent & Online). (кнопка доступна не во всех странах прим. пер.).

Прошлым летом WMF отчитался о новых финансовых рекордах, а сразу после этого впервые в истории запустил кампанию по сбору средств в Индии, предложив читателям пожертвовать по 150 рупий (два доллара). Баннеры с надписями Википедия действительно нуждается в вас, Нам нужно, чтобы вы сделали пожертвование для защиты независимости Википедии, Помогите сохранить Википедию в интернете вызвали в Индии опасения, что Википедия умирает или может перейти на платную подписку.

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


Чёрный: чистые активы (без учёта резерва Wikimedia Endowment, в настоящее время на уровне $90+ млн)
Зелёный: доход (за исключением пожертвований третьих лиц в резерв Wikimedia Endowment)
Красный: расходы (включая выплаты в Wikimedia Endowment)


Этот год не стал исключением. В течение первых трёх кварталов годовая цель WMF и Wikimedia Endowment на текущий финансовый год оказалась превышена. Её пришлось увеличить со $108 млн до $125 млн. Но эту цель также к концу марта превысили на $17 млн. Тем не менее, несколько недель спустя фонд WMF начал сбор средств в охваченной пандемией Южной Америке. Читателей просят смиренно пожертвовать деньги, чтобы защитить независимость Википедии и показать редакторам-волонтёрам, что их работа имеет значение (некоторых из волонтёров это совсем не радует).

Финансовая независимость WMF явно в полной безопасности. Так что же происходит? Официальный ответ WMF: денег на чёрный день не бывает слишком много. Кроме того, у WMF амбициозные планы к 2030 году стать глобальной инфраструктурой для экосистемы свободных знаний. Организация хочет создать справедливый мир знаний (knowledge equity), в котором люди будут иметь такой же доступ к информации на родном языке, как и граждане первого мира на своём языке. Поэтому требуется постоянное увеличение бюджета. Для этих целей и предназначен денежный краник из Википедии, который можно открыть в любой момент.

В разгар пандемии жители Аргентины и Уругвая опасаются за свои жизни и источники средств к существованию, а WMF слёзно просит пожертвовать на независимость Википедии.

Возможно, людям лучше не видеть эти призывы.
Подробнее..

Перевод Почему я по-прежнему пользуюсь RSS

08.02.2021 20:16:10 | Автор: admin


Я твёрдо верю, что Интернет и его философия максимально проявились именно в RSS.

RSS или Really Simple Syndication является (или был в прошлом, в зависимости от вашей точки зрения) средством, которое объединяет в один канал практически все онлайн-ресурсы. Вы заходите на сайт, если он вам нравится, то добавляете его RSS в свой любимый ридер и с этого момента мгновенно получаете уведомления о любом новом контенте. Вот так просто.

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

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

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

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

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

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

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

  • Reddit по-прежнему поддерживает RSS, достаточно добавить /.rss в конец заданного URL.
  • GitHub позволяет добавить фид активности аккаунтов/организаций, за которыми вы следите, если нажать на значок фида в нижней части страницы вашего аккаунта.

    В коде страницы с коммитами любого проекта есть ссылка на фид такого вида:

    <link href="http://personeltest.ru/aways/github.com/cloudera/flume/commits/master.atom" rel="alternate" title="Recent Commits to flume:master" type="application/atom+xml">
    

  • На YouTube тоже есть поддержка RSS: достаточно вставить ID канала (серию цифр и символов из URL на главной странице канала) в следующий адрес:

    www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID
    

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

Возможно, его золотой век и закончился, но RSS ещё чувствует себя вполне бодрячком при наличии таких сервисов, как Feedly и Newsboat (рекомендую), а также множеством мобильных приложений на любой платформе, позволяющих наслаждаться Интернетом в его лучшем виде.
Подробнее..

Новая версия нашего самописного плагина, который скачали 250 тысяч раз

03.02.2021 14:08:11 | Автор: admin

Привет, коллеги!

В феврале необязательно доставать чернила и плакать можно и радоваться.

Во-первых, Grafana заапрувила новую версию нашего плагина для мониторинга Kubernetes: KubeGraf v.1.5.0 доступен для инсталляции.

Во-вторых, оказалось, что за полтора года с момента выхода первой версии плагин скачали четверть миллиона раз!

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

Маленький дисклеймер:

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

  • интеграция с k8s-api для построения карты ваших приложений, сгруппированных по неймспейсам / нодам-кластера + привязка к конкретным podам/сервисам;

  • сводная страница со всеми ошибками / предупреждениями о работе нод и приложений кластера;

  • возможность инсталляции плагина с облачными k8s-провайдерами через авторизацию с помощью bearer-tokena.

А что нового в пятом релизе? Много разного и полезного:

  • совместимость с последними версиями Grafana;

  • добавлена информация и визуализация лимитов по cpu/memory, добавлена индикация при превышении requested и приближению к limit, а также индикация того, что для какого-либо приложения не настроены requests/limits;

  • в дашбордах по мониторингу deployments/daemonsets/statefulsets в разделе Templating теперь выводятся только те namespaceы, в которых содержатся ресурсы данного типа;

  • в дашборде мониторинга конкретных podов исправлено отображение потребления cpu/memory;

  • таблица с алертами и предупреждениями отсортирована в соответствии с severity (info/warning/critical);

  • доработана инструкция по установке плагина и исправлены k8s-манифесты, необходимые для его установки (добавлены namespaceы);

+ мелкие доработки интерфейсов и навигации.

Пользуйтесь!

Кстати

Кстати, в качестве вспомогательной утилиты в процессе разработки нашего плагина мы создали helm-чарт, с помощью которого вы можете установить любую версию плагина из репозитория с его исходным кодом (например, используя определенный тег), не дожидаясь её появления в grafana-plugins-repository.

Все так же ждём ваших звездочек, issue и pull requests в нашем репозитории.

Обсудить плагин можно в нашем телеграм-чате или в Slack.

Подробнее..

Старый DVD-привод превращается в лазерный микроскоп

09.02.2021 14:04:30 | Автор: admin


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

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

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

Cканирование осуществляется путём перемещения лазера по двум осям в координатной сетки: x и y. Словно сканер, он проходит по всей поверхности объекта и замеряет отражённый сигнал. Изображение составляется в специальном программном обеспечении, которое объединяет воедино результаты сканирования каждой точки.


Лазерная головка CD/DVD

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



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


Принцип конфокальной визуализации запатентован в 1957 году Марвином Минским, Dahn

Разрешение изображения определяется количеством измерений, сделанных в направлении x, и количеством линий в направлении y. Максимальное разрешение ограничено апертурой объектива и длиной волны лазера, как и в обычных оптических микроскопах. При сканировании флуоресцентных веществ разрешение часто ограничено силой сигнала. Его можно увеличить за счёт использования более чувствительных фотодетекторов или увеличения интенсивности освещающего лазера.


Белок бета-тубулин в клетке ресничной инфузории Tetrahymena визуализируется с помощью флуоресцентных антител. Фото получено с коммерческого конфокального микроскопа, Павел Яснос

Какое разрешение у лазерных головок CD и DVD? Очевидно, его должно быть достаточно для считывания ямок на поверхности компакт-диска, которыми кодируется информация (0 и 1).

У дисков DVD эти ямки примерно вдвое меньше по размеру, чем у CD, а у HD DVD ещё вдвое меньше.



Конструкция микроскопа GaudiLabs


Ребята из швейцарской лаборатории GaudiLabs начали с проверки концепции, что прибор в принципе возможно сконструировать.


Первый прототип

Конструкция микроскопа состоит из двух лазерных головок. Первая излучает лазер и сдвигает его по оси x. На второй закреплён сканируемый образец она движется в направлении y. Вместо фотодетектора используется простой фотодиод. Катушки контролирует схема Arduino с приводом, а изображения обрабатывает опенсорсная утилита Processing. Разрешения сканирования около 1,1 мкм (толщина человеческого волоса около 50мкм).

Для второго прототипа была изготовлена печатная плата с микроконтроллером Arduino Micro со специальными коннекторами для лазерных головок.


Верхняя и нижняя стороны печатной платы, куда крепятся две лазерные головки (репозиторий на GitHub со схемами и программным обеспечением)

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

  • Тип лазера (ИК, красный, синий для головок CD, DVD и Blu-Ray)
  • Мощность лазера
  • Положение сканирования
  • Разрешение сканирования
  • Сенсор (A0, S1, S2, RF, DIF)
  • Цветовая схема и яркость

Вот как выглядят ямки на поверхности CD-ROM:


Ямки на поверхности CD-ROM, сфотографированные самодельным лазерным сканирующим микроскопом

Некоторые другие фотографии:


Сканы бактерий с разным разрешением и разными цветовыми схемами


Лазерные сканы клеток дрожжей

В данном проекте использовались головки PHR-803T из привода Xbox 360 (HD DVD).

Конечно, GaudiLabs далеко не первые, кто сделал лазерный микроскоп из оптического DVD-привода. Например, немецкий инженер Ханнес Золинер выполнил аналогичный проект в рамках своей магистерской диссертации.



Лазерный микроскоп Ханнеса Золинера

Фокусировка в микроскопе Золинера

Процесс сканирования в микроскопе Золинера

На сайте Instructables есть пошаговая инструкция для Arduino по сборке.

См. также научные статьи 2016 и 2018 годов с описанием подобных установок: Hacking CD/DVD/Blu-ray for Biosensing (ACS Sens. 2018, 3, 7, 12221232, doi: 10.1021/acssensors.8b00340) и Generating SEL and SEU with a class 1 laser setup (конференция RADECS 2016, doi: 10.1109/RADECS.2016.8093163).

Дополнительно:
Как мы делали лазер из DVD-RW привода (Хабр, 2013).
Подробнее..

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

18.05.2021 18:11:11 | Автор: admin

Привет! Я Илья Тананаев. Руковожу отделом первой линии техподдержки в ITSumma. И хочу поделиться опытом, как из поиска решения проблемы пропущенных чатиков с клиентами мы построили кузницу кадров. Успешно успевая при этом обрабатывать 3k+ клиентских обращений в сутки.

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

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

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

С чего всё началось

ITSumma начиналась с того, что мы помогали сайтам выдерживать нагрузки и не падать при любых обстоятельствах. Сейчас, спустя 13 лет после основания компании, техподдержка уже далеко не единственное направление нашей работы, но по-прежнему существенное. У нас большой отдел эксплуатации, который следит за инфраструктурой клиентов и реагирует на инциденты 24/7 с SLA в 15 минут.

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

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

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

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

Итерации решения

Сначала первая линия не работала 24/7, да и в принципе, не сразу взяла на себя работу с вообще всеми клиентами. Тем не менее, когда мы вышли на две стабильные смены с 7 утра по Москве (с 12 по Иркутску наш стандартный режим для большинства сотрудников) и с 11 по Москве в будние дни, это уже сильно сняло нагрузку с админов и помогло упорядочить работу. Мы поняли, что первая линия действительно полезна, а от админов круглосуточной техподдержки поступил запрос на работу первой линии не только в дневное время.

В 2019-м мы ввели еще смены для подстраховки на время пиковой нагрузки по будням с 10 утра по Москве. А позже, проанализировав ситуацию, решили, что нужно переводить первую линию на 24/7 чтобы помогать техподдержке всё время.

Итоги первого года работы первой линии:

  • Избавили квалифицированных админов от рутины по звонкам и приёму обращений клиентов, сделав их работу более упорядоченной.

  • Ответственным за SLA стал не только отдел эксплуатации, но и первая линия поддержки.

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

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

  • Высвободили часть ценного времени ведущих админов, тем самым получив ресурс для роста компании.

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

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

Расписание для людей

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

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

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

  • Думали было над 12-часовыми сменами вперемежку день/ночь но даже не стали пробовать на практике: поразмыслив, поняли, что это был бы жестокий удар по биоритму и здоровью.

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

  • Отдельно ночные и дневные дежурные вариант, которые устроил больше всего.

Дополнительно по мере развития отдела появились еще 8-ми часовые смены на дневное пиковое время в это время нагрузка самая большая, и 12 часов подряд её выдерживать тяжело. Сейчас у специалиста первой линии есть не только возможность выбрать подходящий ему график, но и расставить приоритеты для возможной ротации, как по времени, так и по отделам. Сотрудник оценивает по 5-балльной шкале удобство возможного времени работы, а также оставляет комментарии о том, какие у него предпочтения, либо внерабочая активность.

Развитие специалистов первой линии поддержки

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

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

Но это нам теперь понятно, что развитие выгодно и сотрудникам, и нам, как компании. А началось все очень прозаично и прагматично.

Таско-дни или командировки в другие отделы

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

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

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

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

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

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

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

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

Направления для командирования сотрудников первой линии поддержки такие:

  • документация;

  • мониторинг;

  • эксплуатация;

  • дежурства второй линии;

  • аккаунтинг;

  • и даже разработка.

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

Это нас возвращает к тому, зачем понадобилось автоматизировать обучение. Компания быстро развивается, есть много возможностей для роста, и в итоге достаточно часто на первую линию нужны новички (не путать с текучкой, её у нас как раз нет). Так настройка системы обучения и knowledge sharing превратились в приоритетные задачи.

Онбординг-курсы

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

Документирование нашей работы прошло довольно стандартный путь:

  • Понятно, что сначала документации как таковой не было были разрозненные наброски.

  • На первой итерации по улучшению я выделил время и постарался её систематизировать стало чуть лучше, но еще не достаточно.

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

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

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

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

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

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

При проверке скрипта на корректность перед запуском на какие критерии обращаем внимание?

1. block for commit.

2. block for delay.

3. PS/SQL file successfully completed.

4. exit.

5. set auto commit off.

6. current schema.

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

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

Можем ли мы изменять категорию задач вручную в созданной задаче? Если да, то где?

a. Можем, но аккуратно в Состояние.

b. Нет

c. Можем. В созданной задаче в правой колонке. Там, где Категория

d. Неее. Такого быть не может

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

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

После доработки документации онбординг курсы это лучшие инвестиции в развитие отдела.

Потратив один раз время и вложившись в автоматизацию стартового обучения, мы:

  • Сэкономили время опытных специалистов на онбординг новичков.

  • Уберегли главного наставника новичков от выгорания.

  • Сделали онбординг качественнее (и это, пожалуй, главное). Когда один и тот же человек пятый-десятый раз рассказывает одно и то же, он легко может что-то пропустить, потому что путается, что кому уже рассказывал. С автоматическими курсами такое не произойдет.

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

Результаты

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

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

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

Сейчас в первой линии работает 13 человек, из них 4-5 постоянно находятся в командировках в бэк-отделах, получают новые знания и повышают имеющиеся. За время этого не очень-то длинного эксперимента уже 9 человек пошли на повышение. Например, первая линии поддержки была отправной точкой для тимлида отдела дежурств и тимлида отдела документации, специалистов в отделах документации, мониторинга, бэкапов и аккаунтинга.

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

Takeaways

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

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

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

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

Подробнее..

Обогащение данных что это и почему без него никак

15.04.2021 06:04:33 | Автор: admin

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

Сам термин "обогащение данных" это перевод англоязычного Data enrichment, который проводит аналогию между данными и... ураном. Точно так же, как промышленники насыщают урановую руду, увеличивая долю изотопа 235U, чтобы её можно было использовать (хочется надеяться, в мирных целях), в процессе обогащения данных мы насыщаем их информацией.

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

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

Заметим, что обогащение данных термин широкий, и получать данные из внешних источников можно весьма разнообразными способами. Например, представим бизнес-процесс регистрации нового клиента. Если в данных этого клиента отсутствует e-mail, то взаимодействие с внешним источником в этом случае может быть буквально следующим: взяли телефон, позвонили клиенту, узнали его e-mail. Получается, этот процесс может включать в себя такие совершенно не автоматизированные операции, как обычный телефонный разговор со всеми этими эс как доллар, "а" как русская. Это тоже можно считать обогащением данных, но данный пласт проблем в этой статье мы затрагивать не будем. Нас интересуют вполне конкретные случаи, когда данные хранятся в базе данных и именно БД служит внешним источником данных для обогащения.

Источниками сырых исходных данных могут быть:

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

  • Логистическая система, которая отслеживает движение товара: id транспорта и его водителя, gps-координаты в заданные моменты времени, статус, маршрут и т.д.

  • Телеметрия с датчиков интернета вещей.

  • Система мониторинга инфраструктуры.

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

Таким образом, типовую задачу можно сформулировать следующим образом: на вход поступают данные вида <таймстамп, идентификатор источника, содержимое пакета>, а конечному потребителю требуется соединить (в смысле join) справочную информацию об источнике из хранилища данных с идентификатором источника из сырых данных.

Как обогащаем данные

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

Другой вариант использовать инструменты потоковой обработки данных. В этом случае нужно определиться, где же всё-таки хранить справочную информацию и что будет являться Single Source of Truth (SSOT), или единым источником истины для справочных данных. Если хранить справочные данные в хранилище, то к нему придется каждый раз обращаться, и это может быть накладным, так как к сетевым издержкам добавится ещё и обращение к диску. Вероятно, оптимальнее хранить справочную информацию в оперативной памяти или другом горячем хранилище, например, в Tarantool.

Мы, очевидно, отдаём предпочтению именно последнему варианту, и наша схема приобретает завершенный вид.

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

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

Преимущества потокового обогащения данных:

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

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

Недостатки:

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

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

Какие технологии используем

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

Выбранный стек технологий:

  • Apache Kafka источник данных и брокер очередей;

  • Apache Spark потоковый обработчик данных;

  • Apache Ignite горячее хранение справочной информации;

  • Greenplum и Apache Hadoop хранилище данных.

В выборе Greenplum мы немного поступились совместимостью. Связать его со Spark не совсем тривиальная задача, для этого не существует стандартного open source коннектора (подробнее рассказывали в этой статье). Поэтому мы разрабатываем такой коннектор сами.

В остальном набор достаточно стандартный. Hadoop держим на всякий случай, например, чтобы использовать тот же Hive поверх HDFS вместо Greenplum.

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

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

Версии, которые используем:

  • Apache Spark 2.4.6.

  • Apache Ignite 2.8.1.

  • Apache Kafka 2.4.1.

  • Greenplum 6.9.0.

  • Apache Hadoop 2.10.1.

Обращаю на это внимание, потому что от версий выбранных компонент зависит совместимость и возможность этих компонент взаимодействовать. Например, если нужно, чтобы Apache Spark писал данные в базу данных Greenplum, это может стать отдельной проблемой, и версии также будут важны. Наш коннектор на текущий момент работает именно со Spark v2, для Spark v3 его нужно отдельно дорабатывать.

Что в результате

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

Но есть и ограничения, связанные с тем, что source of truth, по сути, находится в оперативной памяти. Поэтому при редактировании справочной информации надо напрямую работать с Ignite через интерфейсы самого Ignite. Кроме этого, нужен аккуратный механизм синхронизации, чтобы кэш Ignite был персистентным. У Ignite есть собственный механизм для записи на диск, но все же Ignite больше ориентирован на работу в ОЗУ, поэтому для резервирования справочной информации в хранилище данных лучше использовать что-нибудь специально для этого предназначенное, например, Airflow.

Полезные ссылки, чтобы понять, как строить взаимодействие между Spark и Ignite и насколько это уже проработанный механизм:

Пользуясь случаем: мы расширяем отдел систем обработки данных. Если вам интересно заниматься с подобного рода задачами, пишите мне в личку, в телеграм @its_ihoziainov или на job@itsumma.ru с пометкой data engineering.

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

Подробнее..

Перевод Языки любимые и языки страшные. Зелёные пастбища и коричневые поля

07.05.2021 14:19:42 | Автор: admin


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

В опросах есть категории Самые страшные языки программирования (The Most Dreaded Programming Languages) и Самые любимые языки. Оба рейтинга составлены на основе одного вопроса:

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

Страшный язык это такой, с которым вы активно работаете в текущем году, но не хотите продолжать его использовать. Любимый язык тот, который вы широко используете и хотите продолжать использовать. Результаты интересны тем, что отражают мнения людей, которые активно используют каждый язык. Не учитываются мнения типа Я слышал, что Х это круто, когда люди высоко оценивают вещи, которые они НЕ используют, потому что они слышали, что это новый тренд. Обратное тоже правда: люди, которые выражают отвращение к какому-то языку, реально широко используют его. Они боятся языка не потому, что слышали о его сложности, а потому, что им приходится работать с ним и испытывать настоящую боль.

Топ-15 страшных языков программирования:
VBA, Objective-C, Perl, Assembly, C, PHP, Ruby, C++, Java, R, Haskell, Scala, HTML, Shell и SQL.

Топ-15 любимых языков программирования:
Rust, TypeScript, Python, Kotlin, Go, Julia, Dart, C#, Swift, JavaScript, SQL, Shell, HTML, Scala и Haskell.

В списке есть закономерность. Заметили?

Худший код тот, что написан до меня


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

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

Джоэл Спольски Грабли, на которые не стоит наступать

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


Scott Adams Understood

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

Вот почему вы их боитесь


Если реальный старый код незаслуженно считают бардаком, то может и языки программирования несправедливо оцениваются? Если вы пишете новый код на Go, но должны поддерживать обширную 20-летнюю кодовую базу C++, то способны ли справедливо их ранжировать? Думаю, именно это на самом деле измеряет опрос: страшные языки, вероятно, будут использоваться в существующих проектах на коричневом поле. Любимые языки чаще используются в новых проектах по созданию зелёных пастбищ. Давайте проверим это.1

Сравнение зелёных и коричневых языков


Индекс TIOBE измеряет количество квалифицированных инженеров, курсов и рабочих мест по всему миру для языков программирования. Вероятно, есть некоторые проблемы в методологии, но она достаточно точна для наших целей. Мы используем индекс TIOBE за июль 2016 года, самый старый из доступных в Wayback Machine, в качестве прокси для определения языков, накопивших много кода. Если язык был популярным в 2016 году, скорее всего, люди поддерживают написанный на нём код.

Топ-20 языков программирования в списке TIOBE по состоянию на июль 2016 года: Java, C, C++, Python, C#, PHP, JavaScript, VB.NET, Perl, ассемблер, Ruby, Pascal, Swift, Objective-C, MATLAB, R, SQL, COBOL и Groovy. Можем использовать это в качестве нашего списка языков, которые с большей вероятностью будут использоваться в проектах по поддержке кода. Назовём их коричневыми языками. Языки, не вошедшие в топ-20 в 2016 году, с большей вероятностью будут использоваться в новых проектах. Это зелёные языки.


Из 22 языков в объединённом списке страшных/любимых 63% коричневых

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

Java, C, C++, C#, Python, PHP, JavaScript, Swift, Perl, Ruby, Assembly, R, Objective-C, SQL


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

Go, Rust, TypeScript, Kotlin, Julia, Dart, Scala и Haskell

У TIOBE и StackOverflow разные представления о том, что такое язык программирования. Чтобы преодолеть это, мы должны нормализовать два списка, удалив HTML/CSS, шелл-скрипты и VBA.2

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

Теперь можно ответить на вопрос: люди действительно боятся языков или же они просто боятся старого кода? Или скажем иначе: если бы Java и Ruby появились сегодня, без груды старых приложений Rails и старых корпоративных Java-приложений для поддержки, их всё ещё боялись бы? Или они с большей вероятностью появились бы в списке любимых?

Страшные коричневые языки



Страшные языки на 83% коричневые

Топ страшных языков почти полностью коричневый: на 83%. Это более высокий показатель, чем 68% коричневых языков в полном списке.

Любимые зелёные языки



Любимые языки на 54% зелёные

Среди любимых языков 54% зелёных. В то же время в полном списке всего лишь 36% языков являются зелёными. И каждый зелёный язык есть где-то в списке любимых.

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

Курт Воннегут

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

Другими словами, Rust, Kotlin и другие зелёные языки пока находятся на этапе медового месяца. Любовь к ним может объясняться тем, что программистам не надо разбираться с 20-летними кодовыми базами.

Устранение предвзятости




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

Цикл хайпа языков программирования


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


Цикл хайпа языков программирования

У меня под рукой нет данных, но я отчётливо помню, что Ruby был самым популярным языком в 2007 году. И хотя сегодня у него больше конкурентов, но сегодня Ruby лучше, чем тогда. Однако теперь его боятся. Мне кажется, теперь у людей на руках появились 14-летние приложения Rails, которые нужно поддерживать. Это сильно уменьшает привлекательность Ruby по сравнению с временами, когда были одни только новые проекты. Так что берегитесь, Rust, Kotlin, Julia и Go: в конце концов, вы тоже лишитесь своих ангельских крылышек.3



1. Сначала я придумал критерии. Я не искал данных, подтверждающих первоначальную идею.

Была мысль определять статус зелёного или коричневого по дате создания языка, но некоторые старые языки нашли применение только относительно недавно.

Вот методика измерения TIOBE, а их исторические данные доступны только платным подписчикам, поэтому Wayback Machine. [вернуться]

2. HTML/CSS не являются тьюринг-полными языками, по этой причине TIOBE не считает их полноценными языками программирования. Шелл-скрипты измеряются отдельно, а VBA вообще не исследуется, насколько я понял. [вернуться]

3. Не все коричневые языки внушают страх: Python, C#, Swift, JavaScript и SQL остаются любимыми. Хотелось бы услышать какие-нибудь теории о причине этого феномена. Кроме того, Scala и Haskell два языка, к которым я питаю слабость единственные зелёные языки в страшном списке. Это просто шум или есть какое-то обоснование??? [вернуться]
Подробнее..

Перевод Как я сократил время загрузки GTA Online на 70

01.03.2021 16:18:41 | Автор: admin
GTA Online. Многопользовательская игра, печально известная медленной загрузкой. Недавно я вернулся, чтобы завершить несколько ограблений и был потрясён, что она загружается настолько же медленно, как и в день своего выпуска, 7 лет назад.

Пришло время докопаться до сути.

Разведка


Сначала я хотел проверить, вдруг кто-то уже решил проблему. Но нашёл только рассказы о великой сложности игры, из-за чего она так долго загружается, истории о том, что сетевая p2p-архитектура мусор (хотя это не так), некоторые сложные способы загрузки в сюжетный режим, а потом в одиночную сессию, и ещё пару модов, чтобы скипнуть видео с логотипом R* во время загрузки. Ещё немного почитав форумы, я узнал, что можно сэкономить колоссальные 10-30 секунд, если использовать все эти способы вместе!

Тем временем на моём компе

Бенчмарк


Story mode load time:  ~1m 10sOnline mode load time: ~6m flatStartup menu disabled, time from R* logo until in-game (social club login time isn't counted).Old but decent CPU:   AMD FX-8350Cheap-o SSD:          KINGSTON SA400S37120GWe have to have RAM:  2x Kingston 8192 MB (DDR3-1337) 99U5471Good-ish GPU:         NVIDIA GeForce GTX 1070

Знаю, что моё железо устарело, но чёрт возьми, что может замедлить загрузку в 6 раз в онлайн-режиме? Я не мог измерить разницу при загрузке из сюжетного режима в онлайн, как это делали другие. Даже если это сработает, разница небольшая.

Я (не) одинок


Если доверять этому опросу, проблема достаточно широко распространена, чтобы слегка раздражать более 80% игроков. Прошло уже семь лет!



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

Почему у них сюжетный режим по-прежнему загружается около минуты? (кстати, при загрузке с M.2 NVMe не учитывались видео с логотипами). Кроме того, загрузка из сюжетного режима в онлайн занимает у них всего минуту, в то время как у меня около пяти. Я знаю, что их железо гораздо лучше, но не в пять же раз.

Высокоточные измерения


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



Почти минута уходит на загрузку общих ресурсов, которые нужны и для сюжетного режима, и для онлайна (почти наравне с топовыми ПК), затем GTA в течение четырёх минут полностью нагружает одно ядро CPU, больше ничего не делая.

Использование диска? Нет! Использование сети? Есть немного, но через несколько секунд падает в основном до нуля (кроме загрузки вращающихся информационных баннеров). Использование GPU? Ноль. Память? Вообще ничего

Что это, майнинг биткоинов или что-то такое? Чую здесь код. Очень плохой код.

Единственный поток


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

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

Профилирование


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

Итак, добро пожаловать в образцы стека (stack sampling). Для приложений с закрытым исходным кодом есть только такой вариант. Сбросьте стек запущенного процесса и местоположение указателя текущей инструкции, чтобы построить дерево вызовов в заданные интервалы. Затем наложите их и получите статистику о том, что происходит. Я знаю только один профилировщик, который может проделать это под Windows. И он не обновлялся уже более десяти лет. Это Люк Stackwalker! Кто-нибудь, пожалуйста, подарите Люку немножко любви :)



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

Вниз по кроличьей норе


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



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

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

Проблема первая: это strlen?!


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

Куда ж без графика

Он что-то парсит. Но что? Логический разбор займёт целую вечность, поэтому я решил сбросить некоторые образцы из запущенного процесса с помощью x64dbg. Через несколько шагов отладки выясняется, что это JSON! Он парсит JSON. Колоссальные десять мегабайт JSON'а с записями 63 тыс. предметов.

...,{    "key": "WP_WCT_TINT_21_t2_v9_n2",    "price": 45000,    "statName": "CHAR_KIT_FM_PURCHASE20",    "storageType": "BITFIELD",    "bitShift": 7,    "bitSize": 1,    "category": ["CATEGORY_WEAPON_MOD"]},...

Что это? Судя по некоторым ссылкам, это данные для сетевого торгового каталога. Предполагаю, он содержит список всех возможных предметов и обновлений, которые вы можете купить в GTA Online.

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

10 мегабайт? В принципе, не так уж и много. Хотя sscanf используется не самым оптимальным образом, но, конечно, это не так уж плохо? Что ж



Да, такая процедура займёт некоторое время Честно говоря, я понятия не имел, что большинство реализаций sscanf вызывают strlen, поэтому не могу винить разработчика, который написал это. Я бы предположил, что он просто сканировал байт за байтом и мог остановиться на NULL.

Проблема вторая: давайте использовать хэш-массив?


Оказывается, второго преступника вызывают сразу за первым. Даже в одной и той же конструкции if, как видно из этой уродливой декомпиляции:



Все метки мои, и я понятия не имею, как на самом деле называются функции/параметры.

Вторая проблема? Сразу после разбора элемента он хранится в массиве (или встроенном списке C++? не уверен). Каждая запись выглядит примерно так:

struct {    uint64_t *hash;    item_t   *item;} entry;

А перед сохранением? Он проверяет весь массив, сравнивая хэш каждого элемента, есть он в списке или нет. С 63 тыс. записей это примерно (n^2+n)/2 = (63000^2+63000)/2 = 1984531500, если я не ошибаюсь в расчётах. И это в основном бесполезные проверки. У вас есть уникальные хэши, почему не использовать хэш-карту.



Во время реверс-инжиниринга я назвал его hashmap, но это явно не_hashmap. И дальше ещё интереснее. Этот хэш-массив-список пуст перед загрузкой JSON. И все элементы в JSON уникальны! Им даже не нужно проверять, есть они в списке или нет! У них даже есть функция прямой вставки элементов! Просто используйте её! Серьёзно, ну ребята, что за фигня!?

PoC


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

План такой. 1. Написать .dll, 2. внедрить её в GTA, 3. зацепить некоторые функции, 4. ???, 5. профит. Всё предельно просто.

Проблема с JSON нетривиальная, я не могу реально заменить их парсер. Более реалистичным кажется заменить sscanf на тот, который не зависит от strlen. Но есть ещё более простой способ.

  • зацепить strlen
  • подождать длинной строки
  • закэшировать начало и длину
  • если поступит ещё вызов в пределах диапазона строки, вернуть закэшированное значение

Что-то вроде такого:

size_t strlen_cacher(char* str){  static char* start;  static char* end;  size_t len;  const size_t cap = 20000;  // if we have a "cached" string and current pointer is within it  if (start && str >= start && str <= end) {    // calculate the new strlen    len = end - str;    // if we're near the end, unload self    // we don't want to mess something else up    if (len < cap / 2)      MH_DisableHook((LPVOID)strlen_addr);    // super-fast return!    return len;  }  // count the actual length  // we need at least one measurement of the large JSON  // or normal strlen for other strings  len = builtin_strlen(str);  // if it was the really long string  // save it's start and end addresses  if (len > cap) {    start = str;    end = str + len;  }  // slow, boring return  return len;}


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

char __fastcall netcat_insert_dedupe_hooked(uint64_t catalog, uint64_t* key, uint64_t* item){  // didn't bother reversing the structure  uint64_t not_a_hashmap = catalog + 88;  // no idea what this does, but repeat what the original did  if (!(*(uint8_t(__fastcall**)(uint64_t*))(*item + 48))(item))    return 0;  // insert directly  netcat_insert_direct(not_a_hashmap, key, &item);  // remove hooks when the last item's hash is hit  // and unload the .dll, we are done here :)  if (*key == 0x7FFFD6BE) {    MH_DisableHook((LPVOID)netcat_insert_dedupe_addr);    unload();  }  return 1;}

Полный исходный код PoC здесь.

Результаты


Ну и как оно работает?

Original online mode load time:        ~6m flatTime with only duplication check patch: 4m 30sTime with only JSON parser patch:       2m 50sTime with both issues patched:          1m 50s(6*60 - (1*60+50)) / (6*60) = 69.4% load time improvement (nice!)

Да, чёрт возьми, получилось! :))

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

Краткое содержание


  • При запуске GTA Online есть узкое место, связанное с однопоточным вычислением
  • Оказалось, GTA изо всех сил пытается распарсить 1-мегабайтный файл JSON
  • Сам парсер JSON плохо сделан/наивен и
  • После парсинга происходит медленная процедура удаления дублей

R*, пожалуйста, исправьте


Если информация каким-то образом дойдёт до инженеров Rockstar, то проблему можно решить в течение нескольких часов силами одного разработчика. Пожалуйста, ребята, сделайте что-нибудь с этим :<

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

ty <3
Подробнее..

Перевод Совместная игра в Factorio лучшее техническое собеседование, что мы проводили

09.04.2021 14:13:02 | Автор: admin
В последнее время много копий сломано вокруг технических собеседований. Очевидно, что инвертирование двоичного дерева на доске практически никак не связано с практическими навыками реального программиста. Примитивный Fizzbuzz по-прежнему остаётся самым эффективным тестом. Как следствие, выросло внимание к опенсорсным проектам, но оказалось, что это тоже не очень хороший показатель, потому что у большинства профессионалов нет на них времени.

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

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

Factorio?


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

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

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

Выбор направления


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

Конкретные ожидания можно сформулировать так:

  • Стажёр, как правило, должен быть в состоянии разместить чертёж и соединить его с чем-то ещё, например, с месторождением руды.
  • От джуниоров ожидают самостоятельного строительства производственной линии, пусть и не оптимальной. Им может понадобиться помощь старшего разработчика в том, как правильно направить конвейеры ко всем промежуточным сборочным автоматам.
  • Как только получено задание, миддл должен спроектировать почти оптимальную производственную линию (без маяков) с минимальным контролем.
  • Ведущий программист не нуждается в руководстве, способен сам определить цели и разработать план действий, а затем делегировать эти задачи другим программистам.

Командная работа


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

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

Отладка


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

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

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

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

Код-ревью


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

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

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


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

Конструкция магистрального ленточного конвейера включает 4-8 конвейеров, разделённых на две секции (для подземных конвейеров). Он помещается в центре фабрики, и всё производство происходит перпендикулярно ленте. Эта конструкция опирается на несколько правил, нарушение которых может привести к полному хаосу. Во-первых, всегда следует использовать разделитель на выходе с конвейера. Никогда нельзя перенаправлять всю ленту: пустое пространство для другой ленты означает, что вы теряете целый конвейер ресурсов, даже после апгрейда. Во-вторых, все заводы должны масштабироваться перпендикулярно основному конвейеру. Невозможность быстрого масштабирования приведёт либо к огромной потере пространства, либо к невозможности масштабирования производственной линии, потому что она окружена другими производственными линиями.


Логистическая сеть

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

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


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

Многопоточность


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

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

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

Масштабирование


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

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

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

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

Микросервисы и модули


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

Мегабазу на основе поездов иногда называют дизайном городских кварталов (city-block), где поезда вокруг кварталов завода контролируют все входы и выходы. Таким образом, каждый отдельный квартал изолирован от всех остальных, поскольку все входные данные чисты в том смысле, что они поступают из железнодорожной сети. Это почти идентично архитектуре микросервисов (по HTTP) или межпроцессному взаимодействию (IPC), с аналогичными потенциальными проблемами из-за задержек I/O, поскольку результаты не могут поступать постоянно, они должны передаваться в пакетах или поездах по железнодорожной сети.

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

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

Распределённые системы


Space Exploration полностью переделанная версия Factorio для колонизации космоса. Здесь планеты становятся ограниченными ресурсами, требуя от игроков колонизировать другие миры и использовать ракеты для передачи ресурсов между планетами. Из-за огромной задержки с доставкой материалов между планетами, координация этих баз приводит к возникновению проблем, сходных с глобально распределённой системой баз данных. Даже в логической сети приходится бороться с задержкой, потому что автоматическая система теряет из виду элементы, которые запущены, но ещё не достигли целевой планеты. Если это не учитывать, возникают дубликаты запросов для всех нужных элементов. С точно такой же проблемой сталкиваются распределённые системы при попытке обеспечить согласованность между узлами.

Вывод


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

Но это уже лучше, чем собеседование на доске.
Подробнее..

Почему бизнес хочет DevOps и что нужно знать инженеру, чтобы говорить с ним на одном языке

27.10.2020 14:04:24 | Автор: admin
Последние несколько лет мы при каждом удобном случае снова и снова обсуждаем, что же такое DevOps. Это уже порядком надоело, но раз всё еще происходит, значит есть проблема проблема взаимодействия бизнеса и инженеров.

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



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

N.B.: Материал для этой статьи лёг в основу моего выступления на DevOps Live, поэтому вместо чтения можно послушать доклад он вполне сойдёт за подкаст.

На примере клиентов ITSumma я вижу, как изменились запросы бизнеса в последние несколько лет. Мы занимаемся сопровождением сложных информационных систем с 2008 года, и поначалу это в основном была работа по обеспечению отказоустойчивости сайтов, но теперь появились кардинально новые запросы. Раньше важнее всего было, чтобы продакшен стабильно работал, был готов к масштабированию, а в случае аварии быстро поднимался. Теперь не менее важным стало обеспечение отказоустойчивости платформ разработки и систем выкладки.
В крупных компаниях произошло смещение системы ценностей: стабильная работа develop-окружения теперь так же важна, как и надежность продакшена.
Чтобы проследить траекторию и понять, что изменилось в мышлении и где мы теперь, погрузимся ненадолго в историю разработки программного обеспечения.

Немного истории разработки


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

Мейнфреймы. 19601980-е годы


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

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

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

На этом этапе IT-бизнеса как такового еще не существует. Если посмотреть в Википедии количество компаний по производству ПО, основанных в 1975-м, то их там будет всего четыре. Правда, одна из них Microsoft, которая тогда была очень маленькой и нишевой.

Персональные компьютеры и ООП. 1980-1990-е годы


Все начинает меняться примерно в 1985 году с массовым распространением персональных компьютеров: в 77-м началось производство Apple II, в 81-м появился IBM PC, чуть раньше стали популярны минимейнфреймы от DEC.

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

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

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

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

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

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

Популярным решением проблемы роста сложности ПО становится ООП. Считается, что если взять большую программу, допустим, Microsoft Excel, и разбить на какие-то объекты, то группы разработчиков смогут работать над ними независимо. Таким образом получится масштабировать работу на отдельные элементы функциональности и ускорить разработку нашего Microsoft Excel. Причем под ускорить, скорее всего, понимается цикл разработки в несколько лет.
Аргументация внедрения ООП звучит очень похоже на плюсы микросервисной архитектуры.
Но по сути, мы по-прежнему упаковываем программу в один пакет exe-файл во времена повсеместного использования Microsoft DOS, а потом Windows и поставляем пользователю.

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

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

Цикл разработки ПО просто потрясающе долог, этапы занимают месяцы:

  • планирование 12 месяцев;
  • разработка 24 месяца;
  • тестирование 12 месяцев;
  • доставка 12 месяцев.

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

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

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

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

Agile. 20012008


Следующая эра начинается с распространением интернета в 2000-х.

Особенности периода: IT-бизнес переходит в интернет, но браузеры работают еще так себе.

Microsoft создаёт Internet Explorer и бесплатно поставляет его всем пользователям Windows. Интернет становится доступен огромному числу людей, но при этом браузер Microsoft целенаправленно сделан не очень пригодным для реализации динамической функциональности, чтобы защитить свои программы от конкуренции со стороны браузерных приложений и Netscape (подробнее по запросу Война браузеров). Поэтому интернет еще используется в основном для загрузки файлов, но этого уже достаточно, чтобы бизнес перешёл в интернет.

Доставка ПО: дистрибутивы становится возможно распространять через интернет.

Дистрибуция ПО через интернет позволяет гораздо чаще раз в несколько месяцев выпускать обновления и новые версии. Больше не обязательно записывать ПО на дискеты и диски пользователи могут скачать обновления из интернета, а разработчики могут допускать больше ошибок.

Цена ошибки: риск для бизнеса уже не так велик, потому что пользователь может получить обновление и продолжить пользоваться продуктом.

Где-то в это время зарождается Agile и выходят книги о гибкой разработке и экстремальном программировании, которые и для современного IT-менеджмента являются классической основой, например: Extreme Programming Explained: Embrace Change, Refactoring. Improving the Design of Existing Code, Test Driven Development.
Основная идея в том, что раз доставлять ПО можно через интернет, то цикл производства может быть гораздо короче, а новую версии можно выпускать каждые полгода.
Цикл разработки в начале 2000-х выглядит примерно так:

  • планирование 2 месяца;
  • разработка 6-12 месяцев;
  • тестирование 1-3 месяца;
  • доставка несколько недель.

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

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

DevOps. 20092020


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

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

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

Но в 2006-2008 идеологически ПО еще разрабатывается по-прежнему как некое цельное ядро. Это, конечно, не exe'шник, но это всё равно цельный монолит, состоящий из набора очень плотно связанных объектов. Такое ПО слишком тяжеловесное, для того чтобы меняться так быстро, как этого хочет рынок.

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

В 2009 году выходит первый доклад о том, как Dev и Ops объединяются, чтобы обеспечить 80 деплоев в день, и это становится одной из главных ценностей в разработке. Цикл разработки теперь выглядит совершенно по-другому:

  • планирование несколько недель;
  • разработка несколько недель;
  • тестирование несколько дней;
  • доставка несколько минут.

Ошибки можно исправлять практически на лету и разрабатывать гипотезу очень быстро. Тут же появляется всем известное теперь слово MVP.

Если в 70-е у разработчика почти не было права на ошибку и ПО было фактически недвижимым при запуске космонавтов на луну требования к функциональности не часто меняются то теперь софт становится абсолютно динамическим. Все готовы к тому, что будут баги, поэтому и нужна поддержка и команда, которая будет обеспечивать работу системы в условиях динамичного развития.
В новой эпохе впервые за историю развития IT специальность, связанная с доставкой ПО, стала действительно айтишной.
До этого профессия человека, который обеспечивал систематическую доставку программного обеспечения, вообще говоря, не была айтишной. В 70-80-е это были люди, которые засовывали перфокарты в компьютеры, в 80-90-е люди, которые грамотно вели переговоры с фабриками и заводами по производству дисков и занимались логистикой. Это всё абсолютно не связано ни с разработкой, ни с системным администрированием.

Не погруженные глубоко в тему DevOps люди часто думают, что DevOps это новое клёвое название для админов, которые больше общаются с разработчиками. Но бизнес (и википедия) считает, что DevOps это методология внутри процесса разработки ПО. И не так важно, что конкретно она означает, важно, что она дает. А дает DevOps как методология возможность максимально быстро адаптироваться к изменениям рынка и менять сам процесс разработки ПО.

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

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

У большинства админов, которые занимаются обеспечением отказоустойчивости, идеология работает не трожь! находится во главе угла. Они хоть и не запускают Аполлон на Луну, но мыслят теми же категориями надежности. А бизнес в новых условиях, пускай и ценой сбоев, хочет:

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

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

Как инженеру пойти навстречу бизнесу


Итак, что же мы можем сделать, чтобы найти больше пересечений с ценностями бизнеса?

Если мы говорим, что внедрение DevOps служит нуждам бизнеса, то должен быть способ понять, делает ли инженер то, что нужно бизнесу. Вот какие метрики можно ввести, если изучить отчёт DORA State of DevOps и исследование состояния DevOps в России:

  • Частота деплоев (deployment frequency) как часто вы деплоите код в продакшен или как часто ваши конечные пользователи получают новые релизы.
  • Время внесения изменений (lead time for changes) от коммита кода в репозиторий до его выкладки в продакшен.
  • Время, за которое сервис восстанавливается после сбоя или аварии (time to restore).
  • Частота аварий, вызванных выкладкой изменений (change failure rate) какой процент деплоев приводит к ухудшению качества обслуживания пользователей и требует исправлений, например, откатов.

Эти метрики позволяют оценить, как компания использует возможности DevOps. В то же время, посмотрев на эти метрики, инженер может понять, какими своими действиями он может помочь бизнесу.

Частота деплоев


Понятно, что чем чаще компания деплоится, тем вернее она движется по пути DevOps-трансформации. Но деплоиться часто страшно. Однако DevOps-инженер может помочь справиться с этими страхами.

Страх 1: выложим что-то плохо протестированное, из-за чего продакшен упадет под нагрузкой.

Роль DevOps: обеспечить возможность легкого отката, помочь автоматизировать тестирование в инфраструктуре.

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

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

Страх 3: выкладывать долго и сложно (практика показывает, что 20 минут на сборку docker обычная история).

Роль DevOps: обеспечить скорость деплоя и отката, ускорить процесс сборки.

Время внесения изменений


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

Проблема 1: долго проходит pull request. Например, потому что есть ревью и ревью на ревью. В корне этой проблемы лежит всё та же боязнь выложить код.

Роль DevOps: работать с менеджером разработки в вопросе автоматизации принятия PR.

Проблема 2: долгий ручной процесс тестирования.

Роль DevOps: помочь автоматизировать тестирование.

Проблема 3: долгая сборка.

Роль DevOps: мониторить время сборки, уменьшать его.

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

Время восстановления работоспособности


Time to restore время, за которое сервис восстанавливается после сбоя или аварии, метрика, гораздо более близкая к SRE.

Проблема 1: сложно локализовать техническую проблему.

Роль DevOps: организовать observability, вместе с разработкой обеспечить инфраструктуру для мониторинга и настроить систему мониторинга так, чтобы эффективно следить за работой сервиса.

Проблема 2: инфраструктура не готова к легкому процессу отката.

Роль DevOps: обеспечить техническую возможность.

Проблема 3: после миграции невозможно откатиться.

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

Частота аварий


Change failure rate как часто выложенный код падает это снова про менеджмент и идеологию, но здесь есть интересный момент: код часто падает, если его редко выкладывать.

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

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

Дивный новый мир


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

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

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

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

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

KubeGraf плагин для мониторинга Kubernetes в Grafana. Как создавался и почему стал востребованным

11.02.2021 16:05:53 | Автор: admin


KubeGraf это плагин для Grafana, который собирает данные с кластера Kubernetes и приложений внутри него, а затем показывает их на красивых и понятных графиках. В феврале этого года вышел релиз 1.5, и стало известно, что предыдущие версии скачали более 250 тысяч раз! Мы расспросили Сергея Спорышева, создателя плагина и директора направления DevOps-продуктов в ITSumma, об истории создания плагина, факапах и причинах популярности.


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


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


Я думаю, получилось. Здесь логично рассказать, откуда возникла идея плагина. В апреле 2019 года я помогал Евгению Потапову, гендиректору ITSumma, готовить доклад для конференции HighLoad в Питере. Он планировал рассказать про мониторинг Kubernetes: какие есть инструменты, подходы Всего этого и методологий, и инструментов, было очень много, но какого-то более-менее универсального решения, чтобы поставил и ничего делать не нужно, не было.


Углубляясь, мы нашли у самой Grafana плагин для мониторинга Kubernetes. Он вроде был жив, но почему-то не поддерживался. Мы его поставили и увидели, что половина функций не работает. Так возникла идея написать своё и докинуть туда багаж практик, который мы наработали внутри компании (одно из направлений ITSumma как раз техподдержка 24/7 и, соответственно, круглосуточный мониторинг).


Была ещё одна вещь, которую мы хотели реализовать. В России раскатка на bare metal это нормальное явление, а все прогрессивные страны пользуются managed-решениями: Kubernetes от Google, Amazon (у нас теперь ещё Яндекс и Mail.ru). В работе с облаками есть свои нюансы, и мы подумали почему бы не сделать плагин, который будет эти нюансы учитывать?


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


А какие фичи плагина ты используешь каждый день?


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


Мы мониторим как приложения, которые крутятся в Kubernetes, так и ноды, на которых Kubernetes работает. В реальном времени можно смотреть нагрузку по ноде, сколько ресурсов на ней зарезервировано и какие выставлены лимиты. Например, мы индицируем, что у ноды есть всего лишь 2.5 Гб памяти, 2 Гб которых уже зарезервировано, и тогда подкрашиваем ноду жёлтым либо красным, таким образом предупреждая: Ребят, эта нода скоро закончится. То же самое с лимитами.



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



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



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




Можешь вспомнить ситуации из своей рабочей практики, когда KubeGraf реально тебе помог?
Это случилось, когда мы научились правильно индицировать лимиты, реквесты и всё остальное. На одном из проектов облачный кластер Kubernetes в момент пиковых нагрузок разрастался до 25-26 нод. Мы стали смотреть на данные из плагина и, пользуясь ими, сократили парк почти в два раза. Сейчас этот же кластер с большим количеством приложений спокойно работает на 12-13 нодах.


При этом ресурсы кластера мы никак не разбирали. Мы просто смотрели, что такие-то приложения при таком-то трафике практически не должны ничего жрать, но потребление вырастает до колоссальных размеров. Анализировали приложение, смотрели, что где можно подтюнить, как именно построен scheduling на основе реквестов. Видели, например, что зарезервировано 1.5 Гб памяти, но за два месяца никто столько никогда не использовал и можно это сократить. Потихоньку-помаленьку сократили кластер в два раза.


В новостях о плагине вы писали, что его скачали 250 000 раз


По не совсем официальной информации да. Это такая информация для разработчиков, её в паблике нет, но вот я нечаянно узнал. Круто!


Это много или мало?


Много! У нас четыре с лишним сотни клиентов, у одного клиента может быть максимум кластеров 10. Если мы хотя бы 400 умножим на 10 это 4 000. То есть если бы каждый наш клиент был с Kubernetes, мы бы каждому накатили и получили только 4 000. А тут четверть миллиона! Это много и это круто.


Как думаешь, в чём причина такой популярности?


Один из ключевых факторов: плагин от Grafana, о котором я уже упоминал, разработчики по неизвестным причинам перестали поддерживать. И теперь в issues или в pull request на GitHub, я не помню точно, их спрашивают: ребята, вы собираетесь этот инструмент дальше развивать или нет? А они говорят: нет, вот вам ссылка на нормальное решение. И дают ссылку на нас.


Плюс сарафанное радио: мы раскидываем плагин клиентам, активно взаимодействуем с сообществом, много где его презентуем. Скорее всего, в этом причина.


А если оценивать аудиторию англоязычную, русскоязычную как тебе кажется, где KubeGraf больше используют?


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


Недавно вышла версия 1.5. Что там нового?


Мы починили большое количество ошибок совместимости. В середине 2020 года релизнулась седьмая версия Grafana, там всё еще работало, а с 7.3 начались большие изменения в структуре, поэтому пришлось дорабатывать плагин, чтобы ничего не отваливалось. Плюс добавили поддержку последних версий Kubernetes, доработали, по каким путям мы забираем данные из API Kubernetes.


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


Переработали UX, чтобы было удобно для восприятия, добавили реалтайм индикации. Раньше была сводная таблица по всем приложениям, и мы просто видели, сколько они резервируют и потребляют. В 1.5 добавили индикацию: в табличке подсвечено, где что-то не указано, где зеленая зона, где желтая, красная и так далее.


Как обычно, были небольшие фиксы: где-то слетела легенда, где-то кнопка не работала поправили.


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


Алертинга у вас нет?


Тут можно холиварить долго, но устоявшееся мнение такое: алерты и Grafana это разные вещи. Алерты в Grafana делать можно, но это неправильно. Для алертинга нужен другой инструмент: Prometheus+Alert Manager, например. Grafana это про визуализацию. Мы только планируем на графике сделать индикацию алертинга.


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


Конечно! Здесь соотношение где-то 60/40. 60 это наша практика. 40 это общение с комьюнити, с клиентами. Сейчас мы работаем над версией 1.6, и одним из ключевых новшеств в ней будет обновлённый дашборд. К нам пришли клиенты, которые активно юзают плагин, и говорят: ребята, мы пользуемся, всё круто, но хотелось бы увидеть ещё такую вот панель. Мы отвечаем: ну, супер.


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


Заспойлери что-нибудь ещё из версии 1.6.


Будет небольшой редизайн, потому что первый макет создавался кустарно. Сначала мы с Женей Потаповым набросали на бумажке, как может выглядеть интерфейс. Потом один из наших разработчиков разобрал тулкит Grafana с визуализационными элементами, и мы просто впихали всё, как было. Позже подключился дизайнер, и где-то в версии 1.3-1.4 мы переработали одну из страниц. Теперь перерабатываем остальные и в 1.6 затащим красоты.


Плюс к странице Cluster Status появится сводный дашборд по общему состоянию кластера. Не по отдельным нодам, а именно по всему кластеру, как если бы он был одним большим сервером. Дашборд даст понимание, как он себя чувствует.


Ну и мы хотим полностью переписать плагин. С выхода первой версии прошло два года, Grafana выпустила много вспомогательных инструментов для разработки. Поэтому мы полностью переписываем сборку, переходим на использование компонентов от Grafana и другой фреймворк: плагин написан на Angular, а где-то год назад пошёл тренд на React-плагины, поэтому я думаю, что после 1.6 будет сразу версия 2.0 на React.


С какой скоростью выпускаете новые версии?


Критичные минорные изменения вносим так быстро, как это только возможно, но вообще стараемся релизиться раз в два месяца. Только с версией 1.5 что-то пошло не так готовили её почти полгода. Сказался и личный загруз (это все-таки наш open source проект), и эпидемия, и задержки со стороны Grafana. С релиза версии может пройти от недели до двух месяцев, когда её примут и опубликуют на сайте Grafana. Поэтому релизный цикл плавающий.


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


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


То есть это не выходные, не ночь, а полноценный рабочий день?


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


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


Бывает такое, но можно взять на неделю перерыв. Это же pet project: поднадоело давайте отложим.


Были за эти два года такие факапы, которые прям совсем факапы?


Конечно, они бывают в любой разработке. Как-то раз выкатили версию, которая не работала. Потестили на одной из версий Grafana, а на остальных нет. Где-то всё поехало, где-то метрики перестали приходить.


Заметили довольно быстро, потому что мы обычно, пока ждём официального релиза от Grafana, ходим и через Git и обновляем это всё у наших клиентов. Видим, где ломается.


Второй факап был прямо жёсткий. В одной из версий Kubernetes и Prometheus полностью сменился лейблинг. До этого в основных метриках было два лейбла: container name и pod name, а тут они поменялись на container и pod (я уже сейчас не вспомню точно). В какой-то момент мы заметили, что нейминг разъехался: здесь мы собираем по pod, здесь по pod name; здесь по container, здесь по container name. И у нас половина плагина работала, половина не работала. Никто сначала ничего не мог понять. Пришлось пойти, разобраться, упороться регулярками, которые все ненавидят. Ну и вроде собрали, заработало.


Но, в целом, за счет того, что time-to-market у плагина очень высокий, у нас всегда есть минимум две недели в ожидании релиза, когда можно сходить всё исправить. То есть факапы они локальные, в паблик не могут уйти.


Если бы ты сейчас подходил к разработке плагина, что-нибудь бы сделал иначе?


Думаю, нет. Я даже не знаю, что можно было изменить, потому что оно как шло по желанию, так и шло. Какие-то фишки придумывались, какие-то дорабатывались. Что-то изменить? Не знаю.


Какую побочную, помимо технической, пользу принёс плагин тебе самому и вашей компании?


Brand awareness узнаваемость бренда. Это самое большое, что мы получили. Когда компания выпускает open source продукты, она закрепляет свою экспертизу, повышает узнаваемость. На приток клиентов не рассчитывали. Хотели только, чтобы нас узнавали, чтобы люди понимали, что мы это умеем и в этом шарим.


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


В небольшом видео с анонсом версии 1.5 ты сказал, что вы планируете сделать плагин отдельным продуктом. Что это за идеи?


У нас была мысль сделать плагин прямо такой stand-alone версией, потому что мы наработали большое количество практик в работе с Kubernetes, и хотели бы их реализовать в отдельном продукте.


Мы думаем про сервис, который будет делать не только визуализацию, но поможет проводить аудит кластера и тюнить его. Grafana здесь будет только мешать, поэтому думаем оформить его в виде stand-alone решения, которое просто так же поставил через Helm и видишь красивую картиночку, где у тебя что происходит. Но это всё пока только на уровне проработки концепции.


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


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


Open source продукты принято делать бесплатными. Но, например, Grafana тоже open source, но есть Grafana Enterprise. Мне кажется, этот продукт будет в двух вариациях free и с какой-то подпиской.


Такой серьезный продукт придётся не только по понедельникам делать.


Да.


Выходит, ITSumma сейчас смотрит чуть в сторону open sourse, в направлении разработки своих продуктов?


Конечно! Нужны же какие-то артефакты работы компании. Хоть что-то после себя оставить нужно.


На этом мы закончили обсуждать плагин KubеGraf и немного поговорили о видеокурсе по мониторингу Kubernetes, который Сергей Спорышев вместе с другими спикерами разрабатывал в Слёрме. К беседе присоединился СТО Слёрма Марсель Ибраев.


Что будет в новом курсе?


МАРСЕЛЬ: Мы будем говорить о том, как мониторить и собирать логи с приложений, которые запущены в кластере, и с самого кластера Kubernetes. Потому что просто поднять кластер это полдела, и с этим справляется большинство, а вот правильно настроить сбор логов и метрик уже получается не у всех. Цель курса рассказать и показать лучшие практики.


Стоит ли идти на курс по логированию тем, кто уже проходил курсы по Kubernetes в Слёрме?


МАРСЕЛЬ: Стоит, потому что в наших курсах по Kubernetes не раскрывается тема логирования и мониторинга. Мы пробовали её включить в первые базовые курсы, но получалось не очень: материала много, и дать его в рамках двух занятий внутри обзорного курса по Kubernetes невозможно. Уже тогда была идея, что надо делать что-то отдельное. Наконец-то мы к этому пришли.


Чем хорош курс? Почему вы бы сами на него пошли?


МАРСЕЛЬ: Во-первых, курс подготовили практикующие инженеры ребята, которые каждый день работают с Kubernetes, набивают шишки. Они рассказывают именно то, что нужно знать. Это чистый опыт. Да, его можно наработать и самому, но мы конвертируем время в деньги (и наоборот) и приносим опыт на блюдечке.


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


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


СЕРГЕЙ: Я впервые участвую в создании такой штуки, но, посмотрев на внутреннюю кухню, поучаствовав в проработке одной из тем, пообщавшись с другими спикерами, я понял, что все спикеры максимально детально разжевывают материал, но делают это не в формате старых книг вроде PHP для чайников, а на реальных практических примерах, затрагивая современные аспекты технологии.


Сама площадка тоже топчик. Я планировал писать на локальном кластере, но потом понял, что всё есть, всё удобно, и с минимальными усилиями за минимальное количество времени ты можешь попробовать выполнять практические задания, в реальном времени видеть результат.


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


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


Кому будет полезен этот курс?


СЕРГЕЙ: Есть замечательная шутейка, что в современных реалиях Kubernetes это операционная система, а Helm просто пакетный менеджер для него. Всем приходится иметь дело с Kubernetes, значит всем нужно знать мониторинг и логирование такой промышленный стандарт. То есть курс будет полезен всем.


Какие знания необходимы для учёбы?


МАРСЕЛЬ: Мы рассчитывали курс на тех, кто уже знаком с Kubernetes. Знание систем контейнеризации, Docker в первую очередь, тоже горячо приветствуется. Без них будет тяжело, потому что в рамках курса мы не рассказываем о базовых абстракциях.


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


Нужно ли идти на курс, если что-то уже настраивал сам?


МАРСЕЛЬ: Думаю, да. У всех свой взгляд, как это сделать и настроить. Иногда я узнаю, как некоторые делают очень страшные вещи, строят костыли, где не надо, и прочее. Поэтому хочется, чтобы люди просвещались в этом вопросе. В рамках обмена опытом, скажем так.


Что ещё важно сказать про курс?


МАРСЕЛЬ: Первая версия прошла тестирование. Бета-тестеры дали очень много фидбека, после которого мы изменили программу. Например, в программе был Zabbix, а потом мы поспрашивали ребят, экспертную группу, и поняли, что он там не нужен, поэтому убрали его и добавили другие темы. Кроме того, мы значительно усилили команду спикеров, подключили ребят из ITSumma.


Бонусом студенты получают видеокурс о Prometheus. Он будет полезен даже для тех, кто с Prometheus никогда не работал.


Узнать больше о курсе и записаться

Подробнее..

Перевод Google признала сложность Kubernetes, поэтому разработала режим Автопилот

26.02.2021 18:20:16 | Автор: admin

Новый режим GKE более дорогой и менее гибкий, но зато проще и безопаснее



Автопилот в GKE управляет подами за вас

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

Чтобы упростить развёртывание и управление кластерами, компания представила всем клиентам GKE доступ к сервису Автопилот, который Google уже давно использует в собственных кластерах Borg. Это автоматическая конфигурация ресурсов на основе машинного обучения.

Несмотря на 6 лет прогресса, Kubernetes по-прежнему невероятно сложен, сказал Дрю Брэдсток (Drew Bradstock), руководитель продукта Google Kubernetes Engine (GKE), в интервью The Register. В последние годы мы видели, что многие компании принимают Kubernetes, но затем сталкиваются с трудностями.

GKE это платформа Kubernetes, которая работает в основном на Google Cloud Platform (GCP). Она также доступна и на других облаках или локально как часть Anthos.

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


Использование Автопилота в собственной инфраструктуре Google, источник

В Kubernetes есть понятия кластеров (набор физических или виртуальных серверов), узлов (отдельные серверы), подов (блок управления, представляющий один или несколько контейнеров на узле) и самих контейнеров. GKE полностью управляется на уровне кластера. Автопилот распространяет это на узлы и поды.

Проще всего понять особенности и ограничения Автопилота из описания системы. Обратите внимание на предварительно настроенные параметры (pre-configured), которые нельзя изменить.

Сравнение режимов Autopilot и Standard

По сути, это ещё один способ резервирования и управления ресурсами GKE, который жертвует гибкостью ради удобства. Поскольку Google управляет большей частью конфигурации, то для подов Автопилота с распределением по многим зонам она гарантирует более высокий аптайм 99,9% (см. SLA).

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

Другое ограничение Автопилота предустановленная операционная система Linux с Containerd, оптимизированная для контейнеров. Нет возможности использовать Linux с Docker или Windows Server. Максимальное количество подов на узел 32, а не 110, как на стандартном GKE.

SSH-доступ к узлам отсутствует, узлы Автопилота заблокированы. Поддержка GPU и TPU (Tensor Processing Unit) недоступна, хотя и запланирована на будущее. Отказ от SSH был сложным решением, говорит Брэдсток. Конечно, это ограничивает возможности управления. Но Брэдсток сказал, что такое решение было принято по результатам исследований, показавших большой уровень критических ошибок в конфигурировании кластеров.

Деньги


Модель ценообразования здесь тоже отличается. Плату берут не за вычислительные инстансы (виртуальные машины), а за реальное использование CPU, памяти и хранилища всеми подами. Плюс $0,10 в час за каждый кластер на Автопилоте, как в стандартном GKE.

Очевидный вопрос: что будет дороже, стандартный кластер или Автопилот. Ответить непросто. Поскольку это в каком-то смысле премиальный сервис, Автопилот обойдётся дороже, чем тщательно оптимизированное стандартное развертывание GKE. Существует премия по сравнению с обычным GKE, сказал Брэдсток, потому что мы обеспечиваем не только функциональность, но полную поддержку SRE (Site Reliability Engineering) и гарантии SLA.

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


Интегральная функция распределения (CDF) неиспользуемой памяти и занятых машин для 5000 задач после включения Автопилота в собственной инфраструктуре Google, источник


Снижение ошибок памяти (OOM) и доли неиспользуемой памяти для 500 задач после включения Автопилота в инфраструктуре Google, источник

Почему просто не использовать Cloud Run, который запускает рабочие нагрузки контейнеров без какой-либо конфигурации кластеров, узлов и подов, даже на GKE? Cloud Run отличная среда для разработчиков, одно приложение может раскрутиться с нуля до 1000 инстансов и обратно опуститься до нуля, для того и созданы облака, объясняет Брэдсток. Автопилот облегчает жизнь людям, которые хотят использовать именно Kubernetes, хотят всё видеть и держать под контролем, хотят использовать сторонние скрипты, хотят построить свою собственную платформу.

Определённой проблемой является совместимость с существующими надстройками сторонними инструментами для Kubernetes. Некоторые из них пока не совместимы с Автопилотом, но другие уже работают, такие как мониторинг Datadog. Также поддерживается DaemonSets эту функцию для запуска демонов на всех узлах используют многие инструменты.

Конфигурация хранилища, вычислений и сети вынудила отказаться от некоторого уровня гибкости и некоторых интеграций: Но мы определённо хотим, чтобы на нём [Автопилоте] работала сторонняя экосистема, говорит Брэдсток.

С запуском Автопилота расширяется диапазон вариантов, как запускать Kubernetes в облаке Google. Компромисс не только в более высокой стоимости и меньшей гибкости, но и в потенциальной дезориентации девопсов на предприятиях. Однако главная логика в том, что предприятиям лучше сосредоточиться на своём основном бизнесе, а не на услугах, которые выполняются подрядчиком.

У инженерной службы Google репутация гораздо лучше, чем службы поддержки клиентов. Разработчик Кевин Лин (Kevin Lin) недавно описал, как выглядит схема зачисления бонусов для стартапов в AWS и Google.

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

Это ещё одно доказательство, что хорошие инженеры не единственный важный фактор при выборе облака.
Подробнее..

Samsung просит милости у голландского монополиста ASML

13.05.2021 16:14:30 | Автор: admin

Машина для фотолитографии ASML весит около 180 тонн и стоит примерно $170млн

Пытаясь конкурировать с TSMC (Тайвань) в производстве микросхем последнего поколения, конгломерат Samsung (ЮжнаяКорея) пошёл на крайние меры. Как стало известно Nikkei Asia, осенью 2020 года вице-президент Samsung Electronics Ли Джэ Ён (Lee Jae-yong, де-факто это руководитель всего Samsung) летал в Нидерланды на переговоры с руководством ASML мировым монополистом на рынке оборудования для самой продвинутой версии фотолитографии в глубоком ультрафиолете (EUV).

Nikkei Asia называет эту поездку в разгар пандемии отчаянным шагом. Корейцы пытаются выпросить уникальные сканеры ASML, более 70% которых сейчас уходит главному конкуренту тайваньской TSMC.


Установка для фотолитографии в глубоком ультрафиолете ASML Twinscan NXE:3400B поддерживает травление элементов размером 7 и 5 нм в промышленном масштабе (125 и более пластин в час)

Как рассказывалось в статье об ASML, степпер это основное оборудование, которое используется при изготовлении полупроводниковых интегральных схем. В процессе работы степпера рисунок с маски многократно переводится в рисунок на различных частях полупроводниковой пластины. Своё название степпер получил из-за того, что каждое экспонирование производится небольшими прямоугольными участками (порядка нескольких квадратных сантиметров); для экспонирования всей пластины её передвигают шагами, кратными размеру экспонируемой области (процесс step-and-repeat). После каждого передвижения проводится дополнительная проверка правильности позиционирования.

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


Концепция step-and-scan

Это оборудование незаменимо для передовых продуктов южнокорейской компании. За всё время ASML изготовила и отгрузила по миру около 100 таких машин, но более 70% из них достались конкуренту Samsung Taiwan Semiconductor Manufacturing Co.

Судя по всему, машины для фотолитографии в глубоком ультрафиолете по техпроцессу 5нм остаются очень дефицитным товаром, а Samsung всеми силами пытается приобрести их, то есть увеличить свою квоту у ASML.

Нужно заметить, что степпер/сканер лишь одно звено в технологической цепочки из десятков единиц оборудования. Хотя и главное звено. Стоимость современного завода по производству микросхем составляет примерно $10-12млрд, со всем оборудованием. Причём прогресс идёт так быстро, что завод устареет через несколько лет. Окупить инвестиции можно только на очень масштабном производстве.

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

Для сторонних аналитиков очевидно технологическое отставание от TSMC, хотя руководство Samsung отказывается это признавать: Наша конкурентоспособность в передовых процессах сопоставима. Мы обеспечили заказы от крупных клиентов и сокращаем разрыв, ответил Ким Кинам, вице-председатель Samsung Electronics и глава подразделения полупроводников, когда его спросили о технологическом разрыве с TSMC на собрании акционеров в марте.

Однако некоторые поставщики говорят, что компания задержалась с переходом на самый современный техпроцесс 5нм. Она запустила массовое производство 5нм на несколько месяцев позже TSMC, и с тех пор технологический разрыв увеличивается.

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

Масштаб инвестиций огромен. В апреле TSMC сообщила о планах выделить $100млрд на капитальные расходы в течение следующих трёх лет в ответ на глобальный дефицит полупроводников.

Для сравнения, годовой бюджет Российской Федерации составляет около $254млрд в доходной части.

Samsung планирует инвестировать около $40 млрд в 2021 году, но большая часть пойдёт на DRAM и другие чипы памяти, а масштаб инвестиций уступает масштабам TSMC, которая специализируется на контрактном производстве.

По данным тайваньской исследовательской фирмы TrendForce, TSMC наращивает лидерство, увеличив свою долю в контрактном производстве до 56% за Iкв. 2021года (+2п.п. к прошлому году, +8п.п. к позапрошлому), в то время как занимающая второе место Samsung потеряла 1 процентный пункт рынка за тот же период.

Крупные американские клиенты, такие как Apple и AMD, передают почти все свои заказы на аутсорсинг TSMC, и другой фирме выйти на такой же масштаб производства крайне сложно.

Растущая напряжённость в отношениях между США и Китаем также играет свою роль. Тайвань и США объединились против Пекина, в то время как Южная Корея поддерживает двустороннюю дипломатию, что рискует изолировать южнокорейские компании от цепочек поставок полупроводников, опасаются эксперты.

Снижение конкурентоспособности Samsung в области передовых полупроводников может отразиться на фирменных смартфонах, где используются процессоры и сенсоры изображения CMOS собственного производства. Apple передаёт всё своё производство процессоров на аутсорсинг TSMC, поэтому технологическое отставание Samsung от TSMC может перерасти в отставание производительности смартфонов Samsung от смартфонов Apple.
Подробнее..

Книги, которые мы заслужили. Vol 1

16.04.2021 12:14:51 | Автор: admin

Пятничный привет тебе, Хабр!

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

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

Название: Unbound: How Eight Technologies Made Us Human and Brought Our World to the Brink

Автор: Richard L. Currier

Год издания: 2017

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

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

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

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

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

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

Актуальной книга будет всегда. Особенно, как мне кажется, для родителей. Прочитайте и узнаете, что отвечать на многочисленные детские Почему?

Название: Robot Rights

Автор: David Gunkelm

Год издания: 2018

Автор детально разбирает современные популярные подходы к вопросу прав роботов. Основной корпус книги посвящен четырем комбинациям пары могут иметь права должны иметь права:
1) могут, но не должны,
2) могут и должны,
3) не могут, но должны,
4) не могут и не должны.

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

  • sci-fi кинематограф и литература с многочисленными терминаторами, единым разумом и тп.

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

  • многообразие функций и задач новых девайсов: от тостера для поджаривания хлеба до электронной собаки для эмоционального восстановления. Автор напоминает, что главное отличает tools от machines. Если первые заменяют предыдущие версии инструментов и выполняют грязную, тяжелую, унизительную работу (вспомнилось, что в английском это называется 3D works dangerous, dirty, demeaning), то machines заменяют самого человека. И не только на рабочем месте, но и в социуме норовят его полностью заместить, а то и поработить.

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

Однако, хотя автор и не выделял это в отдельную проблему, все же главным затруднением в вопросе прав роботов видится то, что человек предрасположен наделять вещи человеческими качествами. В список significant others уже входят не только роботы-компаньоны, но даже современные пылесосы. Татьяна Черниговская как-то рассказала, как ее подруга постоянно норовила включить в комнате свет, чтобы пылесосу было светло убираться. Появился даже принцип when in doubt, treat as a human.

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

  • четко разъяснять потребителям, что перед ними кусок дорогого пластика и проводов;

  • подчеркивать целевую детерминацию роботов они созданы для того чтобы копать\вычислять\грузить денно и нощно;

  • корректно выбирать названия для новых изобретений.

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

Но не все так просто. Автор приводит занятные примеры, когда даже эмоционально подкованные и просвещенные военные отказывались от машин-саперов, не желая видеть, как последние страдают. Люди продолжают относиться к машинам как к живым существам. Хотя, вспоминая знаменитый Chinese Room Argument, нам пора бы уже усвоить: даже если кажется, что тостеру больно, когда мы, например, резко дергаем его за шнур, это еще не означает, что тостеру действительно больно. Вообще, дихотомия being vs. appearing проходит красной нитью через всю книгу.

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

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

  • несмотря на то, что взрослые люди понимают, что робот это механизм в обличье homo sapiens, они все равно должны к ним относиться как к людям. А все потому, что дети берут со взрослых пример и, не видя разницу между роботом и человеком, будут относится к людям так, как их родители\взрослые относились к роботам.

Еще больше новостей про интересные книги, книжную индустрию и разной полезной информации в нашем новом телеграм-канале ITSumma Press Книжная Среда. Наши редакторы делятся прочитанным. Обсуждать тоже можно в сопутствующем чате. Присоединяйтесь!

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru