2014-10-23 2 views
4

Обычно, когда у вас есть монолитное приложение или модель данных, вы можете создать SQL-соединение между различными таблицами и применить к ним фильтры. Затем, как только вы получите результаты, вы также можете отправить эти данные. Но если вы используете архитектуру микросервиса, модель данных может быть разрозненной. Я слышал, что netflix на самом деле доводит это до крайности, где у каждого стола есть микросервис. Как вы можете обрабатывать пейджинг и фильтрацию в этом случае?Какие существуют стратегии для разбивки на страницы или фильтрации данных с использованием архитектуры микросервисов?

Я знаю, что они используют шаблон API Gateway, который может выступать в качестве уровня агрегирования (возможно, именно здесь появляются проекты RxJava). Было бы здорово иметь идеи от людей, использующих микросервисы, или решать эту проблему.

ответ

0

Пагинация и фильтрация выполняются, даже если есть только одна таблица, верно?

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

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

С другой стороны, иногда вам не нужны стыковые столы для достижения ваших целей. Например, предположим, что у вас есть две таблицы:

-- from hotel information service 
create table t_hotel (
    id VARCHAR(40) not null, 
    name varchar(50) not null, 
    location varchar(50) not null, 
    CONSTRAINT pk_hotel PRIMARY KEY (id) 
); 

-- from hotel comment service 
create table t_hotel_comment (
    id VARCHAR(40) not null, 
    hotel_id varchar(40) not null, 
    content varchar(50) not null, 
    CONSTRAINT pk_hotel_comment PRIMARY KEY (id) 
); 

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

____________________________ 
| name | location | comments | 
| foo | foooooo |  2 | 
| bar | barrrrr |  3 | 
---------------------------- 

Вы можете осуществить с запросом присоединиться или с двумя API вызовов:

  1. Вызов информации гостиничных услуг в список отелей.
  2. Для каждого отеля позвоните в службу комментариев к отелю, чтобы суммировать комментарии.

Может быть, у вас есть озабоченность по поводу проблемы с производительностью N + 1, то вы можете кэшировать отсчитывать комментарии в t_hotel:

-- from hotel information service 
create table t_hotel (
    id VARCHAR(40) not null, 
    name varchar(50) not null, 
    location varchar(50) not null, 
    comments numeric not null, 
    CONSTRAINT pk_hotel PRIMARY KEY (id) 
); 

Каждый раз, гостиница комментарий сервис получить комментарий, он опубликовать HotelCommentedEvent

HotelCommentedEvent { 
    "comment_id": "id", 
    "hotel_id": "foo", 
    "content": "bar" 
} 

И информационная служба отеля обновляет кэш этого события. Поэтому вы можете реализовать эту функцию с помощью одного запроса таблицы.

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

  • Нет связанных вопросов^_^