Сколькими способами мы можем взаимодействовать с микросервисом?

  1. HTTP/REST: Микросервисы могут взаимодействовать через HTTP с использованием RESTful API. Каждая микрослужба предоставляет свои конечные точки, а другие микрослужбы могут выполнять HTTP-запросы для взаимодействия с ними. Этот подход получил широкое распространение благодаря своей простоте и совместимости с различными языками программирования и фреймворками.

В Spring Boot есть несколько клиентов, через которые мы можем совершать вызовы API.

RestTemplate, веб-клиент используется для выполнения HTTP-запросов и использования других сервисов.

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

Кафка — один из популярных примеров обмена сообщениями.

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

RPC (удаленный вызов процедур). RPC позволяет микрослужбам вызывать методы или функции удаленных служб, как если бы они были локальными. Он абстрагирует детали связи и обеспечивает более плавное взаимодействие между микросервисами. gRPC — это популярная среда RPC, используемая в архитектурах микросервисов.

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

Service Mesh. Service Mesh, например Istio или Linkerd, предоставляет выделенный уровень инфраструктуры для управления связью между микросервисами. Он предлагает такие функции, как обнаружение сервисов, балансировка нагрузки, управление трафиком, безопасность и возможность наблюдения, что упрощает разработку и развертывание микросервисов.

Области действия компонентов — что такое области действия компонентов по умолчанию?

  1. Singleton (область действия по умолчанию): область действия singleton означает, что один экземпляр bean-компонента создается и совместно используется в контексте приложения. Всякий раз, когда запрашивается bean-компонент с областью действия singleton, возвращается один и тот же экземпляр. Это область по умолчанию для Spring Beans, если не указана явная область.
  2. Прототип: область действия прототипа означает, что новый экземпляр компонента создается каждый раз, когда он запрашивается из контекста приложения. Каждый раз, когда вы запрашиваете компонент, возвращается новый экземпляр. Эта область полезна, когда вам нужен новый экземпляр объекта каждый раз, когда он вводится или извлекается.
  3. Запрос: область запроса специфична для веб-приложений. Это означает, что для каждого HTTP-запроса создается новый экземпляр компонента. Экземпляр компонента используется в рамках одного HTTP-запроса, но не для нескольких запросов. Эта область обычно используется для bean-компонентов, которые содержат данные или состояние, специфичные для запроса.
  4. Сеанс: область сеанса также специфична для веб-приложений. Это означает, что для каждого пользовательского сеанса создается новый экземпляр компонента. Экземпляр компонента используется совместно в рамках одного пользовательского сеанса, но не для разных сеансов. Эта область обычно используется для bean-компонентов, которые содержат данные или состояние, специфичные для сеанса.
  5. Глобальный сеанс. Область глобального сеанса применима только в контексте портлета, где он представляет глобальный сеанс приложения. Это похоже на область сеанса, но применяется ко всему приложению, а не к конкретному пользовательскому сеансу. Эта область редко используется в типичных приложениях Spring.
  6. Приложение: область приложения специфична для веб-приложений и представляет собой экземпляр компонента, совместно используемый во всем приложении. Он создается один раз и используется во всех запросах и сеансах. Эта область используется реже и обычно связана со статическими или глобальными данными.

Можем ли мы создать два одинаковых компонента с одним и тем же классом?

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

Зачем нужен квалификатор?

Аннотация @Qualifier используется в Spring для разрешения неоднозначностей, когда в контексте приложения присутствует несколько bean-компонентов одного типа. Это помогает указать, какой конкретный компонент должен быть введен или извлечен, когда доступно несколько кандидатов.

Рассмотрим сценарий, в котором у вас есть несколько реализаций интерфейса, и вы хотите внедрить конкретную реализацию в класс. Без квалификаторов Spring не знал бы, какую реализацию использовать, и выдавал бы исключение из-за двусмысленности.

Используя аннотацию @Qualifier, вы можете предоставить Spring дополнительную информацию, чтобы различать bean-компоненты. Это позволяет вам указать уникальный идентификатор или имя для компонента, который затем можно использовать для устранения неоднозначности и точного подключения желаемого компонента.

Что такое приводы, каково их использование и как назвать конечные точки?

Актуаторы в Spring Boot — это набор готовых к работе конечных точек управления, которые предоставляют различную полезную информацию и функции для мониторинга и управления вашим приложением. Актуаторы позволяют получить представление о внутренностях вашего приложения, выполнять проверки работоспособности, отслеживать показатели и многое другое. Эти конечные точки могут быть доступны через HTTP или JMX и предоставлять ценную операционную информацию о вашем приложении.

Здоровье: /actuator/health

  • Предоставляет информацию о состоянии работоспособности вашего приложения. Он может указать, запущено ли приложение и есть ли какие-либо потенциальные проблемы.

Информация: /actuator/info

  • Отображает пользовательскую информацию о вашем приложении. Вы можете предоставить дополнительные сведения, такие как версия, информация о сборке, сведения о среде и т. д.

Показатели: /actuator/metrics

  • Собирает и предоставляет различные метрики приложения. Он предоставляет информацию об использовании ЦП, использовании памяти, количестве HTTP-запросов, запросах к базе данных и многом другом. Вы также можете получить пользовательские метрики, характерные для вашего приложения.

Лесорубы: /actuator/loggers

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

Дамп темы: /actuator/threaddump

  • Предоставляет снимок текущего состояния потока в вашем приложении. Это может быть полезно для диагностики и устранения неполадок производительности или взаимоблокировок.

Окружающая среда: /actuator/env

  • Отображает текущие свойства среды и их значения. Он показывает свойства конфигурации из различных источников, таких как application.properties, application.yml, переменные среды и т. д.

