Milvus核心组件(1)- Architecture

news/2024/9/13 23:47:02/ 标签: 数据库, milvus, python, 人工智能, 机器学习

目录

 cluster 模式

数据请求处理流程

总流程

逻辑channel 到物理channel

数据维护流程


 cluster 模式

上一篇其实已经说过  standalone 模式,其实集群模式大同小异,只是在不同机子间使用Kafka或者其他消息中间件保证数据及逻辑的一致性。

c37e0ea04b7f4afea9703926182e3a8c.png

Log Broker,如Pulsar这样的系统,是专门设计来处理和管理日志数据的中间件。它主要关注于最近发生的变更操作的日志记录,提供日志的流式处理、发布(publish)和订阅(subscribe)服务。有几个关键特性:

  1. 日志管理
    • Log Broker负责收集、存储和管理来自不同数据源(如数据库、消息队列、应用程序等)的日志数据。这些数据通常是关于系统状态变更的记录,比如用户注册、订单创建、数据更新等。
    • 它能够处理大量的日志数据,支持高并发写入,确保数据的一致性和完整性。
  2. 流式输出
    • Log Broker提供流式处理的能力,允许数据以近乎实时的方式被处理和分析。这意味着数据一旦被写入,就可以立即被消费或进一步处理,无需等待全部数据收集完成。
    • 流式处理使得Log Broker非常适合用于实时数据分析、监控和告警等场景。
  3. 发布-订阅服务
    • Log Broker支持发布-订阅模型,允许生产者(producers)发布消息到指定的主题(topics),而消费者(consumers)可以订阅这些主题以接收消息。
    • 这种模型提供了高度的灵活性和可扩展性,因为生产者和消费者可以独立地扩展,而不会影响彼此。
    • 订阅者可以根据需要选择不同的订阅模式,如独占订阅(exclusive subscription)、共享订阅(shared subscription)或故障转移订阅(failover subscription),以满足不同的业务需求。

数据请求处理流程

总流程

9598e61c8e0544f58d27dd3b2f94d7d7.png

在Milvus中,每个Collection可以指定多个分片Shards,每个分片对应一个虚拟通道(vchannel)。这种设计允许系统高效地处理数据,并通过分片来提高并发性和可扩展性。嗯句前面讲的,Milvus在日志代理(Log Broker)中将每个vchannel映射到一个物理通道(pchannel),这样做是为了在底层实现数据的物理存储和管理。

对于插入(Insert)和删除(Delete)等数据修改语言(DML)请求,Milvus采用了基于主键哈希值的分片路由策略。这意味着当一个新的DML请求到达时,系统会计算该请求主键的哈希值,并根据这个哈希值将其路由到相应的分片上。

由于Milvus不支持复杂的事务(Transactions),DML请求的验证被提前到了代理层(Proxy)。代理层会从时间戳服务(TSO,Timestamp Oracle)请求每个DML操作的时间戳。TSO是与根协调器(Root Coordinator)共置的定时模块,负责生成全局一致的时间戳。通过为每个DML请求分配一个时间戳,Milvus能够确定数据处理请求的顺序,即使在高并发场景下也能保证数据的一致性。

此外,为了提高整体吞吐量和避免中央节点过载,代理层会批量地从数据协调器(Data Coordinator)检索信息,包括实体的段(Segments)和主键。这种批量处理的方式减少了与数据协调器的交互次数,从而提高了系统的效率。

总的来说,Milvus通过分片、虚拟通道与物理通道的映射、基于主键哈希的路由策略、时间戳服务以及批量处理等技术手段,实现了高效、可扩展且一致的数据处理能力

逻辑channel 到物理channel

683d35cc6c3e49d1a6b8102de5519816.png

vchannels(虚拟通道)在Milvus的底层日志代理(Log Broker)节点中被维护。每个vchannel在物理上是不可分割的,并且可以被任何节点使用,但同一时间内只能被一个节点使用。这样的设计有助于管理数据流的分配,并确保数据的完整性和一致性。

当数据摄入率(ingestion rate)达到瓶颈时,需要考虑两个主要因素来优化系统性能:

  1. 日志代理节点的负载情况
    • 检查日志代理节点是否过载。如果节点负载过高,可能是因为单个节点处理的数据量超过了其处理能力。在这种情况下,可以考虑增加日志代理节点的数量来进行水平扩展(scaling out)。通过增加节点,可以将数据处理的负载分散到更多的节点上,从而提高整体的数据处理能力。
  2. 分片的数量
    • 另一个关键因素是检查是否有足够的分片来确保每个节点的负载均衡。如果分片数量不足,可能会导致某些节点承载了过多的数据处理任务,而其他节点则相对空闲。为了解决这个问题,可以增加集合中的分片数量,以便更均匀地分配数据到各个节点上。这样做可以提高系统的并行处理能力,并减少因单个节点过载而导致的性能瓶颈。

