Руководство по DevOps [заметки]
1
Акроним от англ. development и operations — методология разработки программного обеспечения, нацеленная на активное взаимодействие и интеграцию специалистов по разработке и специалистов по IT-обслуживанию. Прим. перев.
2
Ким Д., Бер К., Слаффорд Дж. Проект «Феникс». Роман о том, как DevOps меняет бизнес к лучшему. М.: Эксмо, 2015. Прим. перев.
3
Техника «Blue-Green разворачивания» — стратегия установки ПО, базирующаяся на двух идентичных инсталляциях промышленной системы, одна из которых активна, и возможно мгновенное переключение между ними. Одна из них условно называется синей, ее копия же называется зеленой. Прим. перев.
4
Хамбл Д., Фарли Д. Непрерывное развертывание ПО. Автоматизация процессов сборки, тестирования и внедрения новых версий программ… М.: Вильямс, 2011. Прим. перев.
5
Институт инженеров электротехники и электроники (от англ. Institute of Electrical and Electronics Engineers) — международная некоммерческая ассоциация специалистов в области техники, мировой лидер в области разработки стандартов по радиоэлектронике, электротехнике и аппаратному обеспечению вычислительных систем и сетей. Прим. перев.
6
Continuous Integration / Continuous Deployment — непрерывная интеграция и непрерывное развертывание. Прим. ред.
7
Это всего лишь небольшой пример проблем, встречающихся в типичной IT-организации. Прим. авт.
8
Коммодитизация — превращение изделий в обезличенный товар. Прим. перев.
9
Термин из области разработки ПО: как только появляются изменения в программном коде, зачастую возникает необходимость сделать связанные с ними изменения в других частях кода или документации. Эти необходимые, но незавершенные изменения считаются долгом. Он должен быть погашен в определенный момент в будущем. Прим. перев.
10
В мире промышленного производства существует похожий корневой, хронический конфликт. Его суть в необходимости обеспечивать своевременные поставки клиентам и управление затратами. Как этот конфликт был преодолен, рассказывается в приложении 2. Прим. авт.
11
В 2013 году в европейском банке HSBC трудилось больше разработчиков ПО, чем в компании Google. Прим. авт.
12
Пока не будем устраивать дискуссий, как должна финансироваться разработка ПО, как «проект» или как «продукт». Это мы обсудим ниже. Прим. авт.
13
Например, Вернон Ричардсон с коллегами опубликовал следующие поразительные результаты. Они изучили отчеты 184 публичных корпораций по форме 10-K и разделили их на три группы: а) фирмы с нехваткой материальных ресурсов и с нечеткой работой IT-подразделений; б) фирмы с нехваткой материальных ресурсов и с четкой работой IT-подразделений; в) «чистые фирмы» без нехватки материальных ресурсов. В фирмах из группы А текучка кадров среди руководителей высшего звена была в восемь раз выше, чем в фирмах из группы В, а в фирмах из группы Б — только в четыре раза. Ясно, что работа IT-структур оказывается гораздо более важной, чем принято считать. Прим. авт.
14
По данным индекса чистой лояльности сотрудников (employee Net Promoter Score — eNPS). Это очень значимое открытие, поскольку исследование доказало, что «компании, где работники имеют высокую удовлетворенность, показали в 2,5 раза более высокий рост доходов, чем компании с низкой удовлетворенностью работников. И [торгующиеся на бирже акции] компании с высоким уровнем удовлетворенности показали за период с 1997 по 2011 г. рост цены, втрое превышающий рост биржевых индексов». Прим. авт.
15
М.: Символ-Плюс, 2010. Прим. перев.
16
Показаны данные только по тем организациям, которые выполняют хотя бы одно развертывание в день. Прим. авт.
17
Другой выдающийся пример — компания Amazon. В 2011 г. она выполняла около 7000 развертываний в день. В 2015 г. — уже 130 000. Прим. авт.
18
Издана: М.: Альпина Диджитал, 2014. Прим. перев.
19
DevOps также расширяет и усовершенствует принцип инфраструктура как код, впервые предложенный Марком Берджессом, Люком Канисом и Адамом Джекобом. При использовании этого принципа работа эксплуатации автоматизирована и трактуется как разработка кода приложений, так что все современные методики разработки могут быть применены ко всему потоку разработки и управления. Это увеличивает возможности ускорения потока разработки, включая непрерывную интеграцию (придумана Греди Бучем как один из 12 ключевых методов «экстремального программирования»), непрерывную поставку (впервые введена Джезом Хамблом и Дэвидом Фарли) и непрерывное развертывание (созданное компаниями Etsy и Wealthfront, а также Эриком Рисом из IMVU). Прим. авт.
20
Издана: СПб.: Питер, 2014. Прим. перев.
21
Ката — формализованная последовательность движений, связанных принципами ведения поединка с воображаемым противником или группой противников. По сути, является квинтэссенцией техники конкретного стиля боевых искусств. Прим. ред.
22
Здесь и далее слово «инженер» означает любого человека, работающего в команде, производящей поток ценности, а не только разработчиков. Прим. авт.
23
По правде говоря, при использовании таких методик, как разработка через тестирование, тестирование может начинаться еще до того, как будет написана первая строка кода. Прим. авт.
24
В этой книге термин «время производства» будет использоваться по той же причине, о которой говорили Карен Мартин и Майк Остерлинг: «чтобы минимизировать возможную путаницу, мы избегаем использовать термин “время цикла”, поскольку он имеет несколько значений, в том числе синонимичное для времени производства и темпа или частоты выдачи результатов, и это только некоторые». Прим. авт.
25
Тайити Оно сравнил введение лимитов на НзП с отводом воды из реки производства, чтобы обнажить все проблемы, препятствующие свободному течению. Прим. авт.
26
Также это называют «единичный размер партии» или «поток 1 × 1», потому что и размер партии, и размер НзП равны единице. Прим. авт.
27
Издана: М.: Альпина Паблишер, 2016. Прим. перев.
28
Издана: М.: Вильямс, 2010. Прим. перев.
29
Хотя Мэри и Том Поппендики не включили геройство в категории потерь, мы это сделали в связи с высоким уровнем распространенности таких ситуаций, особенно при эксплуатации в случае систем, обслуживающих много клиентов.
30
Спир расширил рамки своего исследования, чтобы объяснить, почему и другие компании оставались успешными в течение долгого времени, в частности сеть снабжения компании Toyota, Alcoa, программа военно-морских сил США по разработке атомных двигательных систем.
31
Издана: М.: Олимп-Бизнес, 2003. Прим. перев.
32
На некоторых заводах Toyota вместо шнура стали использовать кнопку Andon. Прим. авт.
33
В XVIII веке британское правительство продемонстрировало пример иерархически организованной бюрократической системы командования и управления, оказавшейся чрезвычайно неэффективной. В то время Джорджия еще была колонией, и хотя британское правительство находилось в 5000 километров и не имело сведений из первых рук о расположении земель, каменистости почв, топографии, доступности водных ресурсов и других условий, оно попыталось спланировать сельскохозяйственную экономику Джорджии. Результаты оказались плачевными: благосостояние и население Джорджии стали самыми низкими среди всех 13 колоний. Прим. авт.
34
Шаблон «позор тебе, NN» — часть теории плохого яблока, раскритикованной Сидни Деккером и активно обсуждавшейся в его книге The Field Guide to Understanding Human Error. Прим. авт.
35
Генеральный директор. Прим. ред.
36
Это удивительно, познавательно и действительно демонстрирует убежденность и страстность, с которыми О'Нил относился к понятию моральной ответственности руководителей за создание безопасных условий труда. Прим. авт.
37
Руководители несут ответственность за разработку и эксплуатацию процессов на более высоком уровне обобщения, где рядовые сотрудники не имеют перспективного видения и достаточной власти. Прим. авт.
38
Организации, проектирующие системы… производят их, копируя структуры коммуникации, сложившиеся в этих организациях (Конвей, 1968). Прим. перев.
39
Такие организации иногда называют «Киллер Б, который умер» (Киллер Б — герой серии японских мультфильмов). Прим. перев.
40
Обычай полагаться на этап стабилизации или повышения надежности, выполняемый в конце проекта, часто обеспечивает плохой результат, потому что проблемы, не найденные и не исправленные в ходе повседневной деятельности, останутся и потенциально могут лавинообразно разрастись в более серьезные последствия. Прим. авт.
41
То, что услуги, сулящие бизнесу самые большие потенциальные выгоды, — браунфилд-системы, не должно удивлять. В конце концов, именно на эти системы полагаются больше всего, они обслуживают больше всего клиентов, или от них зависит получение наибольшего дохода. Прим. авт.
42
Издана: М.: Вильямс, 2006. Прим. перев.
43
Преобразования сверху вниз в стиле «большой шок» возможны, примером служит динамичная трансформация компании PayPal в 2012 г., которую возглавлял ее вице-президент по технологиям, Кирстен Волберг. Однако, как и в случае с любым устойчивым и успешным преобразованием, для этого требуется наивысший уровень поддержки со стороны руководства и постоянная концентрация на движении к необходимым результатам. Прим. авт.
44
Это особенно важно, поскольку мы ограничиваем уровень детализации собираемой информации — ведь время каждого из нас ценно и невосполнимо. Прим. авт.
45
И наоборот, существует много примеров использования инструментов таким образом, который обеспечивает отсутствие изменения поведения. Например, организация переходит к использованию инструмента планирования Agile, но затем настраивает его на процесс каскада, тем самым сохраняя статус-кво. Прим. авт.
46
Сетевой энциклопедический словарь хакерского сленга на английском языке. Содержит более 2300 словарных и обзорных статей по хакерскому сленгу и хакерской культуре. Первым составителем словаря был Рафаэль Финкель. В настоящее время Jargon File поддерживается Эриком Реймондом. Прим. перев.
47
Помимо прочего, ORM выполняет абстрагирование базы данных, что позволяет разработчикам выполнять запросы и манипулировать данными, как если бы эти данные были просто еще одним объектом в языке программирования. Среди популярных ORM — Hibernate для Java, SQLAlchemy для Python и ActiveRecord для Ruby on Rails. Прим. авт.
48
Sprouter был одной из многих технологий, использовавшихся в процессах разработки и производства, которые были отброшены компанией Etsy в ходе преобразований. Прим. авт.
49
Однако, как будет пояснено позднее, другие не менее известные компании, такие как Etsy и GitHub, имеют функциональную ориентацию. Прим. авт.
50
Адриан Кокрофт отметил, что «для компаний, которые в настоящее время отказываются от пятилетних контрактов на IT-аутсорсинг на внешний подряд, это выглядит, как если бы они были заморожены на эти годы, одни из наиболее прорывных в технологии». Другими словами, IT-аутсорсинг — это тактика экономии затрат через обусловленное контрактом помещение в стазис, с твердой фиксированной ценой, предусмотренной графиком ежегодного сокращения расходов. Однако часто это приводит к тому, что организация оказывается не в состоянии реагировать на меняющиеся потребности бизнеса и технологий. Прим. авт.
51
В дальнейшем в этой книге мы будем использовать термин «сервисные команды» как взаимозаменяемый с понятиями «функциональная команда», «продуктовая команда», «команда разработчиков» и «команда доставки». Цель этого заключается в том, чтобы выразить, что команды, занимающиеся разработкой, тестированием и обеспечением безопасности, делают это ради того, чтобы доставлять ценность клиенту. Прим. авт.
52
Как язвительно заметил Джон Лодербах, в настоящее время вице-президент по информационным технологиям в компании Roche Bros. Supermarkets, «каждое новое приложение подобно подаренному щенку. Это не аванс в счет капитальных затрат, когда можно сказать “все, хватит!”. Это неотвратимая необходимость в постоянном обслуживании и поддержке». Прим. авт.
53
Такими же свойствами обладает микросервисная архитектура, построенная на принципах SOA. Один из популярных наборов шаблонов для современных веб-архитектур, создаваемых на основе этих принципов, — «двенадцатифакторное приложение» (12-factor app).
54
Издана: М.: Вильямс, 2015. Прим. перев.
55
В производственной культуре компании Netflix одно из семи ключевых правил гласит: «Сильно согласованы, слабо связаны». Прим. авт.
56
Черная пятница — пятница после Дня благодарения в США. С нее начинается традиционный рождественский сезон распродаж. Прим. перев.
57
В дальнейшем термины «платформа», «общие сервисы» и «комплекс инструментальных средств» будут в этой книге использоваться как равнозначные. Прим. авт.
58
Эрнест Мюллер отмечал: «В компании Bazaarvoice существовало соглашение, что эти платформенные команды принимают от других команд требования на создание инструментов, но не принимают задания на выполнение работы». Прим. авт.
59
В конце концов, предварительная разработка системы для последующего повторного использования — обычная и весьма дорогостоящая причина отказов во многих корпоративных архитектурах. Прим. авт.
60
Однако, если мы увидим, что весь отдел разработки молча сидит на своих рабочих местах весь день, не общаясь друг с другом, возможно, нам придется найти другой способ вовлечь их в общение, например покупать им обеды, организовать книжный клуб, по очереди проводить презентации типа «обедай и учись», разговаривать с ними, чтобы узнать, какие у кого имеются проблемы, и понять, как мы можем сделать их жизнь лучше. Прим. авт.
61
Scrum — это методология разработки по системе Agile, описываемая как «гибкий, целостный продукт стратегии разработки, при которой команда разработчиков работает как единое целое для достижения общей цели». Она была впервые полностью описана Кеном Швабером и Майком Бидлом в книге Agile Software Development with Scrum. В этой книге мы используем термины «разработка Agile» или «итеративная разработка», чтобы охватить различные методы, использующиеся специальными методологиями, такими как Agile и Scrum. Прим. авт.
62
В этом контексте среда определяется как все содержимое стека приложения, за исключением самого приложения, в том числе базы данных, операционные системы, сеть, виртуализация и все связанные с этим настройки. Прим. авт.
63
Большинство разработчиков хотят тестировать свой код, и нередко им приходится очень долго ждать заказанную тестовую среду, чтобы заняться этим. Известно, что разработчики зачастую повторно использовали старые тестовые среды (иногда давностью в несколько лет) или просили кого-то, имеющего репутацию, найти подходящую среду, причем не спрашивая, откуда эта среда взялась, хотя в ней наверняка отсутствовал один или несколько необходимых серверов. Прим. авт.
64
В идеале мы должны находить ошибки до начала интеграционного тестирования, потому что цикл тестирования — это уже слишком поздний момент для организации быстрой обратной связи с разработчиками. Если мы не в состоянии сделать это, то, скорее всего, у нас имеются проблемы с архитектурой, которые необходимо решить. Проектирование систем для тестируемости с целью добавить возможность обнаруживать большинство дефектов с помощью неинтегрированных виртуальных сред на рабочих станциях — ключевой элемент создания архитектуры, поддерживающей быстрый поток и обратную связь. Прим. авт.
65
Первой системой контроля версий была, скорее всего, UPDATE для CDC6600 (1969). Позднее появились SCCS (1972), CMS для VMS (1978), RCS (1982) и так далее. Прим. авт.
66
Можно видеть, что система контроля версий выполняет некоторые из ITIL-конструкций Definitive Media Library (DML) и Configuration Management Database (CMDB), инвентаризируя все необходимое для повторного создания производственной среды. Прим. авт.
67
На следующих шагах мы также внесем в систему контроля версий всю создаваемую нами вспомогательную инфраструктуру, такую как пакеты программ для автоматизированного тестирования и инфраструктура непрерывной интеграции и конвейера развертывания. Прим. авт.
68
Любой, кто выполнял миграцию кода для системы ERP (например, SAP, Oracle Financials и так далее), знаком со следующей ситуацией: когда миграция кода дает сбой, причиной редко бывает ошибка в коде. Намного более вероятно, что миграция не удалась ввиду неких различий в средах, например между средами, использующимися разработчиками и тестировщиками, или тестовой средой и производственной. Прим. авт.
69
В компании Netflix средний возраст копий Netflix AWS составляет 24 дня, при том что 60 % из них имеют возраст менее недели. Прим. авт.
70
Или разрешать его только в чрезвычайных ситуациях, обеспечивая автоматическую отправку копии протокола работы с консолью по электронной почте в отдел эксплуатации. Прим. авт.
71
Весь стек приложений и сред может быть объединен в контейнеры, что может обеспечить небывалые быстроту и скорость работы всего конвейера развертывания. Прим. авт.
72
Термин «интеграция» имеет в DevOps множество немного отличающихся значений. В разработке он обычно означает интеграцию кода, то есть интеграцию нескольких ветвей кода в одно дерево в системе контроля версий. В непрерывной доставке и DevOps интеграционное тестирование означает тестирование приложения в среде, приближенной к производственной, или в интегрированной тестовой среде. Прим. авт.
73
Блэнд описывал, что одним из последствий такого большого числа талантливых разработчиков в компании Google стало появление у них «синдрома самозванца». Этот термин был введен психологами, чтобы неформально описать людей, которые не в состоянии глубоко осознать свои же достижения. В Википедии этот термин описывается так: «Несмотря на внешние доказательства состоятельности, подверженные этому синдрому продолжают считать, что они обманщики и не заслуживают успеха, которого достигли. Успехи они, как правило, объясняют удачей, попаданием в нужное место и время или введением других в заблуждение, будто они умнее и компетентнее, чем есть на самом деле». Прим. авт.
74
Они создали обучающие программы, распространявшиеся через известный информационный бюллетень Testing on the Toilet (который они развешивали в санитарных комнатах), план работы и сертификационную программу Test Certified и провели несколько собраний fix-it («исправь это»), которые помогли командам улучшить автоматическое тестирование процессов, с тем чтобы они смогли воспроизвести потрясающие результаты, которых сумела добиться команда GWS. Прим. авт.
75
В разработке термин «непрерывная интеграция» часто означает непрерывную интеграцию нескольких ветвей кода в общую ветку и проверку того, что интегрированный код успешно проходит модульное тестирование. Однако в контексте непрерывной доставки и DevOps непрерывная интеграция также означает работу в среде, близкой к производственной, и успешное прохождение приемочных и интеграционных тестов. Джез Хамбл и Дэвид Фарли устранили эту неоднозначность, обозначив последнее понятие как CI+. Далее в этой книге термин «непрерывная интеграция» будет всегда использоваться в контексте методов CI+. Прим. авт.
76
Если мы будем создавать контейнеры в конвейере развертывания и использовать такую архитектуру, как микросервисы, то можем предоставить каждому разработчику возможности создания неизменяемых артефактов, когда разработчики собирают и запускают все сервисные компоненты на своих рабочих станциях в среде, идентичной производственной. Это позволяет разработчикам создавать и запускать больше тестов на своей рабочей станции вместо тестирования на серверах и дает нам также быструю обратную связь об их работе. Прим. авт.
77
Мы можем даже потребовать, чтобы эти инструменты запускались до внесения изменений в систему контроля версий (например, выполнялся предфиксационный перехват). Мы также можем запускать эти инструменты у разработчика в интегрированной среде разработки (IDE), в которой разработчик редактирует, компилирует и запускает код, что делает обратную связь еще более быстрой. Прим. авт.
78
Мы также можем использовать в качестве механизма упаковки контейнеры, такие как Docker. Контейнеры обеспечивают возможность «написано однажды, используется везде». Эти контейнеры создаются как часть нашего процесса сборки и могут быть быстро развернуты и запущены в любой среде. Поскольку один и тот же контейнер будет работать в любой среде, мы можем обеспечить согласованность всех наших артефактов сборки. Прим. авт.
79
Именно эта проблема привела к созданию метода непрерывной интеграции. Прим. авт.
80
Существует большая категория архитектурных методов и способов тестирования, используемых, чтобы справиться с проблемами тестирования в случаях, требующих входных данных от внешних точек интеграции, включая «заглушки», «мок-объекты», «виртуализацию служб» и так далее. Это становится еще более важным для приемочного и интеграционного тестирования, в которых необходимо гораздо сильнее полагаться на состояние внешних данных. Прим. авт.
81
Мы должны делать это только тогда, когда наши команды уже оценили автоматизированное тестирование — этим показателем разработчики и менеджеры могут легко манипулировать. Прим. авт.
82
Издано на русском языке: М.: Вильямс, 2011. На обложке русскоязычного издания в качестве авторов указаны Джез Хамбл и Дэвид Фарли. Прим. перев.
83
Начи Нагаппан, Майкл Максимилиан и Лори Уильямс (из компаний Microsoft Research, IBM Almaden Labs и университета Северной Каролины соответственно) провели исследование, которое показало, что команды, использовавшие TDD, выпускали код на 60–90 % качественнее по показателю плотности дефектов по сравнению с командами, не использовавшими TDD, и тратили на это всего на 15–35 % больше времени. Прим. авт.
84
Если процесс отката кода не очень хорошо известен, то потенциальная контрмера — парное программирование отката, с тем чтобы он был лучше документирован. Прим. авт.
85
Это иногда называют антишаблоном water-Scrum-fall. Это обозначает, что организация утверждает, будто использует методы Agile, но в действительности все тестирование и исправление ошибок выполняются в конце проекта. Прим. авт.
86
Ветвление в системах управления версиями использовалось во многих целях, но обычно оно применяется для разделения работы между членами команды по релизам, рабочим заданиям, компонентам, технологическим платформам и так далее. Прим. авт.
87
Включение-выключение выполнения отдельных участков кода — наличие копира, поддерживаемый размер бумаги и тому подобное — осуществлялось с помощью флагов компиляции (#define и #ifdef). Прим. авт.
88
Выпуск продуктов был задержан в связи с (успешным) IPO. Прим. авт.
89
Канареечным тестированием называется метод, при котором развертывание программного обеспечения выполняется на небольшой группе производственных серверов для небольшого числа клиентов, чтобы убедиться, что при работе с реальным трафиком клиентов не происходит ничего страшного.
90
Клиентская подсистема сайта Facebook была написана преимущественно на PHP. В 2010 г. для увеличения производительности сайта код PHP был преобразован в код C++ с помощью разработанного в компании компилятора HipHop, затем этот код был скомпилирован в исполняемый файл размером 1,5 ГБ. Этот файл затем был скопирован на все производственные серверы с помощью программы BitTorrent, что позволило выполнить операцию копирования за 15 минут. Прим. авт.
91
В ходе своих экспериментов они обнаружили, что команды SOT были успешными независимо от того, кому они подчинялись — отделу разработки или отделу эксплуатации, если команды были укомплектованы правильными людьми и были нацелены на успех SOT. Прим. авт.
92
Выражение из военной терминологии, означает укрепление передовой. Прим. перев.
93
Хорошей метафорой может служить операция «Щит пустыни». Начиная с 7 августа 1990 г. тысячи человек и множество материальных средств в течение четырех месяцев были безопасно развернуты на театре производства, а кульминацией явился единый многодисциплинарный, хорошо скоординированный выпуск. Прим. авт. («Щит пустыни» — военная операция по освобождению Кувейта. Прим. перев.)
94
Иногда в русскоязычной практике эти термины не переводятся, остаются на английском языке или даются транслитерацией. Прим. ред.
95
Есть и другие пути для реализации сине-зеленого шаблона. Например, настройка нескольких Apache/NGINX веб-серверов на прослушивание на разных физических или виртуальных интерфейсах, использование нескольких виртуальных корневых объектов на серверах с Windows IIS, привязанных к разным портам, с помощью различных каталогов для каждой из версий системы и символической ссылки, указывающей, которая из сред рабочая (как Capistrano применяется для Ruby on Rails), параллельная работа нескольких версий сервисов или промежуточного ПО, каждая из которых прослушивает отдельные порты, применение двух различных центров обработки данных и коммутация трафика между ними, вместо того чтобы использовать их лишь в качестве горячего или теплого резерва для аварийного восстановления (кстати, использованием обеих сред, как описано выше, мы обеспечиваем и нормальную работу процесса аварийного восстановления) или с помощью различных зон доступности в среде облачных вычислений. Прим. авт.
96
Этот шаблон часто называют «расширение — сжатие», что Тимоти Фитц описывал так: «Мы не изменяем (трансформируем) объекты базы данных, такие как столбцы или таблицы. Вместо этого мы вначале расширяем базу путем добавления новых объектов, а затем, позднее, сжимаем ее путем удаления старых». Кроме того, существует и растет количество технологий, которые предоставляют виртуализацию, систему контроля версий, введение меток и откат баз данных. Это такие, как Redgate, Delphix, DBMaestro и Datical, а также инструменты с открытым исходным кодом, такие как DBDeploy, позволяющие вносить изменения в базы данных значительно безопаснее и быстрее».
97
Обратите внимание, что канареечные релизы требуют наличия и работы в производстве нескольких версий нашего программного обеспечения одновременно. Однако, поскольку каждая дополнительная версия, работающая в производственной среде, создает дополнительные сложности для управления, мы должны использовать минимальное количество версий. Это может потребовать использования шаблона базы данных «расширение — сжатие», описанного выше. Прим. авт.
98
Cluster immune system была впервые описана Эриком Рисом, работавшим в компании IMVU. Эта функциональность поддерживается также компанией Etsy в ее библиотеке Feature API, а также компанией Netflix. Прим. авт.
99
Один из современных примеров такой службы — программа Gatekeeper компании Facebook. Это сервис собственной разработки, который динамически выбирает, какие функции предоставляются конкретному пользователю, на основе демографической информации, такой как местоположение, тип интернет-браузера и данных профиля пользователей (возраст, пол и так далее). В частности, функция может быть сконфигурирована так, чтобы она была доступна только внутренним сотрудникам, 10 % пользователей или только пользователям в возрасте от 25 до 35 лет. Другие примеры — Etsy Feature API и библиотека Netflix Archaius. Прим. авт.
100
Примерно то же самое писал Чак Росси, технический директор компании Facebook: «Весь код, обеспечивающий функции, которые мы планируем выпустить в течение следующих шести месяцев, уже развернут на наших производственных серверах. Все, что мы должны сделать, — это включить его». Прим. авт.
101
К 2015 г. у Facebook было свыше миллиарда активных пользователей, на 17 % больше по сравнению с предыдущим годом. Прим. авт.
102
Эта проблема имеет худшую вычислительную характеристику O(n3). Другими словами, время вычисления растет экспоненциально как функция от количества пользователей, находящихся в сети, размера их списка друзей и частоты изменения состояния «в сети — не в сети». Прим. авт.
103
Издана на руском языке: М.: Вильямс, 2011. Прим. ред.
104
Архитектура компании eBay прошла через следующие фазы: Perl и файлы (версия 1, 1995 год), C++ и Oracle (версия 2, 1997 год), XSL и Java (версия 3, 2002 год), Java на стороне клиента и сервера (версия 4, 2007 год), микросервисы Polyglot (с 2013 года). Прим. авт.
105
Шаблон удушающего приложения предполагает постепенную замену всей системы, обычно старой, другой, совершенно новой. И наоборот, ветвление абстрактным представлением — термин, введенный Полем Хаммантом, — это метод, где мы создаем уровень абстрагирования между областями приложения, которые мы изменяем. Это делает возможным эволюционное проектирование архитектуры приложения, в то же время позволяя любому разработчику закончить работу над основной веткой (мастер-кодом) и отрабатывать непрерывную интеграцию. Прим. авт.
106
MTTR — Mean Time To Repair — среднее время устранения неисправности или неполадки. Прим. перев.
107
Среди примеров можно назвать Sensu, Nagios, Zabbix, LogStash, Splunk, Sumo Logic, Datadog, Riemann. Прим. перев.
108
Буквальный перевод — «билет», здесь — заказ. Прим. ред.
109
Существует большое количество библиотек для логирования, которые облегчают разработчикам задачу по генерированию телеметрии. Стоит выбирать такие средства, которые позволят нам посылать все логи приложений в централизованную инфраструктуру, созданную на предыдущем шаге. Из популярных примеров можно назвать rrd4j для Java и ruby-cabin для Ruby. Прим. ред.
110
Application performance monitors. Прим. перев.
111
В 2004 г. Жене Ким, Кевин Бер и Джордж Спаффорд описали это явление как симптом отсутствия «культуры причинно-следственных связей», при этом отмечая, что высокоэффективные организации понимают, что 80 % всех сбоев происходит из-за вносимых изменений и что 80 % MTTR тратится на выявление того, какое же изменение было причиной. Прим. авт.
112
См. application performance monitors. Прим. перев. Совершенно другой набор для мониторинга, агрегирования и сбора информации включает в себя Splunk, Zabbix, Sumo Logic, DataDog, а также Nagios, Cacti, Sensu, RRDTool, Netflix Atlas, Riemann и другие. Аналитики часто называют эту обширную категорию инструментов «мониторами производительности приложений». Прим. авт.
113
Создание простой информационной панели должно быть частью создания любого нового продукта или службы: автоматизированные тесты должны подтверждать, что и служба, и панель работают корректно. Это поможет нашим клиентам и упростит развертывание кода. Прим. авт.
114
В точном соответствии с предписаниями Базы данных управления конфигурациями ITIL. Прим. авт.
115
Особый интерес представляет инструмент Consul, поскольку он создает абстрактный уровень, сильно облегчающий визуализацию архитектуры приложения, мониторинг, работу с блокировками, хранение конфигураций пар ключ — значение, а также объединение хостов в кластеры и обнаружение ошибок. Прим. авт.
116
CTO — Configure-to-Order — главный технический директор (англ.). Прим. перев.
117
Это может быть стоимостью простоя или ценой, связанной с поздним введением новой функциональности. В терминах разработки продукта второй показатель известен как цена промедления (cost of delay). Это ключ к эффективным решениям и приоритизации. Прим. авт.
118
Site reliability engineering, SRE. Прим. перев.
119
Auto Scaling — Автоматическое масштабирование (англ.). Прим. перев.
120
AWS — Amazon Web Services — Служба облачных веб-сервисов, предоставляемая компанией Amazon. Прим. перев.
121
Сглаживание и другие статистические методики также используются для управления графическими и аудиофайлами. К примеру, сглаживание изображений (или размытие), когда каждый пиксель заменяется средним всех его соседей. Прим. авт.
122
Другие примеры сглаживающих фильтров — взвешенное скользящее среднее или экспоненциальное сглаживание (которые линейно или экспоненциально увеличивают вес более близких к текущей дате наблюдений соответственно) и так далее. Прим. авт.
123
Инструменты для решения проблем такого типа включают в себя Microsoft Excel (который остается одним из самых простых и быстрых способов обработки данных для решения каких-либо единичных вопросов), а также такие статистические пакеты, как SPSS, SAS и проект R с открытым исходным кодом, который в последнее время стал одним из самых широко используемых статистических пакетов. Есть и другие инструменты, в том числе некоторые приложения Etsy с открытыми исходниками, например Oculus, который определяет графики похожей формы, что может свидетельствовать о корреляции, Opsweekly, который отслеживает частоты и количество оповещений, и Skyline, который выискивает аномальные отклонения в системных графиках и графиках приложений. Прим. авт.
124
Благодаря такому подходу вместе с соответствующей архитектурой мы «оптимизируем MTTR, а не MTBF» (Mean Time Between Failures — среднее время безотказной работы. — Прим. перев.) — популярный девиз DevOps, описывающий стремление оптимизировать быстрое восстановление работы в противоположность стремлению избежать неудач. Прим. авт.
125
SVP — Senior Vice-President — старший вице-президент (англ.). Прим. перев.
126
ITIL определяет гарантию качества так: продукт устойчиво работает в эксплуатации без вмешательства определенный период времени (например, две недели). В идеале такое определение гарантии должно стать частью всеобщего определения понятия «сделано». Прим. авт.
127
Наблюдая работу с кодом на конечных стадиях создания ПО, мы можем открыть новые способы улучшения потока. Так, можно автоматизировать сложные шаги, требующие работы вручную (например, соединять серверные кластеры приложения, которым требуется шесть часов для выполнения задачи), размещать код по пакетам один раз вместо нескольких на разных этапах тестирования и развертывания, взаимодействовать с тестировщиками, чтобы автоматизировать комплексы тестов, осуществляемых вручную (и убрать узкое место для более быстрых темпов развертывания), создавать более полезную документацию вместо того, чтобы расшифровывать записки разработчика по установлению созданного ПО. Прим. авт.
128
Недавно Джеф Суссна попробовал более четко описать, как лучше достичь целей в проектировании пользовательского интерфейса, назвав эту методику «цифровыми разговорами». Задумка этого подхода — помочь организациям осознать путь пользователя при взаимодействии с их продуктом как сложную систему, таким образом расширяя понимание понятия «качество». Среди ключевых идей — проектирование для пользователя, а не для программы, уменьшение закрытости и увеличение обратной связи, проектирование с учетом неизбежности неудач и учеба на ошибках эксплуатации, использование опыта IT-эксплуатации для проектирования и настрой на эмпатию. Прим. авт.
129
Вероятность того, что ошибки эксплуатации будут быстро устраняться, увеличится, если команды разработчиков останутся неизменными, а не будут расформировываться после окончания проекта. Прим. авт.
130
Акт Сарбейнза — Оксли — закон, ужесточающий требования к финансовой отчетности, к процессу ее подготовки, а также к действиям директоров, менеджеров и аудиторов. Введен после ряда крупных скандалов с финансовой отчетностью крупных компаний (таких, как Enron и WorldCom). Прим. перев.
131
В организациях с проектным финансированием может не быть разработчиков, которым можно было бы вернуть проект, поскольку команда уже давно распущена или у нее нет денег или времени брать на себя дополнительную ответственность. Возможные меры в таком случае — устраивать периоды блиц-улучшений, на короткое время создавая и финансируя соответствующие команды, либо выводить сервис из эксплуатации. Прим. авт.
132
В этой книге мы используем термин «инженеры IT-эксплуатации», но термин «инженер по обеспечению стабильности сайтов» употребляется как синоним. Прим. авт.
133
В 2016 году Intuit продал Quicken частной инвестиционной компании H.I.G. Capital. Прим. авт.
134
Существует много других способов проводить исследования пользователя перед началом разработки. Среди самых недорогих — проведение опросов, создание прототипов (моделей, созданных с помощью таких инструментов, как Balsamiq, или интерактивных версий с реальным кодом) и тестирование удобства использования. Альберто Савойя, технический директор компании Google, придумал термин «претотип» для обозначения того, что создается до прототипа с целью понять, движемся ли мы в верном направлении. Изучение пользователя настолько дешево и просто по сравнению с разработкой бесполезной функциональности, что приниматься за разработку нового компонента без какого-либо подтверждения его необходимости не стоит. Прим. авт.
135
Контрфактуальное мышление — термин в психологии, описывающий стремление создавать альтернативные версии прошедших событий жизни. В методике обеспечения надежности он используется для описания интерпретаций событий в «воображаемой системе», а не «реальной». Прим. авт.
136
В этой книге термины анализ кода и анализ изменений будут использоваться как синонимы. Прим. ред.
137
Кстати, скорее всего, список областей высокого риска уже был создан вашим консультативным советом по внесению изменений. Прим. ред.
138
В некоторых организациях парное программирование может быть обязательным компонентом работы, тогда как в других инженеры сами ищут себе напарника для деятельности, требующей особой тщательности (например, перед отправкой готового кода в систему), или для сложных задач. Еще один распространенный подход — установить специальные часы для парной работы, например четыре часа с середины утра до второй половины дня. Прим. авт.
139
Pull request не имеет прямого перевода на русский язык. Термин обозначает процесс улучшения, внесенного кем-то в чужой репозиторий, разработанный ранее, с просьбой к автору оригинала принять эти изменения. Прим. ред.
140
Жене Ким выражает благодарность Шону Дэвенпорту, Джеймсу Фрайману, Уиллу Фарру и Райану Томайко из организации GitHub за обсуждение того, что отличает хороший запрос от плохого. Прим. авт.
141
Got Goo? — «Увязли в чем-то?» (англ.). Прим. перев.
142
Join The Rebellion — «Присоединяйся к восстанию» (англ.). Прим. перев.
143
В январе 2013 г. на конференции re: Invent Джеймс Хэмильтон, вице-президент и заслуженный инженер Amazon Web Services, сказал, что в Восточном регионе США у них было более десяти дата-центров, а если учесть, что в типичном дата-центре от 50 000 до 80 000 серверов, то сбой 2011 г. затронул клиентов на более чем полумиллионе серверов. Прим. авт.
144
J2EE — Java 2 Enterprise Edition — набор спецификаций и документации для языка Java, описывающий архитектуру серверной платформы для средних и крупных предприятий. Прим. перев.
145
Такая практика также называется послеаварийным анализом без поиска виноватых (blameless post-incident review) или послеаварийной ретроспективой (post-event retrospective). Стоит отметить схожесть с обычными ретроспективами во многих методиках гибкой разработки или итеративной разработки. Прим. авт.
146
Мы также можем распространить на отчеты анализа ошибок философию Transparent Uptime (блог, в котором описываются и пропагандируются принципы максимальной прозрачности в деятельности IT-компаний, автор — Ленни Рачицки. Прим. перев.). Вдобавок к публикации показателей сервисов мы можем выкладывать в общий доступ информацию с совещаний по анализу ошибок (возможно, цензурированные). Среди самых популярных общедоступных разборов ошибок — данные, опубликованные командой Google App Engine после значительного сбоя в 2010 г., а также анализ сбоя DynamoDB Amazon в 2015 г. Интересно, что компания Chef публикует в своем блоге заметки с таких совещаний, а также видеозаписи с реальных встреч по разбору причин ошибок. Прим. авт.
147
Генеральный директор. Прим. ред.
148
Издана на русском языке: Нейгард М.. Release it! Проектирование и дизайн ПО для тех, кому не все равно. СПб.: Питер, 2016. Прим. перев.
149
EC2 — Elastic Compute Cloud — веб-сервис Amazon, предоставляющий масштабируемые вычислительные ресурсы в облаке. Прим. перев.
150
Среди конкретных архитектурных решений — жесткое отключение (установка жестких лимитов ожидания ответа, чтобы выход из строя отдельных компонентов не приводил к отказу всей системы), переключатели уровней (проектирование каждого элемента функциональности так, чтобы он переключался на более низкое качество или на менее ресурсоемкий аналог) и удаление возможностей (удаление некритичных тормозящих компонентов с веб-страницы, чтобы они не влияли на впечатления пользователя). Еще одним потрясающим примером адаптивности Netflix, помимо продолжения работы во время сбоя AWS, было то, что инцидент первой степени тяжести был объявлен только спустя шесть часов. Подразумевалось, что рано или поздно сервис AWS будет восстановлен («AWS скоро снова начнет работать… он ведь всегда восстанавливается, да?»). Только спустя шесть часов после сбоя инженеры запустили процедуры по поддержанию непрерывности бизнеса. Прим. авт.
151
Маунтин-Вью — город в штате Калифорния, США, где расположен главный офис компании Google. Прим. перев.
152
@hubot «Развернуть owl в производственную среду». Прим. перев. OWL — библиотека класса для создания оконных приложений на языках C и Pascal. Прим. ред.
153
Отсылка к выражению Watercooler talk: сотрудники делают небольшие перерывы в работе и идут к кулеру за водой, на ходу и у самого кулера перекидываются парой слов о жизни, о работе и так далее. Прим. перев.
154
Hubot часто выполнял задачи с помощью вызовов скриптов командной оболочки, которые потом можно было выполнить отовсюду, где был доступ к чату, в том числе и с телефона. Прим. авт.
155
Проекты Chrome и Android находятся в другом репозитории, а некоторые алгоритмы, которые держатся в секрете, например PageRank, доступны только избранным командам. Прим. авт.
156
Компилируемым языком в Google был C++, языком сценариев — Python (впоследствии замененный на Go), а языком пользовательского интерфейса — Java и JavaScript с использованием Google Web Toolkit. Прим. авт.
157
В то время в Etsy пользовались PHP, lighttp, Postgres, MongoDB, Scala, CoffeeScript, Python и многими другими языками и средами. Прим. авт.
158
Додзё — зал для тренировок в японских боевых искусствах. Прим. перев.
159
Здесь и далее термин «хакатон» будет использоваться как синоним термина «блиц-обучение», а не в значении «время, когда можно работать над чем угодно». Прим. авт.
160
Кстати, первая конференция DevOpsDays компании Target была проведена по образцу первой конференции DevOpsDays компании ING, организованной Ингрид Алгра, Джен-Джуст Боумэн, Эвелин ван Льювен и Крим Байтерт в 2013 г. А ее идея, в свою очередь, возникла после того, как сотрудники ING посетили конференцию DevOpsDays 2013 г. в Париже. Прим. авт.
161
Фрод (fraud) — вид мошенничества в области информационных технологий, в частности несанкционированные действия и неправомочное пользование ресурсами и услугами в сетях связи. Прим. перев.
162
Организация The Open Web Application Security Project (OWASP) — некоммерческая организация, ее цель — улучшение защиты данных программного обеспечения. Прим. авт.
163
Стратегии управления этими рисками включают в себя проведение тренингов для сотрудников, изменение структуры информационных систем, в том числе сетей и программного обеспечения, и создание процессов для предотвращения и обнаружения атак и ответа на них. Прим. авт.
164
Common Vulnerability Scoring System — общая система оценки уязвимых мест. Прим. перев.
165
Среди инструментов обеспечения целостности зависимостей нашего программного обеспечения — OWASP Dependency Check и Nexus Lifecycle. Прим. авт.
166
В качестве примеров инструментов, помогающих тестировать правильность настроек (то есть проверяющих, «как должно быть»), можно назвать автоматизированные системы управления конфигурациями (например, Puppet, Chef, Ansible, Salt), а также такие инструменты, как ServerSpec и «Армия обезьян Netflix» (Netflix Simian Army: Conformity Monkey, Security Monkey и так далее). Прим. авт.
167
FISMA — Federal Information Security Management Act — Федеральный закон об управлении информационной безопасностью; FedRAMP — The Federal Risk and Authorization Management Program — Федеральная программа управления рисками и авторизацией; FITARA — Federal IT Acquisition Reform Act — Федеральный закон реформы приобретения информационных технологий. Прим. перев.
168
Такие разрешения называются FedRAMP JAB P-ATO. Прим. авт.
169
В ITIL функциональность — это то, «что делает сервис», а гарантии — то, «как сервис предоставляется пользователям и как можно определить, что он пригоден для использования». Прим. авт.
170
Чтобы лучше управлять рисками, мы можем также определить специальные правила, например что определенные изменения могут производиться только определенными группами или сотрудниками (к примеру, только инженеры баз данных могут вносить правки в схему базы данных). Традиционно встречи комитетов по изменениям для рассмотрения запросов и составления планов по их воплощению в жизнь проходили раз в неделю. Начиная с версии ITIL под номером 3, изменения можно одобрять удаленно с помощью специального инструмента управления. Там также рекомендуется, чтобы «стандартные изменения определялись рано, при организации процессов управления переменами, чтобы повысить их эффективность. Иначе внесение изменений может привести к высокому уровню бюрократизации и сопротивления этим процессам». Прим. авт.
171
Термин тикет обычно используется для обозначения любой уникально идентифицируемой рабочей задачи. Прим. авт.
172
IPO — Initial Public Offering — первичное размещение акций (англ.). Прим. перев.
173
PCI DSS (Payment Card Industry Data Security Standard) — стандарт безопасности данных индустрии платежных карт, разработанный Советом по стандартам безопасности индустрии платежных карт, который учрежден международными платежными системами Visa, Master Card, American Express, JCB и Discover. Прим. перев.
174
«Я мочь иметь токены» — разговорная конструкция, основанная на популярном интернет-меме. Прим. перев.
175
Авторы благодарят Билла Мэсси и Джона Оллспоу за то, что они потратили целый день на то, чтобы поговорить с Джином Кимом о своем опыте работы с нормами и требованиями. Прим. авт.
176
CDE — Cardholder Data Environment — сетевая среда, где хранятся и передаются данные платежных карт; часть PCI DSS. Прим. перев.
177
NIST 800–37 — «Руководство по использованию принципов управления рисками в федеральных информационных системах», руководство по трансформации традиционного процесса сертификации и аккредитации в шестиступенчатую систему управления рисками. Прим. перев.
178
Закон Грэмма — Лича — Блайли — закон о финансовой модернизации, принятый в 1999 г., основная цель которого — отмена важных ограничений в финансовой сфере, введенных актом Гласса — Стиголла 16 июня 1933 г.; среди основных положений закона — запрет для коммерческих банков одновременно заниматься кредитными операциями и инвестированием в компании. Прим. перев.
179
Health Insurance Portability and Accountability Act — Закон об отчетности и переносе данных о страховании здоровья граждан, принят в США в 1996 г. Прим. перев.
180
DSDM — Dynamic Systems Development Method, итеративный и инкрементный подход к разработке программного обеспечения, который придает особое значение продолжительному участию в процессе пользователя/потребителя. Прим. перев.
181
Stand-up — пятиминутка, подход к проведению совещаний, во время которого все его участники стоят; дискомфорт вынуждает делать такие совещания короткими и насыщенными. Прим. перев.
182
Издана на русском языке: Ротер М. Тойота Ката: Лидерство, менеджмент и развитие сотрудников для достижения выдающихся результатов. СПб.: Питер, 2014.
183
Издана на русском языке: Рис Э. Бизнес с нуля. Метод Lean Startup для быстрого тестирования идей и выбора бизнес-модели. М.: Альпина Паблишер, 2015.
184
«Независимо от того, что мы обнаружим, мы понимаем и искренне верим, что все хотели сделать свою работу как можно лучше, в тех условиях, с теми знаниями, навыками и способностями, ресурсами и информацией, что были на тот момент». Прим. перев.
185
Имеется в виду вышеупомянутая книга указанного автора «Release it! Проектирование и дизайн ПО для тех, кому не все равно». Прим. ред.
Билл – IT-менеджер в компании Parts Unlimited. Утро вторника, по дороге в офис его застает врасплох звонок от генерального директора.Новая IT-инициатива компании под кодовым называнием «Проект Феникс» имеет критическое значение для Parts Unlimited, но проект явно выходит за рамки возможностей бюджета и очень сильно не укладывается в сроки. Генеральный директор хочет, чтобы Билл уладил все проблемы за 90 дней, или же весь отдел Билла будет уволен. С помощью перспективного члена команды и своей мистической философии Трех Путей Билл начинает видеть, что работа в IT имеет гораздо больше общего с работой завода, чем он когда-либо мог представить.
Где и как искать инопланетян? Идея внеземной жизни завораживала человечество задолго до начала освоения космического пространства. Джон Уиллис, астроном и популяризатор науки, приводит пять наиболее реалистичных сценариев поиска инопланетных живых существ в нашей Галактике. Описывая последние достижения в изучении космоса — результаты космического телескопа «Кеплер», исследование Марса с помощью марсохода «Кьюриосити», пролет около Плутона зонда «Новые горизонты» и многие другие, — Уиллис предоставляет читателям возможность самим выбрать подходящий способ обнаружения внеземной жизни.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Работа сайта похожа на работу обычного магазина: если секции с разными товарами расположены логично, консультанты доступны в любой момент, а описания товаров информативны и понятны, есть шанс, что человек, зашедший в магазин, не уйдет с пустыми руками. Проанализируйте характеристики ваших потенциальных клиентов, поймите, что для них является ценностью, какие аргументы привлекут их внимание, соответственно этому продумайте структуру сайта, спроектируйте «маршрут» передвижения и составьте описания товаров – и ваши посетители будут гораздо чаще, чем сейчас, кликать на значок «корзины», а вы в разы повысите один из главных показателей работы сайта – конверсию.
Эта книга – захватывающая история самой успешной Интернет-компании в мире. В последнее время финансовый результат деятельности Google Inc. превосходит даже самые смелые ожидания инвестиционных аналитиков.Целеустремленность, научный талант, творческий поиск, смелость и любовь к эксперименту основателей компании – бывшего москвича Сергея Брина и выходца из штата Мичиган Ларри Пейджа – проложили путь к долгосрочному успеху компании. Под их руководством поисковый механизм Google стал популярнейшим ресурсом, который пользователи любят за удобство и уже испытывают к нему сильную эмоциональную привязанность.
«Даркнет» – это рассказ о цифровой революции в мире медиа. В битве между технологическим прогрессом и медиа-магнатами решается будущее кино, музыки, телевидения, компьютерных игр и Интернета. В этой книге вы найдете истории людей, оказавшихся в эпицентре битвы. «Даркнет» увлечет вас в тайный мир киноподполья, где бутлегеры и пираты скрываются от закона и Голливуда. Но не только в подполье делается цифровая революция: множеству приверженцев цифрового образа жизни, творцам фан-фикшн, диджеев, кинематографистам-любителям, пионерам телевидения нового поколения и разработчикам игр приходится противостоять могущественным силам, стремящимся сохранить статус-кво.
Черный PR сегодня активно перемещается в Интернет. В свое время кольт сделал людей равными. Сегодня Интернет уравнял финансово сильных и слабых в медиапространстве. Глобальная сеть позволяет рядовому человеку разорить могущественную корпорацию. Маленькая компания может эффективно противостоять транснациональному монстру, не располагая никакими финансами. Умение отражать информационные атаки стало на редкость насущной проблемой для любого бизнеса.В этой книге показаны все необходимые для отражения информационного нападения в Интернет инструменты и раскрыты секреты их применения.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.