贝壳找房基于的向量搜索实践一
摘要: 本系列文章分为三部分,第一部分主要讲基本概念、背景、选型及服务的整体架构;第二部分主要讲针对低延时、高吞吐需求,我们对Milvus部署方式的一种定制;第三部分主要讲实现数据更新、保证数据一致性,以及保证服务稳定及提高资源利用率做的一些事情。
1.名词解释
Milvus[1]:一种基于Faiss[5],NMSLIB[6] 和 Annoy[7]的相似特征向量搜索引擎。
向量:即特征向量,是对客观世界物体特征的数值表示;比如我们用RGB(红绿蓝)三元色来表示物体的颜色,那么对于一个像素点,我们可以用数组[255,255,255]表示白色,用数组[0,0,0]表示黑色,这里[255,255,255]、[0,0,0]可以认为是物体该像素点的特征向量。
向量搜索:也叫最邻近搜索,是指按照一定的相似/距离算法[9-12],从指定集合中搜索(计算)出与输入的某个向量最相似的N个向量(即topN)。
2.背景
随着计算机技术及机器学习技术的发展,特征向量作为一种对多媒体数据(复杂文本、语音、图片)的描述方式,逐渐成熟起来,而向量搜索(向量相似计算)也逐渐成为一种通用的需求。
近些年,贝壳找房业务迅猛发展,在搜索、推荐、图谱、智能客服等业务场景下,对向量搜索提出了比较强的需求。
面对多业务的需求,结合对业界已有工具的调研,最终选择了milvus做为底层引擎,建设了一个通用的向量搜索平台,以解决 向量相似计算
这个共性的问题。
3. 技术选型
在技术选型阶段,我们调研了业界已经比较成熟的工具,如facebook的faiss[5]、微软的SPTAG[8],以及国内发起的开源项目Vearch[13],Milvus[1]。具体对比见表1,2。
Vearch和Milvus属于同类型产品,对比faiss和SPTAG的优势在于,后两者为开发库,不能开箱即用,在生产环境中使用涉及更多的开发、维护成本。Milvus和Vearch是两款基于现有的开发库,开箱即用的应用,在实现基本的相似计算功能的基础上,围绕服务整体易用性、部署、稳定性等方面做了更多工作。另外,Milvus对比Vearch,在社区活跃度、支持度上具有更明显的优势。基于以上的调研,综合考虑各方面的成本,我们选择Milvus作为底层引擎。
表1:Milvus对比FAISS、SPTAG[3]
表2:Milvus对比Vearch(2019.11数据)
4. Milvus引擎简介
如图1所示,Milvus基于Faiss、Annoy等比较成熟的开源库,并针对性做了定制,支持结构化查询、多模查询等业界比较急需的功能;Milvus支持cpu、gpu、arm等多种类型的处理器;同时使用mysql存储元数据,并且在共享存储的支持下,Milvus可以支持分布式部署。
图1 Milvus架构[1]
5.服务整体架构
图2 服务整体架构如图2所示,整体架构分三层,网关层、应用层和引擎层。
网关层:主要负责服务整体的访问控制和监控报警,并对外暴露api,属于应用的通用能力,这里不详细讲。
应用层:应用层的定位是面向使用方,提供通用的向量搜索能力,同时屏蔽掉底层引擎的细节;应用层主要分为读模块、写模块以及管理模块。写模块定位是数据更新,抽象出了一组通用的写入api,以实现对数据的更新,并保证数据更新的一致性。读模块定位是支撑向量搜索,适配用户的查询请求,转换成具体引擎的查询,最后把结果转换成通用格式;读模块借助读缓存,来提高有重复查询�
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/geek/post/%E4%BA%92%E8%81%94%E7%BD%91/%E8%B4%9D%E5%A3%B3%E6%89%BE%E6%88%BF%E5%9F%BA%E4%BA%8E%E7%9A%84%E5%90%91%E9%87%8F%E6%90%9C%E7%B4%A2%E5%AE%9E%E8%B7%B5%E4%B8%80/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com