• نبذة عن ميلفوس
  • ابدأ الآن
  • المفاهيم
  • دليل المستخدم
  • استيراد البيانات
  • أدوات الذكاء الاصطناعي
  • دليل الإدارة
  • الأدوات
  • عمليات الدمج
  • البرامج التعليمية
  • الأسئلة الشائعة
  • API Reference

استخدام WoodpeckerCompatible with Milvus 2.6.x

يشرح هذا الدليل كيفية تمكين Woodpecker واستخدامه كسجل الكتابة الأمامية (WAL) في Milvus 2.6.x. Woodpecker هو سجل كتابة أمامي سحابي أصلي مصمم لتخزين الكائنات، ويوفر إنتاجية عالية، ونفقات تشغيلية منخفضة، وقابلية توسع سلسة. للحصول على تفاصيل البنية والمعيار القياسي، راجع Woodpecker.

نظرة عامة

  • بدءًا من الإصدار 2.6 من Milvus 2.6، Woodpecker هو WAL اختياري يوفر عمليات كتابة مرتبة واسترداد كخدمة تسجيل.
  • كخيار قائمة انتظار للرسائل، يتصرف بشكل مشابه ل Pulsar/Kafka ويمكن تمكينه عبر التكوين.
  • يتم دعم خلفيتين للتخزين: نظام الملفات المحلي (local) وتخزين الكائنات (متوافق معminio/S3).

بدء التشغيل السريع

لتمكين Woodpecker، قم بتعيين نوع MQ إلى Woodpecker:

mq:
  type: woodpecker

ملاحظة: يعد تبديل mq.type لمجموعة قيد التشغيل عملية ترقية. اتبع إجراء الترقية بعناية وتحقق من صحتها على مجموعة جديدة قبل تبديل الإنتاج.

التكوين

فيما يلي كتلة تكوين Woodpecker الكاملة (تحرير milvus.yaml أو تجاوز في user.yaml):

# Related configuration of woodpecker, used to manage Milvus logs of recent mutation operations, output streaming log, and provide embedded log sequential read and write.
woodpecker:
  meta:
    type: etcd # The Type of the metadata provider. currently only support etcd.
    prefix: woodpecker # The Prefix of the metadata provider. default is woodpecker.
  client:
    segmentAppend:
      queueSize: 10000 # The size of the queue for pending messages to be sent of each log.
      maxRetries: 3 # Maximum number of retries for segment append operations.
    segmentRollingPolicy:
      maxSize: 256M # Maximum size of a segment.
      maxInterval: 10m # Maximum interval between two segments, default is 10 minutes.
      maxBlocks: 1000 # Maximum number of blocks in a segment
    auditor:
      maxInterval: 10s # Maximum interval between two auditing operations, default is 10 seconds.
  logstore:
    segmentSyncPolicy:
      maxInterval: 200ms # Maximum interval between two sync operations, default is 200 milliseconds.
      maxIntervalForLocalStorage: 10ms # Maximum interval between two sync operations local storage backend, default is 10 milliseconds.
      maxBytes: 256M # Maximum size of write buffer in bytes.
      maxEntries: 10000 # Maximum entries number of write buffer.
      maxFlushRetries: 5 # Maximum size of write buffer in bytes.
      retryInterval: 1000ms # Maximum interval between two retries. default is 1000 milliseconds.
      maxFlushSize: 2M # Maximum size of a fragment in bytes to flush.
      maxFlushThreads: 32 # Maximum number of threads to flush data
    segmentCompactionPolicy:
      maxSize: 2M # The maximum size of the merged files.
      maxParallelUploads: 4 # The maximum number of parallel upload threads for compaction.
      maxParallelReads: 8 # The maximum number of parallel read threads for compaction.
    segmentReadPolicy:
      maxBatchSize: 16M # Maximum size of a batch in bytes.
      maxFetchThreads: 32 # Maximum number of threads to fetch data.
  storage:
    type: minio # The Type of the storage provider. Valid values: [minio, local]
    rootPath: /var/lib/milvus/woodpecker # The root path of the storage provider.

