میٹرکس اسٹوریج: کس طرح ہم نے Graphite+Whisper سے Graphite+ClickHouse میں تبدیل کیا

سب کو سلام! اس میں آخری آرٹیکل میں نے مائیکرو سروس فن تعمیر کے لیے ماڈیولر مانیٹرنگ سسٹم کو منظم کرنے کے بارے میں لکھا ہے۔ کچھ بھی نہیں کھڑا ہے، ہمارا پروجیکٹ مسلسل بڑھ رہا ہے، اور اسی طرح ذخیرہ شدہ میٹرکس کی تعداد بھی بڑھ رہی ہے۔ ہم نے کس طرح گریفائٹ+وِسپر سے گریفائٹ+کلِک ہاؤس کی منتقلی کو زیادہ بوجھ کے حالات میں منظم کیا، اس سے توقعات اور کٹ کے تحت منتقلی کے نتائج کے بارے میں پڑھیں۔

میٹرکس اسٹوریج: کس طرح ہم نے Graphite+Whisper سے Graphite+ClickHouse میں تبدیل کیا

اس سے پہلے کہ میں آپ کو بتاؤں کہ ہم نے Graphite+Whisper سے Graphite+ClickHouse میں میٹرکس کو ذخیرہ کرنے کا طریقہ کس طرح منظم کیا، میں اس طرح کا فیصلہ کرنے کی وجوہات اور وسپر کے ان نقصانات کے بارے میں معلومات دینا چاہوں گا جن کے ساتھ ہم طویل عرصے تک رہتے تھے۔

گریفائٹ + سرگوشی کے مسائل

1. ڈسک سب سسٹم پر زیادہ بوجھ

منتقلی کے وقت، تقریباً 1.5 ملین میٹرکس فی منٹ ہمارے پاس پہنچ رہے تھے۔ اس طرح کے بہاؤ کے ساتھ، سرورز پر ڈسک کا استعمال ~30% تھا۔ عام طور پر، یہ کافی قابل قبول تھا - سب کچھ مستحکم طریقے سے کام کرتا تھا، جلدی سے لکھا جاتا تھا، جلدی سے پڑھا جاتا تھا... یہاں تک کہ ترقیاتی ٹیموں میں سے ایک نے ایک نیا فیچر متعارف کرایا اور ہمیں 10 ملین میٹرک فی منٹ بھیجنا شروع کردیا۔ اس وقت جب ڈسک کا سب سسٹم سخت ہوگیا، اور ہم نے 100٪ استعمال دیکھا۔ مسئلہ فوری طور پر حل ہو گیا تھا، لیکن باقی رہ گیا.

2. نقل اور مستقل مزاجی کی کمی

غالباً، ہر اس شخص کی طرح جو Graphite+Whisper کا استعمال/استعمال کرتا ہے، ہم نے غلطی کی برداشت پیدا کرنے کے لیے ایک ہی وقت میں متعدد گریفائٹ سرورز پر میٹرکس کا ایک ہی سلسلہ ڈالا۔ اور اس میں کوئی خاص پریشانی نہیں تھی - اس لمحے تک جب سرورز میں سے ایک کسی وجہ سے کریش ہو گیا۔ بعض اوقات ہم گرے ہوئے سرور کو کافی تیزی سے اٹھانے میں کامیاب ہو جاتے ہیں، اور کاربن-سی-ریلے اپنے کیشے سے میٹرکس کو اس میں لوڈ کرنے میں کامیاب ہو جاتے ہیں، لیکن بعض اوقات ایسا نہیں ہوتا ہے۔ اور پھر میٹرکس میں ایک سوراخ تھا، جسے ہم نے rsync سے پُر کیا۔ طریقہ کار کافی طویل تھا۔ صرف بچت کا فضل یہ تھا کہ ایسا بہت کم ہوتا ہے۔ ہم نے وقتاً فوقتاً میٹرکس کا ایک بے ترتیب سیٹ بھی لیا اور ان کا موازنہ کلسٹر کے پڑوسی نوڈس پر انہی کے دوسروں سے کیا۔ تقریباً 5% معاملات میں، کئی قدریں مختلف تھیں، جن سے ہم زیادہ خوش نہیں تھے۔

3. بڑے قدموں کا نشان

