Answers:
可以将搜索功能建模为单独的服务,并与您提到的两个服务负有单独的责任。因此,这里的方法可能是创建一个新服务(“搜索”),并以易于索引和搜索的形式存储来自两个服务的数据副本,还可能进行非规范化以便快速给出结果。所需的格式。
因此,例如,您可以使用例如mySql的遗留SQL数据库,使用例如MongoDB的另一个微服务,以及使用elasticsearch的新搜索服务,并将两者中的数据粘贴在一起(去规范化),以实现更方便的访问。当然,详细信息将取决于您需要执行的搜索类型。
最好通过事件总线(例如Kafka或Hermes)将来自这两个服务的数据异步传输到搜索索引,以提高吞吐量并减少服务之间的耦合。两项服务中的任何一项更改都会发送一个事件,通知搜索服务也要更新其数据。
当然,在服务和搜索服务的更改之间会存在额外的延迟,但是由于微服务通常用于分布式系统中,因此无论如何都不可避免地会出现一些延迟和暂时的不一致。拥有额外的服务并使用额外的存储空间来存储其他两个服务中已经存在的数据副本,这也是使用微服务构建高度分布式且可伸缩的系统的典型成本。