Микросервисы, REST, дизайн систем, деплой

Микросервисы, REST, дизайн систем, деплой #


1. Сервис в рамках транзакции сохранил в БД и должен еще записать в Kafka, но отключили свет. Как предусмотреть, что в БД закомичены данные, которые не дошли до конца? #

2. Сервис закупок хранит количества остатка товара на складе. Пользователь выбирает товары в приложении и видит, сколько товаров осталось. Этот сервис проскалирован и используется кеширование для количества остатка товара. Какой кеш лучше локальный или распределенный? - Если сделаем локально, будут ли проблемы? - С другой стороне, если товар в одном экземпляре, у каждого клиента это записано. Что может случиться? #

3. Стратегии деплоя. Сервис работает в проде, новый релиз с серьезным багом. Если такой релиз выкатим, а предыдущий убьем, будет больно. Какие более плавные подходы деплоя? #

4. У тебя был монолит, билдился 40 минут. Если надо раскатить предыдущую версию, придется ждать 40 минут. Есть ли менее болезненные подходы? #

5. Есть веб-сервис на Tomcat, Spring Boot. Ты написал Controller получения имени пользователя по id. За именем пользователя идешь в БД Postgres. Запускаешь этот сервис на одноядерной системе, ожидаешь нагрузку около 100 запросов в секунду. Будет ли это работать? #

6. Одноядерная система. Запускаем сервер, но ручка вычисляет числа Фибоначчи. Что-то изменится? - Как это будет выглядеть со стороны метрик? - Со стороны пользователей это будет выглядеть так, что запрос очень долго выполняется? Что будет с CPU? На сколько он будет нагружен? #

7. Нужно передать на сервер логин и пароль. Через что будем делать? Почему? #

8. Есть сервис, который вызывает другой сервис по http. Мы используем RestTemplate или Feign Client. Мы должны взять метод, что-то сделать, обработать, в базу положить. И хотим весь процесс сделать асинхронным, чтобы метод не блочил систему. Как это реализовать? #

9. Есть API, мы торчим наружу get запросом, с помощью которого туда передается команда. В рамках API выбираются очень большие данные, их нужно будет отправить в Kafka. За месяц накапливается 2 млн записей таблицы и их нужно выгрузить в Kafka. Какие подводные камни могут быть, если наружу торчим get запросом? На фронт нужно отправить количество записей #

10. Одно и то же приложение нужно запустить в двух разных окружениях. Как это сделать проще всего? #

11. Пишешь приложение, на локалке все работает, отдаешь в сборку. DevOps запускает на проде, там все падает, не подключается к БД, не подключается к Kafka. Что делать? #

12. Хотим запускать приложение на нескольких стендах: dev, prod. Есть выбор: использовать Spring, либо собственную Статическую Фабрику. Где будет удобнее? Продолжение ситуации. Есть подключение к БД. В Абстрактной Фабрике есть конфиги, объекты, я сам создаю инстанс. На другом стенде придется создать другой класс с другими конфигами. И подкладывать нужный объект для каждого стенда. Как это в Spring реализовано? #

13. Синхронизация микросервисов, чтобы только один микросервис отправил запрос, а остальные не отправляли. Есть монолит, есть Sheduled, который идет в БД, строит отчет, отправляет сообщение в Kafka. Если есть второй инстанс, то оба отправят в Kafka сообщение, а нам нужно только одно сообщение. #

14. Один сервис вызывает другой сервис. Где может возникнуть задержка? На что обратить внимание, что бы уменьшить время задержки? #

15. Работа с БД в микросервисах. Используем подход Database per Microservice. Как добиться той же ситуации, как с транзакциями? #

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

17. Есть приложение, навешал туда Lock-ов, все работает четко. По бизнесу конфликтов нет. Начал горизонтально масштабировать свое приложение, и полезли проблемы. Почему Lock-и перестали спасать после горизонтального масштабирования? Горизонтальное масштабирование - приложение работало в одном экземпляре, стало в двух экземплярах работать #

18. Есть запрос от клиента в какой-то из наших контроллеров, через что проходит запрос? #