چونکہ ہم گریفائٹ میں نہ صرف انفراسٹرکچر بلکہ بزنس میٹرکس بھی لکھتے ہیں (اور اب Kubernetes سے میٹرکس بھی)، ہمیں اکثر ایسی صورت حال ملتی ہے جس میں میٹرک میں صرف چند اقدار ہوتی ہیں، اور .wsp فائل تمام برقراری کو مدنظر رکھتے ہوئے بنائی جاتی ہے۔ مدت، اور پہلے سے مختص کردہ جگہ لیتا ہے، جو ہمارے لیے ~2MB تھی۔ مسئلہ اس حقیقت سے اور بڑھ جاتا ہے کہ وقت کے ساتھ ساتھ بہت سی ایک جیسی فائلیں نمودار ہوتی ہیں، اور ان پر رپورٹس بناتے وقت، خالی پوائنٹس کو پڑھنے میں کافی وقت اور وسائل درکار ہوتے ہیں۔

میں فوری طور پر یہ نوٹ کرنا چاہوں گا کہ اوپر بیان کردہ مسائل کو مختلف طریقوں کے استعمال سے اور اثر کی مختلف ڈگریوں کے ساتھ نمٹا جا سکتا ہے، لیکن جتنا زیادہ ڈیٹا آپ کو موصول ہونا شروع ہو گا، وہ اتنا ہی خراب ہوتا جائے گا۔

مندرجہ بالا سب کا ہونا (پچھلے کو مدنظر رکھتے ہوئے مضامین) کے ساتھ ساتھ موصولہ میٹرکس کی تعداد میں مسلسل اضافہ، تمام میٹرکس کو 30 سیکنڈ کے اسٹوریج وقفہ میں منتقل کرنے کی خواہش۔ (اگر ضروری ہو تو 10 سیکنڈ تک)، ہم نے Whisper کے ایک امید افزا متبادل کے طور پر Graphite+ClickHouse کو آزمانے کا فیصلہ کیا۔

گریفائٹ+کلک ہاؤس۔ توقعات

Yandex سے لڑکوں کی کئی ملاقاتوں کا دورہ کیا، پڑھ کر Habré پر مضامین کے ایک جوڑے, دستاویزات کو دیکھنے کے بعد اور گریفائٹ کے تحت ClickHouse کو بائنڈنگ کرنے کے لیے سمجھدار اجزاء تلاش کرنے کے بعد، ہم نے کارروائی کرنے کا فیصلہ کیا!

میں درج ذیل وصول کرنا چاہوں گا:

  • ڈسک کے سب سسٹم کے استعمال کو 30% سے کم کر کے 5% کر دیں؛
  • 1TB سے 100GB تک جگہ کی مقدار کو کم کریں۔
  • سرور میں فی منٹ 100 ملین میٹرکس وصول کرنے کے قابل ہو؛
  • ڈیٹا کی نقل اور فالٹ ٹولرینس آؤٹ آف دی باکس؛
  • ایک سال تک اس پروجیکٹ پر مت بیٹھیں اور ایک مناسب وقت کے اندر منتقلی کریں؛
  • ڈاؤن ٹائم کے بغیر سوئچ کریں۔

کافی مہتواکانکشی، ٹھیک ہے؟

گریفائٹ+کلک ہاؤس۔ اجزاء

گریفائٹ پروٹوکول کے ذریعے ڈیٹا حاصل کرنے اور بعد میں اسے کلک ہاؤس میں ریکارڈ کرنے کے لیے، میں نے منتخب کیا کاربن کلک ہاؤس (گولنگ)۔

کلک ہاؤس کی تازہ ترین ریلیز، مستحکم ورژن 1.1.54253، کو ٹائم سیریز کو ذخیرہ کرنے کے لیے ڈیٹا بیس کے طور پر منتخب کیا گیا تھا۔ اس کے ساتھ کام کرتے وقت مسائل تھے: غلطیوں کا ایک پہاڑ لاگوں میں ڈالا گیا، اور یہ مکمل طور پر واضح نہیں تھا کہ ان کے ساتھ کیا کرنا ہے. کے ساتھ بحث میں رومن لومونوسوف (کاربن-کلک ہاؤس، گریفائٹ-کلک ہاؤس اور بہت سے، بہت سے مصنف) پرانے کو منتخب کیا گیا تھا ریلیز 1.1.54236. غلطیاں غائب ہو گئیں - سب کچھ ایک دھماکے کے ساتھ کام کرنے لگا۔

