VictoriaMetrics, TimescaleDB සහ InfluxDB සංසන්දනය කරන ලදී
මීට වසර කිහිපයකට පෙර Zabbix යුගයක් විය. සෑම හිස් ලෝහ සේවාදායකයකටම දර්ශක කිහිපයකට වඩා නොතිබුණි - CPU භාවිතය, RAM භාවිතය, තැටි භාවිතය සහ ජාල භාවිතය. මේ ආකාරයට, සේවාදායකයන් දහස් ගණනක ප්රමිතික අද්විතීය කාල ශ්රේණි 40 කට ගැලපේ, සහ Zabbix හට කාල ශ්රේණි දත්ත සඳහා පසුබිමක් ලෙස MySQL භාවිතා කළ හැක :)
දැනට තනියම
මේ මොහොතේ අද්විතීය කාල ශ්රේණි විශාල සංඛ්යාව කුමක්ද? සමහරවිට 400K හෝ 4M? නැත්නම් මීටර් 40? අපි නවීන TSDB මෙම සංඛ්යා සමඟ සංසන්දනය කරමු.
මිණුම් ලකුණක් ස්ථාපනය කිරීම
-scale-var
) 10 යනු එක් එක් සත්කාරක හෝ සේවාදායකය මත ජනනය කරන ලද මිනුම් (මිතික) ගණනයි. මිණුම් ලකුණ සඳහා TSBS භාවිතයෙන් පහත දත්ත කට්ටල ජනනය කරන ලදී:
- 400K අද්විතීය කාල ශ්රේණියක්, දත්ත ලක්ෂ්ය අතර තත්පර 60 ක පරතරයක්, දත්ත සම්පූර්ණ දින 3ක් පුරා විහිදේ, මුළු දත්ත ලක්ෂ්ය ගණන ~1.7B.
- 4M අද්විතීය කාල ශ්රේණියක්, තත්පර 600 ක පරතරයක්, දත්ත සම්පූර්ණ දින 3 ක්, ~1.7B මුළු දත්ත ලක්ෂ්ය සංඛ්යාව.
- 40M අද්විතීය කාල ශ්රේණියක්, පැය 1 ක පරතරයක්, දත්ත සම්පූර්ණ දින 3 ක්, ~2.8B මුළු දත්ත ලක්ෂ්ය සංඛ්යාව.
සේවාලාභියා සහ සේවාදායකය කැප වූ අවස්ථා මත ක්රියාත්මක විය
- vCPUs: 16
- RAM: 60 GB
- ගබඩාව: සම්මත 1TB HDD. එය 120 Mbps කියවීමේ/ලිවීමේ ප්රතිදානය, තත්පරයකට කියවීම් මෙහෙයුම් 750 ක් සහ තත්පරයකට 1,5K ලිවීම් සපයයි.
TSDBs නිල ඩොකර් රූපවලින් උපුටා ගන්නා ලද අතර පහත වින්යාසයන් සමඟ ඩොකර් තුළ ක්රියාත්මක වේ:
-
වික්ටෝරියා මෙට්රික්ස්:
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,6M; RAM භාවිතය: 3 GB; තැටියේ අවසාන දත්ත ප්රමාණය: 965 MB
- InfluxDB: තත්පරයකට දත්ත ලක්ෂ්ය 1.2M; RAM භාවිතය: 8.5 GB; තැටියේ අවසාන දත්ත ප්රමාණය: 1.6 GB
- කාල පරාසය: තත්පරයට දත්ත ලක්ෂ්ය 849K; RAM භාවිතය: 2,5 GB; තැටියේ අවසාන දත්ත ප්රමාණය: 50 GB
ඉහත ප්රතිඵල වලින් ඔබට පෙනෙන පරිදි, VictoriaMetrics ඇතුළත් කිරීමේ කාර්ය සාධනය සහ සම්පීඩන අනුපාතය ජය ගනී. RAM භාවිතයේදී කාල රේඛාව ජය ගනී, නමුත් එය විශාල තැටි ඉඩක් භාවිතා කරයි - දත්ත ලක්ෂ්යයකට බයිට් 29ක්.
මිණුම් ලකුණ තුළ එක් එක් TSDB සඳහා CPU භාවිත ප්රස්ථාර පහත දැක්වේ:
ඉහත දැක්වෙන්නේ තිර රුවක්: VictoriaMetrics - අද්විතීය 400K මෙට්රික් සඳහා ඇතුළත් කිරීමේ පරීක්ෂණය අතරතුර CPU පැටවීම.
ඉහත දැක්වෙන්නේ තිර රුවක්: InfluxDB - අද්විතීය මෙට්රික් 400K සඳහා ඇතුළත් කිරීමේ පරීක්ෂණය අතරතුර CPU පැටවීම.
ඉහත දැක්වෙන්නේ තිර රුවක්: TimescaleDB - 400K හි අද්විතීය මෙට්රික් එකක් සඳහා ඇතුළත් කිරීමේ පරීක්ෂණය අතරතුර CPU පැටවීම.
VictoriaMetrics පවතින සියලුම vCPUs භාවිත කරන අතර InfluxDB vCPUs 2න් ~16ක් අඩුවෙන් භාවිත කරයි.
කාල පරාසය භාවිතා කරන්නේ 3 vCPU වලින් 4-16ක් පමණි. TimescaleDB කාලපරිමාණ ප්රස්ථාරයෙහි iowait සහ පද්ධතියේ ඉහළ ප්රතිශතයන් ආදාන/ප්රතිදානය (I/O) උපපද්ධතියේ බාධාවක් පෙන්නුම් කරයි. තැටි කලාප පළල භාවිත ප්රස්ථාර බලමු:
ඉහත දැක්වෙන්නේ තිර රුවක්: VictoriaMetrics - Unique Metrics 400K සඳහා ඇතුළත් කිරීමේ පරීක්ෂණයේදී තැටි කලාප පළල භාවිතය.
ඉහත දැක්වෙන්නේ තිර රුවක්: InfluxDB - Unique Metrics 400K සඳහා ඇතුළත් කිරීමේ පරීක්ෂණයේදී තැටි කලාප පළල භාවිතය.
ඉහත දැක්වෙන්නේ තිර රුවක්: TimescaleDB - Unique Metrics 400K සඳහා ඇතුළත් කිරීමේ පරීක්ෂණයේදී තැටි කලාප පළල භාවිතය.
VictoriaMetrics 20 Mbps වේගයකින් 45 Mbps දක්වා උපරිම දත්ත වාර්තා කරයි. කඳු මුදුන් ගසෙහි විශාල අර්ධ ඒකාබද්ධ කිරීම් වලට අනුරූප වේ
InfluxDB 160 MB/s දී දත්ත ලියන අතර 1 TB ධාවකයක්
TimescaleDB 120 Mbps ප්රතිදානය ලිවීමට සීමා වේ, නමුත් සමහර විට එය මෙම සීමාව බිඳ දමා උපරිම අගයන් 220 Mbps දක්වා ළඟා වේ. මෙම කඳු මුදුන් පෙර ප්රස්ථාරයේ ප්රමාණවත් නොවන CPU භාවිතයේ නිම්නවලට අනුරූප වේ.
ආදාන/ප්රතිදානය (I/O) භාවිත ප්රස්ථාර දෙස බලමු:
ඉහත තිර රුවක්: VictoriaMetrics - 400K අනන්ය ප්රමිතික සඳහා පරීක්ෂණ I/O භාවිතය ඇතුළු කරන්න.
ඉහත දැක්වෙන්නේ තිර රුවක්: InfluxDB - 400K අනන්ය ප්රමිතික සඳහා පරීක්ෂණ I/O භාවිතය ඇතුළු කරන්න.
ඉහත දැක්වෙන්නේ තිර රුවක්: TimescaleDB - 400K අද්විතීය ප්රමිතික සඳහා පරීක්ෂණ I/O භාවිතය ඇතුළු කරන්න.
TimescaleDB එහි I/O සීමාවට ළඟා වන බව දැන් පැහැදිලිය, එබැවින් එයට ඉතිරි 12 vCPU භාවිතා කළ නොහැක.
4M අද්විතීය කාල මාලාව
4M කාල මාලාව ටිකක් අභියෝගාත්මකයි. නමුත් අපේ තරඟකරුවන් මේ විභාගය සාර්ථකව සමත් වෙනවා. මිණුම් ලකුණ ප්රතිඵල:
- VictoriaMetrics: තත්පරයකට දත්ත ලක්ෂ්ය 2,2; RAM භාවිතය: 6 GB; තැටියේ අවසාන දත්ත ප්රමාණය: 3 GB.
- InfluxDB: තත්පරයට 330K දත්ත ලකුණු; RAM භාවිතය: 20,5 GB; තැටියේ අවසාන දත්ත ප්රමාණය: 18,4 GB.
- TimescaleDB: තත්පරයකට දත්ත ලක්ෂ්ය 480K; RAM භාවිතය: 2,5 GB; තැටියේ අවසාන දත්ත ප්රමාණය: 52 GB.
InfluxDB කාර්ය සාධනය 1,2K කාල ශ්රේණියක් සඳහා තත්පරයට 400M දත්ත ලක්ෂ්යයේ සිට 330M කාල ශ්රේණියක් සඳහා තත්පරයට 4K දත්ත ලක්ෂ්ය දක්වා පහත වැටුණි. මෙය අනෙකුත් තරඟකරුවන්ට සාපේක්ෂව සැලකිය යුතු කාර්ය සාධන අලාභයකි. මෙම අලාභයට මූලික හේතුව තේරුම් ගැනීමට CPU භාවිත ප්රස්ථාර දෙස බලමු:
ඉහත දැක්වෙන්නේ තිර රුවක්: VictoriaMetrics - අද්විතීය 4M කාල ශ්රේණියක් සඳහා ඇතුළත් කිරීමේ පරීක්ෂණයේදී CPU භාවිතය.
ඉහත දැක්වෙන්නේ තිර රුවක්: InfluxDB - අද්විතීය 4M කාල ශ්රේණි සඳහා ඇතුළත් කිරීමේ පරීක්ෂණය අතරතුර CPU භාවිතය.
ඉහත දැක්වෙන්නේ තිර රුවක්: TimescaleDB - අද්විතීය 4M කාල ශ්රේණියක් සඳහා ඇතුළත් කිරීමේ පරීක්ෂණය අතරතුර CPU භාවිතය.
VictoriaMetrics සැකසුම් ඒකක (CPU) බලය සියල්ලම පාහේ භාවිතා කරයි. අවසානයේ ඇති පහත වැටීම සියලු දත්ත ඇතුළත් කිරීමෙන් පසු ඉතිරි LSM ඒකාබද්ධ කිරීම් වලට අනුරූප වේ.
InfluxDB භාවිතා කරන්නේ 8 vCPUs 16ක් පමණක් වන අතර TimsecaleDB vCPUs 4න් 16ක් භාවිතා කරයි. ඔවුන්ගේ ප්රස්ථාරවල පොදුවේ ඇත්තේ කුමක්ද? ඉහළ කොටස iowait
, එය නැවතත් I/O බාධකයක් පෙන්නුම් කරයි.
TimescaleDB හි ඉහළ කොටස ඇත system
. අපි උපකල්පනය කරන්නේ අධි බලය බොහෝ පද්ධති ඇමතුම් හෝ බොහෝ දේ ඇති වූ බවයි
තැටි ප්රස්ථාර දෙස බලමු:
ඉහත දැක්වෙන්නේ තිර රුවක්: VictoriaMetrics - 4M අනන්ය ප්රමිතික ඇතුළු කිරීමට තැටි කලාප පළල භාවිතා කිරීම.
ඉහත දැක්වෙන්නේ තිර රුවක්: InfluxDB - 4M අනන්ය මෙට්රික්ස් ඇතුළු කිරීමට තැටි කලාප පළල භාවිතා කිරීම.
ඉහත දැක්වෙන්නේ තිර රුවක්: TimescaleDB - 4M අනන්ය ප්රමිතික ඇතුළු කිරීමට තැටි කලාප පළල භාවිතා කිරීම.
VictoriaMetrics උපරිමයේ දී 120 MB/s සීමාවකට ළඟා වූ අතර සාමාන්ය ලිවීමේ වේගය 40 MB/s විය. උච්ච අවස්ථාවේදී අධික LSM විලයන කිහිපයක් සිදු කර ඇති බව පෙනේ.
InfluxDB නැවතත් 200 MB/s ලිවීමේ සීමාවක් සහිත තැටියක 340 MB/s දක්වා උච්ච සහිත 120 MB/s ක සාමාන්ය ලිවීමේ ප්රතිදානයක් මිරිකයි :)
TimescaleDB තවදුරටත් තැටි සීමා නොවේ. එය ඉහළ අනුපාතයට සම්බන්ධ වෙනත් දෙයකින් සීමා වී ඇති බව පෙනේ системной
CPU පැටවීම.
IO භාවිත ප්රස්ථාර දෙස බලමු:
ඉහත දැක්වෙන්නේ තිර රුවක්: VictoriaMetrics - අද්විතීය 4M කාල ශ්රේණියක් සඳහා ඇතුළත් කිරීමේ පරීක්ෂණයේදී I/O භාවිතා කිරීම.
ඉහත දැක්වෙන්නේ තිර රුවක්: InfluxDB - අද්විතීය 4M කාල ශ්රේණියක් සඳහා ඇතුළත් කිරීමේ පරීක්ෂණයේදී I/O භාවිතා කිරීම.
ඉහත දැක්වෙන්නේ තිර රුවක්: TimescaleDB - අද්විතීය 4M කාල ශ්රේණි සඳහා ඇතුළත් කිරීමේ පරීක්ෂණය අතරතුර I/O භාවිතය.
IO භාවිත රටා තැටි කලාප පළල පිළිබිඹු කරයි - InfluxDB IO සීමිත වන අතර VictoriaMetrics සහ TimescaleDB අමතර IO සම්පත් ඇත.
40M අද්විතීය කාල මාලාව
InfluxDB සඳහා 40M අද්විතීය කාල ශ්රේණිය ඉතා විශාල විය :)
මිණුම් ලකුණ ප්රතිඵල:
- VictoriaMetrics: තත්පරයකට දත්ත ලක්ෂ්ය 1,7M; RAM භාවිතය: 29 GB; තැටි ඉඩ භාවිතය: 17 GB.
- InfluxDB: එයට 60GB RAM ප්රමාණයකට වඩා අවශ්ය වූ නිසා අවසන් නොකළේය.
- TimescaleDB: තත්පරයකට දත්ත ලකුණු 330K, RAM භාවිතය: 2,5 GB; තැටි ඉඩ භාවිතය: 84GB.
TimescaleDB 2,5 GB හි සුවිශේෂී අඩු සහ ස්ථායී RAM භාවිතයක් පෙන්වයි - අද්විතීය 4M සහ 400K මෙට්රික් සඳහා සමාන වේ.
VictoriaMetrics 100M ටැග් කරන ලද මෙට්රික් නම් සකසන තෙක් තත්පරයට දත්ත ලක්ෂ්ය 40k වේගයකින් සෙමින් විශාල විය. ඉන්පසු ඔහු තත්පරයකට දත්ත ලක්ෂ්ය 1,5-2,0M හි තිරසාර ඇතුළත් කිරීමේ වේගයක් ලබා ගත් අතර, එම නිසා අවසාන ප්රතිඵලය තත්පරයට දත්ත ලක්ෂ්ය 1,7M විය.
40M අද්විතීය කාල ශ්රේණි සඳහා ප්රස්ථාර 4M අද්විතීය කාල ශ්රේණි සඳහා ප්රස්ථාරවලට සමාන වේ, එබැවින් අපි ඒවා මඟ හරින්නෙමු.
සොයා ගැනීම්
- නවීන TSDBs තනි සේවාදායකයක් මත මිලියන ගණනක් අද්විතීය කාල ශ්රේණි සඳහා ඇතුළු කිරීම් සැකසීමේ හැකියාව ඇත. මීළඟ ලිපියෙන්, අපි TSDBs මිලියන ගණනක අද්විතීය කාල ශ්රේණි හරහා තෝරා ගැනීම කොතරම් හොඳින් සිදු කරයිද යන්න පරීක්ෂා කරන්නෙමු.
- ප්රමාණවත් නොවන CPU භාවිතය සාමාන්යයෙන් I/O බාධකයක් පෙන්නුම් කරයි. වරකට ක්රියාත්මක කළ හැකි නූල් කිහිපයක් පමණක් සමඟ අවහිර කිරීම ඉතා ගොරෝසු බව ද එයින් ඇඟවිය හැක.
- I/O බාධාව පවතී, විශේෂයෙන්ම Cloud සපයන්නන්ගේ අථත්යකරණය කළ බ්ලොක් උපාංග වැනි SSD නොවන ගබඩා තුළ.
- VictoriaMetrics මන්දගාමී, අඩු I/O ආචයනය සඳහා හොඳම ප්රශස්තකරණය සපයයි. එය හොඳම වේගය සහ හොඳම සම්පීඩන අනුපාතය සපයයි.
බාගත
VictoriaMetrics ගැන වැඩිදුර කියවන්න මේකේ
යාවත්කාලීන: ප්රකාශිත
යාවත්කාලීන #2: මෙයද කියවන්න
යාවත්කාලීන #3:
විදුලි පණිවුඩ කතාබස්:
මූලාශ්රය: www.habr.com