elasticsearch 微服务体系结构的文本搜索
我正在研究在基于微服务的系统上实现文本搜索。我们必须搜索跨越多个微服务的数据 例如,假设我们有两项服务用于管理组织和管理联系人。我们应该能够在一次搜索操作中通过联系方式搜索组织 我们首选的搜索解决方案是Elasticsearch。我们已经有了一个基于嵌入式对象(和/或父子对象)的工作解决方案,其中当更新父域时,索引有效负载将被包含在缓存中的依赖对象数据丰富(我们避免为此直接调用管理子对象的服务)
elasticsearch 微服务体系结构的文本搜索,
elasticsearch,architecture,microservices,
elasticsearch,Architecture,Microservices,我正在研究在基于微服务的系统上实现文本搜索。我们必须搜索跨越多个微服务的数据 例如,假设我们有两项服务用于管理组织和管理联系人。我们应该能够在一次搜索操作中通过联系方式搜索组织 我们首选的搜索解决方案是Elasticsearch。我们已经有了一个基于嵌入式对象(和/或父子对象)的工作解决方案,其中当更新父域时,索引有效负载将被包含在缓存中的依赖对象数据丰富(我们避免为此直接调用管理子对象的服务) 我想知道是否有更好的解决办法。是否有适用于此类场景的微服务模式?我建议您,这不是一种特别的微服务模式
我想知道是否有更好的解决办法。是否有适用于此类场景的微服务模式?我建议您,这不是一种特别的微服务模式,但它非常适合微服务,它被称为事件来源 事件源描述了一种体系结构模式,其中事件由不同的源生成。事件现在将触发0个或多个所谓的投影,然后使用事件中包含的数据以所需的形式聚合信息 这直接适用于您的问题:只要组织服务更改其内部状态(添加/删除/更新组织),它就可以触发事件。如果添加了一个组织,它将例如将联系人聚合到此组织并存储此聚合。现在对它的搜索很简单:在聚合信息中查找组织id(可以编制索引),然后返回与此组织关联的联系人。当然,如果合同被添加到合同服务中,同样的方法也会起作用:它只是触发一条包含合同创建信息的消息,而相应的投影现在改变了不同的聚合,这些聚合可以再次被索引和快速搜索 您可以让多个投影对单个事件做出响应—这使您能够以多种不同的形式聚合信息—这正是您稍后查询信息的方式。不要害怕重复的数据:事件源有意地进行这种权衡,因为这不是您的业务服务所依赖的数据,您不需要手动更改它—这种重复不会伤害您 如果你按照事件发生的时间顺序存储事件(我郑重建议你这么做!),你可以一遍又一遍地“重播”这些事件。这有助于例如,如果投影有问题,必须进行修复 如果您感兴趣,我建议您阅读活动采购,并寻找某种类型的活动商店:
我们目前也在考虑编写一个通用服务来聚合事件中的信息,比如搜索,在搜索中可以编写预测脚本。这只会使不可见依赖项问题变得不那么突出,但并不能解决它。谢谢您的回复。请您详细说明“使用事件中包含的数据以所需的形式汇总信息”部分。您是否使用与此聚合的客户端请求服务相同的服务?