Обновление приложения с монолитного до микросервиса - PullRequest
0 голосов
/ 24 февраля 2019

У нас есть 13-летнее монолитное Java-приложение, использующее

  1. Struts 2 для обработки вызовов пользовательского интерфейса
  2. Шаблон JDBC / Spring JDBC для вызовов в БД
  3. Spring DI
  4. Tiles / JSP / Jquery для пользовательского интерфейса

Из этого единого исходного кода создаются две развертываемые среды.

  1. WAR для онлайн-приложения
  2. JAR для запуска внутренних заданий

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

У нас есть следующие вопросы в уме

  1. Какой интерфейс пользовательского интерфейса нам следует использовать (Angular / React или доморощенный),Angular, кажется, очень медленный, и нам нужна лучшая производительность в отношении загрузки страниц.
  2. Если пользовательский интерфейс / Javascript выполняет вызов для непосредственного взаимодействия с веб-службами или в развернутом WAR должен быть прокси-контроллер пружинного типа,перенаправляет вызовы пользовательского интерфейса в API.Это также поможет, если для одного вызова пользовательского интерфейса требуется получение / обновление данных из разных микросервисов.
  3. Как мы должны охватить аспект безопасности микросервиса
  4. Какой балансировщик нагрузки нам следует использовать, если мы хотим иметь несколько экземпляров одного и того же микросервиса.
  5. Поскольку это банковское приложение, нашорганизация не позволяет использовать Elastic Search / Lucene для поиска.Так что вам нужно предложение для отчетности с использованием только Oracle.
  6. Как нам запускать бэкэнд-задания?
  7. Также будет основной платежный микросервис, который будет создавать платежи.Поскольку объем платежей огромен, следовательно, потребуется несколько экземпляров.Как мы будем управлять сеансом входа в систему.Должны ли мы пойти в распределенное хранилище сеансов в памяти (может быть memcache)

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

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

  1. К какой среде пользовательского интерфейса следует обратиться (Angular / React или домашняя).Angular кажется очень медленным, и нам нужна лучшая производительность в отношении загрузки страниц.

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

Должен ли пользовательский интерфейс / Javascript вызывать серверные веб-службы напрямую или в развернутом WAR должен быть прокси-контроллер пружины, который направляет вызовы пользовательского интерфейса в API.Это также поможет, если для одного вызова пользовательского интерфейса требуется получение / обновление данных из разных микросервисов.

Многие крупные микросервисные архитектуры часто используют шлюз API.Опять же, это зависит от вашего варианта использования.У вас также может быть проблема с CORS, поэтому неплохо было бы централизовать вызовы через шлюз прокси / API, даже если это простой обратный прокси (вам не нужно его разрабатывать).

Как мы должны охватить аспект безопасности микросервиса.

Опять не знаю, как выглядит ваша установка.JWT - это общий подход.Я предполагаю, что сам процесс аутентификации использует какой-то централизованный LDAP / Exchange или аналогичный процесс.После аутентификации вы можете подписать токен, который вы даете клиенту, который затем передается соответствующим микро-сервисам в заголовках авторизации HTTP.

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

Зависит от того, что вы хотите.Развертываете ли вы облачное решение, такое как AWS (в этом случае балансировка нагрузки обеспечивается инфраструктурой)?Собираетесь ли вы развертывать на установке Kubernetes, где балансировка нагрузки и масштабирование обрабатываются как часть его структуры развертывания?Требуется ли балансировка нагрузки на стороне клиента (входит в Spring Cloud)?

Поскольку это банковское приложение, наша организация не позволяет использовать Elastic Search / Lucene для поиска.Так что вам нужно предложение для отчетности с использованием только Oracle.

Без знания того, как выглядят данные в Oracle и каковы требования к отчетности, возможны все решения.

Как нам запускать бэкэнд-задания?

Зависит от выбранной вами инфраструктуры.Все возможно, от простых заданий cron до служб облачного планирования или встроенных механизмов Java-планирования, таких как Quartz.

Также будет основной платежный микросервис, который будет создавать платежи.Поскольку объем платежей огромен, следовательно, потребуется несколько экземпляров.Как мы будем управлять сеансом входа в систему.Должны ли мы пойти в распределенное хранилище сеансов в памяти (может быть memcache)

Не совсем.Это победит всю цель микросервисов.Токены JWT будут управляться браузером клиента и истекают автоматически.Вам не нужно управлять сеансом входа пользователя в систему в таких архитектурах.

0 голосов
/ 24 февраля 2019

Как вы уже упоминали, это банковский сайт, поэтому безопасность будет первым приоритетом.Здесь у меня есть несколько предложений для FE и BE.

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

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

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

Балансировщик нагрузки : не очень хорошо знаком с Java, но для узла JS PM2 сделает это за васничего страшного, только одна команда, и она запустит несколько экземпляров и будет балансировать сама по себе.В случае, если у вас огромный трафик, вам лучше воспользоваться какой-нибудь службой обмена сообщениями, такой как rabbitmq, это уменьшит стоимость серверов, не позволяя вам масштабировать ваши серверы.

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

Для уточнения я здесь:)

...