19. У тебя есть бизнес процессы, есть микросервисы. Микросервис отправки сообщений и микросервис бизнесс логики. Как ты будешь их интегрировать? Какой протокол и какую технологию выберешь? #

20. Тебе запрещено работать с Kafka. Есть только REST. Микросервис, который отвечает за работу оборудования. Он оставляет заявку сервису, который регистрирует и составляет расписание проверок. Как это реализовать по REST. Составление расписания раз в 8 часов #

21. Внедрение гарантий доставки. Если мы добавляем запись в БД, то как проверять, что случилось с клиентом? Клиент тоже должен взаимодействовать с БД? #

22. Есть сервис, который по эндпоинту обновляет что-то в базе. В эндпоинт могут одновременно обратиться с разных мест. По умолчанию Spring boot может добавить в базу сразу два одинаковых запроса. В итоге мы ломаем логику. Как решить эту проблему? #

23. У нас нет REST, пришел менеджер, хочет ввести REST. Точно ли нам надо, хорошо ли? Как это сделать? #

24. Как завернуть Java приложение в Docker? Есть JAR. Расскажи пошагово #

25. Если у нас злоумышленник сворует рефреш токен, он не сможет получить новый access? #

26. REST. Ты сделал Get запрос, как он получает данные? Что тебе надо сделать, чтобы получить определенные данные? #

27. Есть старый монолит и новые микросервисы. Старую БД мигрировать не хотим. Если нагрузка повышается, то старый монолит начинает отказывать. Каскадно микросервисы начинают отключаться. Фронт отключился. Как сделать так, чтобы старый микросервис не особо влиял на текущую реализацию? Как выжить в периоды пиковой нагрузки?…Продолжение ситуации. Circuit Breaker отрубил микросервис, хорошо все заработало. Но нас начали DDOS-ить. Реальные клиенты начинают получать timeout. Что делать? #

28. Как написать интеграцию с другими сервисами? С чего начнешь? #

29. Есть Сервис который принимет http запрос и этому Сервису нужно сходить в другой Сервис и принять от него запрос и передать первому Сервису. Запросы через Kafka в синхронном режиме. Код должен принять http запрос и дать синхронно ответ и в промежутке вызвать Kafka. #

30. Банковское приложение. Есть несколько фронтендов. Браузерый и мобильный. Есть общее API. Есть общее ядро, которому все равно откуда приходят запросы. Фронтенды ожидают свои JSON. #

31. Что сделать для создания endpoint для POST запроса? #

32. В Сервисе есть обращение к Google api. Как сделать так, чтобы при тестах не отсылались запросы в сторонние сервисы? #

33. Предположим, разработали микросервис на спринге и есть бизнес-логика по забору данных, есть “тонкое место”. Что делать будем, как решать проблему? #

34. Есть бизнес, где функционал очень связан. Микросервис большой. Он может оставаться микросервисом? Или это уже монолит? #

35. Есть сервис, который нужно протестировать. В сервисе есть внедрение стороннего компонента, хочу этому компоненту придать определенное поведение. Тест с какой аннотацией нужно сделать заглушкой? #

36. Нужно разработать систему уведомлений, которая поддерживает несколько каналов доставки. Например email, смс, пуш уведомления. Нужно спроектировать так, чтобы система поддерживала расширение в виде добавления новых каналов доставки. #

37. Есть некоторый эндпоинт, к обращению к которому происходит 500 ошибка и пользователь получает StackTrace. Не хотим, чтобы пользователь это видел. Нужно сделать, чтобы при ошибке пользователь получал осмысленное сообщение. Как это сделать средствами Rest и Spring MVC #

38. Разрабатываешь новый Hello сервис. Есть один get метод. Поднимаем в Спринг Сервис. Из Постмана посылаем запрос Get. Опиши что происходит на пути следования запроса. От нажатия кнопки до того как запрос пришел в Сервис #

39. Представь, что проектируем приложение. Нужно сохранить объект. Например, сессию пользователя или покупку пользователя. Какую БД выбрать? #

40. В k8s поднимаем более одного экземпляра микросервисного приложения. Возможны подводные камни, связанные с синхронизацией. Были ли такие ситуации? Какие проблемы? #

