Filter 使用microservices体系结构进行分页或过滤数据的策略有哪些?

Filter 使用microservices体系结构进行分页或过滤数据的策略有哪些?,filter,pagination,filtering,paging,microservices,Filter,Pagination,Filtering,Paging,Microservices,通常,当您有一个单一的应用程序或数据模型时,您可以创建一个连接不同表的SQL,并对它们应用过滤器。一旦你得到了结果集,你也可以翻页这些数据。但是,如果您使用的是微服务体系结构,那么数据模型可能是完全不同的。我听说netflix实际上把它推向了一个极端,他们把每一张表都作为一个微服务公开。在这种情况下,如何处理分页和筛选 我知道他们使用的API网关模式可以充当聚合层(可能这就是RxJava类项目的用武之地)。如果能从使用微服务的人那里得到一些想法或解决这个问题,那就太好了。即使只有一个表,分页和过

通常,当您有一个单一的应用程序或数据模型时,您可以创建一个连接不同表的SQL,并对它们应用过滤器。一旦你得到了结果集,你也可以翻页这些数据。但是,如果您使用的是微服务体系结构,那么数据模型可能是完全不同的。我听说netflix实际上把它推向了一个极端,他们把每一张表都作为一个微服务公开。在这种情况下,如何处理分页和筛选


我知道他们使用的API网关模式可以充当聚合层(可能这就是RxJava类项目的用武之地)。如果能从使用微服务的人那里得到一些想法或解决这个问题,那就太好了。

即使只有一个表,分页和过滤也是可行的,对吗

所以我认为问题在于如何在微服务之间连接表

我认为使用微服务的人将尽可能避免在微服务之间连接表。如果他们做不到,也许这些表根本不应该在不同的微服务中分开

另一方面,有时,你不需要加入表格来实现你的目标。例如,假设您有两个表:

-- 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调用来实现:

  • 致电酒店信息服务,列出酒店名单
  • 对于每家酒店,请致电酒店评论服务汇总评论
  • 也许您担心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 {
        "comment_id": "id",
        "hotel_id": "foo",
        "content": "bar"
    }
    
    酒店信息服务将使用此事件更新其缓存。因此,您可以通过单个表查询来实现此功能