50 вопросов для собеседования по микросервисам для Java-разработчиков 2023

50 вопросов для собеседования по микросервисам для Java-разработчиков 2023

t.me/DevOPSitsec


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

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

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

В последние годы спрос на микросервисы сильно вырос, но как и у любой другой технологии, у неё есть свои плюсы и минусы.

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

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

Я разделил статью на 3 раздела: в первом обсуждаются общие вопросы по архитектуре микросервисов, во втором разделе мы вернёмся к вопросам собеседования по шаблонам и принципам проектирования микросервисов, а в последнем разделе мы увидим более продвинутые вопросы по микросервисам для опытных разработчиков.

@javatg – наш java канал.

20 Основных вопросов для собеседования по архитектуре микросервисов

Вот основные вопросы для собеседования по микросервисам, которые основаны на общих знаниях о них. Вы должны знать ответы на эти вопросы, чтобы использовать микросервисы в своем проекте.

1.Что такое архитектура микросервисов и чем она отличается от монолитной архитектуры?

Микросервисы, как следует из названия, – это небольшой сервис (Java, .NET, JavaScript или любая другая программа), который предоставляет определенную функциональность. Например, служба аутентификации может предоставлять функцию аутентификации laity, а UserService может предоставлять все функциональные возможности, связанные с пользователями.

Вот простой пример того, как выглядят микросервисы:

Каковы преимущества и недостатки архитектуры микросервисов?

Архитектура микросервисов – это подход к созданию программных систем, который предполагает разбиение монолитного приложения на набор небольших модульных сервисов, которые могут разрабатываться, развёртываться и масштабироваться. Вот некоторые из преимуществ и недостатков этого подхода:

Преимущества микросервисов:

  • Гибкость: Архитектура микросервисов обеспечивает гибкость с точки зрения выбора технологии, поскольку каждая служба может быть реализована с использованием различных языков, фреймворков и баз данных. Например, вы можете реализовать одни микросервисы на Java, а другие – на C++ или Python.
  • Масштабируемость: Микросервисы могут масштабироваться независимо, что позволяет лучше использовать ресурсы и быстрее масштабировать систему в целом. Благодаря облачным вычислениям Kubernetes может очень легко масштабировать микросервисы в зависимости от нагрузки.
  • Устойчивость: Архитектура микросервисов позволяет создавать более отказоустойчивые системы, поскольку сбой в одной службе может быть изолирован и обработан без ущерба для всей системы.
  • Гибкость: Архитектура микросервисов обеспечивает более быстрые циклы разработки и развёртывания, поскольку изменения могут быть внесены в одну службу без ущерба для всей системы.
  • Возможность повторного использования: Микросервисы можно повторно использовать в нескольких приложениях, что может привести к экономии средств и повышению эффективности.

Недостатки микросервисов:

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

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

2. Как спроектировать и внедрить микросервисы?

Вы можете использовать любой фреймворк для разработки микросервисов на любом языке программирования, но в Java советуем использовать фреймворки Spring Boot и Spring Cloud.

3. Каковы ключевые характеристики хорошо спроектированного микросервиса?

Хорошо спроектированные микросервисы имеют чёткие, единые обязанности; обладают высокой связностью; взаимодействуют через API; имеют ограниченный контекст и могут независимо развёртываться, тестироваться и масштабироваться.

И, вот еще несколько вопросов о микросервисах для вас, чтобы попрактиковаться. Вы можете найти ответы на них в Интернете:

  • Что такое связность в микросервисах? Какая она бывает?
  • Как микросервис Java и микросервис .NET могут взаимодействовать с teach? (подсказка: json)
  • Как решать сквозные проблемы, такие как безопасность, в архитектуре микросервисов?
  • Почему отладка так сложна в микросервисной архитектуре?
  • Как обеспечить согласованность данных в архитектуре микросервисов?
  • Как гарантировать, что микросервисы масштабируемы и устойчивы?
  • Как обрабатывать обнаружение и регистрацию служб в архитектуре микросервисов?
  • Как управлять взаимодействием служб и совместным использованием данных в архитектуре микросервисов?
  • Как управлять версиями сервисов и обратной совместимостью в архитектуре микросервисов?
  • Как отслеживать микросервисы и устранять неполадки в них?
  • Как обрабатывать развёртывания и откаты в архитектуре микросервисов?
  • Как справиться с тестированием и непрерывной интеграцией в архитектуре микросервисов?
  • В архитектуре микросервисов тестирование и непрерывная интеграция должны выполняться на уровне сервиса, с автоматизированными тестами и непрерывным конвейером доставки для каждой службы. Это позволяет осуществлять независимое развёртывание и масштабирование служб.
  • Как управлять жизненным циклом в архитектуре микросервисов?
  • Как обеспечить безопасность и контроль доступа в архитектуре микросервисов?
  • Как вы осуществляете интеграцию данных и миграцию данных в архитектуре микросервисов?
  • Как управлять составом и оркестровкой сервисов в архитектуре микросервисов?
  • Как вы развертываете свои микросервисы Java? Мы используем Docker и Kubernetes для развёртывания наших микросервисов в облаке. Docker используется для создания образа Docker всего сервиса, а затем Kubernetes для его развертывания в AWS или Azure.
  • Как обеспечить отказоустойчивость сервиса в случае сбоев? K8 сделает это за вас и запустит новый микросервис или перезапустит тот же самый.
  • Какие фреймворки Java вы можете использовать для создания микросервисов? подсказка: Quarkus, Spring Boot и MicroNaut.
  • Сколько микросервисов содержится в вашем проекте? Как вы находите их, если пользователь говорит, что один из его заказов отсутствует в базе данных? (подсказка — одна база данных на микросервис – это шаблон).