41. Есть два сервера, ты хочешь подружить их по TLS. Что для этого нужно? #

42. Банковское приложение. Пользователь хочет сделать перевод. В БД надо поменять запись и отправить сообщение в очередь. Как это сделать транзакционно? #

43. Банковское приложение. Хотим сделать вызов на перевод денег. Отваливается сеть. Как сделать запрос только один раз? Как точки зрения приложения сделать так, чтобы ничего не задублировалось из-за падения сети. т.е. запрос от пользователя ушел и сразу потерялась связь, но запрос отработал. Что делать? #

44. Есть запрос, который должен возвращать разные ответы. Например, запрос должен сохранять данные по ИП. Если данные сохранились, ответ 200. Если данные уже есть, то возвращается код 409 и полностью другой ответ. Как реализуешь такую логику? #

45. Архитектура приложения, потенциальный Highload. Пришла задача от бизнеса. Есть данные на входе, например ИНН, что-то с ними делаем. На выходе генерируем excel файлы с данными. При этом, в запросе нам могут отправлять другие файлы из внешних API. В полученном запросе может быть от 1 до массива из тысяч ИНН-ов. За сутки может быть от 100 до 10 млн запросов к сервису. Нам выделили не мощный сервис. Нужно выдерживать нагрузку. Когда происходит генерация excel, не должен блокироваться сервис с REST. Как архитектурно это реализовать? #

46. Существует горизонтально масштабируемый сервис на базе Spring. В его зоне ответственности есть реляционная БД с таблицей пользователей. Необходимо реализовать scheduler, который раз в месяц будет отправлять пользователям некоторый email. Допустимая задержка отправки - 1 час. Опциональное усложнение - инстансы приложения должны делить между собой список рассылки. Задача: гарантировать, что каждый пользователь получает ровно один email #

47. На Gateway приходит запрос /user , запрос авторизуется. У вас один сервис, у него 3 инстанса. Как Gateway поймет, куда ему закинуть запрос? Какие есть варианты? #

48. Retry. Есть сервис A и сервис B. Мы хотим из A пойти в B. Делаем запрос. ConnectionTimeout, либо сервис B лежит. И мы делаем Retry. В чем минус такого подхода? Как бы ты сам реализовал Retry, если нет Kafka, и мы идем по REST к сервису, чтобы получить данные? #

49. Микросервис активно работает с Kafka: много пишет в нее, много читает из нее. И с БД работает микросервис. Как решить проблему с Data Race без блокировок на таблицу? Есть набор данных, который передается в Kafka: объекты с каким-то содержанием. Объекты принадлежат разным родительским типам. Как использовать Kafka для оптимизации? Пример: есть датчик погоды, который очень активно шлет информацию об изменениях погоды. Мы эту инфу сохраняем в БД. Как обеспечить, чтобы эта инфа сохранялась последовательно, чтобы было консистентное состояние БД, ничего не терялось, ничего не перезаписывалось? На один объект может приходить 10 тыс изменений. Потоковая обработка, не хотим ничего ждать #

50. Проектируем банковское приложение. Есть кнопка для перевода с одного счета на другой. Хотим, чтобы во время обрыва связи, перевод выполнился только один раз. Как нам такое организовать? #

51. Массовая рассылка. Нужно разослать 200 тыс. push уведомлений. Какое простое решение без Kafka, без RabbitMQ? Как это организовать без влияния на инфраструктуру? #

52. Реальная первая задача будет на проекте. Есть Web, Android, iOS. Это нативные клиенты. Нам нужно прогрузить excel размером 2Gb. У клиента есть этот файл, а у нас есть ingress controller, который принимает эти файлы. Перед ним NGINX, после него NGINX. И Ingress-ов 20 штук. Но инфраструктуру сейчас не обсуждаем. Тебе нужно донести этот тяжелый excel документ до некоторого сервиса, которого пока не существует. Этот excel в базу мы положим уже со столбцами, с определенными типами, ячейки будем процессить. Может млрд ячеек придется процессить. Как будешь решать задачу? #

53. У вас небольшой сервис. Если завтра поток возрастет в 10 раз, какие ваши действия? Архитектурный взгляд #