# Вопросы по микросервисам

**Q1: Что подразумевается под непрерывной интеграцией?**

Сложность: ⭐

Непрерывная интеграция (CI) - это практика разработки, которая требует, чтобы разработчики интегрировали код в общий репозиторий несколько раз в день. Каждая проверка затем проверяется автоматической сборкой, что позволяет командам обнаруживать проблемы на ранних этапах.

**Q2: Что такое контейнеризация?**

Сложность: ⭐⭐

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

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

**Q3: Почему вы выбрали бы микросервисную архитектуру?**

Сложность: ⭐⭐

Существует множество плюсов, предлагаемых архитектурой Microservices. Вот несколько из них:

* Микросервисы могут легко адаптироваться к другим системам или технологиям.
* Отказ одного процесса не влияет на всю систему.
* Оказывает поддержку крупным предприятиям, а также небольшим командам.
* Может быть развернут независимо и в относительно короткие сроки.

**Q4: Определите микросервисную архитектуру**

Сложность: ⭐⭐

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

**Q5: Объясните сине-зеленую технику развертывания (деплой)**

Сложность: ⭐⭐⭐

Сине-зеленое развертывание - это метод, который уменьшает время простоя и риск за счет запуска двух идентичных производственных сред, называемых Blue и Green. В любое время активна только одна из сред, причем живая среда обслуживает весь производственный трафик. В этом примере синий в данный момент активен, а зеленый не используется.

Когда вы готовите новую версию своего программного обеспечения, развертывание и финальная стадия тестирования происходят в среде, которая не является живой: в данном примере, Green. После того как вы развернули и полностью протестировали программное обеспечение в Green, вы переключаете маршрутизатор, поэтому все входящие запросы теперь переходят в Green вместо Blue.&#x20;

Этот метод может устранить простои из-за развертывания приложения. Кроме того, сине-зеленое развертывание снижает риск: если с новой версией на Green произойдет что-то непредвиденное, вы можете немедленно вернуться к последней версии, переключившись на Blue.

