2017-02-08 19 views
0

Есть три microservices на месте:Если один microservice быть как государственным, так и внутренним одновременно

Авторы
, который имеет возможность выбрать и CRUD объект «автор»

Книга
который имеет возможность SELECT и CRUD «книга»

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

Пример: API «MobileHost.getAllBooksOfGivenAuthor» будет реагировать как с именем автора и книги имен, называя «Authors.getAuthorData (AuthorID)» и слияние его данные с «Books.getBooksByAuthorIds (AuthorID)», в результате структуры как это:

{ 
    "author" : { 
    "name" : "Winner", 
    "id" : 1 
    }, 
    "books" : [ 
    { 
     "name" : "Book A", 
     "id" : "13231231" 
    } 
    ] 
} 

Мой вопрос является:
Если мобильный клиент считывает данные через «мобильное приложение хоста» должен это сделать «добавить автора» через «мобильное приложение хоста» также, или это нормально обратитесь непосредственно к службе «Авторы»? Должен ли CRUD быть проксированным в таком случае или нет?

ответ

0

Это зависит от ваших целей.

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

Кроме того, это может быть очень сложно, а ресурсы неэффективны, чтобы уменьшить масштабы таких услуг, если, например, потребуется только сократить использование службы авторов. Итак, если вы собираетесь разделить разные службы и действия отдельно, то, конечно, вам не нужно прокси-запросы только с одной службой. Например, у вас может быть несколько прокси-сервисов, чтобы разбросать их по отдельности или напрямую вызвать службу «Авторы» и развернуть их вместо прокси.

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

+0

Спасибо за подробный ответ. Еще один вопрос для вас: Помимо услуг «хоста», вы создаете API, которые являются внутренними и внешними? Если да, можете ли вы назвать причину того, почему вы сделали это таким образом? Спасибо. – user3765648

+0

У нас смешанная политика в отношении сервисов API из-за кэширования. API кэширует некоторые очень частые данные и возвращает данные из кешей по запросу. Также он обрабатывает разбиение на страницы и выбор из сервисов только определенных «страниц» данных. Если есть служба, которая не требует какой-либо системы кеша, мы вызываем ее напрямую, потому что она уменьшает количество межсервисных сообщений, которые могут быть довольно дорогими при высоких нагрузках. Но наши сервисы API предназначены для разделения в любой момент, они следуют шаблону проектирования фасадов. Если мы заметим, что на небольшой части сервиса API будет огромная нагрузка, мы его вытащим. – cassandrad

+0

Спасибо, теперь у меня четкое видение. – user3765648