2016-10-11 3 views
1

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

Для простого примера, скажем, у нас есть API с маршрутом POST/users. Он должен добавить пользователя в очередь пользователей. Затем у нас есть один рабочий, который читает из очереди и обрабатывает нового пользователя.

контракт между двумя выглядит как:

  1. обмен называется «обмен»
  2. Очередь называется «пользователей»
  3. Сообщения должны быть пользователем объектов сериализуется в JSON (или msgpack, или Protobuf)
  4. пользователей: { name : String, age : Int }

Как я могу применять это так, что я получаю ошибки построения если любой из этих служб:

  1. Подключения к неправильной очереди или обмену
  2. использует неверную схему для пользователя

Это было бы легко, если весь код был в одном хранилище, но один из главных цели микросервисов, как я их понимаю, - сделать их независимыми. Как это можно сделать с отдельными репозиториями?

У меня возникла идея создать третье репо для контракта, и от него зависят оба сервиса. Если бы он содержал некоторые типы Haskell, API и рабочий могли бы включить его и typecheck их реализации против него. Если я это сделаю, как мне обращаться с версией? Должны ли они включать его как подмодуль git или через диспетчера пакетов (что позволит в зависимости от старых версий, что может быть плохо)?

Если бы я хотел обновить схему Пользователя, как бы я архивировал вещи, чтобы затем получить ошибки в двух сервисах, пока они не будут обновлены?

Для людей, которые используют protobuf, где вы храните эти файлы по отношению к двум сервисам? Могут ли ошибки протобуфа в реализациях?

ответ

1

Я бы сказал, что для микро-сервисов не требуется компиляция или поддержка времени на граница проверка или принудительное выполнение.

Вместо этого вы бы применять эти правила в двух направлениях во время выполнения:

  1. обработка проверки и ошибок: услуги должны всегда ожидать неправильный ввод или злоупотребление и быть готовыми справиться с этим изящно, возвращая соответствующие коды ошибок и дросселирования
  2. воспользоваться цифровыми подписями для проверки подлинности запросов и применение политик
+0

Благодаря доступа, это полезно. Как вы обрабатываете недопустимый ввод в очереди? Рабочие не могут вернуть код ошибки клиенту, который включил это сообщение. –

+0

Можете ли вы выслать мне ссылку на # 2? Я не уверен, что вы имеете в виду. –

+0

@SeanClarkHess - в какой очереди вы используете?В истинном микро-сервисе я ожидаю, что вы либо используете такую ​​услугу, как AWS SES, либо Azure Queues, либо вы внедрили свою собственную услугу –

Смежные вопросы