Жоғары өнімді TSDB эталоны VictoriaMetrics және TimescaleDB және InfluxDB

VictoriaMetrics, TimescaleDB және InfluxDB салыстырылды алдыңғы мақала 40K бірегей уақыт сериясына жататын миллиард деректер нүктесі бар деректер жиынында.

Бірнеше жыл бұрын Заббикс дәуірі болды. Әрбір жалаңаш металл серверде бірнеше көрсеткіштер болды - процессорды пайдалану, жедел жадты пайдалану, дискіні пайдалану және желіні пайдалану. Осылайша, мыңдаған серверлерден алынған көрсеткіштер 40 мың бірегей уақыт сериясына сәйкес келуі мүмкін және Zabbix MySQL-ті уақыт сериялары деректері үшін сервер ретінде пайдалана алады :)

Қазіргі уақытта жалғыз түйін_экспорттаушысы әдепкі конфигурациялары бар орташа хостта 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.
  • 40M бірегей уақыт сериясы, 1 сағаттық интервал, деректер толық 3 күнді қамтиды, деректер нүктелерінің жалпы саны ~2.8B.

Клиент пен сервер арнайы даналарда жұмыс істеп тұрды n1-стандартты-16 Google бұлтында. Бұл даналардың келесі конфигурациялары болды:

  • vCPU: 16
  • Жад: 60 Гбайт
  • Сақтау: стандартты 1 ТБ қатты диск. Ол 120 Мбит/с оқу/жазу өткізу қабілетін, секундына 750 оқу операциясын және секундына 1,5 К жазуды қамтамасыз етеді.

TSDB файлдары ресми докер кескіндерінен алынды және келесі конфигурациялармен докерде іске қосылды:

  • Виктория көрсеткіштері:

    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.2М деректер нүктесі; ЖЖҚ пайдалану: 8.5 ГБ; Дискідегі соңғы деректер өлшемі: 1.6 ГБ
  • Уақыт шкаласы: секундына 849K деректер нүктесі; ЖЖҚ пайдалану: 2,5 ГБ; Дискідегі соңғы деректер өлшемі: 50 ГБ

Жоғарыдағы нәтижелерден көріп отырғаныңыздай, VictoriaMetrics кірістіру өнімділігі мен қысу қатынасында жеңіске жетеді. Уақыт шкаласы жедел жадты пайдалануда жеңеді, бірақ ол дискілік кеңістікті көп пайдаланады - деректер нүктесіне 29 байт.

Төменде салыстыру кезінде әрбір TSDB үшін CPU пайдалану графиктері берілген:

Жоғары өнімді TSDB эталоны VictoriaMetrics және TimescaleDB және InfluxDB

Жоғарыда скриншот бар: VictoriaMetrics - бірегей 400K метрика үшін кірістіру сынағы кезінде CPU жүктемесі.

Жоғары өнімді TSDB эталоны VictoriaMetrics және TimescaleDB және InfluxDB

Жоғарыда скриншот бар: InfluxDB - бірегей метрикалық 400K үшін кірістіру сынағы кезіндегі CPU жүктемесі.

Жоғары өнімді TSDB эталоны VictoriaMetrics және TimescaleDB және InfluxDB

Жоғарыда скриншот бар: TimescaleDB - 400K бірегей метрика үшін кірістіру сынағы кезінде CPU жүктемесі.

VictoriaMetrics барлық қол жетімді vCPU-ларды пайдаланады, ал InfluxDB 2 vCPU-ның ~16-сін жеткіліксіз пайдаланады.

Уақыт шкаласы 3 vCPU-ның 4-16-ін ғана пайдаланады. TimescaleDB уақыт шкаласы графигіндегі iowait пен жүйенің жоғары пропорциялары кіріс/шығыс (I/O) ішкі жүйесіндегі тығырықты көрсетеді. Дискінің өткізу қабілеттілігін пайдалану графиктерін қарастырайық:

Жоғары өнімді TSDB эталоны VictoriaMetrics және TimescaleDB және InfluxDB

Жоғарыда скриншот бар: VictoriaMetrics - Бірегей метрика 400K үшін кірістіру сынағында диск өткізу қабілетін пайдалану.

Жоғары өнімді TSDB эталоны VictoriaMetrics және TimescaleDB және InfluxDB

Жоғарыда скриншот бар: InfluxDB - Бірегей метрика 400K үшін кірістіру сынағы кезінде диск өткізу қабілетін пайдалану.

