Milvus核心组件(1)- Architecture

news2024/9/22 15:30:08

目录

 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.coloradmin.cn/o/1915902.html

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

相关文章

VUE超详细入门

目录 1.什么是 Vue.js 2.Vue.js 优点 Vue中的第一个hello world Vue指令 v-model v-bind v-on v-if v-show v-for Vue 实例生命周期 从传统架构转向单文件架构(通过组件拼接) 安装element-ui使用 1.什么是 Vue.js Vue (读音 /vju ː /,类似于 view) 是…

基本的路由策略配置

目录 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建OSPF和RIP网络 3、使用Route-Policy对引入到OSPF 进程的路由进行过滤和修改 主要命令 原理概述 路由策略Route-Policy 的应用非常广泛。例如,它可以规定路由器在发布路由时只…

Databricks 收购 Tabular 的意义:数据开放框架的胜利

Databricks 宣布收购 Tabular,这是一个由 Apache Iceberg 的原始创建者开发的数据平台,在数据分析行业引发了涟漪。此次收购凸显了开放框架在数据领域日益增长的重要性,预示着数据管理、分析和 AI/ML 计划领域的创新、协作和可访问性的新时代…

RedisTemplate 中序列化方式辨析

在Spring Data Redis中,RedisTemplate 是操作Redis的核心类,它提供了丰富的API来与Redis进行交互。由于Redis是一个键值存储系统,它存储的是字节序列,因此在使用RedisTemplate时,需要指定键(Key&#xff09…

伺服【禾川X6】

驱动器: A:脉冲 B:EtherCAT // SV-X6 FB 040 AA 一套360 N:CANopen R:PROFINET 电机: SV-X6 MA 040A-B2 KA 框号: 40 8mm 50…

C++ Primer 总结索引 | 第十六章:模板与泛型编程

1、面向对象编程(OOP)和泛型编程 都能处理在编写程序时 不知道类型的情况。不同之处在于:OOP 能处理类型 在程序运行之前都未知的情况;而在泛型编程中,在编译时就能获知类型了 2、容器、迭代器 和 算法 都是泛型编程的…

element el-upload 粘贴上传图片

对form中的某一个el-form-item添加 paste.native 事件&#xff0c;事件绑定方法名 handlePaste也可以在其他控件中添加事件监听&#xff0c;这里在当前form-item 这个块使用了&#xff0c;只有当你点击目标区域时才有效。 <el-form-item label"备注图片" paste.n…

skywalking-2-客户端-php的安装与使用

skywalking的客户端支持php&#xff0c;真的很棒。 官方安装文档&#xff1a;https://skywalking.apache.org/docs/skywalking-php/next/en/setup/service-agent/php-agent/readme/ 前置准备 本次使用的php版本是8.2.13: php -v PHP 8.2.13 (cli) (built: Nov 21 2023 09:5…

Prometheus+Grafana主机运行数据

目录 介绍 安装Node Exporter 配置Prometheus 验证配置 导入仪表盘 介绍 Prometheus是一款开源的监控和警报工具&#xff0c;而Node Exporter是Prometheus的一个官方插件&#xff0c;用于采集主机上的各种系统和硬件指标。 安装Node Exporter 下载最新版本的Node Export…

科普文:浮点数精度运算BigDecimal踩坑和填坑

概叙 用过Java的BigDecimal类型&#xff0c;但是很多人都用错了。如果使用不当&#xff0c;可能会造成非常致命的线上问题&#xff0c;因为这涉及到金额等数据的计算精度。 首先说一下&#xff0c;一般对于不需要特别高精度的计算&#xff0c;我们使用double或float类型就可以了…

PHP实现用户认证与权限管理的全面指南

目录 引言 1. 数据库设计 1.1 用户表&#xff08;users&#xff09; 1.2 角色表&#xff08;roles&#xff09; 1.3 权限表&#xff08;permissions&#xff09; 1.4 用户角色关联表&#xff08;user_roles&#xff09; 1.5 角色权限关联表&#xff08;role_permissions…

MySQL之基本查询(下)-表的增删查改

表的增删查改&#xff1a;CRUD : Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09; Update(更新) 语法&#xff1a; UPDATE table_name SET column expr [, column expr ...] [WHERE ...] [ORDER BY ...] [LIMIT ...] …

【观成科技】Websocket协议代理隧道加密流量分析与检测

Websocket协议代理隧道加密流量简介 攻防场景下&#xff0c;Websocket协议常被用于代理隧道的搭建&#xff0c;攻击者企图通过Websocket协议来绕过网络限制&#xff0c;搭建一个低延迟、双向实时数据传输的隧道。当前&#xff0c;主流的支持Websocket通信代理的工具有&#xf…

AnimateLCM:高效生成连贯真实的视频

视频扩散模型因其能够生成连贯且高保真的视频而日益受到关注。然而&#xff0c;迭代去噪过程使得这类模型计算密集且耗时&#xff0c;限制了其应用范围。香港中文大学 MMLab、Avolution AI、上海人工智能实验室和商汤科技公司的研究团队提出了AnimateLCM&#xff0c;这是一种允…

盲盒抽卡机小程序:抽卡机的多样化发展

近几年&#xff0c;盲盒卡牌出现在了大众的生活中&#xff0c;深受学生和年轻消费者的喜爱。卡牌是一种新的盲盒模式&#xff0c;玩家购买后随机获得卡牌&#xff0c;为了收集一整套卡牌&#xff0c;玩家会进行各种复购行为&#xff0c;卡牌逐渐成为了年轻人追捧的休闲方式&…

获取天气数据

获取天气数据其实是一个简单的HTTP接口&#xff0c;根据用户输入的adcode&#xff0c;查询目标区域当前/未来的天气数据&#xff0c;数据来源是中国气象局。 第一步&#xff0c;申请”web服务 API”密钥&#xff08;Key&#xff09;&#xff1b; 链接: 首页 | 高德控制台 (am…

HTTP协议分析/burp/goby/xray

一、HTTP简介 HTTP(超文本传输协议)是今天所有web应用程序使用的通信协议。最初&#xff0c;HTTP只是一个为获取基于文本的静态资源而开发的简单协议&#xff0c;后来人们以名种形式扩展和利用它.使其能够支持如今常见的复杂分布式应用程序。HTTP使用一种用于消息的模型:客户端…

软件产品必须进行确认测试吗?包括哪些测试流程和注意事项?

在当前科技快速发展的时代&#xff0c;软件产品已经成为人们生活和工作中不可或缺的一部分。然而&#xff0c;随着软件产品的增多和复杂性的提升&#xff0c;软件质量的问题也逐渐浮现出来。为了确保软件产品的质量和稳定性&#xff0c;软件产品在开发完成后必须进行确认测试。…

模版初阶(更新)

文章目录 模版介绍函数模版模版匹配规则类模版结言 模版介绍 函数模版分为两个类型&#xff1a; 函数模版类模版 函数模版 语法格式&#xff1a; t e m p l a t e < t y p n a m e T 1 , t y p n a m e T 2... > template<typname T1,typname T2...> template&…

小技巧(更新中)

1.Pycharm使用小技巧pycharm的使用小技巧1---快速找到模块内的函数和类&#xff0c;快速定位查看的模块所在位置_pycharm怎么查找某个函数-CSDN博客 2. Python库之requirments Python库安装之requirements.txt, environment.yml_python requirements-CSDN博客 3.执行.sh脚本的…