2.11M
Category: programmingprogramming

Развертывание и тестирование микросервисов

1.

ВНИМАНИЕ!
ИСПОЛЬЗОВАНИЕ СРЕДСТВ СВЯЗИ, ФОТО,
ВИДЕО И ЗВУКОЗАПИСИ ЗАПРЕЩЕНО!

2.

ВОЕННО-КОСМИЧЕСКАЯ АКАДЕМИЯ ИМЕНИ А.Ф. МОЖАЙСКОГО
Кафедра системы сбора и обработки информации
«Методы программирования»
Лекция № 22
кандидат технических наук
полковник Дудкин А.С.

3.

3
Лекция № 22. РАЗВЕРТЫВАНИЕ И ТЕСТИРОВАНИЕ МИКРОСЕРВИСОВ
Цель:
ознакомить
обучающихся
с
архитектурой
микросервисов,
а также с известными технологиями их развертывания, тестирования,
логирования и масштабирования.
Учебные вопросы:
1. Развертывание.
2. Тестирование.
3. Мониторинг. Безопасность.
4. Масштабирование микросервисов.

4.

Учебный вопрос № 1
Развертывание.
4

5.

Учебный вопрос № 1
5
Развертывание — это сочетание двух взаимосвязанных концепций — процесса и
архитектуры. Процесс развертывания заключается в доставке кода в
промышленную среду и состоит из этапов, которые должны выполнить люди —
разработчики или системные администраторы. Архитектура развертывания
определяет структуру среды, в который этот код будет выполняться.

6.

Учебный вопрос № 1
Промышленная среда должна поддерживать четыре ключевые
возможности.
□ Интерфейс управления сервисами позволяет разработчикам создавать,
обновлять и конфигурировать сервисы. В идеале это интерфейс REST API, с
которым работают консольные и графические инструменты развертывания.
□ Управление запущенными сервисами пытается следить за тем, чтобы в
промышленной среде всегда выполнялось желаемое количество экземпляров
сервиса. Если экземпляр сервиса вышел из строя или по какой-то причине
больше не может обслуживать запросы, промышленная среда должна его
перезапустить. Если отказал целый сервер, все его сервисы должны быть
перезапущены на другом компьютере.
□ Мониторинг предоставляет разработчикам сведения о работе их сервисов,
включая журнальные файлы и показатели. В случае возникновения проблем
промышленная среда должна оповестить разработчиков.
□ Маршрутизация направляет запросы от пользователей к сервисам.
6

7.

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

8.

Учебный вопрос № 1
Процесс развертывания собирает исполняемый JAR-файл и доставляет его в промышленную среду.
В промышленной среде каждый экземпляр сервиса представлен JVM-машиной,
запущенной на компьютере с установленным пакетом JDK или JRE
8

9.

Учебный вопрос № 1
Развертывание нескольких экземпляров
сервиса на одном компьютере.
Развертывание нескольких экземпляров сервиса в
одном и том же веб-контейнере
или сервере приложений.
9

10.

Учебный вопрос № 1
10
Преимущества использования пакетов для конкретных языков
Быстрое развертывание
Одно из важнейших преимуществ этого подхода состоит в относительно высокой скорости
развертывания экземпляров сервиса. Если сервис написан на Java, вы можете просто
скопировать файл JAR или WAR. При использовании других языков, таких как NodeJS или Ruby,
нужно скопировать исходный код.
Эффективное использование ресурсов
Еще одно преимущество данного подхода связано с довольно эффективным потреблением
ресурсов. Множество экземпляров сервиса находятся на одном компьютере и работают в одной
ОС. Эффективность может возрасти еще сильнее, если несколько экземпляров сервиса
запустить в одном процессе.

11.

Учебный вопрос № 1
11
Недостатки применения пакетов для конкретных языков
□ отсутствие инкапсуляции стека технологий. Команде системных
администраторов должны быть известны подробности развертывания каждого
отдельного сервиса, включая конкретную версию среды выполнения.

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

12.

Учебный вопрос № 1
12
Недостатки применения пакетов для конкретных языков
□ недостаточная изоляция при запуске нескольких экземпляров
сервиса на одном компьютере. Проблема усугубляется, когда несколько
экземпляров выполняются на одном компьютере. Недостаточная изоляция
означает, что один вышедший из строя экземпляр может повлиять на работу
других. В итоге приложение может стать ненадежным, особенно при запуске
нескольких экземпляров сервиса на одном компьютере.
□ трудности автоматического определения места размещения
экземпляров сервиса. Еще одно затруднение при выполнении нескольких
экземпляров сервиса па одном компьютере связано с определением того, где
их разместить.

13.

Учебный вопрос № 1
Развертывание сервисов в виде виртуальных машин
Образ виртуальной машины
собирается
в
процессе
развертывания сервиса.
Процесс
развертывания
запускает сборщик образов
ВМ, чтобы создать образ с
кодом
сервиса
и
тем
программным обеспечением,
которое ему нужно для работы
13

14.

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

15.

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

16.

Учебный вопрос № 1
16
Развертывание сервисов в виде контейнеров
Контейнеры — это более легковесный современный механизм развертывания.
Они используют механизм виртуализации на уровне операционной системы.
Контейнер обычно состоит из одного процесса (хотя их может быть несколько),
запущенного в среде, изолированной от других контейнеров

17.

Учебный вопрос № 1
17
При создании контейнера можно указать его процессор, объем памяти
и в зависимости от реализации ресурсы ввода/вывода. Среда
выполнения контейнеров следит за соблюдением этих ограничений и
не дает им занять все ресурсы компьютера. Это особенно важно при
использовании фреймворков оркестрации Docker, таких как
Kubernetes, так как эти лимиты учитываются при выборе серверов для
запуска контейнеров, что позволяет избежать их перегрузки.

18.

Учебный вопрос № 1
Сервис упаковывается в
виде образа контейнера,
который
хранится
в
реестре.
Во
время
выполнения сервис состоит
из нескольких контейнеров,
созданных из этого образа.
Контейнеры
обычно
запускаются в виртуальных
машинах. Одна ВМ, как
правило,
выполняет
несколько контейнеров
18

19.

Учебный вопрос № 1
19
Преимущества развертывания сервисов в виде контейнеров
□ Инкапсуляция стека технологий, благодаря которой API для управления
сервисом превращается в API контейнера.
□ Экземпляры сервиса изолированы.
□ Ресурсы экземпляров сервиса ограничены.

20.

Учебный вопрос № 1
20
Недостатки развертывания сервисов в виде контейнеров
Существенный недостаток контейнеров состоит в том, что вы должны постоянно
заниматься управлением образами контейнеров и обновлением операционной
системы вместе со средой выполнения. Кроме того, если вы не применяете
облачные контейнерные решения наподобие Google Container Engine или AWS
ECS, на вас ложится администрирование контейнерной инфраструктуры и,
возможно, инфраструктуры виртуальных машин, поверх которой она работает.

21.

Учебный вопрос № 2
Тестирование.
21

22.

Учебный вопрос № 2
22
Тестирование — это процесс, проводимый в основном после разработки.
Разработчики передают написанный код коллегам из отдела обеспечения
качества, которые проверяют, работает ли программный продукт так, как
задумано. Большая часть тестирования выполняется вручную.
Ручное тестирование чрезвычайно неэффективно. Никогда не просите человека
сделать то, что у компьютера получается намного лучше. По сравнению с компьютерами люди
работают с низкой производительностью и не способны делать это круглосуточно. Если вы
полагаетесь на ручное тестирование, забудьте о быстрой и безопасной доставке программного
обеспечения. Написание автоматических тестов — это очень важно.
Тестирование производится на слишком позднем этапе процесса
доставки. Безусловно, тестирование уже написанного приложения имеет право на
существование, но, как показывает опыт, этого недостаточно.

23.

Учебный вопрос № 2
23
Стратегии тестирования микросервисных архитектур
Целью теста является проверка поведения тестируемой системы. Под системой
здесь подразумевается элемент программного обеспечения, к которому
применяется тест. Это может быть всего лишь класс, или целое приложение, или
нечто среднее, например набор классов или отдельный сервис. Коллекция
взаимосвязанных тестов формирует тестовый набор.

24.