数据维护流程

f1674cf5c68c437bbbbf00cdc449b0b8.png

日志序列写入过程中涉及的四个关键步骤:代理(Proxy)、日志代理(Log Broker)、数据节点(Data Node)和对象存储(Object Storage)。这个过程包括四个主要任务,这些任务被解耦以确保每个任务都由其对应的节点类型处理,从而提高了系统的灵活性和可扩展性。

  1. DML请求验证
    • 这一任务由代理节点(Proxy)负责。由于Milvus不支持复杂的事务,DML请求的验证被提前到了代理层。代理会检查请求的有效性,并为其请求时间戳服务(TSO)以获取全局一致的时间戳。时间戳用于确定数据请求的处理顺序,确保数据的一致性和并发控制。
  2. 日志序列的发布-订阅
    • 日志代理节点(Log Broker)负责处理日志序列的发布和订阅。当DML请求通过验证后,代理会将请求转发给日志代理节点。日志代理节点将请求转换成日志序列,并管理这些日志序列的发布和订阅。这样,数据节点可以订阅它们感兴趣的日志序列,以便进行后续的数据处理。
    • 应该说从log broker 中发布的订阅消息有很多种,其中 data node 关心的只是DML 与 DDL 相关的,因为这里主要是想描述数据请求,所以其他的就没有绘制。
  3. 从流式日志到日志快照的转换
    • 数据节点(Data Node)负责将从日志代理接收到的流式日志转换成日志快照。日志快照是数据在特定时间点的静态表示,它们被用于数据的持久化和恢复。通过转换流式日志为日志快照,数据节点可以更有效地管理和访问数据。
  4. 日志快照的持久化
    • 最后,日志快照被持久化到对象存储(Object Storage)中。对象存储是一种高可靠、可扩展的存储解决方案,适用于存储大量数据。通过将日志快照存储在对象存储中,Milvus可以确保数据的长期保存和可访问性,即使在系统故障或灾难恢复时也能快速恢复数据。
    • 需要注意 一个collection实际可以有多个segments 进行存储,查找collection的过程,其实是定位返回多个segments的过程。
    • b72f6414619246e18482233eb0443ef1.png
    • 这里解释下索引:Milvus 是一个为向量数据设计的分布式向量数据库,它支持对向量字段、标量字段和主键字段建立索引。这种索引机制在数据处理和查询优化方面起着关键作用,特别是在处理大规模、高维数据时。


http://www.ppmy.cn/news/1475504.html

相关文章

springboot+vue 开发记录(九)后端打包部署运行

本篇文章主要内容是后端项目写好了,怎么打包部署到服务器上运行。 文章目录 1. 在服务器上安装Docker2. 在Docker中装MySQL3. 在Docker中设置网桥,实现容器间的网络通信4. 修改后端配置文件5. 修改pom.xml文件6. 打包7. 编写DockerFile文件8. 上传文件到…

Milvus 核心设计 (4) ---- metric及index原理详解与示例(2)

目录 背景 Binary Embedding 定义与特点 常见算法 应用场景 距离丈量的方式 Jaccard Hamming 代码实现 Index BIN_FLAT BIN_IVF_FLAT Sparse embeddings 定义 应用场景 优点 实现方式 距离丈量方式 IP Index SPARSE_INVERTED_INDEX 应用场景 优势 SPAR…

java多线程操作之CAS

1,什么是CAS? CAS(Compare-And-Swap) 比较并交换,用于实现同步和锁机制。经常配合juc中Atomic相关类进行。Atomic相关类无法解决aba问题。 2,CAS核心思想是什么? 比较和交换。本质上就是乐观锁…

计算1的数量

1. 计算1的数量 题目ID:9809必做题100分 最新提交: Accepted 100 分 历史最高: Accepted 100 分 时间限制: 1000ms 空间限制: 524288kB 题目描述 给定一个n*m的二进制矩阵,请你数一数矩阵中完全被0上下左右包围的1的数…

樊登读书精准表达

阅读建议:本书解读过程中,刘蔚涛老师展示了很多精彩图表,建议配合视频,效果更好。 书友你好,欢迎来到非凡精读馆,我是刘蔚涛。 今天给大家带来一本好书,名字叫作《精准表达》,副标题是“怎么让你的方案在最短的时间内打动人心”。这本书2004年出版,出版后在日本畅销…

MySQL 日志深度解析:从查询执行到性能优化

引言 MySQL 日志是数据库管理员和开发者的宝贵资源,它提供了查询执行的详细情况,帮助我们诊断问题和优化性能。本文将深入分析一个具体的 MySQL 日志条目,解释其含义,并提供针对性的优化建议。 日志信息概览 让我们先来快速了解…