کلک ہاؤس سے ڈیٹا پڑھنے کے لیے منتخب کیا گیا۔ گریفائٹ کلک ہاؤس (گولنگ)۔ گریفائٹ کے لیے ایک API کے طور پر کاربونپی (گولنگ)۔ کلک ہاؤس کا استعمال میزوں کے درمیان نقل کو منظم کرنے کے لیے کیا گیا تھا۔ چڑیا گھر. روٹنگ میٹرکس کے لئے، ہم نے اپنے محبوب کو چھوڑ دیا کاربن سی ریلے (C) (پچھلا مضمون دیکھیں).

گریفائٹ+کلک ہاؤس۔ ٹیبل کا ڈھانچہ

"گریفائٹ" ایک ڈیٹا بیس ہے جسے ہم نے مانیٹرنگ ٹیبل کے لیے بنایا ہے۔

"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 انجن کے ساتھ ٹیبل (نقل شدہ GraphiteMergeTree)۔ یہ جدول میٹرک اقدار کو محفوظ کرتا ہے۔

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 انجن کے ساتھ (نقل شدہ AggregatingMergeTree)۔ یہ جدول آنے والے میٹرکس کی تعداد کو ریکارڈ کرتا ہے، جو 4 نیسٹنگ لیولز پر ٹوٹ جاتا ہے۔

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+Whisper سے Graphite+ClickHouse میں تبدیل کیا

گریفائٹ+کلک ہاؤس۔ ڈیٹا کی منتقلی

جیسا کہ ہمیں اس پراجیکٹ کی توقعات سے یاد ہے، ClickHouse میں منتقلی ڈاؤن ٹائم کے بغیر ہونی چاہیے؛ اس کے مطابق، ہمیں کسی نہ کسی طرح اپنے صارفین کے لیے شفاف طریقے سے اپنے پورے مانیٹرنگ سسٹم کو نئے اسٹوریج میں تبدیل کرنا تھا۔
اس طرح ہم نے یہ کیا۔

  • کلک ہاؤس ٹیبلز کی نقل میں حصہ لینے والے سرورز میں سے ایک کے کاربن کلک ہاؤس کو میٹرکس کا ایک اضافی سلسلہ بھیجنے کے لیے کاربن-سی-ریلے میں ایک اصول شامل کیا گیا ہے۔

  • ہم نے python میں ایک چھوٹا سا اسکرپٹ لکھا، جس نے whisper-dump لائبریری کا استعمال کرتے ہوئے، ہمارے سٹوریج سے تمام .wsp فائلوں کو پڑھا اور اس ڈیٹا کو اوپر بیان کردہ کاربن کلک ہاؤس کو 24 تھریڈز میں بھیجا۔ کاربن-کلک ہاؤس میں منظور شدہ میٹرک اقدار کی تعداد 125 ملین فی منٹ تک پہنچ گئی، اور ClickHouse کو پسینہ بھی نہیں آیا۔

  • موجودہ ڈیش بورڈز میں استعمال ہونے والے فنکشنز کو ڈیبگ کرنے کے لیے ہم نے گرافانا میں ایک علیحدہ ڈیٹا سورس بنایا ہے۔ ہم نے فنکشنز کی ایک فہرست کی نشاندہی کی جو ہم استعمال کرتے ہیں، لیکن وہ کاربونپی میں لاگو نہیں ہوئے تھے۔ ہم نے ان افعال کو شامل کیا اور کاربونپی کے مصنفین کو PR بھیجے (ان کا خصوصی شکریہ)۔

  • بیلنس کی ترتیبات میں پڑھنے کے بوجھ کو تبدیل کرنے کے لیے، ہم نے اختتامی پوائنٹس کو گریفائٹ-اے پی آئی (API انٹرفیس برائے Graphite+Whisper) سے کاربوناپی میں تبدیل کر دیا۔

گریفائٹ+کلک ہاؤس۔ نتائج

  • ڈسک کے سب سسٹم کے استعمال کو 30% سے کم کر کے 1% کر دیا گیا ہے۔

    میٹرکس اسٹوریج: کس طرح ہم نے Graphite+Whisper سے Graphite+ClickHouse میں تبدیل کیا

  • 1 ٹی بی سے 300 جی بی تک محدود جگہ کی مقدار کو کم کر دیا۔
  • ہمارے پاس سرور میں 125 ملین میٹرکس فی منٹ وصول کرنے کی صلاحیت ہے (ہجرت کے وقت چوٹیوں)؛
  • تمام میٹرکس کو بتیس سیکنڈ کے سٹوریج کے وقفے پر منتقل کر دیا؛
  • موصول ڈیٹا کی نقل اور غلطی رواداری؛
  • ڈاؤن ٹائم کے بغیر سوئچ
  • ہر چیز کو مکمل کرنے میں تقریباً 7 ہفتے لگے۔

