ترن ٹول ڈیٹا گرڈ کا فن تعمیر اور صلاحیتیں۔

ترن ٹول ڈیٹا گرڈ کا فن تعمیر اور صلاحیتیں۔

2017 میں، ہم نے Alfa-Bank کے سرمایہ کاری کے کاروبار کے ٹرانزیکشنل کور کو تیار کرنے کے لیے ایک مقابلہ جیتا اور کام شروع کیا (HighLoad++ 2018 میں سرمایہ کاری کے کاروبار کی بنیادی رپورٹ کے ساتھ بولا ولادیمیر ڈرینکن، الفا بینک کے سرمایہ کاری کے کاروبار کے ٹرانزیکشنل کور کے سربراہ)۔ اس نظام کو مختلف ذرائع سے لین دین کے ڈیٹا کو مختلف فارمیٹس میں جمع کرنا، ڈیٹا کو متحد شکل میں لانا، اسے ذخیرہ کرنا اور اس تک رسائی فراہم کرنا تھا۔

ترقی کے عمل کے دوران، نظام نے ارتقاء کیا اور فعالیت حاصل کی، اور کسی وقت ہم نے محسوس کیا کہ ہم کاموں کی سختی سے متعین حد کو حل کرنے کے لیے بنائے گئے ایپلیکیشن سافٹ ویئر سے کہیں زیادہ کچھ کرسٹالائز کر رہے ہیں: ہم کامیاب ہو گئے۔ مستقل اسٹوریج کے ساتھ تقسیم شدہ ایپلی کیشنز بنانے کا نظام. جو تجربہ ہم نے حاصل کیا وہ ایک نئی پروڈکٹ کی بنیاد بنا۔ ترنٹول ڈیٹا گرڈ (TDG)۔

میں TDG فن تعمیر اور ان حلوں کے بارے میں بات کرنا چاہتا ہوں جن پر ہم ترقی کے عمل کے دوران آئے تھے، آپ کو مرکزی فعالیت سے متعارف کرانا چاہتا ہوں اور یہ بتانا چاہتا ہوں کہ ہمارا پروڈکٹ مکمل حل بنانے کی بنیاد کیسے بن سکتا ہے۔

تعمیراتی طور پر، ہم نے نظام کو الگ الگ میں تقسیم کیا کردار، جن میں سے ہر ایک مخصوص مسائل کو حل کرنے کا ذمہ دار ہے۔ ایک چلنے والی ایپلیکیشن مثال ایک یا زیادہ رول کی اقسام کو نافذ کرتی ہے۔ ایک کلسٹر میں ایک ہی قسم کے کئی کردار ہو سکتے ہیں:

ترن ٹول ڈیٹا گرڈ کا فن تعمیر اور صلاحیتیں۔

رابط

کنیکٹر بیرونی دنیا کے ساتھ رابطے کے لیے ذمہ دار ہے۔ اس کا کام درخواست کو قبول کرنا ہے، اسے پارس کرنا ہے، اور اگر یہ کامیاب ہو جاتا ہے، تو ڈیٹا کو پروسیسنگ کے لیے ان پٹ پروسیسر کو بھیجنا ہے۔ ہم HTTP، SOAP، Kafka، FIX فارمیٹس کو سپورٹ کرتے ہیں۔ فن تعمیر آپ کو آسانی سے نئے فارمیٹس کے لیے سپورٹ شامل کرنے کی اجازت دیتا ہے، IBM MQ کے لیے جلد آنے والی سپورٹ کے ساتھ۔ اگر درخواست کو پارس کرنا ناکام ہو گیا، تو کنیکٹر ایک غلطی واپس کر دے گا۔ بصورت دیگر، یہ جواب دے گا کہ درخواست پر کامیابی کے ساتھ کارروائی کی گئی تھی، چاہے اس کی مزید کارروائی کے دوران کوئی خرابی واقع ہو۔ یہ خاص طور پر ان سسٹمز کے ساتھ کام کرنے کے لیے کیا گیا تھا جو نہیں جانتے کہ درخواستوں کو کیسے دہرانا ہے - یا، اس کے برعکس، یہ بہت مستقل طور پر کریں۔ ڈیٹا کو ضائع نہ کرنے کے لیے، مرمت کی قطار کا استعمال کیا جاتا ہے: آبجیکٹ پہلے اس میں داخل ہوتا ہے اور کامیاب پروسیسنگ کے بعد ہی اس سے ہٹا دیا جاتا ہے۔ ایڈمنسٹریٹر مرمت کی قطار میں باقی اشیاء کے بارے میں الرٹ حاصل کرسکتا ہے، اور سافٹ ویئر کی خرابی یا ہارڈویئر کی خرابی کو ختم کرنے کے بعد، دوبارہ کوشش کریں۔