Учебный вопрос № 2
24
Типичный автоматический тест состоит из четырех этапов
подготовки — подготовки среды тестирования (то есть всего, что необходимо для выполнения
теста); выполнения — запуска тестируемой системы; проверки — оценки результатов теста; очистки
— удаления среды тестирования

25.

Учебный вопрос № 2
25
Типы тестов
□ модульные тесты, которые тестируют небольшую часть сервиса, такую как
класс;
□ интеграционные тесты, которые проверяют, может ли сервис
взаимодействовать с инфраструктурными компонентами, такими как базы
данных и другие сервисы приложения;
□ компонентные тесты — приемочные тесты для отдельного сервиса;
□ сквозные тесты — приемочные тесты для целого приложения.

26.

Учебный вопрос № 2
26
Использование тестового квадранта
для классифицирования тестов
□ К чему относится тест — к бизнесу или технологиям. Бизнес-тест описывается
в терминологии специалиста проблемной области, тогда как для описания
технологического теста используется терминология разработчиков и реализации.
□ Какова цель теста — помочь с написанием кода или дать оценку приложению.
Разработчики применяют тесты, которые помогают им в ежедневной работе.
Тесты, оценивающие приложение, нужны для определения проблемных участков.

27.

Учебный вопрос № 2
Тестовый квадрант определяет четыре категории тестов:
27

28.

Учебный вопрос № 2
Пирамида тестов описывает относительные пропорции
типов тестов, которые нужно написать.
Продвигаясь вверх, вы должны писать все меньше и меньше тестов
28

29.

Учебный вопрос № 2
Трудности тестирования микросервисов
29

30.

Учебный вопрос № 2
Написание модульных тестов для сервиса
30

31.

Учебный вопрос № 3
Мониторинг. Безопасность.
31

32.

Учебный вопрос № 3
Один сервис на одном сервере
Один сервис на нескольких серверах
32

33.

Учебный вопрос № 3
Несколько сервисов на нескольких серверах
33

34.

Учебный вопрос № 3
34
Система Kibana, построенная на движке ElasticSearch и
предназначенная для просмотра журналов. Для поиска по
журналам можно воспользоваться синтаксисом запросов,
позволяющим ограничивать диапазоны времени и дат или
использовать
регулярные
выражения
для
поиска
соответствующих им строк. Kibana может даже генерировать
из журналов диаграммы и отправлять их в ваш адрес,
позволяя вам, к примеру, с первого взгляда замечать
количество ошибок, зарегистрированных за определенное
время.

35.

Учебный вопрос № 3
35
Общепринятые реализации технологии единого входа
Общепринятым подходом к аутентификации и авторизации является
использование какого-либо из решений единого входа (SSO). Соответствующие
возможности в данной области предоставляются SAML — реализации,
доминирующей в области промышленных предприятий, и OpenID Connect.
SAML представляет собой стандарт на основе использования SOAP-протокола,
он известен тем, что с ним весьма непросто работать, несмотря на доступность
поддерживающих его библиотек и инструментальных средств. OpenID Connect
является стандартом, возникшим в качестве конкретной реализации OAuth 2.0 и
основанным на способах управления технологией единого входа, принятых
Google и рядом других компаний.

36.

Учебный вопрос № 3
Использование шлюза для управления единым входом (SSO)
36

37.

Учебный вопрос № 3
37
Стандарт HTTP(S) Basic Authentication
Стандарт HTTP Basic Authentication позволяет клиенту отправлять имя
пользователя и пароль в стандартном HTTP-заголовке. После этого сервер может
проверить эти элементы и подтвердить, что клиенту разрешен доступ к сервису.
Преимущество заключается в том, что это предельно понятный и повсеместно
поддерживаемый протокол.
Проблема в том, что отправка по протоколу HTTP весьма проблематична, потому
что имя пользователя и пароль не отправляются в безопасном режиме. Любая
промежуточная инстанция может просмотреть информацию, находящуюся в
заголовке, и увидеть данные. Поэтому HTTP Basic Authentication следует
использовать с привлечением протокола HTTPS.

38.

Учебный вопрос № 3
38
Клиентские сертификаты
Еще один подход к идентификации клиента заключается в использовании
возможностей протокола безопасности транспортного уровня (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
English     Русский Rules