معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

VictoriaMetrics، TimescaleDB و InfluxDB در مقایسه شدند مقاله قبلی روی یک مجموعه داده با یک میلیارد نقطه داده متعلق به 40K سری زمانی منحصر به فرد.

چند سال پیش دوره Zabbix وجود داشت. هر سرور فلزی لخت بیش از چند نشانگر نداشت - استفاده از CPU، استفاده از RAM، استفاده از دیسک و استفاده از شبکه. به این ترتیب، معیارهای هزاران سرور می توانند در 40 هزار سری زمانی منحصر به فرد قرار بگیرند و Zabbix می تواند از MySQL به عنوان پشتیبان برای داده های سری زمانی استفاده کند :)

در حال حاضر تنها node_exporter با پیکربندی های پیش فرض، بیش از 500 معیار را در میزبان متوسط ​​ارائه می دهد. بسیاری وجود دارد صادرکنندگان برای پایگاه داده های مختلف، سرورهای وب، سیستم های سخت افزاری و غیره. همه آنها معیارهای مفیدی را ارائه می دهند. همه برنامه های بیشتر و بیشتر شروع به تنظیم شاخص های مختلف برای خود می کنند. Kubernetes با خوشه‌ها و غلاف‌ها وجود دارد که معیارهای زیادی را نشان می‌دهد. این باعث می شود که سرورها هزاران معیار منحصر به فرد را در هر میزبان نشان دهند. بنابراین سری زمانی منحصر به فرد 40K دیگر قدرت بالایی ندارد. در حال تبدیل شدن به جریان اصلی است و باید به راحتی توسط هر TSDB مدرن روی یک سرور واحد مدیریت شود.

تعداد زیادی سری زمانی منحصر به فرد در حال حاضر چقدر است؟ احتمالا 400K یا 4M؟ یا 40 متر؟ بیایید TSDB های مدرن را با این اعداد مقایسه کنیم.

نصب بنچمارک

TSBS یک ابزار معیار عالی برای TSDB ها است. این امکان را به شما می دهد تا با عبور از تعداد مورد نیاز سری های زمانی تقسیم بر 10، تعداد دلخواه متریک ایجاد کنید. مقیاس (سابق -scale-var). 10 تعداد اندازه گیری ها (متریک ها) تولید شده در هر میزبان یا سرور است. مجموعه داده های زیر با استفاده از TSBS برای معیار تولید شدند:

  • 400K سری زمانی منحصر به فرد، فاصله 60 ثانیه بین نقاط داده، داده ها 3 روز کامل را شامل می شود، ~1.7B تعداد کل نقاط داده.
  • سری زمانی منحصر به فرد 4M، فاصله زمانی 600 ثانیه، داده ها 3 روز کامل را در بر می گیرد، ~1.7B تعداد کل نقاط داده.
  • 40 میلیون سری زمانی منحصر به فرد، فاصله زمانی 1 ساعت، داده ها 3 روز کامل را در بر می گیرد، ~ 2.8 میلیارد تعداد کل نقاط داده.

کلاینت و سرور بر روی نمونه های اختصاصی در حال اجرا بودند n1-استاندارد-16 در ابر گوگل این نمونه ها دارای تنظیمات زیر بودند:

  • vCPU: 16
  • رم: 60 گیگابایت
  • فضای ذخیره سازی: استاندارد 1 ترابایت HDD. سرعت خواندن/نوشتن 120 مگابیت بر ثانیه، 750 عملیات خواندن در ثانیه و 1,5 هزار نوشتن در ثانیه را فراهم می کند.

TSDB ها از تصاویر رسمی docker استخراج شده و در docker با تنظیمات زیر اجرا می شوند:

  • VictoriaMetrics:

    docker run -it --rm -v /mnt/disks/storage/vmetrics-data:/victoria-metrics-data -p 8080:8080 valyala/victoria-metrics

  • مقادیر InfluxDB (-e) برای پشتیبانی از توان بالا مورد نیاز است. جزئیات را در اینجا ببینید مستندات):

    docker run -it --rm -p 8086:8086 
    -e INFLUXDB_DATA_MAX_VALUES_PER_TAG=4000000 
    -e INFLUXDB_DATA_CACHE_MAX_MEMORY_SIZE=100g 
    -e INFLUXDB_DATA_MAX_SERIES_PER_DATABASE=0 
    -v /mnt/disks/storage/influx-data:/var/lib/influxdb influxdb

  • TimescaleDB (پیکربندی گرفته شده از آن فایل):

