如何向外扩展Milvus —矢量图片相似度搜索引擎

作者 : IT 大叔 本文共3580个字,预计阅读时间需要9分钟 发布时间: 2020-08-16

本文将简要介绍Mishards体系结构的组件。

Milvus旨在为大规模矢量实现高效的相似性搜索和分析。一个独立的Milvus实例可以轻松地处理数十亿级向量的向量搜索。但是,对于100亿,1000亿甚至更大的数据集,需要Milvus集群。该群集可用作上层应用程序的独立实例,并且可以满足低延迟,高并发性的大规模数据业务需求。Milvus集群可以重新发送请求,将读写与读写分开,可水平缩放以及动态扩展,从而提供了可以无限扩展的Milvus实例。Mishards是Milvus的分布式解决方案。

本文将简要介绍Mishards体系结构的组件。更详细的信息将在以后的文章中介绍。

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::0

分布式架构概述

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::1

服务追踪

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::2

主要服务组件

  • 服务发现框架,例如ZooKeeper,etcd和Consul
  • 负载均衡器,例如Nginx,HAProxy,Ingress Controller
  • Mishards节点:无状态,可扩展
  • 只写Milvus节点:单节点且不可扩展。您需要为此节点使用高可用性解决方案,以避免单点故障
  • 只读Milvus节点:状态节点且可扩展
  • 共享存储服务:所有Milvus节点都使用共享存储服务来共享数据,例如NAS或NFS
  • 元数据服务:所有Milvus节点都使用此服务共享元数据。目前,仅支持MySQL。此服务需要MySQL高可用性解决方案

可扩展组件

  • 杂碎
  • 只读Milvus节点

组件介绍

错误碎片节点

Mishards负责分解上游请求并将子请求路由到子服务。将结果汇总以返回上游。

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::3

如上图所示,Mishards在接受TopK搜索请求后,首先将请求分解为子请求,然后将子请求发送到下游服务。收集所有子响应后,这些子响应将合并并返回上游。

由于Mishards是无状态服务,因此它不会保存数据或参与复杂的计算。因此,节点对配置的要求不高,计算能力主要用于合并子结果。因此,可以增加Mishards节点的数量以实现高并发性。

Milvus节点

Milvus节点负责与CRUD相关的核心操作,因此它们具有相对较高的配置要求。首先,内存大小应足够大,以避免过多的磁盘IO操作。其次,CPU配置也会影响性能。随着群集大小的增加,需要更多的Milvus节点来增加系统吞吐量。

只读节点和可写节点

  • Milvus的核心操作是向量插入和搜索。搜索对CPU和GPU配置的要求非常高,而插入或其他操作的要求则相对较低。将运行搜索的节点与运行其他操作的节点分开可以更经济地进行部署。
  • 在服务质量方面,当节点执行搜索操作时,相关硬件正在满负荷运行,不能保证其他操作的服务质量。因此,使用两种节点类型。搜索请求由只读节点处理,其他请求由可写节点处理。

只允许一个可写节点

  • 当前,Milvus不支持共享多个可写实例的数据。
  • 在部署期间,需要考虑可写节点的单点故障。需要为可写节点准备高可用性解决方案。

只读节点可伸缩性

  • 当数据量很大或延迟要求非常高时,可以将只读节点水平扩展为有状态节点。假设有4台主机,每台主机都具有以下配置:CPU核心:16,GPU:1,内存:64 GB。下表显示了水平扩展有状态节点时的集群。计算能力和内存都呈线性增长。数据被分成8个分片,每个节点处理来自2个分片的请求。

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::4

  • 当某些分片的请求数量很大时,可以为这些分片部署无状态只读节点以提高吞吐量。以上面的主机为例。当主机合并为无服务器群集时,计算能力会线性增加。因为要处理的数据没有增加,所以相同数据分片的处理能力也会线性增加。

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::5

元数据服务

关键字:MySQL