الملاحظات الرئيسية:

  • woodpecker.meta
    • النوع: حاليا فقط etcd مدعوم فقط . إعادة استخدام نفس إلخd مثل ميلفوس لتخزين البيانات الوصفية خفيفة الوزن.
    • البادئة: البادئة الرئيسية للبيانات الوصفية. افتراضي: woodpecker.
  • woodpecker.client
    • يتحكم في سلوك إلحاق المقطع/التدوير/التدقيق على جانب العميل لتحقيق التوازن بين الإنتاجية وزمن الانتقال من طرف إلى طرف.
  • woodpecker.logstore
    • يتحكم في نُهج المزامنة/التدفق/التضخيم/التكثيف/قراءة مقاطع السجل. هذه هي المقابض الأساسية لضبط الإنتاجية/وقت الاستجابة.
  • woodpecker.storage
    • النوع: minio لتخزين الكائنات المتوافقة مع MinIO/S3 (MinIO/S3/GCS/OSS، إلخ)؛ local لأنظمة الملفات المحلية/المشتركة.
    • مسار الجذر: المسار الجذر للواجهة الخلفية للتخزين (فعال لـ local ؛ مع minio ، يتم تحديد المسارات بواسطة الجرافة/البادئة).

أوضاع النشر

يدعم ميلفوس كلاً من الوضعين المستقل والمجموعة. مصفوفة دعم الواجهة الخلفية للتخزين Woodpecker:

storage.type=localstorage.type=minio
ميلفوس مستقلمدعومةمدعومة
مجموعة ميلفوس العنقوديةمحدود (يحتاج إلى FS مشترك)مدعوم

ملاحظات:

  • مع minio ، يشترك Woodpecker في نفس تخزين الكائنات مع Milvus (MinIO/S3/GCS/OSS، إلخ).
  • مع local ، يكون القرص المحلي ذو العقدة الواحدة مناسبًا فقط للقرص المستقل. إذا كان بإمكان جميع البودات الوصول إلى نظام ملفات مشترك (على سبيل المثال، NFS)، يمكن أن يستخدم وضع الكتلة أيضًا local.

أدلة النشر

تمكين Woodpecker لمجموعة Milvus العنقودية على Kubernetes (مشغل Milvus، التخزين=minio)

بعد تثبيت مشغل Milvus، ابدأ تشغيل مجموعة Milvus مع تمكين Woodpecker باستخدام النموذج الرسمي:

kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_woodpecker.yaml

يقوم هذا النموذج بتهيئة Woodpecker كقائمة انتظار للرسائل وتمكين عقدة التدفق. قد يستغرق بدء التشغيل الأول وقتًا لسحب الصور؛ انتظر حتى تصبح جميع الكبسولات جاهزة:

kubectl get pods
kubectl get milvus my-release -o yaml | grep -A2 status

عندما تكون جاهزة، يجب أن ترى كبسولات مشابهة لـ:

NAME                                               READY   STATUS    RESTARTS   AGE
my-release-etcd-0                                  1/1     Running   0          17m
my-release-etcd-1                                  1/1     Running   0          17m
my-release-etcd-2                                  1/1     Running   0          17m
my-release-milvus-datanode-7f8f88499d-kc66r        1/1     Running   0          16m
my-release-milvus-mixcoord-7cd7998d-x59kg          1/1     Running   0          16m
my-release-milvus-proxy-5b56cf8446-pbnjm           1/1     Running   0          16m
my-release-milvus-querynode-0-558d9cdd57-sgbfx     1/1     Running   0          16m
my-release-milvus-streamingnode-58fbfdfdd8-vtxfd   1/1     Running   0          16m
my-release-minio-0                                 1/1     Running   0          17m
my-release-minio-1                                 1/1     Running   0          17m
my-release-minio-2                                 1/1     Running   0          17m
my-release-minio-3                                 1/1     Running   0          17m