گریفائٹ+کلک ہاؤس۔ مسائل

ہمارے معاملے میں، کچھ خرابیاں تھیں۔ منتقلی کے بعد ہمیں یہی سامنا کرنا پڑا۔

  1. ClickHouse ہمیشہ فلائی پر کنفیگرز کو دوبارہ نہیں پڑھتا؛ بعض اوقات اسے دوبارہ شروع کرنے کی ضرورت ہوتی ہے۔ مثال کے طور پر، ClickHouse config میں زوکیپر کلسٹر کی تفصیل کے معاملے میں، اسے اس وقت تک استعمال نہیں کیا گیا جب تک کہ کلک ہاؤس سرور کو دوبارہ شروع نہ کیا جائے۔
  2. کلک ہاؤس کی بڑی درخواستیں پوری نہیں ہوئیں، اس لیے گریفائٹ-کلک ہاؤس میں ہمارا کلک ہاؤس کنکشن اس طرح لگتا ہے:
    url = "http://localhost:8123/?max_query_size=268435456&max_ast_elements=1000000"
  3. کلک ہاؤس اکثر مستحکم ریلیز کے نئے ورژن جاری کرتا ہے؛ ان میں حیرت ہوسکتی ہے: محتاط رہیں۔
  4. kubernetes میں متحرک طور پر بنائے گئے کنٹینرز مختصر اور بے ترتیب زندگی کے ساتھ بڑی تعداد میں میٹرکس بھیجتے ہیں۔ اس طرح کے میٹرکس کے لئے زیادہ پوائنٹس نہیں ہیں، اور جگہ کے ساتھ کوئی مسئلہ نہیں ہے. لیکن سوالات کی تعمیر کرتے وقت، کلک ہاؤس 'میٹرکس' ٹیبل سے انہی میٹرکس کی ایک بڑی تعداد کو اٹھاتا ہے۔ 90% معاملات میں، ونڈو (24 گھنٹے) سے آگے ان پر کوئی ڈیٹا نہیں ہے۔ لیکن 'ڈیٹا' ٹیبل میں اس ڈیٹا کو تلاش کرنے میں وقت صرف ہوتا ہے، اور آخر کار وقت ختم ہو جاتا ہے۔ اس مسئلے کو حل کرنے کے لیے، ہم نے دن کے دوران پیش آنے والے میٹرکس کے بارے میں معلومات کے ساتھ ایک الگ نظریہ رکھنا شروع کیا۔ اس طرح، متحرک طور پر بنائے گئے کنٹینرز کے لیے رپورٹس (گرافس) بناتے وقت، ہم صرف ان میٹرکس سے استفسار کرتے ہیں جن کا سامنا کسی دیے گئے ونڈو میں ہوا تھا، نہ کہ پورے وقت کے لیے، جس نے ان پر رپورٹس کی تعمیر کو نمایاں طور پر تیز کیا۔ اوپر بیان کردہ حل کے لیے، میں نے جمع کیا۔ گریفائٹ کلک ہاؤس (کانٹا)، جس میں date_metrics ٹیبل کے ساتھ کام کرنے کا عمل شامل ہے۔

گریفائٹ+کلک ہاؤس۔ ٹیگز

ورژن 1.1.0 کے ساتھ گریفائٹ سرکاری بن گیا۔ سپورٹ ٹیگز. اور ہم سرگرمی سے سوچ رہے ہیں کہ گریفائٹ+کلک ہاؤس اسٹیک میں اس اقدام کی حمایت کے لیے کیا اور کیسے کیا جائے۔

گریفائٹ+کلک ہاؤس۔ بے ضابطگی کا پتہ لگانے والا

اوپر بیان کردہ بنیادی ڈھانچے کی بنیاد پر، ہم نے ایک بے ضابطگی پکڑنے والے کا ایک پروٹو ٹائپ نافذ کیا ہے، اور یہ کام کرتا ہے! لیکن اگلے مضمون میں اس کے بارے میں مزید۔

سبسکرائب کریں، اوپر والے تیر کو دبائیں اور خوش رہیں!

ماخذ: www.habr.com

نیا تبصرہ شامل کریں