15 Вопросов для собеседования по микросервисам о шаблонах и принципах проектирования

Вот еще несколько вопросов, которые основаны на шаблонах проектирования микросервисов и принципах, таких как API Gateway, CQRS, SAGA и других.

1. Что такое шаблон Gateway API и как он используется в архитектуре микросервисов? Пожалуйста, объясните, какую проблему он решает и является ли он обязательным для микросервисов или нет?

API Gateway – это один из основных шаблонов микросервисов, который используется для обеспечения единой точки входа для внешних потребителей для доступа к сервисам. Он действует как обратный прокси-сервер и уровень маршрутизации, который, помимо прочего, отвечает за маршрутизацию запросов, композицию и трансляцию протокола.

Шаблон шлюза API решает несколько проблем в архитектуре микросервисов:

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

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

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

Вот хорошая диаграмма, которая объясняет шаблон Gateway API в микросервисах:

2. Можете ли вы объяснить схему автоматического выключателя и как она используется для обработки сбоев обслуживания в архитектуре микросервисов? Какую проблему это решает.

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

3. Что такое шаблон Command Query Responsibility Segregation (CQRS) и когда его целесообразно использовать в архитектуре микросервисов?

CQRS расшифровывается как Разделение ответственности за командный запрос. Это один из популярных шаблонов проектирования микросервисов, который разделяет операции чтения и записи в системе и позволяет им развиваться независимо. Он позволяет создать более масштабируемую и производительную систему, но также увеличивает ее сложность.

4. Что такое Retry pattern в микросервисах? Когда и как его использовать?

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

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

Вот ещё несколько вопросов о шаблонах и принципах проектирования микросервисов:

  • Зачем нежен Explain Event-Driven шаблон и как его используют в микросервисной архитектуре?
  • Зачем нежен Explain Service Registry шаблон и как его используют в микросервисной архитектуре?
  • Зачем нежен Explain Sidecar шаблон и как его используют в микросервисной архитектуре?
  • Зачем нежен Explain Backend for Frontend шаблон и как его используют в микросервисной архитектуре?
  • Зачем нежен Explain Bulkhead шаблон и как его используют в микросервисной архитектуре?
  • Зачем нежен Saga шаблон и как его используют в микросервисной архитектуре?
  • Зачем нежен Explain Outbox  шаблон и как его используют в микросервисной архитектуре?
  • Зачем нежен Self-Containment шаблон и как его используют в микросервисной архитектуре?
  • Зачем нежен Explain External Configuration шаблон и как его используют в микросервисной архитектуре?
  • Зачем нежен Strangler шаблон и как его используют в микросервисной архитектуре?

15 Вопросов для о микросервисах для опытных разработчиков

Это более продвинутые вопросы о микросервисах для опытных разработчиков Java с опытом работы от 5 до 10 лет. Они охватывают такие продвинутые темы, как репликация данных, разделение данных, оркестровка и хореография сервисов, безопасность и т.д.

  • Как выполнить секционирование данных и репликацию данных в MS?
  • Выполняли ли вы какое-либо разделение служб и масштабирование служб в архитектуре микросервисов? Если нет, то как вы можете это сделать?
  • Объясните организацию обслуживания и хореографию обслуживания в микросервисах?
  • С какими проблемами вы сталкивались при разработке микросервисов в вашем проекте?
  • Как вы справляетесь с безопасностью служб и шифрованием служб в микросервисах?
  • Как вы будете реализовывать мониторинг служб и ведение журнала служб в архитектуре микросервисов?
  • Как вы справляетесь с отслеживанием служб и отладкой служб в архитектуре микросервисов?
  • Что такое тестирование сервиса и обеспечение качества сервиса в архитектуре микросервисов?
  • Как вы справляетесь с развертыванием служб и их откатом в архитектуре микросервисов?
  • Как вы справляетесь с управлением сервисами и жизненным циклом сервисов в архитектуре микросервисов?
  • Как вы справляетесь с миграцией служб и модернизацией сервисов в архитектуре микросервисов?
  • Как вы справляетесь с интеграцией сервисов и управлением API сервисов в архитектуре микросервисов?
  • Как вы справляетесь с производительностью сервиса и оптимизацией сервиса в архитектуре микросервисов?
  • Как убедиться, что ваши микросервисы не влияют на другие микросервисы на том же хосте?
  • Как вы организуете свои микросервисы? Остаётся ли весь код в одном и том же репозитории или вы создаёте несколько репозиториев для разных микросервисов?
  • Что лучше: разная база данных для разных микросервисов или единая база данных для всех микросервисов? Почему?

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

Даже если вы мало работали с микросервисами, эти вопросы помогут вам очень быстро освоить все основные концепции данной сферы.


Report Page