专栏首页Reinvent Data ScienceMilvus 实战 | 使用 Nginx 实现对 Milvus 的负载均衡

Milvus 实战 | 使用 Nginx 实现对 Milvus 的负载均衡

如今,互联网信息不断增加。为减小对服务器的压力,越来越多用户开始采用负载均衡机制以减小对服务器的压力。这种做法不但能够保证服务的可用性,还可以提升用户体验。本文将介绍如何通过使用 Nginx 实现对 Milvus 的负载均衡,从而提高服务器资源的使用效率和 Milvus 的可用性。

简介

1.1 Nginx

Nginx 是一款免费的开源、高性能 HTTP 服务器和反向代理服务器。Nginx 可以通过反向代理实现负载均衡的功能。该功能具备以下几个优点:

  • 转发功能:Nginx 会根据用户配置的策略将客户端请求转发到不同的服务器上, 减轻单台服务器压力,提高系统并发能力。
  • 故障转移:若配置的集群中有一台服务器出现了故障或者请求超时, Nginx 会将已经发送至该服务器的请求转发至另一台服务器。
  • 恢复添加:如检测到发生故障的服务器恢复工作,Nginx 自动将其添加到请求处 理队伍中。

1.2 Milvus

Milvus 是一款开源的分布式向量相似度搜索引擎。通过集成业界成熟的向量相似度搜索技术和大幅度优化高性能计算框架,Milvus 支持针对 TB 级向量的增删改操作和近实时查询,具有高度灵活、稳定可靠以及高速查询等特点。Milvus 集成了 Faiss、NMSLIB、Annoy 等广泛应用的向量索引库,提供了一整套简单直观的 API,用户可以针对不同场景选择不同的索引类型。

Milvus 适用于多种场景,与深度学习相融合的架构如下图所示:

采用 Milvus 的数据处理流程包括以下几个步骤:

  1. 与深度学习模型相结合,将非结构化数据转化为特征向量。
  2. 将特征向量存储到 Milvus 并建立索引。  
  3. 返回向量相似性搜索结果。  

实现方案

如下图所示,客户端将多个读请求发送给 Nginx。Nginx 根据在配置文件中设置的负载均衡策略,将请求按时间顺序逐一分配到不同的 Milvus 服务器中。Nginx 负载均衡策略还包含轮询方式、依据 ip 分配方式、权重方式等。用户可以根据实际场景选择相应的负载均衡策略。本教程采用轮询的策略。

2.1 安装 Nginx