قم بتشغيل الأمر التالي لإلغاء تثبيت مجموعة ميلفوس العنقودية.

kubectl delete milvus my-release

إذا كنت بحاجة إلى ضبط معلمات Woodpecker، اتبع الإعدادات الموضحة في تكوين تخزين الرسائل.

تمكين Woodpecker لمجموعة Milvus العنقودية على Kubernetes (مخطط Helm، التخزين=minio)

قم أولاً بإضافة وتحديث مخطط ميلفوس هيلم كما هو موضح في تشغيل ميلفوس في Kubernetes مع هيلم.

ثم قم بالنشر باستخدام أحد الأمثلة التالية:

- النشر العنقودي (الإعدادات الموصى بها مع تمكين Woodpecker وعقدة التدفق):

helm install my-release zilliztech/milvus \
  --set image.all.tag=v2.6.0 \
  --set pulsarv3.enabled=false \
  --set woodpecker.enabled=true \
  --set streaming.enabled=true \
  --set indexNode.enabled=false

- النشر المستقل (تم تمكين Woodpecker):

helm install my-release zilliztech/milvus \
  --set image.all.tag=v2.6.0 \
  --set cluster.enabled=false \
  --set pulsarv3.enabled=false \
  --set standalone.messageQueue=woodpecker \
  --set woodpecker.enabled=true \
  --set streaming.enabled=true

بعد النشر، اتبع المستندات لتوجيه المنفذ والاتصال. لضبط معلمات Woodpecker، اتبع الإعدادات الموضحة في تكوين تخزين الرسائل.

قم بتمكين Woodpecker لـ Milvus Standalone في Docker (التخزين = محلي)

اتبع تشغيل Milvus في Docker. مثال:

mkdir milvus-wp && cd milvus-wp
curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh

# Create user.yaml to enable Woodpecker with local filesystem
cat > user.yaml <<'EOF'
mq:
  type: woodpecker
woodpecker:
  storage:
    type: local
    rootPath: /var/lib/milvus/woodpecker
EOF

bash standalone_embed.sh start

لمزيد من تغيير إعدادات Woodpecker، قم بتحديث user.yaml وتشغيل bash standalone_embed.sh restart.

قم بتمكين Woodpecker لـ Milvus Standalone مع Docker Compose (التخزين=محلي)

اتبع تشغيل Milvus مع Docker Compose. مثال:

mkdir milvus-wp-compose && cd milvus-wp-compose
wget https://github.com/milvus-io/milvus/releases/download/v2.6.0/milvus-standalone-docker-compose.yml -O docker-compose.yml
# By default, the Docker Compose standalone uses Woodpecker
sudo docker compose up -d
# If you need to change Woodpecker parameters further, write an override:
docker exec -it milvus-standalone bash -lc 'cat > /milvus/configs/user.yaml <<EOF
mq:
  type: woodpecker
woodpecker:
  logstore:
    segmentSyncPolicy: 
      maxFlushThreads: 16
  storage:
    type: minio
EOF'

# Restart the container to apply the changes
docker restart milvus-standalone

نصائح لضبط الإنتاجية