ان پٹ پروسیسر

ان پٹ پروسیسر موصولہ ڈیٹا کی خصوصیت کے مطابق درجہ بندی کرتا ہے اور مناسب پروسیسرز کو کال کرتا ہے۔ ہینڈلر Lua کوڈ ہیں جو ایک سینڈ باکس میں چلتا ہے، لہذا وہ سسٹم کے کام کو متاثر نہیں کر سکتے۔ اس مرحلے پر، اعداد و شمار کو مطلوبہ شکل تک کم کیا جا سکتا ہے، اور اگر ضروری ہو تو، متعدد کاموں کو شروع کیا جا سکتا ہے جو ضروری منطق کو نافذ کر سکیں۔ مثال کے طور پر، Tarantool ڈیٹا گرڈ پر بنائے گئے MDM (ماسٹر ڈیٹا مینجمنٹ) پروڈکٹ میں، نئے صارف کو شامل کرتے وقت، درخواست کی کارروائی کو سست نہ کرنے کے لیے، ہم ایک علیحدہ کام کے طور پر ایک سنہری ریکارڈ کی تخلیق کا آغاز کرتے ہیں۔ سینڈ باکس ڈیٹا کو پڑھنے، تبدیل کرنے اور شامل کرنے کی درخواستوں کو سپورٹ کرتا ہے، آپ کو سٹوریج کی قسم کے تمام کرداروں اور نتیجہ کی جمع (نقشہ/کمی) پر کچھ کام کرنے کی اجازت دیتا ہے۔

ہینڈلرز کو فائلوں میں بیان کیا جا سکتا ہے:

sum.lua

local x, y = unpack(...)
return x + y

اور پھر، ترتیب میں اعلان کیا:

functions:
  sum: { __file: sum.lua }

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

ذخیرہ

ذخیرہ مسلسل ڈیٹا کو ذخیرہ کرتا ہے۔ محفوظ کرنے سے پہلے، ڈیٹا کو ڈیٹا اسکیما کے خلاف درست کیا جاتا ہے۔ سرکٹ کی وضاحت کرنے کے لیے ہم ایک توسیعی شکل استعمال کرتے ہیں۔ اپاچی ایورو. ایک مثال:

{
    "name": "User",
    "type": "record",
    "logicalType": "Aggregate",
    "fields": [ 
        { "name": "id", "type": "string"}, 
        {"name": "first_name", "type": "string"}, 
        {"name": "last_name", "type": "string"} 
    ], 
    "indexes": ["id"] 
}

اس تفصیل کی بنیاد پر، ڈی ڈی ایل (ڈیٹا ڈیفینیشن لینگویج) خود بخود ترانٹولا ڈی بی ایم ایس اور گراف کیو ایل ڈیٹا تک رسائی کے لیے اسکیما

غیر مطابقت پذیر ڈیٹا کی نقل تیار کی جاتی ہے (یہاں ہم آہنگی کو شامل کرنے کے منصوبے ہیں)۔

آؤٹ پٹ پروسیسر

بعض اوقات بیرونی صارفین کو نئے ڈیٹا کی آمد کے بارے میں مطلع کرنا ضروری ہوتا ہے؛ اس مقصد کے لیے آؤٹ پٹ پروسیسر کا کردار ہوتا ہے۔ ڈیٹا کو محفوظ کرنے کے بعد، اسے متعلقہ ہینڈلر کو بھیجا جا سکتا ہے (مثال کے طور پر، اسے صارف کے لیے مطلوبہ فارم پر لانا) - اور پھر کنیکٹر کو بھیجنے کے لیے بھیجا جا سکتا ہے۔ یہاں مرمت کی قطار بھی استعمال کی جاتی ہے: اگر کسی نے اعتراض قبول نہیں کیا تو منتظم بعد میں دوبارہ کوشش کر سکتا ہے۔

اسکیلنگ

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

ڈیٹا پراپرٹیز

آبجیکٹ بہت بڑے ہو سکتے ہیں اور ان میں دیگر اشیاء شامل ہو سکتی ہیں۔ ہم ایک مجازی بالٹی میں تمام انحصار کے ساتھ کسی چیز کو ذخیرہ کرکے ڈیٹا کو شامل کرنے اور اپ ڈیٹ کرنے کے جوہری ہونے کو یقینی بناتے ہیں۔ یہ آبجیکٹ کو کئی فزیکل سرورز میں "پھیلنے" سے روکتا ہے۔