MEM=`free -m | grep "Mem" | awk ‘{print $7}’`
let "SHARED=$MEM/4"
let "CACHE=2*$MEM/3"
let "WORK=($MEM-$SHARED)/30"
let "MAINT=$MEM/16"
let "WAL=$MEM/16"
docker run -it — rm -p 5432:5432 
--shm-size=${SHARED}MB 
-v /mnt/disks/storage/timescaledb-data:/var/lib/postgresql/data 
timescale/timescaledb:latest-pg10 postgres 
-cmax_wal_size=${WAL}MB 
-clog_line_prefix="%m [%p]: [%x] %u@%d" 
-clogging_collector=off 
-csynchronous_commit=off 
-cshared_buffers=${SHARED}MB 
-ceffective_cache_size=${CACHE}MB 
-cwork_mem=${WORK}MB 
-cmaintenance_work_mem=${MAINT}MB 
-cmax_files_per_process=100

دیتا لودر با 16 رشته موازی اجرا شد.

این مقاله فقط حاوی نتایج برای معیارهای درج است. نتایج معیار انتخابی در مقاله ای جداگانه منتشر خواهد شد.

400K سری زمانی منحصر به فرد

بیایید با عناصر ساده شروع کنیم - 400K. نتایج محک:

  • VictoriaMetrics: 2,6 میلیون نقطه داده در ثانیه. میزان مصرف رم: 3 گیگابایت; حجم اطلاعات نهایی روی دیسک: 965 مگابایت
  • InfluxDB: 1.2M نقطه داده در ثانیه. میزان مصرف رم: 8.5 گیگابایت; اندازه نهایی اطلاعات روی دیسک: 1.6 گیگابایت
  • مقیاس زمانی: 849 هزار نقطه داده در ثانیه. میزان مصرف رم: 2,5 گیگابایت; اندازه نهایی اطلاعات روی دیسک: 50 گیگابایت

همانطور که از نتایج بالا می بینید، VictoriaMetrics در عملکرد درج و نسبت فشرده سازی برنده است. تایم لاین در استفاده از رم برنده است، اما از فضای دیسک زیادی استفاده می کند - 29 بایت در هر نقطه داده.

در زیر نمودارهای استفاده از CPU برای هر یک از TSDB ها در طول معیار آورده شده است:

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

تصویر بالا یک عکس از صفحه نمایش است: VictoriaMetrics - بارگیری CPU در حین تست درج برای یک متریک منحصر به فرد 400K.

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

تصویر بالا یک عکس از صفحه نمایش است: InfluxDB - بارگیری CPU در حین تست درج برای متریک منحصر به فرد 400K.

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

تصویر بالا یک اسکرین شات است: TimescaleDB - بارگیری CPU در طول تست درج برای یک متریک منحصر به فرد 400K.

VictoriaMetrics از تمام vCPU های موجود استفاده می کند، در حالی که InfluxDB از 2 از 16 vCPU کمتر استفاده می کند.

Timescale فقط از 3-4 از 16 vCPU استفاده می کند. نسبت های بالای iowait و سیستم در نمودار مقیاس زمانی TimescaleDB نشان دهنده یک تنگنا در زیرسیستم ورودی/خروجی (I/O) است. بیایید به نمودارهای استفاده از پهنای باند دیسک نگاه کنیم:

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

در بالا یک اسکرین شات وجود دارد: VictoriaMetrics - استفاده از پهنای باند دیسک در تست درج برای Unique Metrics 400K.

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

در بالا یک اسکرین شات وجود دارد: InfluxDB - استفاده از پهنای باند دیسک در تست درج برای Unique Metrics 400K.

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

تصویر بالا یک اسکرین شات است: TimescaleDB - استفاده از پهنای باند دیسک در تست درج برای Unique Metrics 400K.

VictoriaMetrics داده ها را با سرعت 20 مگابیت در ثانیه با حداکثر سرعت 45 مگابیت در ثانیه ضبط می کند. قله ها مربوط به ادغام جزئی بزرگ در درخت است LSM.

InfluxDB داده ها را با سرعت 160 مگابایت بر ثانیه می نویسد، در حالی که یک درایو 1 ترابایتی باید محدود شود سرعت نوشتن 120 مگابایت بر ثانیه

TimescaleDB محدود به سرعت نوشتن 120 مگابیت در ثانیه است، اما گاهی اوقات این محدودیت را می شکند و در مقادیر پیک به 220 مگابیت در ثانیه می رسد. این پیک ها مربوط به دره های استفاده ناکافی از CPU در نمودار قبلی است.