След: /actuator/trace

  • Предоставляет информацию о последних HTTP-запросах, сделанных вашему приложению. Он показывает такие детали, как метод запроса, URI, заголовки и статус ответа.

Аудиты: /actuator/auditevents

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

Автоматические выключатели, какая от них польза? варианты использования?

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

Случаи использования автоматических выключателей включают:

  1. Отказоустойчивость: автоматические выключатели помогают справляться со сбоями и сбоями в распределенных системах. Когда удаленная служба испытывает проблемы или перестает отвечать на запросы, прерыватель цепи может разорвать цепь, избегая последующих запросов и быстро возвращая резервный ответ или ошибку. Это предотвращает перегрузку системы многочисленными запросами к неисправной службе.
  2. Быстрый отказ: автоматические выключатели позволяют быстро обнаруживать отказы. Если удаленная служба постоянно не отвечает или превышает предопределенные пороги ошибок, автоматический выключатель может быстро обнаружить это и разомкнуть цепь, минуя дальнейшие вызовы неисправной службы. Это позволяет избежать напрасной траты ресурсов и сократить время отклика клиентов.
  3. Откат и восстановление. Автоматические выключатели позволяют определить логику отката. Когда канал разомкнут, вместо отправки запросов в неисправную службу прерыватель цепи может возвращать кэшированные ответы или выполнять альтернативную логику, например возвращать значения по умолчанию или обслуживать ответы из локального кэша. Как только неисправный сервис снова станет работоспособным, автоматический выключатель может попытаться замкнуть цепь и возобновить нормальную работу.
  4. Сброс нагрузки: автоматические выключатели могут помочь справиться с высокими нагрузками и предотвратить перегрузку системы. Когда система находится под большой нагрузкой или испытывает снижение производительности, прерыватель цепи может разомкнуть цепь и временно отклонить входящие запросы. Это позволяет системе сбрасывать нагрузку и расставлять приоритеты для критически важных функций или поддерживать стабильность во время пикового трафика.

Resilince4j и Hystrix являются популярными библиотеками для реализации автоматического выключателя.

Что такое функция AWS Lambda и каковы преимущества ее использования?

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

  1. Бессерверная архитектура: AWS Lambda следует бессерверной модели, что означает, что вам не нужно беспокоиться о подготовке, масштабировании или обслуживании серверов. AWS берет на себя все управление инфраструктурой, позволяя вам сосредоточиться исключительно на написании кода.
  2. Экономическая эффективность: с AWS Lambda вы платите только за фактическое время вычислений, затраченное вашим кодом. Он автоматически масштабирует ваше приложение в ответ на входящие запросы и уменьшает его масштаб при отсутствии активности. Эта модель ценообразования с оплатой по мере использования помогает оптимизировать расходы, поскольку вам не выставляется счет за время простоя сервера.
  3. Масштабируемость и высокая доступность. AWS Lambda автоматически масштабирует ваш код в ответ на входящие запросы. Он может обрабатывать практически неограниченное количество одновременных исполнений, гарантируя беспрепятственное масштабирование вашего приложения по мере увеличения рабочей нагрузки. Кроме того, функции Lambda реплицируются в нескольких зонах доступности в регионе AWS, обеспечивая высокую доступность и отказоустойчивость.
  4. Архитектура, управляемая событиями: AWS Lambda предназначен для приложений, управляемых событиями. Это может быть вызвано различными событиями из сервисов AWS, такими как создание объекта в Amazon S3, обновление базы данных в Amazon DynamoDB или сообщения в Amazon Simple Notification Service (SNS). Это позволяет создавать реактивные и несвязанные архитектуры, в которых различные компоненты вашего приложения могут инициировать события и реагировать на них.
  5. Интеграция с сервисами AWS. AWS Lambda легко интегрируется с различными сервисами AWS, что позволяет создавать мощные и масштабируемые приложения. Вы можете комбинировать функции Lambda с такими сервисами, как Amazon API Gateway, Amazon S3, Amazon DynamoDB, Amazon SQS и другими, для создания полных бессерверных архитектур.
  6. Быстрая разработка и развертывание: AWS Lambda упрощает процесс разработки и развертывания. Вы можете написать свой код на поддерживаемом языке программирования (например, Java, Python, Node.js и т. д.), упаковать его в пакет развертывания и загрузить в AWS Lambda. Сервис позаботится обо всем остальном, включая масштабирование, развертывание и мониторинг.
  7. Операционная эффективность: с AWS Lambda вам не нужно беспокоиться об управлении сервером, установке исправлений ОС или мониторинге инфраструктуры. AWS берет на себя все операционные задачи, позволяя вам сосредоточиться на написании кода и предоставлении ценности вашим пользователям. Вы можете отслеживать свои функции Lambda с помощью AWS CloudWatch, который предоставляет информацию о показателях производительности, журналах и частоте ошибок.

Вы готовитесь к собеседованию в качестве Java-разработчика? Поздравляем! Чтобы помочь вам успешно пройти собеседование, мы составили исчерпывающий список основных вопросов для собеседования с Java-разработчиком. Являетесь ли вы новичком или опытным разработчиком, эти вопросы охватывают широкий спектр концепций Java, методов кодирования и лучших практик. Эта статья предоставит вам знания и уверенность, чтобы продемонстрировать свои знания в области Java, от базовой Java до сложных тем, таких как многопоточность, обработка исключений и шаблоны проектирования. Погрузитесь и подготовьтесь к следующему собеседованию с разработчиком Java!









Спасибо за прочтение