ورژننگ کی حمایت کی جاتی ہے: کسی چیز کی ہر اپ ڈیٹ ایک نیا ورژن بناتی ہے، اور ہم ہمیشہ وقت کا ٹکڑا لے کر دیکھ سکتے ہیں کہ اس وقت دنیا کیسی نظر آتی تھی۔ ایسے ڈیٹا کے لیے جس کی طویل تاریخ کی ضرورت نہیں ہے، ہم ورژن کی تعداد کو محدود کر سکتے ہیں یا صرف ایک کو ذخیرہ کر سکتے ہیں - تازہ ترین - یعنی کسی خاص قسم کے لیے بنیادی طور پر ورژن کو غیر فعال کر سکتے ہیں۔ آپ تاریخ کو وقت کے لحاظ سے بھی محدود کر سکتے ہیں: مثال کے طور پر، 1 سال سے زیادہ پرانی قسم کی تمام اشیاء کو حذف کر دیں۔ آرکائیونگ بھی تعاون یافتہ ہے: ہم کلسٹر میں جگہ خالی کرتے ہوئے مخصوص وقت سے زیادہ پرانی اشیاء کو اتار سکتے ہیں۔

ٹاسکس

دلچسپ خصوصیات میں سے، صارف کی درخواست پر، یا سینڈ باکس سے پروگرام کے مطابق کاموں کو شیڈول کے مطابق شروع کرنے کی صلاحیت کو قابل توجہ ہے:

ترن ٹول ڈیٹا گرڈ کا فن تعمیر اور صلاحیتیں۔

یہاں ہم ایک اور کردار دیکھتے ہیں - رنر. یہ کردار بے وطن ہے، اور ضرورت کے مطابق اس کردار کے ساتھ اضافی درخواست کی مثالیں کلسٹر میں شامل کی جا سکتی ہیں۔ رنر کی ذمہ داری کاموں کو مکمل کرنا ہے۔ جیسا کہ ذکر کیا گیا ہے، سینڈ باکس سے نئے کام پیدا کرنا ممکن ہے۔ انہیں سٹوریج پر قطار میں محفوظ کیا جاتا ہے اور پھر رنر پر پھانسی دی جاتی ہے۔ اس قسم کے کام کو جاب کہتے ہیں۔ ہمارے پاس ٹاسک کی ایک قسم بھی ہے جسے Task کہتے ہیں - یہ صارف کے متعین کردہ کام ہیں جو شیڈول پر چلتے ہیں (cron syntax کا استعمال کرتے ہوئے) یا مانگ کے مطابق۔ ایسے کاموں کو شروع کرنے اور ٹریک کرنے کے لیے، ہمارے پاس ایک آسان ٹاسک مینیجر ہے۔ اس فعالیت کے دستیاب ہونے کے لیے، آپ کو شیڈولر رول کو فعال کرنا ہوگا۔ اس کردار کی ایک ریاست ہے، اس لیے یہ پیمانہ نہیں ہے، تاہم، جس کی ضرورت نہیں ہے۔ ایک ہی وقت میں، دوسرے تمام کرداروں کی طرح، اس میں ایک نقل ہو سکتی ہے جو کام کرنا شروع کر دیتی ہے اگر ماسٹر اچانک انکار کر دیتا ہے۔

لاگر

ایک اور کردار کو لاگر کہتے ہیں۔ یہ کلسٹر کے تمام اراکین سے لاگز جمع کرتا ہے اور ویب انٹرفیس کے ذریعے انہیں اپ لوڈ کرنے اور دیکھنے کے لیے ایک انٹرفیس فراہم کرتا ہے۔

خدمات

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

سروس کو کنفیگریشن فائل میں بیان کیا گیا ہے:

services:
   sum:
      doc: "adds two numbers"
      function: sum
      return_type: int
      args:
         x: int
         y: int

GraphQL API خود بخود تیار ہوتا ہے اور سروس کال کرنے کے لیے دستیاب ہو جاتی ہے:

query {
   sum(x: 1, y: 2) 
}

یہ ہینڈلر کو کال کرے گا۔ sumجو نتیجہ واپس کرے گا:

3

سوال کی پروفائلنگ اور میٹرکس