بیایید به نمودارهای استفاده از ورودی/خروجی (I/O) نگاه کنیم:

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

در بالا یک اسکرین شات وجود دارد: VictoriaMetrics - استفاده آزمایشی I/O را برای 400K معیارهای منحصر به فرد درج کنید.

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

در بالا یک اسکرین شات وجود دارد: InfluxDB - استفاده آزمایشی I/O را برای معیارهای منحصر به فرد 400K درج کنید.

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

در بالا یک اسکرین شات وجود دارد: TimescaleDB - استفاده آزمایشی I/O را برای معیارهای منحصر به فرد 400K درج کنید.

اکنون مشخص است که TimescaleDB به محدودیت ورودی/خروجی خود رسیده است، بنابراین نمی تواند از 12 vCPU باقیمانده استفاده کند.

سری زمانی منحصر به فرد 4M

سری زمانی 4M کمی چالش برانگیز به نظر می رسد. اما رقبای ما این آزمون را با موفقیت پشت سر می گذارند. نتایج محک:

  • VictoriaMetrics: 2,2 میلیون نقطه داده در ثانیه. میزان مصرف رم: 6 گیگابایت; اندازه نهایی اطلاعات روی دیسک: 3 گیگابایت.
  • InfluxDB: 330 هزار نقطه داده در ثانیه. میزان مصرف رم: 20,5 گیگابایت; اندازه نهایی اطلاعات روی دیسک: 18,4 گیگابایت.
  • TimescaleDB: 480K نقطه داده در ثانیه. میزان مصرف رم: 2,5 گیگابایت; حجم اطلاعات نهایی روی دیسک: 52 گیگابایت.

عملکرد InfluxDB از 1,2 میلیون نقطه داده در ثانیه برای یک سری زمانی 400K به 330K نقطه داده در ثانیه برای یک سری زمانی 4M کاهش یافت. این کاهش عملکرد قابل توجهی در مقایسه با سایر رقبا است. بیایید به نمودارهای استفاده از CPU نگاه کنیم تا علت اصلی این از دست دادن را بفهمیم:

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

تصویر بالا یک اسکرین شات است: VictoriaMetrics - استفاده از CPU در طول تست درج برای یک سری زمانی منحصر به فرد 4M.

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

تصویر بالا یک اسکرین شات است: InfluxDB - استفاده از CPU در طول تست درج برای سری های زمانی منحصر به فرد 4M.

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

تصویر بالا یک اسکرین شات است: TimescaleDB - استفاده از CPU در طول تست درج برای یک سری زمانی منحصر به فرد 4M.

VictoriaMetrics تقریباً از تمام توان واحد پردازش (CPU) استفاده می کند. افت در پایان مربوط به ادغام LSM باقی مانده پس از درج تمام داده ها است.

InfluxDB تنها از 8 مورد از 16 vCPU استفاده می کند، در حالی که TimsecaleDB از 4 از 16 vCPU استفاده می کند. نمودار آنها چه وجه مشترکی دارد؟ سهم بالا iowait، که باز هم گلوگاه ورودی/خروجی را نشان می دهد.

TimescaleDB سهم بالایی دارد system. ما فرض می کنیم که قدرت بالا منجر به بسیاری از تماس های سیستمی یا بسیاری از آنها شده است خطاهای جزئی صفحه.

بیایید به نمودارهای خروجی دیسک نگاه کنیم:

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

تصویر بالا یک اسکرین شات است: VictoriaMetrics - استفاده از پهنای باند دیسک برای درج معیارهای منحصر به فرد 4M.

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

در بالا یک اسکرین شات وجود دارد: InfluxDB - استفاده از پهنای باند دیسک برای درج معیارهای منحصر به فرد 4M.

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

تصویر بالا یک تصویر است: TimescaleDB - استفاده از پهنای باند دیسک برای درج معیارهای منحصر به فرد 4M.

VictoriaMetrics در اوج به حداکثر 120 مگابایت بر ثانیه رسید، در حالی که میانگین سرعت نوشتن 40 مگابایت بر ثانیه بود. این احتمال وجود دارد که چندین فیوژن سنگین LSM در طول اوج انجام شده باشد.

InfluxDB دوباره میانگین توان نوشتن 200 مگابایت بر ثانیه را با حداکثر سرعت 340 مگابایت بر ثانیه روی دیسکی با محدودیت نوشتن 120 مگابایت بر ثانیه کاهش می دهد :)

