ආයුබෝවන් සියල්ලටම! ඔහුගේ තුළ
Graphite+Whisper හි ප්රමිතික ගබඩා කිරීමේ සිට Graphite+ClickHouse දක්වා සංක්රමණය අපි සංවිධානය කළේ කෙසේදැයි මම ඔබට පැවසීමට පෙර, එවැනි තීරණයක් ගැනීමට හේතු සහ දිගු කලක් අප සමඟ ජීවත් වූ විස්පර් හි අවාසි පිළිබඳව තොරතුරු ලබා දීමට මම කැමැත්තෙමි.
Graphite+Whisper ගැටළු
1. තැටි උප පද්ධතිය මත අධික බරක්
සංක්රමණය වන විට ආසන්න වශයෙන් මිනිත්තුවකට මෙට්රික් මිලියන 1.5ක් අප වෙත පැමිණෙමින් තිබුණි. එවැනි ප්රවාහයක් සමඟ, සේවාදායකයන් මත තැටි භාවිතය ~ 30% කි. පොදුවේ ගත් කල, මෙය බෙහෙවින් පිළිගත හැකි විය - සෑම දෙයක්ම ස්ථාවර ලෙස ක්රියාත්මක විය, ඉක්මනින් ලියා ඇත, ඉක්මනින් කියවා ඇත ... එක් සංවර්ධන කණ්ඩායමක් නව විශේෂාංගයක් ඉදිරිපත් කර විනාඩියකට මෙට්රික් මිලියන 10 ක් අපට යැවීමට පටන් ගන්නා තෙක්. තැටි උප පද්ධතිය තද වූ විට, අපි 100% භාවිතා කළෙමු. ගැටලුව ඉක්මනින් විසඳා ඇත, නමුත් ඉතිරිව පවතී.
2. අනුකරණය සහ අනුකූලතාව නොමැතිකම
බොහෝ දුරට ඉඩ ඇත්තේ, Graphite+Whisper භාවිතා කරන/භාවිතා කරන සෑම කෙනෙකුම මෙන්, දෝෂ ඉවසීම ඇති කිරීම සඳහා අපි එකම ප්රමිතික ප්රවාහයම Graphite servers කිහිපයකට වත් කළෙමු. තවද මේ සම්බන්ධයෙන් විශේෂ ගැටළු කිසිවක් නොතිබුණි - කිසියම් හේතුවක් නිසා එක් සේවාදායකයක් බිඳ වැටෙන මොහොත දක්වා. සමහර විට අපි වැටුණු සේවාදායකයක් ඉක්මනින් ලබා ගැනීමට සමත් වූ අතර, කාබන්-සී-රිලේ එහි හැඹිලියෙන් ප්රමිතික එයට පූරණය කිරීමට සමත් විය, නමුත් සමහර විට එසේ නොවේ. ඊට පස්සේ අපි rsync වලින් පුරවන ලද මෙට්රික් වල සිදුරක් තිබුණා. ක්රියා පටිපාටිය තරමක් දිගු විය. එකම ගැලවීම නම් මෙය සිදු වූයේ ඉතා කලාතුරකිනි. අපි වරින් වර අහඹු ප්රමිතික කට්ටලයක් ගෙන ඒවා පොකුරේ අසල්වැසි නෝඩ් වල එකම වර්ගයේ අනෙක් ඒවා සමඟ සංසන්දනය කළෙමු. අවස්ථා වලින් 5% ක් පමණ, අගයන් කිහිපයක් වෙනස් වූ අතර, එය අප එතරම් සතුටට පත් නොවීය.
3. විශාල පා සටහන්
අපි ග්රැෆයිට් හි යටිතල පහසුකම් පමණක් නොව, ව්යාපාරික ප්රමිතික (සහ දැන් කුබර්නෙටස් වෙතින් ද ප්රමිතික) ලියන බැවින්, මෙට්රික් වල අගයන් කිහිපයක් පමණක් අඩංගු වන තත්වයක් අපට බොහෝ විට ලැබේ, සහ .wsp ගොනුව නිර්මාණය කර ඇත්තේ සියලු රඳවා තබා ගැනීම සැලකිල්ලට ගනිමින් ය. කාලසීමාව, සහ කලින් වෙන් කළ ඉඩ ප්රමාණයක් ගනී, එය අපට ~2MB විය. කාලයත් සමඟ සමාන ලිපිගොනු විශාල ප්රමාණයක් දිස්වන අතර, ඒවා පිළිබඳ වාර්තා ගොඩනඟන විට, හිස් ලකුණු කියවීමට බොහෝ කාලයක් හා සම්පත් අවශ්ය වීම නිසා ගැටලුව තවත් උග්ර වේ.
ඉහත විස්තර කර ඇති ගැටළු විවිධ ක්රම භාවිතා කිරීම සහ විවිධ ඵලදායිතාවයන් සමඟ කටයුතු කළ හැකි බව මම වහාම සටහන් කිරීමට කැමැත්තෙමි, නමුත් ඔබට වැඩි දත්ත ලැබීමට පටන් ගන්නා තරමට ඒවා නරක අතට හැරේ.
ඉහත සියල්ල තිබීම (පෙර සැලකිල්ලට ගනිමින්
Graphite+ClickHouse. අපේක්ෂාවන්
යාන්ඩෙක්ස් හි පිරිමි ළමයින්ගේ හමුවීම් කිහිපයකටම ගොස් කියවීමෙන් පසු
මම පහත සඳහන් දේ ලැබීමට කැමතියි:
- තැටි උප පද්ධති භාවිතය 30% සිට 5% දක්වා අඩු කිරීම;
- 1TB සිට 100GB දක්වා ඇති ඉඩ ප්රමාණය අඩු කරන්න;
- විනාඩියකට මෙට්රික් මිලියන 100ක් සේවාදායකයට ලබා ගැනීමට හැකි වීම;
- කොටුවෙන් පිටත දත්ත අනුකරණය සහ වැරදි ඉවසීම;
- වසරක් මෙම ව්යාපෘතියේ හිඳගෙන සාධාරණ කාල රාමුවක් තුළ සංක්රමණය නොකරන්න;
- අක්රිය කාලයකින් තොරව මාරු කරන්න.
තරමක් අභිලාෂකාමී, හරිද?
Graphite+ClickHouse. සංරචක
ග්රැෆයිට් ප්රොටෝකෝලය හරහා දත්ත ලබා ගැනීමට සහ පසුව එය ClickHouse හි සටහන් කිරීමට, මම තෝරා ගත්තෙමි
ClickHouse හි නවතම නිකුතුව, ස්ථාවර අනුවාදය 1.1.54253, කාල ශ්රේණි ගබඩා කිරීම සඳහා දත්ත ගබඩාව ලෙස තෝරා ගන්නා ලදී. එය සමඟ වැඩ කිරීමේදී ගැටළු ඇති විය: දෝෂ කන්දක් ලොග් වලට වත් කළ අතර, ඔවුන් සමඟ කළ යුතු දේ සම්පූර්ණයෙන්ම පැහැදිලි නැත. සමඟ සාකච්ඡාවක
ClickHouse වෙතින් දත්ත කියවීමට තෝරාගෙන ඇත
Graphite+ClickHouse. වගු ව්යුහය
"ග්රැෆයිට්" යනු අපි අධීක්ෂණ වගු සඳහා නිර්මාණය කළ දත්ත සමුදායකි.
“graphite.metrics” - ReplicatedReplacingMergeTree එන්ජිම සහිත වගුව (ප්රතිනිර්මාණය කරන ලදී
CREATE TABLE graphite.metrics ( Date Date, Level UInt32, Path String, Deleted UInt8, Version UInt32 ) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/replicator/graphite.metrics', ‘r1’, Date, (Level, Path), 8192, Version);
“graphite.data” - ReplicatedGraphiteMergeTree එන්ජිම සහිත වගුව (ප්රතිවර්තිත
CREATE TABLE graphite.data ( Path String, Value Float64, Time UInt32, Date Date, Timestamp UInt32 ) ENGINE = ReplicatedGraphiteMergeTree('/clickhouse/tables/replicator/graphite.data', 'r1', Date, (Path, Time), 8192, 'graphite_rollup')
"graphite.date_metrics" යනු ReplicatedReplacingMergeTree එන්ජිම සහිත කොන්දේසි සහිත වගුවකි. මෙම වගුව දිවා කාලයේ හමු වූ සියලු මිනුම්වල නම් සටහන් කරයි. එය නිර්මාණය කිරීමට හේතු කොටසේ විස්තර කර ඇත
CREATE MATERIALIZED VIEW graphite.date_metrics ( Path String, Level UInt32, Date Date) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/replicator/graphite.date_metrics', 'r1', Date, (Level, Path, Date), 8192) AS SELECT toUInt32(length(splitByChar('.', Path))) AS Level, Date, Path FROM graphite.data
“graphite.data_stat” - ReplicatedAggregatingMergeTree එන්ජිම (ප්රතිනිර්මාණය කරන ලද) සමඟ කොන්දේසිය අනුව පුරවන ලද වගුවකි
CREATE MATERIALIZED VIEW graphite.data_stat ( Date Date, Prefix String, Timestamp UInt32, Count AggregateFunction(count)) ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/tables/replicator/graphite.data_stat', 'r1', Date, (Timestamp, Prefix), 8192) AS SELECT toStartOfMonth(now()) AS Date, replaceRegexpOne(Path, '^([^.]+.[^.]+.[^.]+).*$', '1') AS Prefix, toUInt32(toStartOfMinute(toDateTime(Timestamp))) AS Timestamp, countState() AS Count FROM graphite.data GROUP BY Timestamp, Prefix
Graphite+ClickHouse. සංරචක අන්තර්ක්රියා රූප සටහන
Graphite+ClickHouse. දත්ත සංක්රමණය
මෙම ව්යාපෘතියේ අපේක්ෂාවෙන් අපට මතක ඇති පරිදි, ClickHouse වෙත සංක්රමණය අක්රිය වේලාවන් නොමැතිව විය යුතුය; ඒ අනුව, අපට කෙසේ හෝ අපගේ පරිශීලකයින් සඳහා හැකි තරම් විනිවිද පෙනෙන ලෙස අපගේ සම්පූර්ණ අධීක්ෂණ පද්ධතිය නව ගබඩාව වෙත මාරු කිරීමට සිදු විය.
අපි ඒක කළේ මෙහෙමයි.
-
ClickHouse වගු අනුකරණයට සහභාගී වන එක් සේවාදායකයක කාබන්-ක්ලික්හවුස් වෙත අතිරේක ප්රමිතික ප්රවාහයක් යැවීමට රීතියක් කාබන්-සී-රිලේ වෙත එක් කර ඇත.
-
අපි python හි කුඩා ස්ක්රිප්ට් එකක් ලියා, එය විස්පර්-ඩම්ප් පුස්තකාලය භාවිතයෙන්, අපගේ ගබඩාවෙන් සියලුම .wsp ගොනු කියවා මෙම දත්ත නූල් 24 කින් ඉහත විස්තර කර ඇති කාබන්-ක්ලික්හවුස් වෙත යවන ලදී. කාබන්-ක්ලික්හවුස් හි පිළිගත් මෙට්රික් අගයන් සංඛ්යාව මිනිත්තුවකට මිලියන 125 දක්වා ළඟා වූ අතර ClickHouse දහඩිය බිඳ දැමුවේ නැත.
-
පවතින උපකරණ පුවරු වල භාවිතා වන කාර්යයන් නිදොස් කිරීම සඳහා අපි වෙනම DataSource එකක් Grafana තුළ නිර්මාණය කළෙමු. අපි භාවිතා කරන ලද කාර්යයන් ලැයිස්තුවක් අපි හඳුනා ගත්තෙමු, නමුත් ඒවා කාබන්ඩයොක්සියෙහි ක්රියාත්මක කර නැත. අපි මෙම කාර්යයන් එකතු කර කාබොනාපි හි කතුවරුන් වෙත PR යවා ඇත (ඔවුන්ට විශේෂ ස්තුතිය).
- සමතුලිත සැකසුම් තුළ කියවීමේ භාරය මාරු කිරීම සඳහා, අපි graphite-api (Graphite+Whisper සඳහා API අතුරුමුහුණත) සිට carbonapi වෙත අන්ත ලක්ෂ්ය වෙනස් කළෙමු.
Graphite+ClickHouse. ප්රතිපල
-
තැටි උප පද්ධති භාවිතය 30% සිට 1% දක්වා අඩු කිරීම;
- 1 TB සිට 300 GB දක්වා අල්ලාගෙන සිටින ඉඩ ප්රමාණය අඩු කිරීම;
- අපට විනාඩියකට මෙට්රික් මිලියන 125 ක් සේවාදායකයට ලබා ගැනීමේ හැකියාව ඇත (සංක්රමණය වන අවස්ථාවේ දී ඉහළ යයි);
- සියලුම ප්රමිතික තත්පර තිස් දෙවන ගබඩා පරතරයකට මාරු කර ඇත;
- ලැබුණු දත්ත පිටපත් කිරීම සහ වැරදි ඉවසීම;
- අක්රිය කාලයකින් තොරව මාරු විය;
- සෑම දෙයක්ම සම්පූර්ණ කිරීමට සති 7 ක් පමණ ගත විය.
Graphite+ClickHouse. ගැටලු
අපේ නඩුවේදී, සමහර උගුල් තිබුණා. සංක්රමණයෙන් පසු අපට හමු වූයේ මෙයයි.
- ClickHouse සෑම විටම පියාසර කිරීමේදී වින්යාස නැවත කියවන්නේ නැත; සමහර විට එය නැවත ආරම්භ කිරීමට අවශ්ය වේ. උදාහරණයක් ලෙස, ClickHouse වින්යාසය තුළ සත්වෝද්යාන පාලක පොකුරේ විස්තරය සම්බන්ධයෙන්, clickhouse-server නැවත පණ ගන්වන තෙක් එය භාවිතා නොකළේය.
- විශාල ClickHouse ඉල්ලීම් සිදු නොවීය, එබැවින් graphite-clickhouse හි අපගේ ClickHouse සම්බන්ධතා තන්තුව මෙලෙස දිස්වේ:
url = "http://localhost:8123/?max_query_size=268435456&max_ast_elements=1000000"
- ClickHouse බොහෝ විට ස්ථාවර නිකුතු වල නව අනුවාද නිකුත් කරයි; ඒවායේ විස්මයන් අඩංගු විය හැක: ප්රවේශම් වන්න.
- kubernetes හි ගතිකව නිර්මාණය කරන ලද බහාලුම් කෙටි සහ අහඹු ආයු කාලයක් සහිත මෙට්රික් විශාල සංඛ්යාවක් යවයි. එවැනි ප්රමිතික සඳහා බොහෝ කරුණු නොමැති අතර, අවකාශය සමඟ ගැටළු නොමැත. නමුත් විමසුම් ගොඩනඟන විට, ClickHouse විසින් 'මිතික' වගුවෙන් මෙම ප්රමිතික විශාල ප්රමාණයක් ලබා ගනී. අවස්ථා 90% කදී, කවුළුවෙන් ඔබ්බට (පැය 24) ඔවුන් පිළිබඳ දත්ත නොමැත. නමුත් 'දත්ත' වගුවේ මෙම දත්ත සෙවීමට කාලය වැය වන අතර අවසානයේ කල් ඉකුත්වීමක් දක්වා දිව යයි. මෙම ගැටළුව විසඳීම සඳහා, අපි දිවා කාලයේ හමු වූ මිනුම් පිළිබඳ තොරතුරු සමඟ වෙනම දර්ශනයක් පවත්වා ගැනීමට පටන් ගත්තෙමු. මේ අනුව, ගතිකව නිර්මාණය කරන ලද බහාලුම් සඳහා වාර්තා (ප්රස්ථාර) තැනීමේදී, අපි විමසන්නේ දී ඇති කවුළුවක් තුළ හමු වූ ප්රමිතික පමණක් වන අතර, ඒවා පිළිබඳ වාර්තා ගොඩනැගීම සැලකිය යුතු ලෙස වේගවත් කළ මුළු කාලය සඳහා නොවේ. ඉහත විස්තර කර ඇති විසඳුම සඳහා, මම එකතු කළා
මිනිරන්-ක්ලික්හවුස් (දෙබලක) , දිනය_මිතික වගුව සමඟ වැඩ කිරීම ක්රියාත්මක කිරීම ඇතුළත් වේ.
Graphite+ClickHouse. ටැග්
1.1.0 අනුවාදය සමඟ ග්රැෆයිට් නිල විය
Graphite+ClickHouse. විෂමතා අනාවරකය
ඉහත විස්තර කර ඇති යටිතල පහසුකම් මත පදනම්ව, අපි විෂමතා අනාවරකයක මූලාකෘතියක් ක්රියාත්මක කර ඇති අතර එය ක්රියා කරයි! නමුත් ඔහු ගැන වැඩි විස්තර ඊළඟ ලිපියෙන්.
දායක වන්න, ඉහළ ඊතලය ඔබා සතුටු වන්න!
මූලාශ්රය: www.habr.com