在分布式系统中,Milvus可写节点是元数据的唯一生成者。Mishards节点,Milvus可写节点和Milvus只读节点都是元数据的使用者。目前,Milvus仅支持MySQL和SQLite作为元数据的存储后端。在分布式系统中,该服务只能部署为高可用性MySQL。

服务发现

关键字:Apache Zookeeper,etcd,领事,Kubernetes

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::6

服务发现提供有关所有Milvus节点的信息。Milvus节点在联机时注册其信息,而在脱机时注销。Milvus节点还可以通过定期检查服务的运行状况来检测异常节点。

服务发现包含许多框架,包括etcd,Consul,ZooKeeper等。Mishards定义了服务发现接口,并提供了按插件扩展的可能性。当前,Mishards提供了两种插件,分别对应于Kubernetes集群和静态配置。您可以通过遵循这些插件的实现来自定义您自己的服务发现。接口是临时的,需要重新设计。在接下来的文章中将详细介绍有关编写自己的插件的信息。

负载平衡和服务分片

关键字:Nginx,HAProxy,Kubernetes

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::7

服务发现和负载平衡一起使用。负载平衡可以配置为轮询,哈希或一致哈希。

负载平衡器负责将用户请求重新发送到Mishards节点。

每个Mishards节点都通过服务发现中心获取所有下游Milvus节点的信息。所有相关的元数据都可以通过元数据服务获取。Mishards通过消耗这些资源来实现分片。Mishards定义了与路由策略相关的接口,并通过插件提供了扩展。当前,Mishards基于最低的细分级别提供一致的哈希策略。如图所示,从s1到s10有10个细分。根据基于分段的一致哈希算法,Mishards将与s1、24,s6和s9有关的请求路由到Milvus 1节点,将s2,s3,s5路由到Milvus 2节点,并且将s7,s8,s10路由到Milvus 3节点。

根据您的业务需求,您可以通过遵循默认的一致哈希路由插件自定义路由。

追踪

关键字:OpenTracing,Jaeger,Zipkin

考虑到分布式系统的复杂性,请求将发送到多个内部服务调用。为了帮助查明问题,我们需要跟踪内部服务调用链。随着复杂性的增加,可用的跟踪系统的好处是不言而喻的。我们选择CNCF OpenTracing标准。OpenTracing为开发人员提供了平台无关,供应商无关的API,以方便地实现跟踪系统。

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::8

上一个图表是搜索调用期间进行跟踪的示例。搜索所调用get_routingdo_searchdo_merge连续。do_search也调用search_127.0.0.1

整个跟踪记录形成以下树:

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::9

下图显示了每个节点的请求/响应信息和标签的示例:

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::10

OpenTracing已集成到Milvus。更多信息将在以后的文章中介绍。

监控和警报

关键字:普罗米修斯,格拉法纳

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::11

Milvus已集成Prometheus来收集度量标准数据。Grafana实现基于指标的监视,并且Alertmanager用于警报。Mishards也将整合Prometheus。

日志分析

关键字:弹性,Logstash,Kibana

对于群集服务,日志文件分布在不同的节点中。为了查明问题,您需要登录到相应的服务器以获取日志。由于需要一起分析多个日志文件,因此使用ELK堆栈进行服务器日志分析是一个不错的选择。

摘要

作为服务中间件,Mishards集成了服务发现,路由请求,结果合并和跟踪。还提供了基于插件的扩展。当前,基于Mishards的分布式解决方案仍然存在以下挫折:

  • Mishards使用代理作为中间层,并具有延迟成本
  • Milvus可写节点是单点服务
  • 取决于高度可用的MySQL服务
  • 当有多个分片并且单个分片具有多个副本时,部署会很复杂
  • 缺乏缓存层,例如对元数据的访问

将来,我们将继续改进Mishards,以便将其更方便地应用于生产环境。我们欢迎任何反馈和建议,并希望我们可以一起构建更好的开源工具!

免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » 如何向外扩展Milvus —矢量图片相似度搜索引擎

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论