1

目前我有一个 spring boot 微服务,它在 MongoDB 中存储项目列表。

现在我想在按项目名称搜索时添加自动建议功能(部分/模糊搜索)。

我正在考虑为此使用 ElasticSearch 的内置 REST API。

我的计划是每次我在 MongoDB 中插入/更新数据时都将 POST 和 PUT 发送到 ElasticSearch 的 REST 端点。

现在,webclient 可以使用 ElasticSearch 的 REST API 来获取给定用户在搜索栏上键入的关键字的自动建议数据。

这是使用 ElasticSearch 的预期方式吗?我们如何扩展它?或者使用spring java和elasticsearch客户端创建一个单独的微服务来实现同样的事情会更好吗?

4

1 回答 1

1

您可以使用这两种方式实现该功能,它实际上是一个基于意见的问题,但我仍然会尝试根据我的经验列出优缺点。

我在这里假设 mongoDB 是您数据的真实来源,而 ES 仅用于搜索。

更新 mongo 后,在同一应用程序中更新 ES(Elasticsearch)。

这将为您节省微服务带来的额外开销:例如部署另一个应用程序,infra,释放包含相同 POJO 或实体的 jar,供您的 mongo 和 ES 应用程序使用。主要开销是额外的网络跃点,就好像在这种情况下,一旦在您的 mongo 应用程序中更新成功,那么您会将请求发送到 ES 应用程序,这反过来会更新 elasticsearch 应用程序,您可以将请求并行发送到 Elasticsearch 应用程序但是这会导致不一致,因为 MongoDB 中的更新可能会失败,因此 ES 和 MongoDB 都不会同步。

为 Elasticsearch 创建单独的微服务

只要您管理好数据源和 elasticsearch 之间的一致性,就会为您带来微服务的典型好处,例如关注点分离、更快的发布周期、更简单的代码、语言和框架的选择等,提高开发人员的生产力等。

同样,您的问题并非特定于弹性搜索,它更多的是微服务与单体应用,这完全取决于您的用例,您可以在网上找到很多关于这些的争论,但您绝对应该观看并且我最喜欢的一个是uber架构师对将其扩展到 1000 个微服务感到遗憾。

于 2019-08-23T07:33:04.753 回答