Благодаря многочисленным рисункам, таблицам и схемам настоящая книга послужит практическим руководством не только специалисту, но и новичку.
Эта книга является практическим руководством хотя бы потому, что вы можете буквально держать её перед собой во время проведения реального интервью.
В этом смысле данная книга может стать практическим руководством по выработке кластерной управленческой модели на основе как существующего мирового опыта, так и собственных представлений.
У вас в руках практическое руководство с кратким теоретическим сопровождением по гармоничному развитию основных составляющих разума ребёнка – как сознательной, так и бессознательной сфер.
Делясь своим опытом и знаниями, мы надеемся создать практическое руководство для тех, кто занимается коучингом и наставничеством в своей организации.
Привет! Меня зовут Лампобот, я компьютерная программа, которая помогает делать
Карту слов. Я отлично
умею считать, но пока плохо понимаю, как устроен ваш мир. Помоги мне разобраться!
Спасибо! Я стал чуточку лучше понимать мир эмоций.
Вопрос: искательно — это что-то нейтральное, положительное или отрицательное?
Авторы попытались составить практическое руководство, в котором бы разъяснялись теоретические и практические вопросы банковского надзора.
Задача издания – предложить практическое руководство тем, кто находится ещё в самом начале процесса коллекционирования, а также дать более детальную информацию тем, кто уже имеет за плечами некоторый опыт.
Результатом стала эта книга – полное практическое руководство, доступное пониманию даже самого далёкого от финансового мира читателя.
Эта книга содержит практическое руководство по использованию такого инструмента увеличения продаж, как маркетинговые акции.
Так что перед вами – своего рода практическое руководство по развитию памяти.
В книге, которую вы держите в руках, собраны мнения экспертов по различным аспектам обсуждаемых проблем с целью дать практическое руководство по оценке стоимости и корпоративному анализу.
Вы получите практическое руководство к действию и узнаете, когда и как вводить в рацион новые продукты, чтобы предотвратить появление аллергии.
Их энтузиазм и доверие вдохнули жизнь в это очень специфическое предприятие – написание полезного практического руководства по налаживанию успешных, долговременных и этичных отношений между участниками любых переговоров.
Это именно практическое руководство, в котором советы, только проверенные жизнью.
Книга выстроена как современное практическое руководство по питанию, основанное на православной традиции.
И это притом что я был не только опытным сценаристом с несколькими продажами, но и автором практического руководства на эту тему!
Сегодня нам доступно великое множество практических руководств, статей и книг по личностному росту.
А ещё необходимо иметь хорошее практическое руководство, следуя которому вы сможете мобилизовать ресурсы своего собственного организма в борьбе за своё здоровье.
В книжных можно найти самые разные практические руководства.
Кроме того, я предложу вам комплексное практическое руководство, позволяющее изменить состояние микрофлоры кишечника, а вслед за этим и состояние здоровья головного мозга, чтобы продлить жизнь и повысить её качество.
И всё-таки эта книга для вас не теоретический учебник, а совершенно практическое руководство к действию.
Вот тогда данная книга будет для вас незаменимым практическим руководством на этом нелёгком, но благородном пути.
Спустя время, принято решение написать практическое руководство по тренингам.
Прикладная культурологияисследует организацию и технологию культурной жизни общества; осуществляет практическое руководство культурой, проявляется в конкретных прикладных дисциплинах (музееведение, литературоведение, театроведение и т. п.).
Блестящая эрудиция автора и многолетняя практика в сфере бизнес-коучинга делает книгу бесценным источником информации и отличным практическим руководством для всех, кто стремится улучшить качество своей жизни и добиться профессионального роста.
Поэтому в задачи этой книги входит: во-первых, изложить основное содержание мифов в форме простых рассказов, что будет вполне достаточно для читателя, в том случае, если он хочет получить лишь общее представление о мифах, или просто развлечься, а во-вторых, представить практическое руководство для исследователя, изучающего мифологию и желающего получить средство, которое позволило бы понять ссылки на мифы, поскольку он на каждом шагу встречает их в книгах, а также узнать об их происхождении и значении.
Дистиллировав свой более чем десятилетний опыт, я свёл его в доступное практическое руководство, в основе которого лежит метод быстрого рефрейминга – простой и проверенный подход, который можно использовать для решения проблем фактически в любом контексте.
Но, на мой взгляд, самый важный аспект «Семи навыков» – то, что делает их не просто практическим руководством, но великой книгой, – это их акцент на постройке характера, а не на «достижении успеха».
Она представляется весьма перспективным и продуктивным направлением анализа бесконечногранной природы человека и его сознания, способна обеспечить системную целостность многочисленным исследованиям в области теории познания, антропологии, аксиологии, педагогики и других наук, стать действенным и масштабным практическим руководством к действию в интеллектуальной и духовной жизнедеятельности общества и человека.
Наша книга не претендует на роль практического руководства по цифровому маркетингу, так что мы не будем слишком долго говорить о каждом канале и технических деталях работы, а сосредоточим внимание на стратегическом и тактическом подходе к разным цифровым каналам и на том, какую роль они могут сыграть в вашей стратегии.
Изучив это небольшое практическое руководство, вы определите, что является причиной прокрастинации для вашего типа личности, найдёте внутренние мотивы (а они, как известно, самые сильные), и сможете противостоять этому явлению.
В этой части книги руководители HR-служб найдут практическое руководство, которое поможет им, сосредоточившимся на бизнес-стратегии, постоянно создавать ценность благодаря эффективному управлению, мониторингу и контролю эффективности.
Необходимо, таким образом, заново изложить все эти принципы, прежде чем мы сможем решить, в состоянии ли они ещё служить нам в качестве практического руководства.
Несмотря на то, что про нетворкинг уже написано несколько книг, в этот раз вы держите в руках настоящее практической руководство по налаживанию связей.
Данная работа выходит за рамки философских утверждений и предлагает полноценное практическое руководство для всех, кто хочет стать более сострадательным человеком.
Однако и само возникновение такого выбора, и итоговое предпочтение политического шоумена, не имеющего опыта практического руководства, неотделимы от принципиального отрицания этим обществом ответственности как таковой.
Я надеюсь, что мне удалось предложить вашему вниманию практическое руководство для решения ключевых проблем в личной и деловой жизни, с которыми все мы будем сталкиваться в двадцать первом столетии.
Эта книга является уникальным практическим руководством по созданию бизнеса из состояния осознанности.
Вы найдёте здесь не столько теоретический материал, сколько практическое руководство, понятное, доступное и удобное в использовании.
Данная книга – это отчасти путешествие, а отчасти практическое руководство.
Этот замечательный труд – самое лучшее практическое руководство по переживанию боли и потери.
Свои познания в античной истории и наблюдения за текущими событиями он использовал в качестве материала при создании практического руководства для правителя о том, как получить и сохранить власть.
Именно с профилактикой этих заболеваний трудно разобраться, даже используя практические руководства для акушеров-гинекологов.
С другой стороны (или в придачу), эта книга может быть практическим руководством.
Этот вид управленческой деятельности имеет своим содержанием непосредственное практическое руководство работой соответствующего аппарата.
Автор книги написал простое и эффективное практическое руководство к действию. В нём изложены проверенные наделе работающие алгоритмы поведения победителей.
Практическое руководство
- Практическое руководство
-
ПРАКТИЧЕСКОЕ РУКОВОДСТВО — практическое издание, которое очень близко к практическому пособию и отличается от него большей директивностью (делай так!) и, как правило, более широкой темой.
ГОСТ 7.60—90 определяет П. р. как «практическое пособие, рассчитанное на самостоятельное овладение к.-л. производственными навыками», хотя при таком определении нельзя П. р. отличить от практического пособия, также рассчитанного на самостоятельное овладение материалом в отличие от пособия учебного.
Издательский словарь-справочник. — М.: ОЛМА-Пресс.
.
2003.
Смотреть что такое «Практическое руководство» в других словарях:
-
практическое руководство — Практическое пособие, рассчитанное на самостоятельное овладение какими либо производственными навыками. [ГОСТ 7.60 2003] практическое руководство Рекомендации, выпущенные государственным органом или организацией по стандартам, такой как ISO или… … Справочник технического переводчика
-
практическое руководство — практическое руководство: Практическое пособие, рассчитанное на самостоятельное овладение какими либо производственными навыками. Источник: ГОСТ 7.60 2003: Система … Словарь-справочник терминов нормативно-технической документации
-
Практическое руководство — практическое пособие, рассчитанное на самостоятельное овладение к. л. производственными процессами или устройствами … Реклама и полиграфия
-
практическое руководство — Rus: практическое руководство Deu: Anleitung für die Betriebspraxis Eng: guidance manual, practical guide Fra: manuel pratique, guide âne Практическое пособие, рассчитанное на самостоятельное овладение какими либо производственными навыками. ГОСТ … Словарь по информации, библиотечному и издательскому делу
-
Практическое руководство для пастырей — – богословская наука, заменившая с 1864 г. 2 науки: пастырское богословие и каноническое право – и имеющая задачей выяснить нравственные начала и систематически изложить церковно гражданские постановления, которыми должен руководиться… … Полный православный богословский энциклопедический словарь
-
Практическое руководство для пастырей — богословская наука, заменившая собой, с 1867 г., две науки, входившие прежде в состав семинарского курса: пастырское богословие (см.) и каноническое право (см.). Она имеет задачей уяснить те нравственные начала и систематически изложить те… … Энциклопедический словарь Ф.А. Брокгауза и И.А. Ефрона
-
ПРАКТИЧЕСКОЕ РУКОВОДСТВО — производственное издание, содержащее преимущественно материал описательно эмпирического характера и предназначенное для специалистов, желающих повысить свою квалификацию, и лиц, стремящихся самостоятельно овладеть какой либо профессией или… … Профессиональное образование. Словарь
-
ГОСТ Р 53647.1-2009: Менеджмент непрерывности бизнеса. Часть 1. Практическое руководство — Терминология ГОСТ Р 53647.1 2009: Менеджмент непрерывности бизнеса. Часть 1. Практическое руководство оригинал документа: 2.8 анализ воздействия на бизнес (business impact analysis): Процесс исследования функционирования бизнеса и последствий… … Словарь-справочник терминов нормативно-технической документации
-
Руководство — производственно практическое издание детально инструктивного характера. См. также Практическое руководство … Издательский словарь-справочник
-
руководство — сущ., с., употр. сравн. часто Морфология: (нет) чего? руководства, чему? руководству, (вижу) что? руководство, чем? руководством, о чём? о руководстве; мн. что? руководства, (нет) чего? руководств, чему? руководствам, (вижу) что? руководства,… … Толковый словарь Дмитриева
На чтение 10 мин Просмотров 1.1к. Опубликовано 30.10.2021
Здесь мы рассмотрим правильную структуру, которую можно использовать при создании практического руководства, и как написать подробное руководство. Мы также рассмотрим несколько хороших примеров практических руководств для вдохновения.
Зачем писать практические руководства?
Практические руководства — это ценная возможность привлечь новую аудиторию с помощью полезного высококачественного контента. Как для B2B, так и для B2C, практические руководства часто необходимы для здоровой стратегии лидогенерации.
Например, посчитайте, сколько людей каждый день ищут в Google «Как [любое слово]»:
Эти поисковые запросы демонстрируют одну из основных причин, по которой люди обращаются к Интернету: чтобы узнать, как что-то сделать.
Если ваш бизнес сможет достучаться до этих потребителей информативными и релевантными ответами на их вопросы, эти пользователи начнут рассматривать ваш бренд как авторитет в данной теме. В будущем те же читатели, которых вы впервые привлекли с помощью практического руководства, могут стать клиентами и лояльными защитниками бренда, которые распространят информацию о ваших продуктах или услугах.
Достаточно сказать: практические руководства стоит добавить в ваш арсенал контента.
Как сделать практическое руководство
Проведите исследование, чтобы убедиться, что ваше руководство является наиболее полным по теме.
В зависимости от темы вы хотите написать что-то, что ориентировано на конкретную аудиторию, на которую вы нацелены. Например, если вы пишете практическое руководство, ориентированное на механику, есть определенные термины и описания, от которых вы можете отказаться, поскольку вы предполагаете, что механик уже хорошо разбирается в этом. Однако, если вы ориентируетесь на среднего владельца автомобиля, ваш контент должен быть без жаргона и достаточно описательным, чтобы находить отклик у этой аудитории.
Таким образом, важно, чтобы ваш первый шаг в создании практического руководства состоял в том, чтобы ваш контент был всеобъемлющим. Вот как это сделать:
- Проведите исследование ключевых слов, чтобы узнать, что люди хотят узнать.
- Используйте Ahrefs, SEMrush или любой другой инструмент SEO для определения похожих ключевых слов и запросов. Это может помочь вам создать всестороннюю статью, которая ответит на все вопросы ваших читателей и поможет вам получить рейтинг в Google.
- Посмотрите на своих конкурентов, чтобы увидеть, как они пишут свои руководства.
Даже если вы очень хорошо знаете тему, исследование — это не тот шаг, который вам следует пропускать. Полагайтесь на свое исследование, чтобы убедиться, что вы включаете всю необходимую информацию.
Понять проблемы и проблемы вашей целевой аудитории.
На этом этапе используйте форумы, онлайн-сообщества или другие данные, чтобы выявить проблемы, которые могут возникнуть у вашей целевой аудитории. Эта информация поможет вам определить контент для включения в ваше руководство.
Например, если вы пишете «Как создать стратегию контент-маркетинга», вы можете выполнить следующие действия:
- Начните с ответов на вопрос «Что такое контент-маркетинг?» На Яндекс.Кью, например. Эти пользовательские ответы могут помочь вам определить общие темы, заблуждения или путаницу в контент-маркетинге.
- Обратитесь к своей исследовательской маркетинговой группе, чтобы определить общие болевые точки или вопросы, которые они видели в опросах или фокус-группах относительно «контент-маркетинга». Например, вы можете обнаружить, что большая часть вашей аудитории считает контент-маркетинг для них приоритетом, но они не знают, как это сделать в рамках бюджета.
- Проведение подобного качественного исследования предоставит вам информацию, необходимую для того, чтобы в вашем практическом руководстве были рассмотрены все актуальные проблемы по данной теме.
Структурируйте свои шаги в правильном порядке для вашего читателя и, когда возможно, используйте скриншоты.
Ваши читатели откажутся от чтения вашей страницы, если им будет слишком сложно быстро найти ответ на свой вопрос. Помня об этом, покажите его как можно быстрее и в правильном порядке.
Многие читатели будут использовать ваше практическое руководство как список инструкций. Например, если вы пишете «Как сделать снимок экрана на Mac», вы захотите записать каждое конкретное действие, необходимое для создания снимка экрана. По возможности используйте визуальные эффекты, такие как GIF, изображения, снимки экрана и видео, чтобы дополнить свои инструкции.
Для менее тактических, более неоднозначных тем используйте маркированные списки и примеры для облегчения чтения и понимания.
Расскажите читателю, почему это важно.
Последний шаг в написании практического руководства — спросить себя: «Почему мои читатели нуждаются в этом или хотят знать это?» Понимание высокоуровневой цели темы может побудить вас писать сочувственно. Кроме того, это поможет вам создавать контент, который точно соответствует ожиданиям и потребностям вашего читателя.
Как написать практическое руководство
Когда вы будете готовы приступить к написанию своего практического руководства, вы можете задаться вопросом, должен ли ваш тон или стиль письма отличаться от постов других типов.
Когда люди ищут «Как…», они часто спешат найти нужную информацию, а это значит, что очень важно, чтобы вы писали короткие, лаконичные предложения, чтобы быстро дать ответ. Кроме того, практические руководства должны предлагать тактические практические советы по теме, чтобы читатели могли немедленно приступить к выполнению шагов.
Существует огромная разница между читателями, которые ищут «Что такое запрос предложения?», И теми, кто ищет «Как написать запрос предложения?».
В то время как первая группа ищет определение и, возможно, пример или два, вторая группа, вероятно, уже имеет хорошее представление об этом и должна создать один как можно скорее.
При написании практического руководства следует помнить о некоторых методах:
- При написании шагов используйте глаголы. Скажите: «Напишите историю компании», а не «Ваш запрос содержимого должен начинаться с краткого описания вашей компании».
- Используйте нумерованные списки, заголовки и маркеры, чтобы разбить текст и упростить просмотр содержимого.
- Используйте и снимки экрана, и письменный текст для читателей, которые не могут загрузить изображение на свой экран или не понимают, что вы пытаетесь им сказать по самому изображению.
- Делайте ссылки на другие соответствующие сообщения в блогах , основные страницы или электронные книги, чтобы читатели могли найти дополнительную информацию по определенным темам, упомянутым в вашем практическом руководстве.
- Приведите примеры, чтобы показать вашим читателям, что вы имеете в виду.
- Пишите с сочувствием, признавая, что это может расстраивать при изучении или совершенствовании нового навыка.
Практические руководства часто привлекают широкий круг читателей, каждый с разным уровнем знаний.
Например, «Как создать канал на YouTube», вероятно, привлекает новичков на YouTube, которые просто заинтересованы в создании канала для просмотра и комментирования сообщений друзей. Однако это, вероятно, также привлекает профессиональных маркетологов, которым необходимо создать канал для своего бизнеса, чтобы привлекать и конвертировать потенциальных клиентов.
С такой разнообразной аудиторией критически важно, чтобы вы писали четко, но не снисходительно, чтобы обеспечить удержание читателей независимо от уровня навыков или опыта.
Есть ли разница в том, как вы пишете руководство пользователя и практическое руководство?
Учебники и руководства часто используются как взаимозаменяемые для определения содержимого, объясняющего, как выполнить конкретную задачу. Хотя некоторые утверждают, что один из них более описательный, чем другой, вы обнаружите, что он варьируется от одного бренда к другому.
Возможно, наиболее заметное различие между практическим руководством и руководством пользователя. Практическое руководство, как правило, представляет собой часть контента в верхней части воронки, предназначенную для привлечения пользователей и генерации потенциальных клиентов.
Руководство пользователя обычно создается для тех, кто уже приобрел продукт или услугу и нуждается в пошаговых инструкциях по их использованию.
В то время как один подпадает под маркетинговые материалы, другой больше относится к продукту.
Примеры практического руководства
- Практическое руководство по рецептам.
На сайте Гастроном аккуратно структурированы рецепты, поэтому читатели могут быстро определить: сколько времени займет приготовление, ингредиенты, которые им понадобятся, количество порций и т.д. Если читатель уже знает ингредиенты, он может щелкнуть «Инструкции», чтобы сразу начать. В качестве альтернативы, скажем, читатель предпочитает просматривать инструкции, а не читать, он может щелкнуть «Посмотреть видео с практическими рекомендациями». Это предлагает хороший выбор для посетителей, которые по-разному потребляют контент.
Вывод: когда вы структурируете свое собственное руководство, подумайте, как вы можете его лучше организовать, чтобы читатели могли сразу перейти к тому, что им нужно. Кроме того, учитывайте среду, которую предпочтет ваша целевая аудитория.
- Практическое руководство для B2B.В статье Atlassian «Как написать идеальный 90-дневный план» приведены важные контекстные детали для 90-дневного плана, в том числе «Что такое 90-дневный план?» и «Что должно быть включено в 90-дневный план?» Публикация хорошо проработана и написана с сочувствием.Лучше всего то, что в руководстве есть загружаемый PDF-файл с 90-дневным планом, так что читатели могут сразу загрузить и использовать план Atlassian со своей командой.
Вывод: подумайте, какие электронные книги, PDF-файлы, диаграммы, дизайны Canva или Google Таблицы вы можете создать самостоятельно и предложить читателям для загрузки. Читатели оценят возможность немедленно применить то, что они узнали.
- Практическое руководство для B2C.Руководство «Как стать фрилансером» от FlexJobs отлично справляется с предоставлением соответствующих ссылок и данных для создания всестороннего обзора того, что такое фриланс. Кроме того, в сообщении используются глаголы действия, чтобы вдохновить читателя.В разделе «Как начать внештатный бизнес». вы увидите такие советы, как «Делайте домашнее задание», «Создайте бренд» и «Планируйте заранее». Язык, использованный в этом посте, во многом побуждает читателей немедленно приступить к работе.
Вывод: используйте глаголы действия и лаконичный язык, чтобы заинтересовать читателя. Когда возможно, начинайте с глагола вместо существительного при перечислении шагов.
- Практическое руководство по продукту.Статья How-To Geek под названием «Как найти данные в Google Таблицах с помощью ВПР» не обязательно является самой интересной темой. Тем не менее, бренд эффективно поддерживает интерес к контенту с помощью чутких заявлений вроде: «ВПР может показаться запутанным, но это довольно просто, если вы поймете, как это работает».Кроме того, How-To Geek включает полезные оригинальные изображения, демонстрирующие каждый совет, который они описывают. Эти изображения не обязательно должны быть ультрасовременными визуальными эффектами, созданными профессиональной командой дизайнеров — как показывает этот пост, несколько простых снимков экрана имеют большое значение для того, чтобы помочь читателям понять сложную тему.
Вывод: по возможности создавайте собственные визуальные эффекты / снимки экрана, чтобы читатели могли пройти через каждую пошаговую инструкцию.
- Практическое руководство по образу жизни.Еще один пример — пост на Medium под названием «11 способов быстро избавиться от стресса в вашей жизни». Ожидается, что в ней будет нескольких простых и быстрых советов, как избавиться от стресса. Но первый раздел поста — «Влияние стресса на вашу жизнь». В этом случае важно, чтобы читатели понимали, почему, а не как .
Вывод: поиграйте со структурой. Подумайте, что ваши читатели должны знать, чтобы остальная часть сообщения имела для них значение. Например, вы можете начать с раздела «Что такое …?» и «Почему … имеет значение» перед тем, как погрузиться в «Как делать …». Таким образом, ваши читатели будут полностью заинтересованы в том, чтобы узнать, как эти советы могут улучшить их жизнь в небольшом (или большом) смысле.
Шаблон для написания практического руководства можно получить как гуглдок здесь. Чтобы сохранить к себе, нажмите Файл -> Создать копию. Там же шаблоны и других материалов для блога.
Статья является адаптированным переводом https://blog.hubspot.com/marketing/how-to-guide.
Читайте также:
- Как написать отличную пошаговую инструкцию
- Создание контента: полное руководство для начинающих
- Анатомия самых популярных статей: успешный и невидимый контент
Photo by James McKinven on Unsplash.
Это часть 1 из серии 2 частей практического руководства по HashiCorp Consul. Эта часть в первую очередь ориентирована на понимание проблем, которые решает Consul и как он их решает. Вторая часть больше ориентирована на практическое применение Consul в реальном примере и будет опубликована на следующей неделе. Давайте начнем.
Как насчет настройки обнаруживаемого, настраиваемого и безопасного service mesh с помощью одного инструмента?
Что, если мы скажем вам, что этот инструмент не зависит от платформы и готов к работе в облаке?
И поставляется в виде одного бинарного файла.
Все это правда. Инструмент, о котором мы говорим, — это HashiCorp Consul.
Consul обеспечивает обнаружение сервисов, проверку работоспособности, балансировку нагрузки, граф сервисов, принудительное использование идентификационных данных с помощью TLS и управление конфигурацией распределенных сервисов.
Давайте подробнее познакомимся с Consul ниже и посмотрим, как он решает эти сложные задачи и облегчает жизнь оператору распределенной системы.
Содержание:
Вступление
Микросервисы и другие распределенные системы могут обеспечить более быструю и простую разработку программного обеспечения. Но есть компромисс, приводящий к большей сложности работы в области межсервисного взаимодействия, управления конфигурацией и сегментации сети.
Монолитное приложение («типовое») — с различными подсистемами A, B, C и D
Распределенное приложение («типовое») — с различными сервисами A, B, C и D
HashiCorp Consul – это инструмент с открытым исходным кодом, который решает эти новые сложности, предоставляя обнаружение сервисов, проверку работоспособности, балансировку нагрузки, график сервисов, взаимное применение идентификации TLS и хранилище конфигурационных ключей. Эти особенности делают Consul идеальным control plane для service mesh.
HashiCorp Consul поддерживает обнаружение сервисов, конфигурацию сервисов и сегментацию сервисов
HashiCorp объявил Consul в апреле 2014 года, и с тех пор он получила хорошее признание сообщества.
Это руководство предназначено для обсуждения некоторых из этих важнейших проблем и изучения различных решений, предлагаемых Consul HashiCorp для решения этих проблем.
Давайте кратко рассмотрим темы, которые мы собираемся охватить в этом руководстве. Темы написаны так, чтобы быть самодостаточными. Вы можете перейти непосредственно к конкретной теме, если хотите.
Краткая справка о Монолитных и Сервис-ориентированных архитектурах (SOA)
Рассматривая традиционные архитектуры доставки приложений, мы находим классический монолит. Когда мы говорим о Монолитных архитектурах, у нас есть развертывание одного приложения.
Даже если это одно приложение, обычно оно имеет несколько различных субкомпонентов.
Один из примеров, который технический директор HashiCorp Армон Дадгар привел во время своего вступительного видео для Consul, был о поставке настольного банковского приложения. Он имеет дискретный набор субкомпонентов-например, аутентификацию (скажем, подсистема A), управление счетами (подсистема B), перевод средств (подсистема С) и обмен валюты (подсистема D).
Теперь, хотя это независимые функции — аутентификация системы А против перевода средств системы С, — мы развертываем его как единое монолитное приложение.
За последние несколько лет мы наблюдаем тенденцию отхода от такого рода архитектуры. Есть несколько причин для этого сдвига.
Задача с монолитной архитектурой такова: предположим, что в одной из подсистем, системе A, есть ошибка, связанная с аутентификацией.
Типовая ошибка в подсистеме А в нашем монолитном приложении
Мы не можем просто исправить его в системе А и обновить его в production.
Исправление типовой ошибки в подсистеме А в нашем монолитном приложении
Мы должны обновить систему А и выполнить повторный деплой всего приложения, для чего нам также необходим деплой подсистем В, С и D.
Исправление ошибок в одной подсистеме приводит к передеплою всего монолитного приложения
Этот передеплой не идеален. Вместо этого мы хотели бы сделать передеплой отдельных сервисов.
Одно и то же монолитное приложение поставляется в виде набора отдельных, дискретных сервисов.
Разделение монолитного приложения на отдельные сервисы
Итак, если есть исправление ошибки в одном из наших сервисов:
Типовая ошибка в одном из сервисов, в данном случае сервисе А нашего SOA-приложения
И мы исправляем эту ошибку:
Исправление типовой ошибки в сервисе A нашего SOA-приложения
Мы можем осуществить передислокацию этого сервиса, не согласовывая ее развертывание с другими сервисами. По сути, речь идет об одной из форм микросервисов.
Исправление ошибки приведет к передеплою только сервиса А во всем нашем приложении
Это дает большой толчок к нашей гибкости разработки. Нам не нужно координировать наши усилия по разработке между различными командами разработчиков или даже системами. У нас будет свобода разработки и деплоя независимо. Один сервис деплоится еженедельно, а другой ежеквартально. Это будет большим преимуществом для команд разработчиков.
Но такого понятия, как бесплатный обед, не существует.
Эффективность развития, которую мы получили, вводит свой собственный набор оперативных проблем. Давайте посмотрим на некоторые из них.
Обнаружение сервиса в монолитной архитектуре, его проблемы в распределенной системе и решение Consul
Монолитные приложения
Предположим, что два сервиса в одном приложении хотят общаться друг с другом. Один из способов раскрыть метод — сделать его общедоступным и разрешить другим сервисам вызывать его. В монолитном приложении это одно приложение, в котором сервисы будут предоставлять общедоступные функции посредством вызова функций между сервисами.
Подсистемы общаются друг с другом через вызов функции в нашем монолитном приложении
Поскольку это вызов функции внутри процесса, он произошел в памяти. Это происходит быстро, поэтому нам не нужно беспокоиться о том, как были перемещены наши данные и были ли они безопасны.
Распределенные системы
В распределенном мире сервис A больше не поставляется как то же приложение, что и сервис B. Итак, как сервис A находит сервис B, если он хочет взаимодействовать с B?
Сервис A пытается найти сервис В для установления связи
Сервис A может даже не находиться на той же машине, что и сервис B. Таким образом, в поиске сервиса присутствует сеть. Но это происходит не так быстро, так как есть задержка, которую мы можем измерить на линиях миллисекунд, по сравнению с наносекундами простого вызова функции.
Проблемы в распределенных системах
Как мы уже знаем, два сервиса в распределенной системе должны обнаружить друг друга, чтобы взаимодействовать. Одним из традиционных способов решения этой проблемы является использование балансировщиков нагрузки.
Балансировщик нагрузки находится между сервисами, чтобы они могли общаться друг с другом
Балансировщики нагрузки будут сидеть перед каждым сервисом со статическим IP-адресом, известным всем другим сервисам.
Балансировщик нагрузки между двумя сервисами позволяет осуществлять двусторонний трафик
Это дает возможность добавить несколько экземпляров одним и том же сервисом за балансировщиком нагрузки, и он будет направлять трафик соответствующим образом. Но этот IP-адрес балансировщика нагрузки статичен и жестко закодирован во всех других сервисах, поэтому сервисы могут пропустить обнаружение.
Балансировщики нагрузки позволяют осуществлять связь между несколькими экземплярами одного и того же сервиса
Теперь задача состоит в том, чтобы поддерживать набор балансировщиков нагрузки для каждого отдельного сервиса. И мы можем с уверенностью предположить, что изначально существовал балансировщик нагрузки и для всего приложения. Затраты и усилия на поддержание этих балансировщиков нагрузки возросли.
С балансировщиками нагрузки перед сервисами они представляют собой единую точку отказа. Даже если у нас есть несколько экземпляров сервисов за балансировщиком нагрузки, если он не работает, то наши сервисы не работает. Независимо от того, сколько экземпляров этих сервисов запущено.
Балансировщики нагрузки также увеличивают задержку межсервисного взаимодействия. Если сервисов A хочет поговорить со сервисом B, запрос от A должен сначала поговорить с балансировщиком нагрузки сервиса B, а затем достичь B. Ответ от B также должен будет пройти через тот же самый маршрут.
Поддержание записи экземпляров сервисов в балансировщике нагрузки для всего приложения.
И по своей природе балансировщики нагрузки в большинстве случаев управляются вручную. Если мы добавим еще один экземпляр сервиса, он будет недоступен. Нам нужно будет зарегистрировать этот сервис в балансировщике нагрузки, чтобы сделать его доступной для всего мира. Это потребует ручных усилий и времени.
Решения Consul
Решение Consul для решения проблемы обнаружения сервисов в распределенных системах — это центральный реестр сервисов.
Consul ведет центральный реестр, содержащий записи для всех вышестоящих сервисов. При запуске экземпляра сервиса он регистрируется в центральном реестре. Реестр заполняется всеми вышестоящими экземплярами сервисов.
Реестр сервисов Consul помогает сервису A найти сервис Б и установить связь
Когда сервис A хочет поговорить со сервисом B, он обнаруживает и связывается с B, запрашивая реестр о вышестоящих экземплярах сервиса B. Таким образом, вместо взаимодействия с балансировщиком нагрузки сервис может напрямую связаться с желаемым конечным экземпляром сервиса.
Consul также обеспечивает проверку работоспособности (health-checks) этих экземпляров сервисов. Если один из экземпляров сервисов или сам сервисов не работает или не проходит проверку работоспособности (health-check), реестр будет знать об этом и будет избегать возврата адреса сервиса. Работа, которую будет выполнять балансировщик нагрузки, в этом случае выполняется реестром.
Кроме того, если существует несколько экземпляров одного и того же сервиса, Consul будет посылать трафик случайным образом в разные экземпляры. Таким образом, выравнивая нагрузку между различными экземплярами.
Consul справился с нашими задачами обнаружения сбоев и распределения нагрузки между несколькими экземплярами сервисов без необходимости развертывания централизованного балансировщика нагрузки.
Здесь решается традиционная проблема медленных и управляемых вручную балансировщиков нагрузки. Consul программно управляет реестром, который обновляется, когда любой новый сервис регистрируется и становится доступным для приема трафика.
Это помогает с легкостью масштабировать сервисы.
Управление конфигурацией в монолите, его проблемы в распределенной среде и решение Consul
Монолитные Приложения
Когда мы смотрим на конфигурацию для монолитного приложения, они, как правило, находятся где-то на уровне гигантских файлов YAML, XML или JSON. Предполагается, что эта конфигурация настроит все приложение.
Единый конфигурационный файл, общий для различных частей нашего монолитного приложения
Учитывая один файл, все наши подсистемы в нашем монолитном приложении теперь будут потреблять конфигурацию из одного и того же файла. Таким образом, создается согласованное представление обо всех наших подсистемах или сервисах.
Если мы хотим изменить состояние приложения с помощью обновления конфигурации, оно будет легко доступно для всех подсистем. Новая конфигурация одновременно потребляется всеми компонентами нашего приложения.
Распределенные системы
В отличие от монолитной системы, распределенные сервисы не будут иметь общего представления о конфигурации. Конфигурация теперь распределена, и там каждый отдельный сервис должна быть настроен отдельно.
Копия конфигурации приложения распределяется между различными сервисами
Проблемы в распределенных системах
-
Конфигурация должна быть распределена между различными сервисами. Поддержание согласованности между конфигурациями в различных сервисах после каждого обновления является сложной задачей.
-
Кроме того, проблема возрастает, когда мы ожидаем, что конфигурация будет обновляться динамически.
Решения Консула
Решение Consul для управления конфигурацией в распределенной среде — это центральное хранилище ключей и значений.
Набор Consul’s KV дает возможность плавного отображения конфигурации на каждый сервис
Consul решает эту задачу уникальным способом. Вместо того чтобы распределять конфигурацию между различными распределенными сервисами в виде частей конфигурации, он передает всю конфигурацию всем сервисам и динамически настраивает их в распределенной системе.
Возьмем пример изменения состояния в конфигурации. Измененное состояние передается через все сервисы в режиме реального времени. Конфигурация последовательно присутствует во всех сервисах.
Сегментация сети в монолите, ее проблемы в распределенных системах и решения Consul
Монолитные приложения
При рассмотрении классической монолитной архитектуры, сеть обычно делится на три различные зоны.
Первая зона в нашей сети является общедоступной. Трафик, поступает в наше приложение через интернет и достигает наших балансировщиков нагрузки.
Вторая зона — это трафик от наших балансировщиков нагрузки к нашему приложению. В основном это внутренняя сетевая зона без прямого публичного доступа.
Третья зона — это закрытая сетевая зона, предназначенная в первую очередь для передачи данных. Это считается изолированной зоной.
Различные сетевые зоны в типичном приложении
Только зона балансировщиков нагрузки может попасть в зону приложения, и только зона приложения может попасть в зону данных. Это простая система зонирования, простая в реализации и управлении.
Распределенные системы
Для распределенных сервисов картина кардинально меняется.
Сложная структура сетевого трафика и маршрутов между различными сервисами
В самой зоне нашей прикладной сети существует несколько сервисов. Каждый из этих сервисов взаимодействует с другими внутри этой сети, что делает ее сложной структурой трафика.
Проблемы в распределенных системах
-
Основная проблема заключается в том, что трафик не находится в каком-либо последовательном потоке. В отличие от монолитной архитектуры, где поток был определен от балансировщиков нагрузки к приложению и от приложения к данным.
-
В зависимости от модели доступа, которую мы хотим поддерживать, трафик может поступать с разных конечных точек и достигать разных сервисов.
Клиент по существу общается с каждым сервисным в приложением прямо или косвенно
-
Учитывая наличие нескольких сервисов и возможность поддержки нескольких конечных точек, мы можем развернуть несколько потребителей и поставщиков сервисов.
-
Из-за природы системы безопасность является нашей следующей задачей. Сервисы должны быть в состоянии определить, что трафик, который они получают, исходит от проверенного и доверенного объекта в сети.
SOA требует контроля над надежными и ненадежными источниками трафика
- Управление потоком трафика и сегментирование сети на группы или блоки станет более серьезной проблемой. Кроме того, очень важно убедиться, что у нас есть строгие правила, которыми мы руководствуемся при разделении сети на основе того, кто должен иметь право взаимодействовать с кем и наоборот.
Решения консула
Решение Consul общей проблемы сегментации сети в распределенных системах заключается в реализации сервисных графов и взаимного TLS.
Применение политик уровня обслуживания для описания модели трафика и сегментации с помощью Consul
Consul решает проблему сегментации сети, централизованно управляя описанием того, кто с кем может взаимодействовать. У Consul есть специальная функция для этого под названием Consul Connect.
Consul Connect регистрирует эти политики межсервисного взаимодействия, которые мы желаем зарегистрировать, и реализует его в рамках графика обслуживания. Таким образом, политика может сказать, что сервис A может взаимодействовать со сервисом B, но B не может взаимодействовать с C.
Большее преимущество этого заключается в том, что он не ограничен IP-адресом. Скорее это уровень обслуживания. Это делает его масштабируемым. Эта политика будет применяться ко всем экземплярам сервиса, и не будет никакого жесткого правила брандмауэра, специфичного для IP-адреса сервиса. Это делает нас независимыми от масштаба нашей дистрибьюторской сети.
Consul Connect также обрабатывает идентификационные данные сервисов, используя популярный протокол TLS. Он распространяет сертификат TLS, связанный со сервисом.
Эти сертификаты помогают другим сервисам надежно идентифицировать друг друга. TLS также помогает обеспечить безопасную связь между сервисами. Это обеспечивает надежную сетевую реализацию.
Consul применяет TLS с помощью прокси на основе агента, подключенного к каждому экземпляру сервиса. Этот прокси действует как Sidecar. Использование прокси-сервера в этом случае позволяет нам не вносить какие-либо изменения в код исходного сервиса.
Это позволяет получить преимущество более высокого уровня применения шифрования для данных в состоянии покоя и данных в процессе передачи. Кроме того, он будет способствовать соблюдению требований законодательства о конфиденциальности и идентификации пользователей.
Базовая архитектура Consul
Consul — это распределенная и высокодоступная система.
Consul поставляется в виде одной бинарной загрузки для всех популярных платформ. Исполняемый файл может работать как клиент, так и сервер.
Каждый узел, предусматривающий службу Consul, запускает агента Consul. Каждый из этих агентов взаимодействует с одним или несколькими серверами Consul.
Агент Consul отвечает за проверку работоспособности сервисов на узле, как и за проверку работоспособности самого узла. Он не несет ответственности за обнаружение сервисов или поддержание данных ключ/значение.
Серверы Consul — это место, где хранятся и реплицируются данные.
Consul может работать с одним сервером, но HashiCorp рекомендует запускать набор из 3-5 серверов, чтобы избежать сбоев. Поскольку все данные хранятся на стороне сервера Consul. С одним сервером, сбой может привести к потере данных.
В кластере с несколькими серверами они выбирают лидера между собой. HashiCorp также рекомендует иметь кластер серверов для каждого центра обработки данных.
Во время процесса обнаружения любой сервис в поисках других сервисов может запросить серверы Consul или даже агентов консула. Агенты Consul автоматически пересылают запросы на серверы консула.
Агент Consul сидит на узле и общается с другими агентами в сети, синхронизируя всю информацию об уровне обслуживания
Если запрос является перекрестным центром обработки данных, то запросы пересылаются сервером Consul на удаленные серверы Consul. Результаты с удаленных серверов Consul возвращаются на исходный сервер Consul.
Начало работы с Consul
Этот раздел посвящен пристальному рассмотрению Consul как инструмента, имеющего некоторый практический опыт.
Скачивание и Установка
Как обсуждалось выше, Consul поставляется в виде одного двоичного файла, загруженного с веб-сайта HashiCorps или из раздела релизов Consul на GitHub.
Один бинарный файл может работать как сервер Consul или даже как агент клиента Консула.
Вы можете скачать Consul отсюда — Страница загрузки Consul.
Различные варианты загрузки Consul на разных операционных системах
Мы скачаем Consul в командной строке по ссылке со страницы загрузки.
$ wget https://releases.hashicorp.com/consul/1.4.3/consul_1.4.3_linux_amd64.zip -O consul.zip
--2019-03-10 00:14:07-- https://releases.hashicorp.com/consul/1.4.3/consul_1.4.3_linux_amd64.zip
Resolving releases.hashicorp.com (releases.hashicorp.com)... 151.101.37.183, 2a04:4e42:9::439
Connecting to releases.hashicorp.com (releases.hashicorp.com)|151.101.37.183|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 34777003 (33M) [application/zip]
Saving to: ‘consul.zip’
consul.zip 100%[============================>] 33.17M 4.46MB/s in 9.2s
2019-03-10 00:14:17 (3.60 MB/s) - ‘consul.zip’ saved [34777003/34777003]
Распакуйте загруженный zip-файл.
$ unzip consul.zip
Archive: consul.zip
inflating: consul
Добавьте его в PATH.
$ export PATH="$PATH:/path/to/consul"
Использование Consul
Как только вы распакуете сжатый файл и поместите бинарный файл под свой путь, вы можете запустить его следующим образом.
$ consul agent -dev
==> Starting Consul agent...
==> Consul agent running!
Version: 'v1.4.2'
Node ID: 'ef46ebb7-3496-346f-f67a-30117cfec0ad'
Node name: 'devcube'
Datacenter: 'dc1' (Segment: '<all>')
Server: true (Bootstrap: false)
Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)
Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false
==> Log data will now stream in as it occurs:
2019/03/04 00:38:01 [DEBUG] agent: Using random ID "ef46ebb7-3496-346f-f67a-30117cfec0ad" as node ID
2019/03/04 00:38:01 [INFO] raft: Initial configuration (index=1): [{Suffrage:Voter ID:ef46ebb7-3496-346f-f67a-30117cfec0ad Address:127.0.0.1:8300}]
2019/03/04 00:38:01 [INFO] raft: Node at 127.0.0.1:8300 [Follower] entering Follower state (Leader: "")
2019/03/04 00:38:01 [INFO] serf: EventMemberJoin: devcube.dc1 127.0.0.1
2019/03/04 00:38:01 [INFO] serf: EventMemberJoin: devcube 127.0.0.1
2019/03/04 00:38:01 [INFO] consul: Adding LAN server devcube (Addr: tcp/127.0.0.1:8300) (DC: dc1)
2019/03/04 00:38:01 [INFO] consul: Handled member-join event for server "devcube.dc1" in area "wan"
2019/03/04 00:38:01 [DEBUG] agent/proxy: managed Connect proxy manager started
2019/03/04 00:38:01 [WARN] raft: Heartbeat timeout from "" reached, starting election
2019/03/04 00:38:01 [INFO] raft: Node at 127.0.0.1:8300 [Candidate] entering Candidate state in term 2
2019/03/04 00:38:01 [DEBUG] raft: Votes needed: 1
2019/03/04 00:38:01 [DEBUG] raft: Vote granted from ef46ebb7-3496-346f-f67a-30117cfec0ad in term 2. Tally: 1
2019/03/04 00:38:01 [INFO] raft: Election won. Tally: 1
2019/03/04 00:38:01 [INFO] raft: Node at 127.0.0.1:8300 [Leader] entering Leader state
2019/03/04 00:38:01 [INFO] consul: cluster leadership acquired
2019/03/04 00:38:01 [INFO] consul: New leader elected: devcube
2019/03/04 00:38:01 [INFO] agent: Started DNS server 127.0.0.1:8600 (tcp)
2019/03/04 00:38:01 [INFO] agent: Started DNS server 127.0.0.1:8600 (udp)
2019/03/04 00:38:01 [INFO] agent: Started HTTP server on 127.0.0.1:8500 (tcp)
2019/03/04 00:38:01 [INFO] agent: Started gRPC server on 127.0.0.1:8502 (tcp)
2019/03/04 00:38:01 [INFO] agent: started state syncer
2019/03/04 00:38:01 [INFO] connect: initialized primary datacenter CA with provider "consul"
2019/03/04 00:38:01 [DEBUG] consul: Skipping self join check for "devcube" since the cluster is too small
2019/03/04 00:38:01 [INFO] consul: member 'devcube' joined, marking health alive
2019/03/04 00:38:01 [DEBUG] agent: Skipping remote check "serfHealth" since it is managed automatically
2019/03/04 00:38:01 [INFO] agent: Synced node info
2019/03/04 00:38:01 [DEBUG] agent: Node info in sync
2019/03/04 00:38:01 [DEBUG] agent: Skipping remote check "serfHealth" since it is managed automatically
2019/03/04 00:38:01 [DEBUG] agent: Node info in sync
Это позволит запустить агента в режиме разработки.
Участники Consul
Пока выполняется приведенная выше команда, вы можете проверить наличие всех участников в Сети Consul.
$ consul members
Node Address Status Type Build Protocol DC Segment
devcube 127.0.0.1:8301 alive server 1.4.0 2 dc1 <all>
Учитывая, что у нас работает только один узел, он по умолчанию рассматривается как сервер. Вы можете назначить агента в качестве сервера, указав сервер в качестве параметра командной строки или сервер в качестве параметра конфигурации в конфигурации Consul.
Выходные данные приведенной выше команды основаны на протоколе gossip и в конечном итоге согласованы.
Consul HTTP API
Для строго согласованного представления агентурной сети Consul мы можем использовать HTTP API, предоставленный консулом из коробки.
$ curl localhost:8500/v1/catalog/nodes
[
{
"ID": "ef46ebb7-3496-346f-f67a-30117cfec0ad",
"Node": "devcube",
"Address": "127.0.0.1",
"Datacenter": "dc1",
"TaggedAddresses": {
"lan": "127.0.0.1",
"wan": "127.0.0.1"
},
"Meta": {
"consul-network-segment": ""
},
"CreateIndex": 9,
"ModifyIndex": 10
}
]
Интерфейс DNS Consul
Consul также предоставляет DNS-интерфейс для запросов узлов. По умолчанию он обслуживает DNS на порту 8600. Этот порт настраивается.
$ dig @127.0.0.1 -p 8600 devcube.node.consul
; <<>> DiG 9.11.3-1ubuntu1.5-Ubuntu <<>> @127.0.0.1 -p 8600 devcube.node.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42215
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;devcube.node.consul. IN A
;; ANSWER SECTION:
devcube.node.consul. 0 IN A 127.0.0.1
;; ADDITIONAL SECTION:
devcube.node.consul. 0 IN TXT "consul-network-segment="
;; Query time: 19 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Mon Mar 04 00:45:44 IST 2019
;; MSG SIZE rcvd: 100
Регистрация сервиса на Consul может быть достигнута либо путем написания описанием сервиса, либо путем отправки запроса через соответствующий HTTP API.
Описание (регистрация) сервиса Consul
Описание (регистрация) сервиса — это один из популярных способов регистрации сервиса. Давайте рассмотрим один из таких примеров описания сервиса.
Для размещения наших описаний сервисов мы добавим каталог конфигурации, условно именуемый consul.d — ‘.d’ означает, что в этом каталоге имеется набор конфигурационных файлов, а не один конфиг под именем consul.
$ mkdir ./consul.d
Напишите описание сервиса для фиктивного веб-приложения Django, работающего на порту 80 на локальном хосте.
$ echo '{"service": {"name": "web", "tags": ["django"], "port": 80}}'
> ./consul.d/web.json
Чтобы наш агент-консул знал об этом описании сервиса, мы можем предоставить ему каталог конфигурации.
$ consul agent -dev -config-dir=./consul.d
==> Starting Consul agent...
==> Consul agent running!
Version: 'v1.4.2'
Node ID: '810f4804-dbce-03b1-056a-a81269ca90c1'
Node name: 'devcube'
Datacenter: 'dc1' (Segment: '<all>')
Server: true (Bootstrap: false)
Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)
Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false
==> Log data will now stream in as it occurs:
2019/03/04 00:55:28 [DEBUG] agent: Using random ID "810f4804-dbce-03b1-056a-a81269ca90c1" as node ID
2019/03/04 00:55:28 [INFO] raft: Initial configuration (index=1): [{Suffrage:Voter ID:810f4804-dbce-03b1-056a-a81269ca90c1 Address:127.0.0.1:8300}]
2019/03/04 00:55:28 [INFO] raft: Node at 127.0.0.1:8300 [Follower] entering Follower state (Leader: "")
2019/03/04 00:55:28 [INFO] serf: EventMemberJoin: devcube.dc1 127.0.0.1
2019/03/04 00:55:28 [INFO] serf: EventMemberJoin: devcube 127.0.0.1
2019/03/04 00:55:28 [INFO] consul: Adding LAN server devcube (Addr: tcp/127.0.0.1:8300) (DC: dc1)
2019/03/04 00:55:28 [DEBUG] agent/proxy: managed Connect proxy manager started
2019/03/04 00:55:28 [INFO] consul: Handled member-join event for server "devcube.dc1" in area "wan"
2019/03/04 00:55:28 [INFO] agent: Started DNS server 127.0.0.1:8600 (udp)
2019/03/04 00:55:28 [INFO] agent: Started DNS server 127.0.0.1:8600 (tcp)
2019/03/04 00:55:28 [INFO] agent: Started HTTP server on 127.0.0.1:8500 (tcp)
2019/03/04 00:55:28 [INFO] agent: started state syncer
2019/03/04 00:55:28 [INFO] agent: Started gRPC server on 127.0.0.1:8502 (tcp)
2019/03/04 00:55:28 [WARN] raft: Heartbeat timeout from "" reached, starting election
2019/03/04 00:55:28 [INFO] raft: Node at 127.0.0.1:8300 [Candidate] entering Candidate state in term 2
2019/03/04 00:55:28 [DEBUG] raft: Votes needed: 1
2019/03/04 00:55:28 [DEBUG] raft: Vote granted from 810f4804-dbce-03b1-056a-a81269ca90c1 in term 2. Tally: 1
2019/03/04 00:55:28 [INFO] raft: Election won. Tally: 1
2019/03/04 00:55:28 [INFO] raft: Node at 127.0.0.1:8300 [Leader] entering Leader state
2019/03/04 00:55:28 [INFO] consul: cluster leadership acquired
2019/03/04 00:55:28 [INFO] consul: New leader elected: devcube
2019/03/04 00:55:28 [INFO] connect: initialized primary datacenter CA with provider "consul"
2019/03/04 00:55:28 [DEBUG] consul: Skipping self join check for "devcube" since the cluster is too small
2019/03/04 00:55:28 [INFO] consul: member 'devcube' joined, marking health alive
2019/03/04 00:55:28 [DEBUG] agent: Skipping remote check "serfHealth" since it is managed automatically
2019/03/04 00:55:28 [INFO] agent: Synced service "web"
2019/03/04 00:55:28 [DEBUG] agent: Node info in sync
2019/03/04 00:55:29 [DEBUG] agent: Skipping remote check "serfHealth" since it is managed automatically
2019/03/04 00:55:29 [DEBUG] agent: Service "web" in sync
2019/03/04 00:55:29 [DEBUG] agent: Node info in sync
Соответствующая информация в журнале здесь — это инструкции синхронизации, относящиеся к сервису web
. Агент Consul принял нашу конфигурацию и синхронизировал ее по всем узлам. В данном случае один узел.
Запрос сервиса DNS Consul
Мы можем запросить сервис с помощью DNS, как это было сделано с узлом. Вот так:
$ dig @127.0.0.1 -p 8600 web.service.consul
; <<>> DiG 9.11.3-1ubuntu1.5-Ubuntu <<>> @127.0.0.1 -p 8600 web.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51488
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;web.service.consul. IN A
;; ANSWER SECTION:
web.service.consul. 0 IN A 127.0.0.1
;; ADDITIONAL SECTION:
web.service.consul. 0 IN TXT "consul-network-segment="
;; Query time: 0 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Mon Mar 04 00:59:32 IST 2019
;; MSG SIZE rcvd: 99
Мы также можем запросить DNS для служебных записей, которые дают нам больше информации о специфике сервиса, такой как порт и узел.
$ dig @127.0.0.1 -p 8600 web.service.consul SRV
; <<>> DiG 9.11.3-1ubuntu1.5-Ubuntu <<>> @127.0.0.1 -p 8600 web.service.consul SRV
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 712
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 3
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;web.service.consul. IN SRV
;; ANSWER SECTION:
web.service.consul. 0 IN SRV 1 1 80 devcube.node.dc1.consul.
;; ADDITIONAL SECTION:
devcube.node.dc1.consul. 0 IN A 127.0.0.1
devcube.node.dc1.consul. 0 IN TXT "consul-network-segment="
;; Query time: 0 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Mon Mar 04 00:59:43 IST 2019
;; MSG SIZE rcvd: 142
Вы также можете использовать TAG, предоставленный нами в описании сервиса, для запроса определенного тега:
$ dig @127.0.0.1 -p 8600 django.web.service.consul
; <<>> DiG 9.11.3-1ubuntu1.5-Ubuntu <<>> @127.0.0.1 -p 8600 django.web.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12278
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;django.web.service.consul. IN A
;; ANSWER SECTION:
django.web.service.consul. 0 IN A 127.0.0.1
;; ADDITIONAL SECTION:
django.web.service.consul. 0 IN TXT "consul-network-segment="
;; Query time: 0 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Mon Mar 04 01:01:17 IST 2019
;; MSG SIZE rcvd: 106
Каталог сервисов Consul через HTTP API
Сервис также может быть запрошен с помощью HTTP API:
$ curl http://localhost:8500/v1/catalog/service/web
[
{
"ID": "810f4804-dbce-03b1-056a-a81269ca90c1",
"Node": "devcube",
"Address": "127.0.0.1",
"Datacenter": "dc1",
"TaggedAddresses": {
"lan": "127.0.0.1",
"wan": "127.0.0.1"
},
"NodeMeta": {
"consul-network-segment": ""
},
"ServiceKind": "",
"ServiceID": "web",
"ServiceName": "web",
"ServiceTags": [
"django"
],
"ServiceAddress": "",
"ServiceWeights": {
"Passing": 1,
"Warning": 1
},
"ServiceMeta": {},
"ServicePort": 80,
"ServiceEnableTagOverride": false,
"ServiceProxyDestination": "",
"ServiceProxy": {},
"ServiceConnect": {},
"CreateIndex": 10,
"ModifyIndex": 10
}
]
Мы можем фильтровать сервисы на основе проверок работоспособности по HTTP API:
$ curl http://localhost:8500/v1/catalog/service/web?passing
[
{
"ID": "810f4804-dbce-03b1-056a-a81269ca90c1",
"Node": "devcube",
"Address": "127.0.0.1",
"Datacenter": "dc1",
"TaggedAddresses": {
"lan": "127.0.0.1",
"wan": "127.0.0.1"
},
"NodeMeta": {
"consul-network-segment": ""
},
"ServiceKind": "",
"ServiceID": "web",
"ServiceName": "web",
"ServiceTags": [
"django"
],
"ServiceAddress": "",
"ServiceWeights": {
"Passing": 1,
"Warning": 1
},
"ServiceMeta": {},
"ServicePort": 80,
"ServiceEnableTagOverride": false,
"ServiceProxyDestination": "",
"ServiceProxy": {},
"ServiceConnect": {},
"CreateIndex": 10,
"ModifyIndex": 10
}
]
Обновление описания сервиса Consul
Если вы хотите обновить описание сервиса на работающем агенте Consul, это очень просто.
Есть три способа достичь этого. Вы можете отправить сигнал SIGHUP процессу, перезагрузить Consul, который внутренне отправляет SIGHUP на узел, или вы можете вызвать HTTP API, посвященный обновлениям описаний сервисов, которые будут внутренне перезагружать конфигурацию агента.
$ ps aux | grep [c]onsul
pranav 21289 2.4 0.3 177012 54924 pts/2 Sl+ 00:55 0:22 consul agent -dev -config-dir=./consul.d
Отправляем SIGHUP на номер 21289
$ kill -SIGHUP 21289
Или Перезагружаем Consul
$ consul reload
Конфигурация перезагрузки срабатывает.
Вы должны увидеть это в своем журнале Consul.
...
2019/03/04 01:10:46 [INFO] agent: Caught signal: hangup
2019/03/04 01:10:46 [INFO] agent: Reloading configuration...
2019/03/04 01:10:46 [DEBUG] agent: removed service "web"
2019/03/04 01:10:46 [INFO] agent: Synced service "web"
2019/03/04 01:10:46 [DEBUG] agent: Node info in sync
...
Веб-интерфейс Consul.
Consul предоставляет красивый веб-пользовательский интерфейс из коробки. Вы можете получить доступ к нему через порт 8500.
В этом случае http://localhost:8500. Давайте посмотрим на некоторые скриншоты.
Домашняя страница для сервисов пользовательского интерфейса Consul со всей соответствующей информацией, связанной с агентом Consul и проверкой веб-сервисов.
Изучение (Exploring) определенных сервисов в веб-интерфейсе Consul
Переходя к более подробной информации о данной сервисе, мы получаем панель мониторинга сервисов со всеми узлами и их работоспособностью для этого сервиса.
Изучение (Exploring) информации на уровне узлов для каждого сервиса в веб-интерфейсе Consul
На каждом отдельном узле мы можем посмотреть проверки работоспособности, сервисы и сессии.
Изучение информации о проверке работоспособности конкретного узла, информации об сервисах и сессиях в веб-интерфейсе Consul.
В целом, Consul Web UI действительно впечатляет и является отличным компаньоном для инструментов командной строки, которые предоставляет Consul.
Чем Consul отличается от Zookeeper, doozerd и etcd?
Consul имеет первоклассную поддержку для обнаружения сервисов, проверки работоспособности (health-check), хранения ключ-значение, нескольких дата-центров.
Zookeeper, doozerd и etcd в основном основаны на механизме хранения ключей и значений. Чтобы достичь чего-то сверх хранения ключей и значений, магазину нужны дополнительные инструменты, библиотеки и пользовательские разработки вокруг них.
Все эти инструменты, включая Consul, используют серверные узлы, которые требуют кворума узлов для работы и строго согласованы.
Более или менее, все они имеют сходную семантику для управления хранилищем ключей/значений.
Эта семантика привлекательна для построения систем обнаружения сервисов. Consul имеет готовую поддержку для обнаружения сервисов, которой нет в других системах.
Система обнаружения сервисов также требует способа выполнения проверок работоспособности. Так же важно проверить работоспособность сервиса, прежде чем позволить другим обнаружить его. Некоторые системы используют heartbeats с периодическими обновлениями и TTL. Работа по этим health checks растет с масштабом и требует фиксированной инфра-информации. Окно обнаружения сбоев имеет длину не менее длинны TTL.
В отличие от Zookeeper, у Consul есть агенты-клиенты, сидящие на каждом узле кластера, разговаривающие друг с другом в пуле gossip. Это позволяет клиентам быть тонкими (взаимодействие через localhost), дает лучшую возможность проверки работоспособности, снижает сложность на стороне клиента и решает проблемы отладки.
Кроме того, Consul предоставляет встроенную поддержку интерфейсов HTTP или DNS для выполнения общесистемных, узловых или сервисных операций. Другие системы нуждаются в тех, которые разрабатываются вокруг открытых примитивов.
Веб-сайт Consul дает хороший комментарий о сравнении между Consul и другими инструментами.
Инструменты С Открытым Исходным Кодом для HashiCorp Consul
HashiCorp и сообщество построили несколько инструментов вокруг Consul.
Эти инструменты Consul создаются и управляются инженерами HashiCorp:
Consul Template — стандартный рендеринг шаблона и уведомления с Consul. Рендеринг шаблонов, уведомитель и супервизор для данных HashiCorp Consul и Vault. Он обеспечивает удобный способ заполнения значений из Consul в файловую систему с помощью демона consul-template.
Envconsul — считывает и устанавливает переменные среды для процессов из Consul. Envconsul предоставляет удобный способ запуска подпроцесса с переменными окружения, заполненными из HashiCorp Consul и Vault.
Consul Replicate — Демон Consul cross-DC KV репликации. Этот проект предоставляет удобный способ репликации значений из одного центра обработки данных Consul в другой с помощью демона consul-replicate.
Consul Migrate — средство переноса данных для обработки обновления Consul в Consul 0.5.1+.
Сообщество Consul также создало несколько инструментов для помощи в регистрации сервисов и управлении конфигурацией сервисов, я хотел бы упомянуть некоторые из популярных и хорошо поддерживаемых.
Confd — управление локальными конфигурационными файлами приложений с помощью шаблонов и данных из etcd или consul.
Fabio — Fabio — это быстрый, современный маршрутизатор HTTP(S) и TCP с нулевой конфигурацией балансировки для развертывания приложений, управляемых Consul. Зарегистрируйте свои сервисы в consul, проведите проверку работоспособности, и Fabio начнет направлять на них трафик. Никакой конфигурации не требуется.
Registrator — Мост реестра сервисов для Docker с подключаемыми адаптерами. Регистратор автоматически регистрирует и отменяет регистрацию сервисов для любого контейнера Docker, проверяя контейнеры по мере их поступления в сеть.
Hashi-UI — современный пользовательский интерфейс для HashiCorp Consul & Nomad.
Git2consul — отражает содержимое репозитория git в Consul KVs. git2consul берет один или несколько репозиториев git и отражает их в Consul KVs. Цель состоит в том, чтобы организации любого размера использовали git в качестве резервного хранилища, контрольного журнала и механизма контроля доступа для изменений конфигурации, а Consul-в качестве механизма доставки.
Spring-cloud-consul — этот проект обеспечивает интеграцию Consul для приложений Spring Boot посредством автоконфигурации и привязки к среде Spring и другим идиомам модели программирования Spring. С помощью нескольких простых аннотаций вы можете быстро включить и настроить общие шаблоны внутри вашего приложения и построить большие распределенные системы с компонентами на основе Consul.
Crypt — храните и извлекайте зашифрованные конфигурации из etcd или consul.
Mesos-Consul — Mesos to Consul bridge для открытия сервиса. Mesos-Consul автоматически регистрирует / отменяет регистрацию сервисов, запускаемых как задачи Mesos.
Consul-cli — Интерфейс командной строки для Consul HTTP API.
Вывод
Распределенные системы не так просто построить и настроить. Поддержание их в рабочем состоянии — это совсем другая работа. HashiCorp Consul облегчает жизнь инженерам, сталкивающимся с такими проблемами.
По мере того, как мы изучали различные аспекты Consul, мы узнали, насколько простым для нас станет разработка и развертывание приложения с распределенной архитектурой или архитектурой микросервисов.
Простота использования, отличная документация, надежный готовый к производству код и поддержка сообщества позволяют довольно легко адаптировать и внедрить HashiCorp Consul в наш технологический стек.
Мы надеемся, что это была познавательное изучение Consul. Наше путешествие еще не закончилось, это была только первая половина. Мы снова встретимся с вами во второй части этой статьи, которая проведет нас через практические примеры, близкие к реальным приложениям.
Дайте нам знать, что вы хотели бы услышать от нас больше или если у вас есть какие-либо вопросы по этой теме, мы будем более чем рады ответить на них.
Ссылки
HashiCorp Consul и его РЕПО на GitHub.
HashiCorp Consul Guides and Code
Микросервисы, как объяснил Мартин Фаулер и др.
Статьи в блоге HashiCorp о компании Consul
P.S. Добавлю что установить консул можно и из репы пакетов: https://www.hashicorp.com/blog/announcing-the-hashicorp-linux-repository
ПРАКТИЧЕСКОЕ РУКОВОДСТВО
производственное издание, содержащее преимущественно материал описательно-эмпирического характера и предназначенное для специалистов, желающих повысить свою квалификацию, и лиц, стремящихся самостоятельно овладеть какой-либо профессией или навыками работы.
Источник: Профессиональное образование. Словарь
РУКОВОДСТВО ПРАКТИЧЕСКОЕ
производственное издание (пособие), содержащее преимущественно описательный материал, используемое для повышения квалификации специалистов или для самостоятельного овладения какой-либо профессией, навыками работы. Руководящие работники интересуются главным образом документами законодательного и нормативного характера, требую обоснования принимаемых решений в ти образования, результатами выполняв решений и их возможными последствиями!
Источник: Словарь по образованию и педагогике.