『AI科技大本营』华为开发者大会HDC.Cloud技术探秘:云搜索服务技术实践( 二 )


『AI科技大本营』华为开发者大会HDC.Cloud技术探秘:云搜索服务技术实践
本文插图
生产环境下 , 事情变得复杂
在生产环境中 , 要考虑集群化以应对大量的数据与请求 , 还要考虑业务连续性所要求的可靠性以及极端情况下可恢复性 , 防止恶意操作或者误操作的安全准备 , 以及业务的扩张带来的对应资源添加等等 。 这些问题都需要大量的经验来支撑操作 , 这使得企业不得不投入额外的精力来操作这些不属于主业务的事务 。
为了帮助企业更好的完成上述任务 , 华为云推出了云搜索业务 , 能够大幅简化生产环境下Elasticsearch的维护工作量 , 并且在部分ES原本处理较薄弱的地方 , 进行了增强 。
『AI科技大本营』华为开发者大会HDC.Cloud技术探秘:云搜索服务技术实践
本文插图
华为云搜索 , 为生产环境充分考虑
华为云为了让企业在生产环境上的搜索系统更易于构筑 , 做了如下几个方面的工作:
√兼容性:100% 兼容Elasticsearch APIs , 支持5.x到7.x多个版本
√易用性:分钟级集群创建、扩容 , 一键式备份与恢复 , 7*24看护
√安全性:支持优秀的分权分域 , 底层磁盘加密
√高可用:扩容节点、磁盘业务不中断 , 更新词库业务不中断
√可靠性:支持跨AZ冗余配置 , 自动化的增量备份
√高性能:慢报表自动加速 , 费时降低百倍 , 集成向量索引 , 多媒体检索时延低至ms级
√低成本:存算分离的架构 , 长时间数据存留成本降至20%
前面的5条 , 可以笼统的归结为生产环境上的必要条件 。 这里重点聊一下最后两条中的内容:向量索引、存算分离、报表加速 。
三、向量索引
向量搜索主要是为了多媒体内容检索准备的 。 一个搜索请求假设带上一张图片 , 这个图片会被事先转换为一个特征向量(比如人脸图片典型特征就是一个256维的Float向量) , 这个向量会被送入搜索系统与其他存档的向量进行比对 , 如果两个向量的距离越近(欧式距离、余弦距离等) , 那么就意味着原始的图片约相似 , 从而有可能被搜索出来 。 由于可以对多媒体进行搜索 , 向量的搜索技术被大量用于拍照选商品、人脸匹配、高速路口车辆寻迹等场景 。
Elasticsearch也有向量搜索的能力 , 叫做DenseVector , 但是这个方式有一定的缺陷 。
『AI科技大本营』华为开发者大会HDC.Cloud技术探秘:云搜索服务技术实践
本文插图
ES的向量处理方式
如上图所示 , 进行一个联合条件检索 , 比如“梅观路口”AND 这样的条件来检索出现在梅观路口某车辆历史经过的记录时 ,开源ES的做法是先通过倒排索引快速找到符合“梅观路口”的记录 , 再一条条和查询的小汽车向量进行比较 , 找出TopN比如前20条向量距离最近的 。 这样一来 , 如果符合“梅观路口”的记录有一亿条 , 就要比较一亿次 , 效率很低 。
华为云搜索采用向量索引来解决这个问题 。
『AI科技大本营』华为开发者大会HDC.Cloud技术探秘:云搜索服务技术实践
本文插图
华为云搜索的向量处理方式
如上图所示 , 主要有两个突破点 , 第一个突破点是如何对向量采用一种合理的索引编码方式 , 能够带来远小于O(N)的时间复杂度 。 我们的方式是采用HNSW的编码方式 , 带来近似O(Log)的时间复杂度 。 第二个突破点 , 是如何与其他类型的索引协同工作 , 我们通过改写Lucene和ES的代码 , 在底层新增了一种数据结构 , 支持与其他索引进行互通 , 通过向量索引快速锁定搜索范围从而减小其他条件的索引范围 。 最后的总体效果就是 , 哪怕是上亿的数据 , 得出结果也只要数十毫秒 。
四、存算分离
如文章开头所讲 , 近十几年来 , 搜索因为优良的灵活度 , 被逐步用于企业的日志定位 , 指标运营运维任务中 , 替换了原始的Log文件Ctrl+F和Excel表格运维的操作方式 。 ES有很大一部分的实际应用都是针对这个场景 。 对于重度依赖IT系统的企业来讲 , 日志与指标的产生是源源不断的 。 但是这些数据的价值随着时间的推移 , 会逐步降低 , 但价值却不会完全消失 。 对于企业来讲 , 这很两难 , 如果长时间保留这些数据 , 使用开源ES的成本相当高昂 , 如果仅仅保留最近几天的数据 , 那么万一需要回溯一个疑难杂症或者复盘一个运营事件 , 需要用到上周甚至是上月的数据怎么办呢?