目前,我有一个spring引导微服务,用于在MongoDB中存储项目列表。
现在,我想添加自动建议功能时,搜索项目的名称(部分/模糊搜索)。
为此,我正在考虑使用ElasticSearch内置的REST。
我的计划是每次在MongoDB中插入/更新数据时,发送POST并将其放到ElasticSearch的REST端点。
现在,webclient只需使用ElasticSearch的REST获得自动提示数据,就可以在搜索栏上输入用户类型的关键字。
这是打算使用ElasticSearch的方式吗?我们怎样才能扩大这个规模?还是使用spring和elasticsearch客户端创建一个单独的微服务来实现同样的目标呢?
发布于 2019-08-23 07:33:04
您可以使用这两种方法来实现这个功能,而且它实际上是一个基于意见的问题,但是我仍然会根据我的经验尝试列出利弊。
--我在这里假设,mongoDB是数据的真实来源,ES仅用于搜索。
在更新mongo之后,在同一个应用程序中更新ES(Elasticsearch)。
这将节省微服务带来的额外开销:像部署另一个应用程序,下面,释放包含mongo和ES应用程序使用的相同POJO或实体的jar。的主要开销是额外的网络跃点,就像,如果在本例中的中,一旦更新在mongo应用程序中成功,那么您将把请求发送给ES应用程序,该应用程序依次更新elasticsearch应用程序,您可以将请求并行发送到Elasticsearch应用程序,但这将导致不一致性,因为在MongoDB中更新可能失败,因此ES和MongoDB将不同步。
为弹性搜索创建单独的微服务
只要您管理好您的真理源和elasticsearch之间的一致性,就会给您带来微服务的典型好处,例如分离关注点、更快的发布周期、不太复杂的代码、语言和框架的选择等,以及提高开发人员的生产力等等。
再说一遍,你的问题并不是专门针对elasticsearch的,它更像是一个微服务和monolith,它完全取决于您的用例,您可以在网上找到很多争论,但是一个您肯定应该关注的问题,也是我最喜欢的一个是优步架构师对将其扩展到1000家微服务感到遗憾。
https://stackoverflow.com/questions/57620404
复制相似问题