2017-01-22 30 views
7

Я много читал о микросервисах и хотел бы создать приложение с таким подходом. То, что я знаю, до сих пор является то, что я СВАО некоторые услуги, такие как:Как развернуть микросервисы на Heroku

  • балансировки нагрузки - иметь дело с каждым запросом, и толкать ее вперед на другие услуги
  • служба авторизации - разрешить своим пользователям
  • база данных - для моих микросервисов. Я хотел бы использовать один экземпляр БД с разными схемами для каждой службы.
  • Сервис А - для Функциональность
  • сервис B - для функциональности B

  • и т.д. и т.д. и т.п.

я узнал, что Heroku является интересным местом для развертывания приложений. Моя проблема в том, что я полностью не понимаю их идеологии. То, что я сделал до сих пор, является создание/регистрацией несколько "приложений":

  • моей-приложение-аутентификация
  • моего-приложения-балансировка нагрузки
  • и т.д. и т.п.

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

Может ли кто-нибудь предоставить мне некоторые рекомендации, как бороться с микросервисами на Heroku? Как мне их развернуть? Как я должен определить свой балансировщик нагрузки и подключить к нему внутренние службы? Что такое JHipster? Нужно ли мне это? Как я могу использовать его? Должен ли я использовать инструменты Heroku (например, CLI), или я могу остаться с репозиторией gitlab? Об этом я не могу найти никакого смысла в Интернете.

+0

Кажется, что у вас есть несколько вещей, смешанных (Heroku и Gitlab - это разные типы компаний, один из которых размещает ваш webapp, а другие - ваш код/​​CI). Кроме того, если вы не уверены в том, что такое JHipster, я бы рекомендовал читать документы, прежде чем погружаться в создание микросервисов с ним. Вот статья, посвященная развертыванию микросервисов JHipster на Heroku: https://blog.heroku.com/bootstrapping_your_microservices_architecture_with_jhipster_and_spring –

ответ

13

Heroku - очень простая компания «Плат-а-Сервис». Способ работы Heroku очень прост:

  • У вас есть несколько проектов (услуг) в Git repos.
  • Вы создаете приложение Heroku для каждого проекта (каждый Git repo).
  • Затем вы отправляете свой код из каждого репозитория Git в соответствующее приложение Heroku.
  • Heroku назначает вам общедоступный URL-адрес для каждого вашего приложения.
  • Если каждый из ваших сервисов теперь запущен на Heroku, они могут отправлять запросы API друг другу по публичным HTTP-адресам.

Теперь - относительно вашего вопроса об обслуживании ориентированная архитектура на Heroku.

Если вы делаете SOA на Heroku, вам нужно, чтобы каждая служба публично говорила друг с другом через HTTPS. Это типичный «шаблон».

Потому что Heroku предоставляет бесплатный SSL для каждого приложения, и каждое приложение находится в том же регионе Амазонки - разговор назад и четвертый между вашими службами по HTTP очень быстрый и безопасный.

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

Следующая опция здесь (если вы не хотите следовать типичным шаблонам) - использовать что-то вроде RabbitMQ или Amazon SQS (услуга очередей) и делиться «сообщениями» между вашими различными службами.

В этом шаблоне у вас все равно будет одно приложение Heroku для каждой службы, но вместо того, чтобы обмениваться данными друг с другом через HTTP, вы должны общаться с другими службами через протокол очередей, такой как Rabbit или SQS. Это имеет некоторые преимущества в скорости.

Что касается служб аутентификации, для предоставления этой функции можно использовать несколько провайдеров. Самый популярный, который я знаю, это Stormpath. Если вы просмотрите Heroku addon marketplace, вы также можете найти другие.

И, наконец, для базы данных: вы можете использовать любой поставщик баз данных, который вы хотите. Наиболее популярным, вероятно, является Heroku Postgres. Это размещенная версия PostgreSQL, которая очень надежна/проста в использовании.

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

+0

Большое спасибо за ваш ответ. Не могли бы вы расширить его и рассказать мне, что вы думаете об использовании изображений docker данных на heroku? Если это не распространено (потому что Heroku предоставляет хорошие механизмы масштабирования), почему в Интернете так много информации и статей об этом? Также я был бы очень рад, если бы мог узнать ваш разум о решениях Netflix, таких как Eureka или Zuul. Я думаю, что Eureka распространена как точка входа для моих услуг, но насколько я понимаю, балансировка нагрузки накладная, я прав? –

+1

Эй, я думаю, что они лучше всего подходят для других вопросов StackOverflow. Это смущает читателей, если я положу все это в эту тему. – rdegges

+0

Вы правы. Я добавил новый вопрос http://stackoverflow.com/q/41814001/2849613. Взгляните, если вы хотите;) –