Similar presentations:
Развертывание и тестирование микросервисов
1.
ВНИМАНИЕ!ИСПОЛЬЗОВАНИЕ СРЕДСТВ СВЯЗИ, ФОТО,
ВИДЕО И ЗВУКОЗАПИСИ ЗАПРЕЩЕНО!
2.
ВОЕННО-КОСМИЧЕСКАЯ АКАДЕМИЯ ИМЕНИ А.Ф. МОЖАЙСКОГОКафедра системы сбора и обработки информации
«Методы программирования»
Лекция № 22
кандидат технических наук
полковник Дудкин А.С.
3.
3Лекция № 22. РАЗВЕРТЫВАНИЕ И ТЕСТИРОВАНИЕ МИКРОСЕРВИСОВ
Цель:
ознакомить
обучающихся
с
архитектурой
микросервисов,
а также с известными технологиями их развертывания, тестирования,
логирования и масштабирования.
Учебные вопросы:
1. Развертывание.
2. Тестирование.
3. Мониторинг. Безопасность.
4. Масштабирование микросервисов.
4.
Учебный вопрос № 1Развертывание.
4
5.
Учебный вопрос № 15
Развертывание — это сочетание двух взаимосвязанных концепций — процесса и
архитектуры. Процесс развертывания заключается в доставке кода в
промышленную среду и состоит из этапов, которые должны выполнить люди —
разработчики или системные администраторы. Архитектура развертывания
определяет структуру среды, в который этот код будет выполняться.
6.
Учебный вопрос № 1Промышленная среда должна поддерживать четыре ключевые
возможности.
□ Интерфейс управления сервисами позволяет разработчикам создавать,
обновлять и конфигурировать сервисы. В идеале это интерфейс REST API, с
которым работают консольные и графические инструменты развертывания.
□ Управление запущенными сервисами пытается следить за тем, чтобы в
промышленной среде всегда выполнялось желаемое количество экземпляров
сервиса. Если экземпляр сервиса вышел из строя или по какой-то причине
больше не может обслуживать запросы, промышленная среда должна его
перезапустить. Если отказал целый сервер, все его сервисы должны быть
перезапущены на другом компьютере.
□ Мониторинг предоставляет разработчикам сведения о работе их сервисов,
включая журнальные файлы и показатели. В случае возникновения проблем
промышленная среда должна оповестить разработчиков.
□ Маршрутизация направляет запросы от пользователей к сервисам.
6
7.
Учебный вопрос № 1Упрощенная схема промышленной среды. Она предоставляет четыре основные возможности:
управление сервисами позволяет разработчикам развертывать и администрировать свой код,
управление на этапе выполнения обеспечивает работу сервисов,
мониторинг визуализирует поведение сервисов и генерирует оповещения,
маршрутизация направляет сервисам запросы пользователей
7
8.
Учебный вопрос № 1Процесс развертывания собирает исполняемый JAR-файл и доставляет его в промышленную среду.
В промышленной среде каждый экземпляр сервиса представлен JVM-машиной,
запущенной на компьютере с установленным пакетом JDK или JRE
8
9.
Учебный вопрос № 1Развертывание нескольких экземпляров
сервиса на одном компьютере.
Развертывание нескольких экземпляров сервиса в
одном и том же веб-контейнере
или сервере приложений.
9
10.
Учебный вопрос № 110
Преимущества использования пакетов для конкретных языков
Быстрое развертывание
Одно из важнейших преимуществ этого подхода состоит в относительно высокой скорости
развертывания экземпляров сервиса. Если сервис написан на Java, вы можете просто
скопировать файл JAR или WAR. При использовании других языков, таких как NodeJS или Ruby,
нужно скопировать исходный код.
Эффективное использование ресурсов
Еще одно преимущество данного подхода связано с довольно эффективным потреблением
ресурсов. Множество экземпляров сервиса находятся на одном компьютере и работают в одной
ОС. Эффективность может возрасти еще сильнее, если несколько экземпляров сервиса
запустить в одном процессе.
11.
Учебный вопрос № 111
Недостатки применения пакетов для конкретных языков
□ отсутствие инкапсуляции стека технологий. Команде системных
администраторов должны быть известны подробности развертывания каждого
отдельного сервиса, включая конкретную версию среды выполнения.
□
невозможность
ограничения
ресурсов,
потребляемых
экземпляром сервиса. Недостаток состоит в том, что вы не можете
ограничить ресурсы, потребляемые экземпляром сервиса. Процесс
потенциально может занять все процессорное время или память, отнимая
ресурсы у других экземпляров сервиса и операционной системы. Это может
произойти, к примеру, из-за ошибки в коде.
12.
Учебный вопрос № 112
Недостатки применения пакетов для конкретных языков
□ недостаточная изоляция при запуске нескольких экземпляров
сервиса на одном компьютере. Проблема усугубляется, когда несколько
экземпляров выполняются на одном компьютере. Недостаточная изоляция
означает, что один вышедший из строя экземпляр может повлиять на работу
других. В итоге приложение может стать ненадежным, особенно при запуске
нескольких экземпляров сервиса на одном компьютере.
□ трудности автоматического определения места размещения
экземпляров сервиса. Еще одно затруднение при выполнении нескольких
экземпляров сервиса па одном компьютере связано с определением того, где
их разместить.
13.
Учебный вопрос № 1Развертывание сервисов в виде виртуальных машин
Образ виртуальной машины
собирается
в
процессе
развертывания сервиса.
Процесс
развертывания
запускает сборщик образов
ВМ, чтобы создать образ с
кодом
сервиса
и
тем
программным обеспечением,
которое ему нужно для работы
13
14.
Учебный вопрос № 114
Преимущества развертывания сервисов в виде ВМ
Образ ВМ инкапсулирует стек технологий.
Важное преимущество этого шаблона состоит в том, что образ ВМ содержит сервис вместе со
всеми его зависимостями. Это избавляет от необходимости устанавливать и конфигурировать ПО,
нужное для работы сервиса, что может спасти от потенциальных ошибок. После упаковки в образ
ВМ сервис становится своеобразным черным ящиком, который инкапсулирует свой стек
технологий.
Экземпляры сервиса изолированы
Существенным преимуществом виртуальных машин является то, что экземпляры сервисов
выполняются в полной изоляции. Это, в конце концов, основная цель данной технологии. Каждая
ВМ имеет фиксированное количество процессорного времени и памяти, что не позволяет ей
занимать ресурсы других сервисов.
Использование зрелой облачной инфраструктуры
возможность задействования зрелой, высокоавтоматизированной облачной инфраструктуры.
15.
Учебный вопрос № 115
Недостатки развертывания сервисов в виде ВМ
□ менее эффективно используются ресурсы. Каждый экземпляр
сервиса тянет за собой целую виртуальную машину, включая ее операционную
систему.
□ довольно медленное развертывание. Сборка образа ВМ обычно
исчисляется минутами из-за размера виртуальной машины. Для этого по сети
нужно передать довольно много данных.
□ дополнительные расходы на системное администрирование.
Обновление операционной системы и среды выполнения
16.
Учебный вопрос № 116
Развертывание сервисов в виде контейнеров
Контейнеры — это более легковесный современный механизм развертывания.
Они используют механизм виртуализации на уровне операционной системы.
Контейнер обычно состоит из одного процесса (хотя их может быть несколько),
запущенного в среде, изолированной от других контейнеров
17.
Учебный вопрос № 117
При создании контейнера можно указать его процессор, объем памяти
и в зависимости от реализации ресурсы ввода/вывода. Среда
выполнения контейнеров следит за соблюдением этих ограничений и
не дает им занять все ресурсы компьютера. Это особенно важно при
использовании фреймворков оркестрации Docker, таких как
Kubernetes, так как эти лимиты учитываются при выборе серверов для
запуска контейнеров, что позволяет избежать их перегрузки.
18.
Учебный вопрос № 1Сервис упаковывается в
виде образа контейнера,
который
хранится
в
реестре.
Во
время
выполнения сервис состоит
из нескольких контейнеров,
созданных из этого образа.
Контейнеры
обычно
запускаются в виртуальных
машинах. Одна ВМ, как
правило,
выполняет
несколько контейнеров
18
19.
Учебный вопрос № 119
Преимущества развертывания сервисов в виде контейнеров
□ Инкапсуляция стека технологий, благодаря которой API для управления
сервисом превращается в API контейнера.
□ Экземпляры сервиса изолированы.
□ Ресурсы экземпляров сервиса ограничены.
20.
Учебный вопрос № 120
Недостатки развертывания сервисов в виде контейнеров
Существенный недостаток контейнеров состоит в том, что вы должны постоянно
заниматься управлением образами контейнеров и обновлением операционной
системы вместе со средой выполнения. Кроме того, если вы не применяете
облачные контейнерные решения наподобие Google Container Engine или AWS
ECS, на вас ложится администрирование контейнерной инфраструктуры и,
возможно, инфраструктуры виртуальных машин, поверх которой она работает.
21.
Учебный вопрос № 2Тестирование.
21
22.
Учебный вопрос № 222
Тестирование — это процесс, проводимый в основном после разработки.
Разработчики передают написанный код коллегам из отдела обеспечения
качества, которые проверяют, работает ли программный продукт так, как
задумано. Большая часть тестирования выполняется вручную.
Ручное тестирование чрезвычайно неэффективно. Никогда не просите человека
сделать то, что у компьютера получается намного лучше. По сравнению с компьютерами люди
работают с низкой производительностью и не способны делать это круглосуточно. Если вы
полагаетесь на ручное тестирование, забудьте о быстрой и безопасной доставке программного
обеспечения. Написание автоматических тестов — это очень важно.
Тестирование производится на слишком позднем этапе процесса
доставки. Безусловно, тестирование уже написанного приложения имеет право на
существование, но, как показывает опыт, этого недостаточно.
23.
Учебный вопрос № 223
Стратегии тестирования микросервисных архитектур
Целью теста является проверка поведения тестируемой системы. Под системой
здесь подразумевается элемент программного обеспечения, к которому
применяется тест. Это может быть всего лишь класс, или целое приложение, или
нечто среднее, например набор классов или отдельный сервис. Коллекция
взаимосвязанных тестов формирует тестовый набор.
24.
Учебный вопрос № 224
Типичный автоматический тест состоит из четырех этапов
подготовки — подготовки среды тестирования (то есть всего, что необходимо для выполнения
теста); выполнения — запуска тестируемой системы; проверки — оценки результатов теста; очистки
— удаления среды тестирования
25.
Учебный вопрос № 225
Типы тестов
□ модульные тесты, которые тестируют небольшую часть сервиса, такую как
класс;
□ интеграционные тесты, которые проверяют, может ли сервис
взаимодействовать с инфраструктурными компонентами, такими как базы
данных и другие сервисы приложения;
□ компонентные тесты — приемочные тесты для отдельного сервиса;
□ сквозные тесты — приемочные тесты для целого приложения.
26.
Учебный вопрос № 226
Использование тестового квадранта
для классифицирования тестов
□ К чему относится тест — к бизнесу или технологиям. Бизнес-тест описывается
в терминологии специалиста проблемной области, тогда как для описания
технологического теста используется терминология разработчиков и реализации.
□ Какова цель теста — помочь с написанием кода или дать оценку приложению.
Разработчики применяют тесты, которые помогают им в ежедневной работе.
Тесты, оценивающие приложение, нужны для определения проблемных участков.
27.
Учебный вопрос № 2Тестовый квадрант определяет четыре категории тестов:
27
28.
Учебный вопрос № 2Пирамида тестов описывает относительные пропорции
типов тестов, которые нужно написать.
Продвигаясь вверх, вы должны писать все меньше и меньше тестов
28
29.
Учебный вопрос № 2Трудности тестирования микросервисов
29
30.
Учебный вопрос № 2Написание модульных тестов для сервиса
30
31.
Учебный вопрос № 3Мониторинг. Безопасность.
31
32.
Учебный вопрос № 3Один сервис на одном сервере
Один сервис на нескольких серверах
32
33.
Учебный вопрос № 3Несколько сервисов на нескольких серверах
33
34.
Учебный вопрос № 334
Система Kibana, построенная на движке ElasticSearch и
предназначенная для просмотра журналов. Для поиска по
журналам можно воспользоваться синтаксисом запросов,
позволяющим ограничивать диапазоны времени и дат или
использовать
регулярные
выражения
для
поиска
соответствующих им строк. Kibana может даже генерировать
из журналов диаграммы и отправлять их в ваш адрес,
позволяя вам, к примеру, с первого взгляда замечать
количество ошибок, зарегистрированных за определенное
время.
35.
Учебный вопрос № 335
Общепринятые реализации технологии единого входа
Общепринятым подходом к аутентификации и авторизации является
использование какого-либо из решений единого входа (SSO). Соответствующие
возможности в данной области предоставляются SAML — реализации,
доминирующей в области промышленных предприятий, и OpenID Connect.
SAML представляет собой стандарт на основе использования SOAP-протокола,
он известен тем, что с ним весьма непросто работать, несмотря на доступность
поддерживающих его библиотек и инструментальных средств. OpenID Connect
является стандартом, возникшим в качестве конкретной реализации OAuth 2.0 и
основанным на способах управления технологией единого входа, принятых
Google и рядом других компаний.
36.
Учебный вопрос № 3Использование шлюза для управления единым входом (SSO)
36
37.
Учебный вопрос № 337
Стандарт HTTP(S) Basic Authentication
Стандарт HTTP Basic Authentication позволяет клиенту отправлять имя
пользователя и пароль в стандартном HTTP-заголовке. После этого сервер может
проверить эти элементы и подтвердить, что клиенту разрешен доступ к сервису.
Преимущество заключается в том, что это предельно понятный и повсеместно
поддерживаемый протокол.
Проблема в том, что отправка по протоколу HTTP весьма проблематична, потому
что имя пользователя и пароль не отправляются в безопасном режиме. Любая
промежуточная инстанция может просмотреть информацию, находящуюся в
заголовке, и увидеть данные. Поэтому HTTP Basic Authentication следует
использовать с привлечением протокола HTTPS.
38.
Учебный вопрос № 338
Клиентские сертификаты
Еще один подход к идентификации клиента заключается в использовании
возможностей протокола безопасности транспортного уровня (Transport Layer
Security (TLS)), последователя SSL, для формирования клиентских
сертификатов. Здесь у каждого клиента имеется сертификат X.509,
используемый при установке связи между клиентом и сервером. Сервер может
проверить аутентичность клиентского сертификата, предоставляя твердые
гарантии надежности клиента.
API-ключи
API-ключи используются всеми открытыми API-интерфейсами таких сервисов,
как Twitter, Google, Flickr и AWS. API-ключи позволяют сервису
идентифицировать того, кто осуществляет вызов, и наложить ограничения на то,
что он может сделать. Зачастую ограничения выходят за рамки простого
предоставления доступа к ресурсам и могут распространяться на такие
действия, как ограничение скорости конкретных абонентов для обеспечения
качества предоставления сервиса другим людям.
39.
Учебный вопрос № 4Масштабирование
микросервисов.
39
40.
Учебный вопрос № 4В основном
причинам.
масштабирование
систем
40
выполняется
по
двум
Во-первых, для того, чтобы легче было справиться со сбоями: если
мы переживаем за отказ какого-либо компонента, то помочь сможет
наличие такого же дополнительного компонента.
Во-вторых, для повышения производительности, что позволяет либо
справиться с более высокой нагрузкой, либо снизить время отклика,
либо достичь обоих результатов.
41.
Учебный вопрос № 4Балансировка нагрузки
41
42.
Учебный вопрос № 4Масштабирование баз данных
42
43.
КОНТРОЛЬНЫЕ ВОПРОСЫ1. Общие принципы разработки программного обеспечения
2. Основные типы данных языка С++.
3. Структура программы на С++.
4. Классы и объекты в C++.
5. Возникновение объектного подхода в программировании.
6. Понятие функции main().
7. Дайте определение понятию конструктора?
8. Дайте определение понятию деструктора?
9. Объектная модель Qt?.
10. Что такое сигнал?
11. Дайте определение слоту?
12. Метаобъектная информация?
13. Общая характеристика механизмом сигналов и слотов?
14. Модификатор public и private?
15. Класс QObject?
43
44.
РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА1. Ричардсон Крис Микросервисы. Паттерны разработки и рефакторинга. — СПб.:
Питер, 2019. — 544 с.: ил. — (Серия «Библиотека программиста»).
2. Платонов А.А., Домбровский А.Ф. Методы программирования: курс лекций.
Электронное пособие. – СПб.: ВКА имени А.Ф. Можайского, 2016. – 171 с.
3. Технологии программирования: учебное пособие / В.В. Мышко, Д.Н. Бородько,
В.В. Ткаченко. – СПб.: ВКА имени А.Ф. Можайского, 2015. – 84 с.
4. Андрианова, А. А. Алгоритмизация и программирование. Практикум: учебное
пособие / А. А. Андрианова, Л. Н. Ис-магилов, Т. М. Мухтарова. — СанктПетербург: Лань, 2019. — 240 с.
5. Программирование на языке С++ в среде Qt Creator: / Е.Р. Алексеев, Г. Г.
Злобин, Д. А.Костюк,О.В.Чеснокова, А.С.Чмыхало М. : ALT Linux, 2015. 448 с. :
ил. (Библиотека ALTLinux).
44
programming