![25 вопросов о микросервисах](https://senior.ua/storage/article/content/813d2ef2-d6ec-4ab1-8a9c-8614023e0427.jpeg)

**Q6: Что вы знаете о безсерверной модели?**

Сложность: ⭐⭐⭐

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

Примеры:

* Amazon AWS Lambda
* Функции Azure

**Q7: Что такое умные конечные точки и глупые каналы?**

Сложность: ⭐⭐⭐

Интеллектуальные конечные точки, просто означающие фактические бизнес-правила и любые другие проверки, что происходят за теми конечными точками, которые не видны для потребителей этих конечных точек.

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

**Q8: Считаете ли вы, что GraphQL подходит для проектирования микросервисной архитектуры?**

Сложность: ⭐⭐⭐

GraphQL и микросервисы идеально подходят друг другу, потому что GraphQL скрывает тот факт, что у вас есть микросервисная архитектура от клиентов. С внутренней стороны вы хотите разделить все на микросервисы, но с точки зрения внешнего интерфейса вы бы хотели, чтобы все ваши данные поступали из единого API. Использование GraphQL - лучший из известных способов, который позволяет вам делать и то, и другое. Он позволяет вам разделить ваш бэкэнд на микросервисы, при этом предоставляя единый API для всего вашего приложения и позволяя объединять данные из разных сервисов.

**Q9: Как работает микросервисная архитектура?**

Сложность: ⭐⭐⭐

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

**Q10: В чем разница между монолитной архитектурой, архитектурой SOA и микросервисами?**

Сложность: ⭐⭐⭐

Монолитная архитектура похожа на большой контейнер, в котором все программные компоненты приложения собраны вместе и плотно упакованы.

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

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

**Q11: Как можно выполнить межфункциональное тестирование?**

Сложность: ⭐⭐⭐

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

![25 вопросов о микросервисах](https://senior.ua/storage/article/content/bae6fec7-5b72-41aa-b49c-6c93968bdd58.jpeg)

**Q12: Каковы основные различия между микросервисами и монолитной архитектурой?**

Сложность: ⭐⭐⭐

Микросервисы:

* Быстрый запуск службы .
* Микросервисы имеют слабосвязанную архитектуру.
* Изменения, сделанные в одной модели данных, не влияют на другие микросервисы.
* Микросервис ориентирован на продукты, а не проекты.

Монолитная архитектура:

* Запуск службы занимает время
* Монолитная архитектура в основном тесно связана.
* Любые изменения в модели данных влияют на всю базу данных.
* Ориентирован на  проект.

**Q13: Как виртуализация работает на низком уровне?**

Сложность: ⭐⭐⭐⭐

Диспетчер виртуальных машин захватывает кольцо ЦП 0 (или «корневой режим» в более новых процессорах) и перехватывает все привилегированные вызовы, сделанные гостевой ОС, чтобы создать иллюзию, что гостевая ОС имеет свое собственное оборудование. Интересный факт: до 1998 года считалось невозможным достичь этого в архитектуре x86, потому что не было никакого способа сделать такой перехват. Люди в VMWare были первыми, кто задумал переписать исполняемые байты в памяти для привилегированных вызовов гостевой ОС, чтобы добиться этого.

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

![25 вопросов о микросервисах](https://senior.ua/storage/article/content/a01ce271-f804-4a9f-b8cd-a5ac9d969c9d.jpeg)

**Q14: Что такое паравиртуализация?**

Сложность: ⭐⭐⭐⭐

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

Примеры в этой категории включают Xen, KVM и т.д.

**Q15: Что такое идемпотентность?**

Сложность: ⭐⭐⭐⭐

Идемпотентность относится к сценарию, в котором свойство объекта или операции при повторном применении операции к объекту дает тот же результат, что и при первом.

**Q16: Каковы плюсы и минусы микросервисной архитектуры?**

Сложность: ⭐⭐⭐⭐

_Плюсы:_

* Свобода использования разных технологий
* Каждый микросервис ориентирован на одну возможность
* Поддерживает отдельные развертываемые блоки
* Разрешает частые выпуски программного обеспечения
* Обеспечивает безопасность каждого сервиса
* Несколько сервисов параллельно разрабатываются и развертываются

_Минусы:_

* Увеличивает проблемы устранения неполадок
* Увеличение усилий для настройки и других операций
* Сложно поддерживать безопасность транзакций
* Трудно отслеживать данные через различные границы

**Q17: Какова роль архитектора в архитектуре микросервисов?**

Сложность: ⭐⭐⭐⭐

Архитектор в архитектуре микросервисов играет следующие роли:

* Помогает в определении зонирования компонентов. Таким образом, он гарантирует, что компоненты взаимно связаны, но не связаны друг с другом.
* Дает рекомендации по определенным инструментам и технологиям для команды разработчиков микросервисов.
* Обеспечивает техническое управление, чтобы команды в своем техническом развитии следовали принципам микросервиса.

**Q18: Укажите некоторые преимущества и недостатки шлюза API.**

Сложность: ⭐⭐⭐⭐

Основным преимуществом использования API-шлюза является то, что он инкапсулирует внутреннюю структуру приложения.&#x20;

Недостаток: это еще один высокодоступный компонент, который необходимо разрабатывать, развертывать и управлять им. Существует также риск того, что шлюз API станет узким местом разработки.

Разработчики должны обновить шлюз API, чтобы выставить конечные точки каждого микросервиса.

**Q19: Что такое шаблон материализованного представления и когда вы будете его использовать?**

Сложность: ⭐⭐⭐⭐

Шаблон Materialized View - это решение для агрегации данных из нескольких микросервисов, которое используется, когда нам нужно реализовать запросы, которые извлекают данные из нескольких микросервисов. При таком подходе мы заранее генерируем (подготовим денормализованные данные до того, как произойдут реальные запросы) таблицу только для чтения с данными, принадлежащими нескольким микросервисам. Таблица имеет формат, соответствующий потребностям клиентского приложения или API-шлюза.

**Q20: Что вы понимаете под контрактным тестированием?**

Сложность: ⭐⭐⭐⭐

Контрактный тест - это тест на границе внешней службы, который проверяет, соответствует ли она контракту, ожидаемому потребляющей службой.

Кроме того, контрактное тестирование не проверяет поведение службы в глубине. Скорее, оно проверяет, что входы и выходы служебных вызовов содержат обязательные атрибуты и задержку ответа, а пропускная способность находится в допустимых пределах.

**Q21: В чем разница между сплоченностью и связью?**

Сложность: ⭐⭐⭐⭐⭐

Сплоченность относится к тому, что может сделать класс (или модуль). Низкая сплоченность означала бы, что класс совершает самые разные действия - он широкий, не сфокусированный на том, что он должен делать. Высокая сплоченность означает, что класс ориентирован на то, что он должен делать, то есть только на методы, относящиеся к намерению класса.

Что касается связи, это относится к тому, как два родственных класса или модуля связаны друг с другом. Для классов с низкой связью изменение чего-то важного в одном классе не должно влиять на другой. Высокая связь затруднит изменение и поддержку вашего кода; поскольку классы тесно связаны, для внесения изменений может потребоваться полная модернизация системы.

**В22: Что такое потребительский контракт (CDC)?**

Сложность: ⭐⭐⭐⭐⭐

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

Обычно поставщики указывают интерфейсы в документе XML. Но в Consumer Driven Contract каждый потребитель услуг передает интерфейс, ожидаемый от провайдера.

![25 вопросов о микросервисах](https://senior.ua/storage/article/content/4eba4f75-43c9-4427-b2cf-22d1b8e6c734.jpeg)

**Q23: Назовите основные различия между SOA и микросервисами?**

Сложность: ⭐⭐⭐⭐⭐

SOA использует Enterprise Service Bus для связи, тогда как микросервисы используют гораздо более простые системы обмена сообщениями.

Каждый микросервис хранит данные независимо, в то время как компоненты SOA совместно используют одно и то же хранилище.

SOA по-прежнему остается монолитом, чтобы вносить изменения, нужно изменить всю архитектуру.

SOA с использованием только тяжеловесных технологий и протоколов (таких как SOAP и т.д.), В то время как микросервисы являются более гибким подходом (REST / GraphQL).

**В24: Что такое реактивные расширения в микросервисах?**

Сложность: ⭐⭐⭐⭐⭐

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

**В25: Как бы вы внедрили SSO для микросервисной архитектуры?**

Сложность: ⭐⭐⭐⭐⭐

Добавьте сервис идентификации и авторизуйте доступ к сервису через него с помощью токенов. Любая служба, которая имеет защищенные ресурсы, обращается к службе идентификации, чтобы убедиться, что ее учетные данные (токен) действительны. Если это не так, он перенаправит пользователя для аутентификации. После проверки токена его можно сохранить в сеансе, чтобы последующим вызовам в сеансе пользователя не приходилось делать дополнительный вызов. Вы также можете создать запланированное задание, если в этом сеансе необходимо обновить токены.

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

![25 вопросов о микросервисах](https://senior.ua/storage/article/content/ea7bc72d-6822-4bc7-bba6-65b7bc003e12.jpeg)

#### Ссылка

[https://senior.ua/articles/25-voprosov-o-mikroservisah-na-kotorye-vy-skoree-vsego-ne-smozhete-otvetit](https://senior.ua/articles/25-voprosov-o-mikroservisah-na-kotorye-vy-skoree-vsego-ne-smozhete-otvetit)