TimescaleDB دیگر محدود به دیسک نیست. به نظر می رسد که توسط چیز دیگری مربوط به نسبت بالا محدود شده است системной بار CPU

بیایید به نمودارهای استفاده از IO نگاه کنیم:

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

تصویر بالا یک اسکرین شات است: VictoriaMetrics - استفاده از I/O در طول تست درج برای یک سری زمانی منحصر به فرد 4M.

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

در بالا یک اسکرین شات وجود دارد: InfluxDB - استفاده از I/O در طول تست درج برای یک سری زمانی منحصر به فرد 4M.

معیار TSDB با عملکرد بالا VictoriaMetrics در مقابل TimescaleDB در مقابل InfluxDB

تصویر بالا یک اسکرین شات است: TimescaleDB - استفاده از I/O در طول تست درج برای سری های زمانی منحصر به فرد 4M.

الگوهای استفاده از IO منعکس کننده پهنای باند دیسک هستند - InfluxDB دارای IO محدود است، در حالی که VictoriaMetrics و TimescaleDB منابع IO اضافی دارند.

40M سری زمانی منحصر به فرد

40 میلیون سری زمانی منحصر به فرد برای InfluxDB خیلی بزرگ بود :)

نتایج محک:

  • VictoriaMetrics: 1,7 میلیون نقطه داده در ثانیه. میزان مصرف رم: 29 گیگابایت; فضای مصرفی دیسک: 17 گیگابایت.
  • InfluxDB: تمام نشد زیرا به بیش از 60 گیگابایت رم نیاز داشت.
  • TimescaleDB: 330 هزار نقطه داده در ثانیه، میزان مصرف رم: 2,5 گیگابایت؛ فضای مصرفی دیسک: 84 گیگابایت

TimescaleDB استفاده از رم فوق‌العاده کم و پایدار را در 2,5 گیگابایت نشان می‌دهد - مانند معیارهای منحصر به فرد 4M و 400K.

VictoriaMetrics به آرامی با سرعت 100k نقطه داده در ثانیه افزایش یافت تا اینکه تمام 40M نام متریک برچسب‌گذاری شده پردازش شدند. او سپس به نرخ درج ثابت 1,5-2,0M نقطه داده در ثانیه دست یافت، بنابراین نتیجه نهایی 1,7M نقطه داده در ثانیه بود.

نمودارهای سری زمانی منحصر به فرد 40M مشابه نمودارهای سری زمانی منحصر به فرد 4M است، پس بیایید از آنها بگذریم.

یافته ها

  • TSDB های مدرن قادر به پردازش درج ها برای میلیون ها سری زمانی منحصر به فرد در یک سرور هستند. در مقاله بعدی، بررسی خواهیم کرد که TSDBs چقدر انتخاب را در میلیون‌ها سری زمانی منحصر به فرد انجام می‌دهد.
  • استفاده ناکافی از CPU معمولاً نشان دهنده تنگنای ورودی/خروجی است. همچنین ممکن است نشان‌دهنده این باشد که مسدود کردن بیش از حد درشت است و تنها چند رشته می‌توانند در یک زمان اجرا شوند.
  • گلوگاه I/O وجود دارد، مخصوصاً در فضای ذخیره‌سازی غیر SSD مانند دستگاه‌های بلوک مجازی ارائه‌دهندگان ابری.
  • VictoriaMetrics بهترین بهینه سازی را برای ذخیره سازی ورودی/خروجی آهسته و کم ارائه می دهد. بهترین سرعت و بهترین نسبت تراکم را فراهم می کند.

بارگیری تصویر تک سرور VictoriaMetrics و آن را روی داده های خود امتحان کنید. باینری استاتیک مربوطه در این آدرس موجود است GitHub.

بیشتر در مورد VictoriaMetrics در این مطلب بخوانید مقاله.

به روز رسانی: منتشر شد مقاله مقایسه عملکرد درج VictoriaMetrics با InfluxDB با نتایج قابل تکرار

به روز رسانی شماره 2: همچنین بخوانید مقاله در مورد مقیاس پذیری عمودی VictoriaMetrics در مقابل InfluxDB در مقابل TimescaleDB.

به روز رسانی شماره 3: VictoriaMetrics اکنون منبع باز است!

چت تلگرام: https://t.me/VictoriaMetrics_ru1

منبع: www.habr.com

اضافه کردن نظر