From 7ca6a41348a525fec1a703f0611f3d51959cd7e2 Mon Sep 17 00:00:00 2001 From: "cai.zhang" Date: Fri, 27 Aug 2021 15:33:57 +0800 Subject: [PATCH] Add index desgin doc (#6920) Signed-off-by: cai.zhang --- docs/design_docs/graphs/IndexState.png | Bin 0 -> 73636 bytes docs/design_docs/graphs/indexcoord_design.png | Bin 0 -> 46510 bytes docs/design_docs/index_design.md | 198 ++++++++++++++++++ 3 files changed, 198 insertions(+) create mode 100644 docs/design_docs/graphs/IndexState.png create mode 100644 docs/design_docs/graphs/indexcoord_design.png create mode 100644 docs/design_docs/index_design.md diff --git a/docs/design_docs/graphs/IndexState.png b/docs/design_docs/graphs/IndexState.png new file mode 100644 index 0000000000000000000000000000000000000000..3cd935a218bda59325ec6312c3f963f0abf43a03 GIT binary patch literal 73636 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 literal 0 HcmV?d00001 diff --git a/docs/design_docs/index_design.md b/docs/design_docs/index_design.md new file mode 100644 index 0000000000..6541751b52 --- /dev/null +++ b/docs/design_docs/index_design.md @@ -0,0 +1,198 @@ +# 8. IndexCoord Design + +update: 7.31.2021, by [Cai.Zhang](https://github.com/xiaocai2333) + +## 8.0 Component Description + +IndexCoord is a component responsible for scheduling index construction tasks and maintaining index status. +IndexCoord accepts requests from rootcoord to build indexes, delete indexes, and query index information. +IndexCoord is responsible for assigning IndexBuildID to the request to build the index, and forwarding the +request to build the index to IndexNode. IndexCoord records the status of the index and the index file. + +The following figure shows the design of the indexcoord component: + +![indexcoord](graphs/indexcoord_design.png) + +## 8.1 Use ETCD as a reliable service + +Based on ETCD service discovery, IndexCoord components, like other Milvus components, rely on ETCD to implement +service discovery. IndexCoord relies on the lease mechanism of ETCD to sense the online and offline news of IndexNode. + +In addition to being used for service discovery, Milvus also uses ETCD as a reliable meta storage, and writes all +persistent status information to ETCD. The purpose is to restore a certain Milvus component to its original +state after power off and restart. + +## 8.2 Receive requests about index from RootCoordinate + +IndexCoordinate receives requests from RootCoordinate to build an index, delete an index, and query the status of an index. + +In Milvus, index building is performed asynchronously. When IndexCoordinate receives a request to build an index from +RootCoordinate, it will first check whether the same index has been created according to the parameters. If the same +index has been created, it will return the IndexBuildID of the existing task. Otherwise, assign a globally unique +IndexBuildID to the task, then records the task in the MetaTable, and writes the MetaTable to the ETCD, and then +returns it to RootCoordinate. At this point RootCoordinate already knows that it has successfully sent the task to +IndexCoordinate. In fact, the index construction has not been completed yet. IndexCoordinate will have a background +process to find all the index tasks that need to be allocated periodically, and then allocate it to IndexNode for +actual execution. + +When IndexCoordinate receives a delete index request from RootCoordinate, IndexCoordinate traverses the MetaTable, +marks the corresponding index task as deleted, and returns. It is not really deleted from the MetaTable at this time. +IndexCoordinate has another background process that periodically queries the index tasks that need to be deleted. +When the index task is marked as deleted and the index status is complete, the corresponding index task is actually +deleted from the MetaTable. + +When IndexCoordinate receives a query index status request from other components, first check whether the corresponding +index task is marked for deletion in the MetaTable. If marked for deletion, the return index does not exist, otherwise +it returns the index information + +## 8.3 Feature Design + +IndexCoord has two main structures, NodeManager and MetaTable. NodeManager is used to manage IndexNode node information, +and MetaTable is used to maintain index related information. + +IndexCoord mainly has these functions: `watchNodeLoop`, `watchMetaLoop`, `assignTaskLoop` and `recycleUnusedIndexFiles`. +`watchNodeLoop` is mainly responsible for monitoring the changes of IndexNode nodes, `watchMetaLoop` is mainly +responsible for monitoring the changes of Meta, `assignTaskLoop` is mainly responsible for assigning index building tasks, +and `recycleUnusedIndexFiles` is mainly responsible for cleaning up useless index files and deleted index records. + +### 8.3.1 The relationship between IndexCoord and IndexNode + +IndexCoord is responsible for assigning index construction tasks and maintaining index status, and IndexNode is the +node that executes index building tasks. + +### 8.3.2 NodeManager + +NodeManager is responsible for managing the node information of IndexNode, and contains a priority queue to save the +load information of each IndexNode. The load information of IndexNode is based on the number of tasks executed. +When the IndexCoord service starts, it first obtains the node information of all +current IndexNodes from ETCD, and then adds the node information to the NodeManager. After that, the online and offline +information of IndexNode node is obtained from watchNodeLoop. Then it will traverse the entire MetaTable, get the load +information corresponding to each IndexNode node, and update the priority queue in the NodeManager. Whenever the task +of building an index needs to be allocated, the IndexNode with the lowest load will be selected according to the +priority queue to execute the task. + +### 8.3.3 MetaTable + +In order to maintain the status information of the index, we introduced MetaTable to record the status information +of the index. In order to ensure that the MetaTable information is not lost after IndexCoord is powered off and +restarted, we write the MetaTable information into ETCD. When the IndexCoord service starts, it will first load the +existing Meta information from ETCD, and then monitor the changes of Meta through watchNodeLoop. In order to distinguish +whether the modification of Meta was initiated by IndexCoord or IndexNode, revision was introduced in Meta. +When watchMetaLoop detects that the Meta in ETCD is updated, compare the revision in Meta with the Event.Kv.Version +of the ETCD event. If the revision is equal to Event.Kv.Version, it means that the update was initiated by IndexCoord. +If the revision is less than Event. .Kv.Version means that this Meta update was initiated by IndexNode, and IndexCoord +needs to update Meta. There will be no situation where revision is greater than Event.Kv.Version. + +In order to prevent IndexNode from appearing in a suspended animation state, Version is introduced. When IndexCoord +finds that IndexNode is offline, it assigns the unfinished tasks that IndexNode is responsible for to other IndexNodes, +and adds 1 to Version. After the task is completed, it is found that the version corresponding to the task is already +larger than the version corresponding to the task it is executing, and the Meta is not updated. + +### 8.3.4 watchNodeLoop + +`watchNodeLoop` is used to monitor IndexNode going online and offline. When IndexNode goes online and offline, +IndexCoord adds or deletes the corresponding IndexNode information in NodeManager. + +### 8.3.5 watchMetaLoop + +`watchMetaLoop` is used to monitor whether the Meta in ETCD has been changed. When the Meta in the ETCD is monitored, +the result of the Meta update is obtained from the ETCD, and the `Event.Kv.Version` of the update event is compared +with the `revision` in the MetaTable. If the `Event.Kv.Version` is greater than the `revision` in the MetaTable, +Explain that this update is initiated by IndexNode, and then update the MetaTable in IndexCoord. Since this update +is initiated by IndexNode, it indicates that this IndexNode has completed this task, so update the load of this +IndexNode in NodeManager, and the task amount is reduced by one. + +### 8.3.6 assignTaskLoop + +`assignTaskLoop` is used to assign index construction tasks. There is a timer here to traverse the MetaTable regularly +to filter out the tasks that need to be allocated, including unallocated tasks and tasks that have been failed due to +indexNode crash. Then sort according to the version size of each task, and assign tasks with a smaller +version first. The purpose is to prevent certain special tasks from occupying resources all the time and always fail +to execute successfully. When a task is assigned, its corresponding Version is increased by one. Then send the task to +IndexNode for execution, and update the index status in the MetaTable. + +### 8.3.7 recycleUnusedIndexFiles + +Delete useless index files, including lower version index files and index files corresponding to the deleted index. +In order to distinguish whether the low version index file corresponding to the index has been cleaned up, recycled is +introduced as a mark. Only after the index task is completed will the lower version index files be cleaned up, and the +index file corresponding to the lower version index file that has been cleaned up is marked as True. + +This is also a timer, which periodically traverses the MetaTable to obtain the index corresponding to the index file +that needs to be cleaned up. If the index is marked as deleted, the information corresponding to the index is deleted +in the MetaTable. Otherwise, it just cleans up the index file of the lower version. + +## 8.4 IndexNode Create Index + +IndexNode is the execution node of index building tasks, and all index building tasks are forwarded to IndexNode by +IndexCoordinate for execution. When IndexNode executes an index build request, it first reads IndexMeta information +from ETCD, and checks whether the index task is marked for deletion when IndexCoordinate is forwarded to IndexNode. +If it is marked as deleted, then there is no need to actually build the index, just mark the index task status as +completed, and then write it to ETCD. When IndexCoordinate perceives that the status corresponding to the index is +complete, it deletes the index task from the MetaTable. If it is checked that the index is not marked for deletion, +then the index needs to be built. The original data must be loaded first when building the index. The original data +is stored in minIO/S3, and the storage path is notified by RootCoordinate in the index build request. After loading the +original data, the data is deserialized into data blocks, and then cgo is called to build the index. When the index is +built, the index data is serialized into data blocks, and then written into the file. The directory organization of the +index file is "indexBuildID/IndexTaskVersion/partitionID/segmentID/key", where key corresponds to the serialized key +of index data. After the index is built, record the index file directory in IndexMeta, and then write it to ETCD. + +## 8.5 API + +### 8.5.1 BuildIndex + +Index building is asynchronous, so when an index building request comes, an IndexBuildID is assigned to the task and +the task is recorded in Meta. The background process assignTaskLoop will find this task and assign it to IndexNode for +execution. + +The following figure shows the state machine of IndexTask during execution: + +![IndexState](graphs/IndexState.png) + +### 8.5.2 DropIndex + +DropIndex deletes indexes based on IndexID. One IndexID corresponds to the index of an entire column. A column is +divided into many segments, and each segment corresponds to an IndexBuildID. IndexCoord uses IndexBuildID to record +index tasks. Therefore, when DropIndex, delete all tasks corresponding to IndexBuildID corresponding to IndexID. + +## 8.6 Key Term + +### 8.6.1 Meta +```go +type Meta struct { + indexMeta *indexpb.IndexMeta + revision int64 +} +``` + +Meta is used to record the state of the index. +- Revision: The number of times IndexMeta has been changed in ETCD. It's the same as Event.Kv.Version in ETCD. + When IndexCoord watches the IndexMeta in ETCD is changed, can compare `revision` and Event.Kv.Versionto determine + this modification of IndexMeta is caused by IndexCoord or IndexNode. If it is caused by IndexNode, the Meta in + IndexCoord must be updated. + +### 8.6.2 IndexMeta + +```ProtoBuf +message IndexMeta { + int64 indexBuildID = 1; + common.IndexState state = 2; + string fail_reason = 3; + BuildIndexRequest req = 4; + repeated string index_file_paths = 5; + bool mark_deleted = 6; + int64 nodeID = 7; + int64 version = 8; + bool recycled = 9; +} +``` + +- indexBuildID: ID of the index task. +- state: The state of the index. +- fail_reason: The reason why the index build failed. +- req: The request for the building index. +- index_file_paths: The paths of index files. +- mark_deleted: Mark whether the index has been deleted. +- nodeID: ID of the IndexNode that built the index. +- version: Number of retries for the index. +- recycled: Mark whether the unused files of the index have been cleaned up.