Milvus核心组件(1)- Architecture

目录

 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.mzph.cn/news/869862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac上配置多版本JDK

在Mac上配置多版本JDK可以通过以下步骤进行: 1. 下载并安装多个JDK版本 你可以从 Oracle 或 AdoptOpenJDK 下载你需要的JDK版本。安装完成后,这些JDK版本通常会被安装在 /Library/Java/JavaVirtualMachines 目录下。 2. 配置环境变量 你可以通过修改…

Mac 上安转文字转 SQL 利器 WrenAI

WrenAI 是一个开源的 Text-SQL 的工具,通过导入数据库结构,通过提问的方式生成 SQL。本文将讲述如何在 MacOS 上安装 WrenAI。要运行WrenAI,首先需要安装 Docker 桌面版。 下载 WrenAI https://github.com/Canner/WrenAI/releases/tag/0.7.…

中断相关知识

进程上下文: 当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容 一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。 用户级上下文: 正文、数据、用户堆栈以及共享存储区; 寄存器上下文…

java数组之线性查找、二分法查找

一、线性查找 思想:如果想在一个数组中查找是否有某个元素,最容易想到的办法就是遍历数组,将数组中元素与想要查找的元素逐个对比,如果相等表示找到了,如果不等,则表示没找到。这就是线性查找的思想。 案例…

C++多线程和循环队列

假设我们不使用互斥锁&#xff0c;并且我们在两个线程中分别调用 enqueue 和 dequeue 方法。 #include <iostream> #include <thread>template <typename T> class Queue {private:static constexpr int MAX_SIZE 1000;T items[MAX_SIZE];int front, rear;…

算法导论 总结索引 | 第四部分 第十七章:摊还分析

1、数据结构的一个操作序列中 所执行的 所有操作的平均时间&#xff0c;来评估该操作的代价。摊还分析 不同于平均情况分析&#xff0c;它并不涉及概率&#xff0c;它可以保证最坏情况下每个操作的平均性能 它是一种平均情况下的 性能分析方法&#xff0c;用于 评估一系列操作的…

Java多态练习(2024.7.10)

动物类 package KeepPets20240710;public class Animal {private String color;private int age;public Animal(){}public Animal(String color, int age) {this.color color;this.age age;}public String getColor() {return color;}public void setColor(String color) {t…

开源流程表单设计器都有哪些值得一提的优势?

如果需要提质、增效、降本&#xff0c;不妨来了解下低代码技术平台、开源流程表单设计器的功能和优势特点。想要实现流程化办公&#xff0c;低代码技术平台是助力增效的理想工具。功能灵活、操作方便、好维修、可视化操作等优势都是其深受行业喜爱的优势特点。通过本文&#xf…

Errno2:No such file or directory,在当前文件确实没有该图片,怎么解决?

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

常用网络概念

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ​​ 目录 了解组织 局域网技术 …

高深宽比刻蚀和纳米级图形化推进存储器的路线图

随着市场需求推动存储器技术向更高密度、更优性能、新材料、3D堆栈、高深宽比 &#xff08;HAR&#xff09; 刻蚀和极紫外 &#xff08;EUV&#xff09; 光刻发展&#xff0c;泛林集团正在探索未来三到五年生产可能面临的挑战&#xff0c;以经济的成本为晶圆厂提供解决方案。 …

数组常用的方法

数组,是JavaScript中的一种数据格式,在JavaScript中经常使用。作为一名前端工程师,掌握Array的用法非常重要! 那么,常用的数组方法你知道几个呢? 如果不知道也没有关系,今天这篇文章将汇总详细介绍Array中常用的一些方法,一起来学习一下吧! 01、push 功能:向数组…

谷歌浏览器插件开发笔记0.1.022

谷歌浏览器插件开发笔记0.1.000 示例文件manifest.jsonpopup.htmloptions.jsoptions.htmlcontent.jsbackground.js 网页按钮快捷键插件参考链接 示例文件 共计有6个常用的文件 manifest.json background字段&#xff1a;随着浏览器的打开而打开&#xff0c;随着浏览器的关闭…

Qt 实战(2)搭建开发环境 | 2.2、.pro文件详解

文章目录 一、.pro文件详解1、.pro文件的作用2、项目管理3、编译配置4、依赖管理5、平台支持6、自动化编译7、示例8、总结 前言&#xff1a; 在Qt开发环境中&#xff0c;.pro文件是一个非常重要的项目文件&#xff0c;它全称为项目管理文件&#xff08;Project file&#xff09…

DHCPIP、Lan IPLan Static IP

一、什么是DHCP? DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;是一种网络协议&#xff0c;用于自动分配IP地址和其他网络配置给设备&#xff08;如计算机、手机、网络打印机等&#xff09;&#xff0c;使得设备能够在网络上进行通信。 IP地址分配&#…

【进阶篇-Day7:JAVA中Date、LocalDate等时间API的介绍】

目录 1、概述2、JDK8(-) 时间类2.1 Date类&#xff1a;&#xff08;1&#xff09;构造方法&#xff1a;&#xff08;2&#xff09;常用成员方法&#xff1a; 2.2 SimpleDateFormat类&#xff1a;2.3 总结&#xff1a;2.4 Calendar类介绍&#xff1a; 3、JDK8() 时间类3.1 日历类…

fortran简单排序算法,对一维、二维矩阵进行正序或倒序排序

fortran简单排序算法&#xff0c;对一维、二维矩阵进行正序或倒序排序 0. 引言1. 算法实现1.1 一维数组排序1.2 二维数组排序1.2 module文件 2. 结语 0. 引言 排序算法是计算机科学中的一项重要技术&#xff0c;它将一组数据按照特定的顺序排列起来。排序算法有很多种&#xff…

设计模式探索:责任链模式

1. 什么是责任链模式 责任链模式 (Chain of Responsibility Pattern) 是一种行为型设计模式。定义如下&#xff1a; 避免将一个请求的发送者与接收者耦合在一起&#xff0c;让多个对象都有机会处理请求。将接收请求的对象连接成一条链&#xff0c;并且沿着这条链传递请求&…

samout 最新版本state 逐层控制加速收敛

代码 import torch import numpy as npclass MaxState(torch.nn.Module):def __init__(self, hidden_dim, heads, win):super(MaxState, self).__init__()assert hidden_dim % heads 0, "Hidden size must be divisible by the number of heads."self.head_size h…

【C++深度学习】多态(概念虚函数抽象类)

✨ 疏影横斜水清浅&#xff0c;暗香浮动月黄昏 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;C学习 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &…