当前位置: 首页 > 知识库问答 >
问题:

微服务体系结构中的搜索查询

司马庆
2023-03-14

假设我有一个微服务架构,其中我有一个Book微服务保存所有书籍的详细信息,一个Author微服务保存所有作者的详细信息,例如。

Book Service
GET /     get all books
GET /id   get book details, including author_ids
POST /    create new book
etc.

Author Service
GET /     get all authors
GET /id   get author details, including book_ids
POST /    create new author
etc.

假设将有数百万次对服务的调用,我必须维护系统的特定可用性和吞吐量。我怎样才能有效地搜索名字以'a'开头的作者和书名以'b'开头的作者写的所有书?

我看到以下选项,但都不完美:

>

  • 我在Author服务中创建一个搜索endpoint,获取所有符合搜索条件的作者,跟踪每个book_id并筛选图书。->这需要对图书服务进行大量调用。

  • 共有1个答案

    郭子航
    2023-03-14

    嗯,你是正确的,如果你选择使用选项1或选项2,会有很多电话。如果选择3,则可以使用ElasticSearch这样的搜索技术(既可以用作搜索技术,也可以用作文档数据存储),或者可以使用由所选数据库支持的SOLR技术。每当您向Books微服务添加一本书时,就引发一个事件,该事件携带关于书籍的数据,您的搜索服务将把这个事件数据反规范到JSON文档中,并将其存储在ElasticSearch中。类似地,监听来自Author微服务的事件,并将其反规范化到数据库中。

    为了避免大量调用,您还可以在Author微服务中维护所有关于图书的数据(以及关于作者的数据),并在Books微服务中维护所有关于作者的数据(以及关于图书的数据)。会有很多冗余(并且会有数据同步之类的问题),但至少现在您不必执行任何跨服务调用了。

     类似资料:
    • 我最近开始使用Node.js,我必须构建一个应该使用多个Express.js服务的体系结构。其中一些服务必须位于一台服务器上,另一台则位于其他服务器上。我想构建一个基础服务(像API网关),但是我不知道在这个网关和微服务之间,或者在两个微服务之间进行通信的合适方式是什么。 目前我正在研究一个基于此的解决方案:

    • 总而言之,我们有: 产品类别: 产品ID、产品名称 订单类别: 订单ID、产品ID、用户ID、订单日期 这些方法中的任何一种可以被认为是最佳实践吗?还是有不同的解决方案?

    • 我有一个微服务体系结构,它的日志必须发送到远程Kafka主题。在它旁边,本主题的使用者将把日志发送到麋鹿堆栈(另一个团队) 我想要一个专用的微服务(fwk proxy elasticsearch),其职责是收集其他人的日志,并将其发送到远程Kafka主题。 将从我的微服务聚合的所有日志分派到fwk-代理-弹性搜索微服务的最佳协议是什么? 我希望这个模式不会重复远程Kafka主题的安全配置。我想把它

    • 我经常听说,在微服务架构中,对于每一个微服务,我们都必须创建单独的数据库。 但是,如果我必须在不同的数据库中维护外键约束,这是不可能的。就像我在身份验证微服务中有一个用户表,我想在我的目录服务中使用它(用户表中的用户 ID 列) 那么如何解决呢。 感谢提前

    • null null myApp应用程序不能直接访问用户数据库,所有通信都只能通过用户认证微服务处理。 在过去的一周里,我广泛阅读了关于REST API中的授权/身份验证的内容,但仍然不知道如何为User->myApp和MyApp->User-Authentication微服务构建一个可靠的授权/身份验证系统。 这是我现在想出来的。 null Now, user signs in sending u