Perl编译器架构:前端与后端的精细分工

🔧 Perl编译器架构:前端与后端的精细分工 Perl作为一种高级、通用的编程语言,其编译器的架构设计对于性能和灵活性至关重要。Perl编译器由前端和后端组成,它们各自承担着不同的职责。本文将深入解析Perl编译器前端和后端的区别&a…

Gradio聚类

为了增加页面输出聚类后的结果并方便可视化分析聚类效果,下面是更新后的代码。将Gradio界面中的输出类型改为gr.outputs.HTML,并在返回结果时生成HTML格式的聚类结果。python import gradio as gr from transformers import AutoTokenizer, AutoModel i…

绝区捌--将GPT幻觉的发生率从20%以上降低到2%以下

总结:我们没有使用微调,而是结合使用提示链和预处理/后处理来将幻觉发生率降低一个数量级,但这确实需要对 OpenAI 进行 3-4 倍的调用。还有很大的改进空间! 使用 GPT 等大型语言模型面临的最大挑战之一是它们倾向于捏造信息。 这…

关于maven工程编译的一些问题

首先抛问题,在maven clean的时候出现下面的错误: 错误源代码如下: [ERROR] The build could not read 1 project -> [Help 1] [ERROR] [ERROR] The project com.**:**:2.0.0 (D:\JAVA\**-policy\pom.xml) has 1 error [ERROR] N…

音视频开发—FFmpeg处理流数据的基本概念详解

文章目录 多媒体文件的基本概念相关重要的结构体操作数据流的基本步骤1.解复用(Demuxing)2.获取流(Stream)3. 读取数据包(Packet)4. 释放资源(Free Resources)完整示例 多媒体文件的…

【自动驾驶/机器人面试C++八股精选】专栏介绍

目录 一、自动驾驶和机器人技术发展前景二、C在自动驾驶和机器人领域的地位三、专栏介绍四、订阅需知 一、自动驾驶和机器人技术发展前景 随着人工智能、机器学习、传感器技术和计算能力的进步,自动驾驶和机器人的技术水平不断提升,使得它们更加智能、可…

js项目生产环境中移除 console

1、terser-webpack-plugin webpack 构建的项目中安装使用 安装: npm install terser-webpack-plugin --save-dev 配置 在webpack.config.js文件中 new TerserPlugin({terserOptions: {output: {comments: false, // 去除注释},warnings: false, // 去除黄色警告,co…

Python酷库之旅-第三方库Pandas(021)

目录 一、用法精讲 52、pandas.from_dummies函数 52-1、语法 52-2、参数 52-3、功能 52-4、返回值 52-5、说明 52-6、用法 52-6-1、数据准备 52-6-2、代码示例 52-6-3、结果输出 53、pandas.factorize函数 53-1、语法 53-2、参数 53-3、功能 53-4、返回值 53-…

在InternStudio上创建一台GPU服务器

填写配置 创建完成 ssh连接,并测试常用指令 查看开发机信息 查看gpu信息 创建conda环境 跑个test

康谋分享 | 自动驾驶联合仿真——功能模型接口FMI(三)

在之前的两篇文章中(文末往期回顾中可查看),我们主要介绍了功能模型接口FMI的主要组成部分和一些使用场景,今天就以康谋自动驾驶仿真软件aiSim为例,来展示一下如何建立一个FMU并实现基于UDP和FMI联合仿真(c…

GitHub+Picgo图片上传

Picgo下载,修改安装路径,其他一路下一步! 地址 注册GitHub,注册过程不详细展开,不会的百度一下 地址 新建GitHub仓库存放图片 生成Token令牌 点击头像,点击Settings 滑到最后 过期时间:No expi…

MyBatisPlus实现增删改查

文章目录 MyBatisPlus实现增删改查基本操作分页查询配置分页插件 MyBatisPlus实现增删改查 实体类GkUser package com.geekmice.springbootselfexercise.entity;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;…

uniapp 初始学习1

uni-app代码基本包括js,vue,css.在app端支持原生渲染nvue,可编译的kotlin和swift 掌握js就可以进行不同应用的开发 页面文件遵循 Vue 单文件组件 (SFC) 规范,即每个页面是一个.vue文件 .vue文件是一个自定义的文件类型,用类HTML语法描述一…

2024年中国网络安全市场全景图 -百度下载

是自2018年开始,数说安全发布的第七版全景图。 企业数智化转型加速已经促使网络安全成为全社会关注的焦点,在网络安全边界不断扩大,新理念、新产品、新技术不断融合发展的进程中,数说安全始终秉承科学的方法论,以遵循…