Технические заметки одного Евтуховича

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

Состояние DevOps на 2017 год

| Комментарии

В очередной раз компания Puppet совместно с DORA ( DevOps Research and Assessment — компания, которая решила активно продавать DevOps, что бы это не значило) опубликовали отчет о состоянии DevOps, который называется «2017 State of DevOps Report». Скачать его можно бесплатно, если оставить свою почту. Насколько я знаю, это единственное регулярное исследование ИТ-рынка на предмет проникновения DevOps практик.

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

Service Discovery

| Комментарии

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

Русская википедия про Service Discovery (далее — sd) не знает ничего и дает вместо этого список протоколов для sd, английская, впрочем, тоже.

Про блокчейн и счастье

| Комментарии

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

Я бы брал со всех участников 0.01 BTC за возможность задавать вопросы спикерам, потому что эфир был заполнен слишком базовыми вопросами, которые гуглятся за пару минут. Учитывая, что на митап пришло 100+ участников, поговорить о блокчейне на высоком уровне дискурса не удалось. Докладчики были отличные, темой владели не по наслышке.

Закон Конвея

| Комментарии

Мелвин Конвей в 1968 году (48 лет назад!) опубликовал свою работу, в которой сформулировал следующую идею: «Организация, которая создает систему, ограничена дизайном, который копирует структуру коммуникации в этой организации». Более просто эту идею перефразировал Эрик Реймонд: «Если над компилятором работает четыре группы разработчиков, вы получите четырехпроходный компилятор». Желающие могут прочитать оригинал статьи здесь.

Состояние DevOps на 2016 год

| Комментарии

Компания Puppet (как ни удивительно — это разработчики одноименной системы управления конфигурацией) опубликовали свой очередной ежегодный отчет о состоянии DevOps.

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

Смещение компетенции

| Комментарии

Анатолий Левенчук говорит, что для того, чтобы заняться чем-то новым, надо перестать заниматься чем-то старым. Это вполне очевидная мысль, но чтобы применить ее в моей жизни, надо потратить какое-то количество сил. Потому что все, что у меня уже „есть“, так жалко выкидывать, ведь столько сил и времени было потрачено на то, чтобы какую-то компетенцию приобрести.

Непрерывная поставка ПО

| Комментарии

Термин «Непрерывная поставка ПО» (Continuous Delivery, CD) прочно вошел в обиход в конце 2010 году, после выпуска одноименной книги.

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

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

Основная идея CD в том, чтобы построить конвейер (Deployment Pipeline), позволяющий каждому изменению в системе контроля версий попасть в боевое окружения стандартным и полностью автоматизированным способом.

Приблизительно это может выглядеть следующим образом:

  1. Изменения вносятся в систему контроля версий (СКВ).
  2. Запускается система непрерывной интеграции (Continuous Integration, CI), собирается билд (если это компилируемый язык), прогоняются все необходимые тесты.
  3. В случае успешности предыдущего шага, билд выкатывается на окружение тестирования (QA).
  4. После успешного тестирования билд выкатывается на stage окружение (pre-production), которое максимально приближено к боевому окружению.
  5. Если все прошло хорошо, то билд попадает в боевое окружение.

Тут встает в полный рост вопрос, как сделать так, чтобы все окружения, начиная с окружения разработчиков, максимально соответствовали друг другу. Для этого существуют инструменты управления конфигурацией (Configuration management system), о которых мы поговорим еще в будущем отдельно. Самое главное, что конфигурация окружений — это такой же код, и к нему точно также применимы все вышеперечисленные подходы: хранение в СКВ, CI, тестирование.

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

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

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

PS Не обходится без маленькой доли безумия — компания HP пытается запатентовать термин Continuous Delivery, очередная победа «бизнеса» над здравым смыслом.

О поездке на HappyDev'2014 в Омск

| Комментарии

6–7 декабря 2014 на базе отдыха им. Стрельникова под Омском состоялась очередная конференция HappyDev. Я давно не попадал на такую интересную и яркую конференцию.

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

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

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

Кратко резюмирую, всем очень рекомендую посетить следующий HappyDev!

PS Еще на турбазе живет просто обалденный кот: толстый и красивый.

Могущественная скорлупа

| Комментарии

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

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

PS C:\> Enter-PSSession dc
[dc]: PS C:\Users\Administrator\Documents>

Во-вторых, появилась возможность управлять почти всеми кишками винды с помощью могущественной скорлупы, тьфу, powershell. Например, вот так выглядит аналог ps aux | grep snmp.

Get-Process | ? { $_.Name -like 'snmp' }

Конечно, выглядит достаточно многословно, но для большинства команд есть короткие алиасы, посмотреть которые можно с помощью Get-Alias. Вы будете удивлены, но многие алиасы пришли из мира Linux, например, тот же Get-Process сокращается до привычного ps.

Более того, в PowerShell есть привычная концепция пайпов (pipe), только вместо текстовых строк по пайпам бегают реальные объекты. Мне лично кажется, что это шаг вперед. Не надо воротить команды с awk и cut, и всегда можно посмотреть метаданные того, что пришло тебе через пайп.

ps | Get-Member


   TypeName: System.Diagnostics.Process

Name                       MemberType     Definition
----                       ----------     ----------
Handles                    AliasProperty  Handles = Handlecount
Name                       AliasProperty  Name = ProcessName
NPM                        AliasProperty  NPM = NonpagedSystemMemorySize
PM                         AliasProperty  PM = PagedMemorySize
VM                         AliasProperty  VM = VirtualMemorySize
WS                         AliasProperty  WS = WorkingSet
Disposed                   Event          System.EventHandler Disposed(System.Object, System.EventArgs)
...

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

$Xml = New-Object System.Xml.XmlDocument
$Xml.Load($XmlFile)
$Xml.SelectSingleNode("/my/xpath").InnerXml = "<justforfun />"
$Xml.Save($XmlFile)

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

Я, конечно, считаю, что PowerShell уступает в изяществе Ruby, но могущественность его от этого нисколько не страдает.