1. Nginx 的安装包分为开发版、稳定版和过期版。本教程使用稳定版 Nginx 安装包。从 Nginx 官网(http://nginx.org/)下载安装包并解压。

2. 安装 C++ 依赖库、openssl 依赖库、pcre 依赖库和 zlib 依赖库。

3. 先配置 Nginx 的安装地址,将 Nginx 安装到指定路径下。

4. 编译 Nginx。
5. 安装 Nginx。			⚠️  如果没有权限,需要切换到 Root 权限6. 启动 Nginx。


7. 检查 Nginx 是否启动成功:如果 Nginx 进程启动则说明 Nginx 启动成功了。

2.2 配置 Milvus 本教程中使用 Milvus 的版本为 1.0,安装方式参考 Milvus 官网。安装时,将所有设备中数据存储的位置都设置为共享存储的路径,如下图所示。 Milvus 官网:https://milvus.io/cn/docs/milvus_docker-gpu.md

Milvus 默认使用 SQLite 作为元数据后台管理服务,但是在生产环境中,需要使用 MySQL 管理元数据。MySQL 安装完成后,在 Milvus 的配置文件 server_config.yaml 中修改参数 meta_uri。 MySQL 管理元数据:https://milvus.io/cn/docs/v1.0.0/data_manage.md 服务器 1 的 IP 地址为 192.168.1.85 ,服务器 2 的 IP 地址为 172.16.10.1。在服务器 1 上安装 Milvus1 和 Milvus3。Milvus1 设置为只读 IP 地址 192.168.1.85:19537,Milvus3 设置为只写 IP 地址 192.168.1.85:19539。服务器 2 安装 Milvus2,将其设置为只读 IP 地址 172.16.10.1:19538 。server_config.yaml 配置文件中修改参数 enable 和 role,如下图所示。

其中参数 enable 表示是否设置为分布式模式。参数 role 表示 Milvus 是只读还是只写。参数 meta_uri 应修改为安装 MySQL 的设备地址,其余配置参照 Milvus 单机版的配置。 2.3 配置 Nginx 完成 Milvus 配置后,根据 Nginx 的配置文件路径,修改配置文件 Nginx.conf。 在配置文件的末尾添加如下代码:对 Milvus1 和 Milvus2 两个读节点进行轮询。 stream { log_format proxy '$remote_addr [$time_local] ' '$protocol $status $bytes_sent $bytes_received ' '$session_time "$upstream_addr" ' '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"'; # 日志格式配置 access_log /var/log/Nginx/access.log proxy ; open_log_file_cache off; #日志缓存设置,此处设置为禁用 server { listen 19585; #为监听的端口号不能和Milvus的端口号冲突 proxy_pass Milvus; } upstream Milvus { server 192.168.1.85:19537;#为Milvus1的Ip地址 server 172.16.70.1:19538;#为Milvus2的Ip地址 } } 注:如果是 gRPC client 调用 Nginx 的接口需要在 Nginx.conf 配置文件的server 部分进行修改,详见 GitHub 项目修改 Nginx 配置文件后,测试是否配置正确。停止 Nginx 服务并重新启动。多次运行 GitHub 项目(https://github.com/milvus-io/bootcamp/blob/1.0/solutions/nginx/Readme.md)中提供的脚本进行测试,并查看 Nginx 的日志文件。 Ngnix 日志查询结果如下图所示。Nginx 将请求分别分发给 Milvus1 和 Milvus2 这两个读节点。 总结 本文主要介绍了如何通过使用 Nginx 实现对 Milvus 的负载均衡。负载均衡机制能够有效应对单台服务器出现故障的情况。而且负载均衡机制根据用户配置的策略将请求转发到不同的服务器上,减轻单台服务器的压力,提升用户的体验。希望本文对大家有所帮助,如果想要了解更多 Milvus 的教程和应用场景,可以关注我们的微信公众号或者加入微信群中,期待与你的进一步交流! About Zilliz Zilliz 以重新定义数据科学为愿景,致力于打造一家全球领先的开源技术创新公司,并通过开源和云原生解决方案为企业解锁非结构化数据的隐藏价值。 Zilliz 构建了 Milvus 向量相似度搜索引擎,以加快下一代数据平台的发展。Milvus 目前是 LF AI & Data 基金会的孵化阶段项目,能够管理大量非结构化数据集。我们的技术在新药发现、计算机视觉、推荐引擎、聊天机器人等方面具有广泛的应用。 欢迎加入 Milvus 社区 github.com/milvus-io/milvus | 源码milvus.io | 官网zhihu.com/org/zilliz-11| 知乎zilliz.blog.csdn.net | CSDN 博客 space.bilibili.com/478166626 | Bilibili

本文分享自微信公众号 - ZILLIZ(Zilliztech),作者:贾晶晶

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-04-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Milvus 分布式向量检索-Mishards架构介绍

    向量搜索引擎 Milvus 旨在帮助用户实现海量非结构化数据的近似检索和分析。单个 Milvus 实例可处理十亿级数据规模,而对于百亿或者千亿规模数据的需求,则...

    Zilliz RDS
  • 贝壳找房基于Milvus的向量搜索实践(二)

    互联网垂直搜索领域,特别是电商行业,对于特定业务的搜索,热数据的量级一般是可控的(百万级、千万级),一般情况下,对响应时间和整体的吞吐量(QPS)都有比较高的要...

    Zilliz RDS
  • Chat with Milvus #16-v0.10.0 & 用 ES 做图片搜索?

    Attendee A:你好顾老师, 我想了解一下 Mishards 它具体在扩容的过程怎么实现的?动态扩容那一步,就是 Milvus readonly 服务它扩...

    Zilliz RDS
  • Milvus 2.0 新版本一览:重新定义向量数据库

    2018 年 10 月,我们写下了向量数据库 Milvus 的第一行代码;在历经了 29 个月、19 个版本的迭代与全球 1000 家用户的实践验证后,终于在 ...

    Zilliz RDS
  • Milvus 在唯品会搜索推荐的实践

    随着互联网数据规模的爆炸式增长,当前主流电商平台的商品品类及数量越来越多,用户却越来越难以便捷地找到自己需要的产品。

    Zilliz RDS
  • 拒绝「扼脖子」,Zilliz 打造国产开源基础软件样板

    内容概要:2020 年中美贸易摩擦频发,美国对中国的制裁从实物蔓延到了技术领域,降低对国外基础软件的依赖、寻求科技自主的风气盛行,国产基础软件从幕后走到台前,开...

    HyperAI超神经
  • 垃圾询盘过滤,焦点科技的 Milvus 实践

    Milvus (https://milvus.io/) 向量搜索引擎开源半年以来,全球已经有数百家企业或组织用户。焦点科技是一家以 B2B 外贸交易为主营业务的...

    Zilliz RDS
  • 基于 JuiceFS 搭建 Milvus 分布式集群

    贾晶晶,Zilliz 数据工程师 & 高昌健,Juicedata 解决方案架构师,十年互联网行业从业经历,曾在知乎、即刻、小红书多个团队担任架构师职位,专注于分...

    Zilliz RDS
  • 基于 Milvus 构建的近似最近邻(ANN)搜索引擎

    根据格像科技公司的业务需求,我们需要搭建一个近似最近邻(Approximate Nearest Neighbor,即 ANN)搜索引擎,以便将在线向量相似搜索功...

    Zilliz RDS
  • 基于 Milvus 的跨模态行人检索

    近年来,由于跨模态数据的快速增长,跨模态检索备受关注。它以一种类型的数据作为查询,来检索另一种类型的相关数据。例如,用户可以用一段文字来检索相关的图片或视频。由...

    Zilliz RDS
  • Milvus开源向量搜索引擎,轻松搭建以图搜图系统

    当您听到“以图搜图”时,是否首先想到了百度、Google 等搜索引擎的以图搜图功能呢?事实上,您完全可以搭建一个属于自己的以图搜图系统:自己建立图片库;自己选择...

    Zilliz RDS
  • 拥抱云原生,Milvus v2.0 发布现场回顾 | 附Meetup讲师PPT和视频

    继今年 3 月发布 Milvus 1.0 版本,时隔 3 个月,Milvus 2.0 应云而生。

    Zilliz RDS
  • 海量数据中搜索精华价值:Milvus助力头部企业打造前沿AI搜索

    在今天这个大数据无处不在的时代,如何高效精确地对海量数据进行处理和分析,是摆在各行业头部企业与软件开发团队面前的重大挑战。传统的结构化、半结构化数据领域有着较为...

    深度学习与Python
  • 贝壳找房基于Milvus的向量搜索实践(三)

    第二篇中我们解决了部署方案的问题,接下来要考虑的是数据如果存储。在分布式部署情况下,Milvus是需要使用Mysql来存储元数据的[1]。Milvus分布式部署...

    Zilliz RDS
  • Milvus 查询任务调度原理

    本文主要阐述在单机多卡的场景下,Milvus 是如何调度查询任务的。此外,我们还将讨论在调度实现过程中遇到的问题,解决方案和未来的发展方向。

    Zilliz RDS
  • Nginx实战应用-负载均衡

      本文我们继续来介绍nginx的实际操作,本文来介绍下Nginx的负载均衡的实现。

    用户4919348
  • AI 搜房,贝壳找房的Milvus实践

    贝壳作为一家房产服务互联网平台,如何在海量房源中选出能够快速成交的房源是对平台和经纪人来说都是一件非常重要同时具有挑战的事情,但是针对房型图,户型信息等一系列非...

    Zilliz RDS
  • Milvus 在 Tokopedia 的应用 | 让语义搜索更加智能

    Tokopedia 是印度尼西亚最大的电商平台,目前拥有逾 9000 万月活跃用户和 860 万家商户,覆盖印尼 98% 的行政区。我们深知,帮助用户迅速并精准...

    Zilliz RDS
  • Milvus 在 AVX-512 与 AVX2 的性能对比

    指令是计算机程序给计算机处理器的命令。在最低级别上,每条指令是一个 0 和 1 的序列,描述了计算机要执行的物理操作。在计算机的汇编器语言中,每条语言语句一般对...

    Zilliz RDS

扫码关注云+社区

领取腾讯云代金券