Жоғары өнімді TSDB эталоны VictoriaMetrics және TimescaleDB және InfluxDB

Жоғарыда скриншот бар: TimescaleDB - Бірегей метрика 400K үшін кірістіру сынағында диск өткізу қабілетін пайдалану.

VictoriaMetrics деректерді 20 Мбит/с жылдамдықпен 45 Мбит/с шыңға дейін жазады. Шыңдар ағаштағы үлкен ішінара біріктірулерге сәйкес келеді ҮЕҰ.

InfluxDB деректерді 160 МБ/с, ал 1 ТБ дискімен жазады шектелуі керек жазу өткізу қабілеті 120 МБ/с.

TimescaleDB 120 Мбит/с жазу өткізу қабілетімен шектелген, бірақ кейде ол бұл шектеуді бұзады және ең жоғары мәндерде 220 Мбит/с жетеді. Бұл шыңдар алдыңғы графиктегі процессорды жеткіліксіз пайдалану аңғарларына сәйкес келеді.

Енгізу/шығару (енгізу/шығару) пайдалану графиктерін қарастырайық:

Жоғары өнімді TSDB эталоны VictoriaMetrics және TimescaleDB және InfluxDB

Жоғарыда скриншот бар: VictoriaMetrics - 400K бірегей көрсеткіштер үшін сынақ енгізу/шығару пайдалануын кірістіру.

Жоғары өнімді TSDB эталоны VictoriaMetrics және TimescaleDB және InfluxDB

Жоғарыда скриншот бар: InfluxDB - 400K бірегей көрсеткіштер үшін сынақ енгізу/шығару пайдалануын кірістіру.

Жоғары өнімді TSDB эталоны VictoriaMetrics және TimescaleDB және InfluxDB

Жоғарыда скриншот бар: TimescaleDB - 400K бірегей көрсеткіштер үшін сынақ енгізу/шығару пайдалануын кірістіру.

Енді TimescaleDB өзінің енгізу/шығару шегіне жеткені анық, сондықтан ол қалған 12 vCPU пайдалана алмайды.

4М бірегей уақыт сериясы

4M уақыт сериясы біршама қиын көрінеді. Бірақ біздің бәсекелестер бұл емтиханды сәтті тапсырады. Бенчмарк нәтижелері:

  • VictoriaMetrics: секундына 2,2 миллион деректер нүктесі; ЖЖҚ пайдалану: 6 ГБ; Дискідегі соңғы деректер өлшемі: 3 ГБ.
  • InfluxDB: секундына 330K деректер нүктесі; ЖЖҚ пайдалану: 20,5 ГБ; Дискідегі соңғы деректер өлшемі: 18,4 ГБ.
  • TimescaleDB: секундына 480K деректер нүктесі; ЖЖҚ пайдалану: 2,5 ГБ; Дискідегі соңғы деректер өлшемі: 52 ГБ.

InfluxDB өнімділігі 1,2K уақыт сериясы үшін секундына 400М деректер нүктесінен 330М уақыт сериясы үшін секундына 4K деректер нүктесіне дейін төмендеді. Бұл басқа бәсекелестермен салыстырғанда айтарлықтай өнімділік жоғалту. Бұл жоғалтудың негізгі себебін түсіну үшін процессорды пайдалану графиктерін қарастырайық:

Жоғары өнімді TSDB эталоны VictoriaMetrics және TimescaleDB және InfluxDB

Жоғарыда скриншот бар: VictoriaMetrics - бірегей 4M уақыт сериясы үшін кірістіру сынағы кезінде процессорды пайдалану.

Жоғары өнімді TSDB эталоны VictoriaMetrics және TimescaleDB және InfluxDB

Жоғарыда скриншот бар: InfluxDB - бірегей 4M уақыт сериясы үшін кірістіру сынағы кезінде процессорды пайдалану.

Жоғары өнімді TSDB эталоны VictoriaMetrics және TimescaleDB және InfluxDB

Жоғарыда скриншот бар: TimescaleDB - бірегей 4M уақыт сериясы үшін кірістіру сынағы кезінде процессорды пайдалану.

VictoriaMetrics процессордың (CPU) барлық дерлік қуатын пайдаланады. Соңындағы төмендеу барлық деректер енгізілгеннен кейін қалған LSM біріктірулеріне сәйкес келеді.

