存算分离是一个很火的话题,基本上各个数据库都说自己已经实现,或者即将上线存算分离的架构。但事实上对于不同类型的数据系统,如何定义“存”和“算”是不同的。本系列会简介milvus的存算分离架构,结合具体问题场景聊一些作者对这个概念的看法。
由于向量查询的“重索引”“重计算”特型, milvus的存算分离有两层含义:
如下图,整个milvus的读写流程是:
所以从这个流程上看,生成存储文件的过程发生在DataNode上,而使用存储数据进行查询计算则发生在QueryNode上。两个过程互不干扰,可以分别进行弹性扩展。在查询计算密集的时段,可以扩展QueryNode的数量&&资源,在写入压力较大的时候,可以扩展DataNode节点&&资源
另一个层面的存算分离,则是数据存储位置(obect storage)和计算发生位置(QueryNode)的分离。milvus的segment是immutable的,所以天然地支持‘一写多读’。
首先明确几个概念:
如上图中,可以认为单个Milvus collection有Segment1-5, 5个segment,分别分布在3个QueryNode节点上,其中Delegator分布在QueryNode2上,查询发生的流程如下:
本文从存算分离的角度,介绍了milvus的分布式架构。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。