سسٹم کے آپریشن اور پروفائلنگ کی درخواستوں کو سمجھنے کے لیے، ہم نے OpenTracing پروٹوکول کے لیے سپورٹ نافذ کیا۔ سسٹم ان ٹولز کو ڈیمانڈ پر معلومات بھیج سکتا ہے جو اس پروٹوکول کو سپورٹ کرتے ہیں، جیسے کہ Zipkin، جو آپ کو یہ سمجھنے کی اجازت دے گا کہ درخواست پر عمل کیسے ہوا:

ترن ٹول ڈیٹا گرڈ کا فن تعمیر اور صلاحیتیں۔

قدرتی طور پر، نظام اندرونی میٹرکس فراہم کرتا ہے جو پرومیتھیس کا استعمال کرتے ہوئے جمع کیا جا سکتا ہے اور گرافانا کا استعمال کرتے ہوئے تصور کیا جا سکتا ہے۔

تعینات کریں۔

ٹرانٹول ڈیٹا گرڈ کو RPM پیکجز یا آرکائیو سے تعینات کیا جا سکتا ہے، ڈسٹری بیوشن یا Ansible سے یوٹیلیٹی کا استعمال کرتے ہوئے، Kubernetes (Tarantool Kubernetes آپریٹر).

کاروباری منطق (کنفیگریشن، ہینڈلرز) کو لاگو کرنے والی ایپلیکیشن کو UI کے ذریعے آرکائیو کی شکل میں یا ہمارے فراہم کردہ API کے ذریعے اسکرپٹ کا استعمال کرتے ہوئے تعینات کردہ Tarantool ڈیٹا گرڈ کلسٹر میں لوڈ کیا جاتا ہے۔

نمونہ ایپلی کیشنز

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

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

  1. کھلے ذرائع سے معلومات جمع کرنے والے روبوٹ ہمارے ڈیٹا کے ذرائع ہوں گے۔ آپ اس مسئلے کو ریڈی میڈ حل یا کسی بھی زبان میں کوڈ لکھ کر حل کر سکتے ہیں۔
  2. اگلا، Tarantool ڈیٹا گرڈ ڈیٹا کو قبول اور محفوظ کرے گا۔ اگر مختلف ذرائع سے ڈیٹا فارمیٹ مختلف ہے، تو آپ Lua میں کوڈ لکھ سکتے ہیں جو ایک ہی فارمیٹ میں تبدیلی کو انجام دے گا۔ پروسیسنگ سے پہلے کے مرحلے پر، آپ مثال کے طور پر ڈپلیکیٹ آفرز کو فلٹر کرنے کے قابل بھی ہوں گے یا اس کے علاوہ ڈیٹا بیس میں مارکیٹ میں کام کرنے والے ایجنٹس کے بارے میں معلومات کو اپ ڈیٹ کر سکیں گے۔
  3. اب آپ کے پاس پہلے سے ہی ایک کلسٹر میں توسیع پذیر حل موجود ہے جو ڈیٹا سے بھرا جا سکتا ہے اور ڈیٹا کا انتخاب کر سکتا ہے۔ پھر آپ نئی فعالیت کو نافذ کر سکتے ہیں، مثال کے طور پر، ایک ایسی سروس لکھیں جو ڈیٹا کے لیے درخواست کرے اور روزانہ سب سے زیادہ فائدہ مند پیشکش دے - اس کے لیے کنفیگریشن فائل میں چند سطروں اور تھوڑا Lua کوڈ کی ضرورت ہوگی۔

اس کے بعد کیا ہے؟

ہماری ترجیح ترقی کی آسانی کو استعمال کرتے ہوئے بہتر بنانا ہے۔ ترنٹول ڈیٹا گرڈ. مثال کے طور پر، یہ ایک IDE ہے جس میں پروفائلنگ اور ڈیبگنگ ہینڈلرز کو سینڈ باکس میں چلایا جاتا ہے۔

ہم حفاظتی امور پر بھی بہت توجہ دیتے ہیں۔ ابھی ہم روس کے FSTEC کی طرف سے سرٹیفیکیشن سے گزر رہے ہیں تاکہ اعلیٰ سطح کی سیکورٹی کی تصدیق کی جا سکے اور ذاتی ڈیٹا انفارمیشن سسٹمز اور سرکاری انفارمیشن سسٹمز میں استعمال ہونے والے سافٹ ویئر پروڈکٹس کے سرٹیفیکیشن کے تقاضوں کو پورا کیا جا سکے۔

ماخذ: www.habr.com

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