InfluxDB 8 vCPU-ның 16-ін ғана пайдаланады, ал TimsecaleDB 4 vCPU-ның 16-ін пайдаланады. Олардың графиктерінде қандай ортақ нәрсе бар? Жоғары үлес 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 - бірегей 4M уақыт сериясы үшін кірістіру сынағы кезінде енгізу/шығаруды пайдалану.

Жоғары өнімді TSDB эталоны VictoriaMetrics және TimescaleDB және InfluxDB

Жоғарыда скриншот бар: InfluxDB - бірегей 4M уақыт сериясы үшін кірістіру сынағы кезінде енгізу/шығаруды пайдалану.

Жоғары өнімді TSDB эталоны VictoriaMetrics және TimescaleDB және InfluxDB

Жоғарыда скриншот бар: TimescaleDB - бірегей 4M уақыт сериясы үшін кірістіру сынағы кезінде енгізу/шығару пайдалану.

IO пайдалану үлгілері дискінің өткізу қабілеттілігін көрсетеді - InfluxDB IO шектеулі, ал VictoriaMetrics және TimescaleDB қосалқы IO ресурстарына ие.

40 миллион бірегей уақыт сериясы

40М бірегей уақыт сериясы InfluxDB үшін тым үлкен болды :)

Бенчмарк нәтижелері:

  • VictoriaMetrics: секундына 1,7 миллион деректер нүктесі; ЖЖҚ пайдалану: 29 ГБ; Диск кеңістігін пайдалану: 17 ГБ.
  • InfluxDB: аяқталмады, себебі ол 60 ГБ-тан астам жедел жадты қажет етті.
  • TimescaleDB: секундына 330K деректер нүктесі, ЖЖҚ пайдалану: 2,5 ГБ; Диск кеңістігін пайдалану: 84 ГБ.

TimescaleDB 2,5 ГБ жадты өте төмен және тұрақты пайдалануды көрсетеді – бірегей 4M және 400K көрсеткіштерімен бірдей.

VictoriaMetrics барлық 100 миллион тегтелген метрика атаулары өңделгенше секундына 40 мың деректер нүктесі жылдамдығымен баяу өсті. Содан кейін ол секундына 1,5-2,0 М деректер нүктесінің тұрақты кірістіру жылдамдығына қол жеткізді, сондықтан соңғы нәтиже секундына 1,7 миллион деректер нүктесі болды.

40М бірегей уақыт сериясының графиктері 4М бірегей уақыт сериясының графиктеріне ұқсас, сондықтан оларды өткізіп жіберейік.

қорытындылар

  • Қазіргі заманғы TSDBs бір серверде миллиондаған бірегей уақыт сериялары үшін кірістірулерді өңдеуге қабілетті. Келесі мақалада біз TSDBs миллиондаған бірегей уақыт сериялары бойынша таңдауды қаншалықты жақсы орындайтынын тексереміз.
  • Процессордың жеткіліксіз пайдаланылуы әдетте енгізу/шығару тығырығын көрсетеді. Бұл сондай-ақ блоктаудың тым өрескел екенін, бір уақытта бірнеше ағындардың ғана жұмыс істей алатынын көрсетуі мүмкін.
  • Енгізу/шығару мәселесі, әсіресе бұлттық провайдерлердің виртуалдандырылған блок құрылғылары сияқты SSD емес жадта бар.
  • VictoriaMetrics баяу, төмен енгізу/шығару жады үшін ең жақсы оңтайландыруды қамтамасыз етеді. Ол ең жақсы жылдамдық пен ең жақсы қысу қатынасын қамтамасыз етеді.

Жүктеу VictoriaMetrics бір серверлік кескін және оны деректеріңізде қолданып көріңіз. Сәйкес статикалық екілік мына жерден қол жетімді GitHub.

VictoriaMetrics туралы толығырақ мына жерден оқыңыз мақала.

Жаңарту: жарияланды VictoriaMetrics кірістіру өнімділігін InfluxDB-мен салыстыратын мақала қайталанатын нәтижелермен.

№2 жаңарту: Сондай-ақ оқыңыз VictoriaMetrics және InfluxDB және TimescaleDB арасындағы тік масштабтауға арналған мақала.

№3 жаңарту: VictoriaMetrics енді ашық көзі болып табылады!

Telegram чаты: https://t.me/VictoriaMetrics_ru1

Ақпарат көзі: www.habr.com

пікір қалдыру