استنادًا إلى المعايير وحدود الواجهة الخلفية في Woodpecker، قم بتحسين إنتاجية الكتابة من طرف إلى طرف من الجوانب التالية:

  • جانب التخزين
    • تخزين الكائنات (متوافق مع minio/S3): زيادة التزامن وحجم الكائن (تجنب الكائنات الصغيرة). راقب حدود عرض النطاق الترددي للشبكة والمجموعة. غالبًا ما تصل عقدة MinIO واحدة على SSD إلى حوالي 100 ميجابايت/ثانية محليًا؛ يمكن أن تصل عقدة EC2 واحدة إلى S3 إلى GB/s.
    • أنظمة الملفات المحلية/المشتركة (المحلية): يفضل NVMe/الأقراص السريعة. تأكد من أن FS يتعامل مع عمليات الكتابة الصغيرة وزمن انتقال المزامنة بشكل جيد.
  • مقابض نقار الخشب
    • قم بزيادة logstore.segmentSyncPolicy.maxFlushSize و maxFlushThreads للتدفقات الأكبر والتوازي الأعلى.
    • قم بضبط maxInterval وفقًا لخصائص الوسائط (مقايضة زمن الوصول بالإنتاجية مع تجميع أطول).
    • بالنسبة لتخزين الكائن، ضع في اعتبارك زيادة segmentRollingPolicy.maxSize لتقليل مفاتيح تبديل المقاطع.
  • جانب العميل/التطبيق
    • استخدم أحجام دفعات أكبر والمزيد من الكتّاب/العملاء المتزامنين.
    • التحكم في توقيت التحديث/إنشاء الفهرس (تجميع الدُفعات قبل التشغيل) لتجنب الكتابات الصغيرة المتكررة.

عرض توضيحي لإدراج الدُفعات

from pymilvus import MilvusClient
import random

# 1. Set up a Milvus client
client = MilvusClient(
    uri="http://<Proxy Pod IP>:27017",
)

# 2. Create a collection
res = client.create_collection(
    collection_name="test_milvus_wp",
    dimension=512,
    metric_type="IP",
    shards_num=2,
)
print(res)

# 3. Insert randomly generated vectors
colors = ["green", "blue", "yellow", "red", "black", "white", "purple", "pink", "orange", "brown", "grey"]
data = []

batch_size = 1000
batch_count = 2000
for j in range(batch_count):
    start_time = time.time()
    print(f"Inserting {j}th vectors {j * batch_size} startTime{start_time}")
    for i in range(batch_size):
        current_color = random.choice(colors)
        data.append({
            "id": (j*batch_size + i),
            "vector": [ random.uniform(-1, 1) for _ in range(512) ],
            "color": current_color,
            "color_tag": f"{current_color}_{str(random.randint(1000, 9999))}"
        })
    res = client.insert(
        collection_name="test_milvus_wp",
        data=data
    )
    data = []
    print(f"Inserted {j}th vectors endTime:{time.time()} costTime:{time.time() - start_time}")

الكمون

Woodpecker عبارة عن نظام WAL سحابي أصلي مصمم لتخزين الكائنات مع مفاضلات بين الإنتاجية والتكلفة والكمون. يعطي الوضع المدمج خفيف الوزن المدعوم حاليًا الأولوية لتحسين التكلفة والإنتاجية، حيث أن معظم السيناريوهات تتطلب فقط كتابة البيانات في غضون وقت معين بدلاً من المطالبة بزمن انتقال منخفض لطلبات الكتابة الفردية. ولذلك، يستخدم Woodpecker عمليات كتابة مجمّعة، مع فواصل زمنية افتراضية تبلغ 10 مللي ثانية لعمليات التخزين الخلفية لنظام الملفات المحلي و200 مللي ثانية لعمليات التخزين الخلفية الشبيهة ب MinIO. أثناء عمليات الكتابة البطيئة، يساوي الحد الأقصى لزمن الاستجابة وقت الفاصل الزمني بالإضافة إلى وقت التدفق.

لاحظ أنه لا يتم تشغيل إدخال الدُفعات ليس فقط حسب الفواصل الزمنية ولكن أيضًا حسب حجم الدُفعة، والذي يتم تشغيله افتراضيًا على 2 ميغابايت.

للحصول على تفاصيل حول البنية وأوضاع النشر (MemoryBuffer / QuorumBuffer) والأداء، راجع بنية Woodpecker.

لمزيد من تفاصيل المعلمات، راجع مستودع Woodpecker GitHub.