اس صفحہ پر
- 1. بک مارک سے پڑھیں، اور اسے صرف تب آگے بڑھائیں جب بیچ پہنچ جائے
- 2. ہر تحریر کو ایسی کلید دیں جو کریش کے بعد بھی باقی رہے
- 3. ایک رن سنک کا مالک ہوتا ہے، اور ہر تحریر سے پہلے یہ ثابت کرتا ہے
- 4. جو گزر جائے اسے دوبارہ آزمائیں، جو نہ گزرے اسے روکیں
- 5. خاموشی کو ایک دریافت سمجھیں
- 6. ایک بار طے کریں کہ سنک کیا لکھ سکتا ہے، اور ہر رن سے یہ ثابت کروائیں
- کیا بن چکا ہے، اور کیا نہیں
8 اکتوبر 2026 کو Lance Martin اور CJ Avilla نے ایک ایجنٹ کا تفصیلی جائزہ شائع کیا جو ہر صبح Slack اور GitHub پڑھتا ہے اور Slack پر ایک خلاصہ پوسٹ کرتا ہے۔ اسے چلتے ہوئے کوئی نہیں دیکھتا۔ ان کا سب سے کارآمد پیراگراف ایک ایسی ناکامی کے بارے میں ہے جو کامیابی جیسی دکھتی ہے۔ جب کسی سورس کا سرور بند ہو یا اس کا ٹوکن ختم ہو چکا ہو، تو “ایجنٹ کو اس سورس سے کچھ نظر نہیں آتا اور وہ ‘کچھ نیا نہیں’ رپورٹ کرتا ہے۔”
Shopify سے Brevo کانٹیکٹ سنک میں بھی یہی ناکامی ہوتی ہے۔ دو SaaS ٹولز کے درمیان ہر شیڈول شدہ سنک میں بھی۔ خاموشی سے ناکام ہونے والا پڑھنا بالکل ایسے اسٹور جیسا دکھتا ہے جہاں آج کسی نے سائن اپ نہیں کیا۔
ان کا مضمون ایک ایسے ایجنٹ کے لیے چھ اصولوں پر ختم ہوتا ہے جو بغیر نگرانی کے چلتا ہے۔ انہیں سنک چلانے والے کی نظر سے پڑھیں تو ہر ایک reverse ETL کا اصول بن جاتا ہے۔ ورکر رک گیا۔ سنک نہیں رکا۔ ایک کانٹیکٹ کو ایک کریش کے دوران فالو کرتا ہے۔ یہ صفحہ اس کے اوپر کی چیک لسٹ ہے: خودکار ڈیٹا سنک کے چھ اصول، Tajo کا رنر آج ہر ایک کے بارے میں کیا کرتا ہے، اور کہاں پیچھے رہ جاتا ہے۔ رنر کی طرف کی تفصیل رکے ہوئے یا ناکام سنک کو بحال کریں میں لکھی ہے۔
1. بک مارک سے پڑھیں، اور اسے صرف تب آگے بڑھائیں جب بیچ پہنچ جائے
ان کا پہلا اصول: “ہر سورس کو بک مارک سے پڑھیں، مقررہ ٹائم ونڈو سے نہیں۔” “آخری 24 گھنٹے” والی ونڈو تب خلا چھوڑتی ہے جب رن دیر سے شروع ہو، اور تب ریکارڈز دہراتی ہے جب رن جلدی شروع ہو۔
Tajo سنک اپنا سورس محفوظ کیے ہوئے کرسر سے بیچز میں پڑھتا ہے۔ کرسر بیچ کے آخر میں آگے بڑھتا ہے، اور صرف تب جب اس بیچ کا ہر ریکارڈ پہنچ چکا ہو۔ ناکام ہونے والا رن آخری صاف جگہ برقرار رکھتا ہے، اس لیے اگلا رن رکے ہوئے بیچ کو چھوڑنے کے بجائے دوبارہ پڑھتا ہے۔
آرڈرز کا اپنا بک مارک ہوتا ہے۔ شیڈول شدہ Shopify آرڈرز سنک اپنے پہلے شیڈول شدہ رن سے شروع ہوتا ہے اور وہ بھیجتا ہے جو پچھلے رن کے بعد بدلا۔ پرانے آرڈرز صرف تب جاتے ہیں جب کوئی شخص سنک چلائے۔ شیڈول شدہ رنز اور کسی شخص کے شروع کیے ہوئے رنز الگ الگ کرسر رکھتے ہیں، اس لیے تاریخ کا بیک فل یا ٹیسٹ بیچ شیڈول والے کرسر کو پیچھے نہیں کر سکتا۔
قیمت یہ ہے کہ رکا ہوا بیچ دو بار پڑھا جاتا ہے۔ اصول 2 اسے محفوظ بناتا ہے۔
2. ہر تحریر کو ایسی کلید دیں جو کریش کے بعد بھی باقی رہے
ان کا چوتھا اصول کسی پوسٹ کو “صرف تب جب Slack تصدیق کرے” بھیجا ہوا مانتا ہے، اور صرف تبھی بک مارک اور ریکارڈ اپ ڈیٹ کرتا ہے۔ رجسٹرڈ خط اسی طرح کام کرتا ہے۔ وہ تب پہنچا ہوا مانا جاتا ہے جب دستخط شدہ رسید واپس آئے، نہ کہ جب وہ کاؤنٹر سے روانہ ہو۔
Tajo کسی ریکارڈ کو لکھنے سے پہلے اسے ایک ڈیلیوری کلید دیتا ہے۔ یہ کلید سنک، سورس، صفحے کے کرسر، صفحے پر جگہ اور خود ریکارڈ کا ہیش ہے، اس لیے اس میں کوئی ذاتی ڈیٹا نہیں ہوتا۔ منزل کو کال کرنے سے پہلے اسے حاصل کیا جاتا ہے اور لکھنا کامیاب ہونے پر مکمل نشان زد کیا جاتا ہے۔ مکمل کلیدیں سات دن رکھی جاتی ہیں۔ دوبارہ کوشش، یا بعد کا کوئی شیڈول شدہ رن، اسی ریکارڈ کے لیے وہی کلید اخذ کرتا ہے، اسے مکمل پاتا ہے اور منزل کو دوبارہ کال نہیں کرتا۔
اس کے ساتھ دو قیمتیں آتی ہیں۔ سات دن بعد لیجر بھول جاتا ہے، اور کسی پرانے کرسر سے ری پلے دوبارہ لکھ سکتا ہے۔ اور ٹائم آؤٹ ہونے والی تحریر ایک جائز شک چھوڑ جاتی ہے: ہو سکتا ہے دوسرے سسٹم نے جواب دیے بغیر اسے محفوظ کر لیا ہو۔ Tajo اس تحریر کو سات دن کے لیے ناکام درج کرنے کے بجائے بعد کی کسی کوشش میں دوبارہ آزماتا ہے۔ جو کنیکٹر منزل کو اپنی idempotency کلید دیتا ہے، وہ یہ شک ختم کر دیتا ہے۔ جو ایسا نہیں کر سکتا، اس کے ساتھ ایک ڈپلیکیٹ کا امکان باقی رہتا ہے۔
3. ایک رن سنک کا مالک ہوتا ہے، اور ہر تحریر سے پہلے یہ ثابت کرتا ہے
ان کا تیسرا اصول: “پوسٹ کرنے سے عین پہلے ہر آئٹم کو دوبارہ جانچیں۔” سنک کے لیے، پڑھنے اور لکھنے کے درمیان سب سے زیادہ بدلنے والی چیز یہ ہے کہ لکھنے کی اجازت کس کے پاس ہے۔
ہر Tajo سنک کی ایک لیز ہوتی ہے، جس کا اپنا ٹوکن ہوتا ہے اور 15 منٹ کی مدت جو ہر پانچ منٹ بعد تجدید ہوتی ہے۔ رن منزل کو کال کرنے سے پہلے جانچتا ہے کہ لیز ابھی تک اس کے پاس ہے، اور کرسر آگے بڑھانے سے پہلے دوبارہ جانچتا ہے۔ جو رن اسے کھو چکا ہو وہ رک جاتا ہے، اور اس کا صفحہ بتاتا ہے “رن نے درمیان میں اپنی جگہ کھو دی اور دو بار لکھنے سے بچنے کے لیے رک گیا۔” جو دوسرا رن کسی چلتے ہوئے رن سے ٹکرائے، وہ اس کے پیچھے قطار میں لگنے کے بجائے ختم ہو جاتا ہے۔
ریکارڈز کو بھی جانچا جاتا ہے۔ پڑھنے اور لکھنے کے درمیان ریکارڈز رضامندی فلٹر سے گزرتے ہیں۔ جو کانٹیکٹ ثابت شدہ رضامندی کے بغیر کسی مارکیٹنگ آڈیئنس میں لکھا جائے، اسے اندازہ لگانے کے بجائے رد کر دیا جاتا ہے۔ ہیلپ صفحے کے الفاظ میں، ناکامی کا انداز ہمیشہ “بہت زیادہ محتاط” رہتا ہے، کبھی “حد سے زیادہ بھیجنا” نہیں۔
4. جو گزر جائے اسے دوبارہ آزمائیں، جو نہ گزرے اسے روکیں
ان کے چھ اصول یہ کچھ نہیں کہتے کہ کتنی بار دوبارہ کوشش کی جائے۔ سنک کو یہ اصول چاہیے، کیونکہ اس کی سب سے عام ناکامیاں ریٹ لمٹ اور کسی وینڈر کا خراب منٹ ہیں۔
قطار میں لگا Tajo رن ناکام ہو تو اسے پانچ کوششیں ملتی ہیں۔ ان کے درمیان انتظار 60، 120، 240 اور 480 سیکنڈ ہے، کل ملا کر تقریباً پندرہ منٹ۔ کچھ ناکامیوں کو کبھی دوبارہ نہیں آزمایا جاتا، کیونکہ دوبارہ کوشش انہیں ٹھیک نہیں کر سکتی۔ جو رن پہلے سے جاری رن سے ٹکرایا ہو اسے دوبارہ نہیں چلایا جاتا، اور نہ ہی اس رن کو جس کا شائع شدہ ورژن یا کنکشنز اب درست نہ ہوں۔
لگاتار ناکامیاں ایک وقتی خرابی سے مختلف ہیں۔ اگر سنک میں آخری تبدیلی کے بعد ختم ہونے والے آخری پانچ رنز سب ناکام ہوئے، تو Tajo سنک کو روک دیتا ہے اور آخری غلطی اس کے صفحے پر دکھاتا ہے۔ ایک کامیابی گنتی کو صفر کر دیتی ہے۔ رکے ہوئے سنک کو کوئی چیز خود سے دوبارہ شروع نہیں کرتی؛ کوئی شخص وجہ ٹھیک کرتا ہے اور اسے دوبارہ شائع کرتا ہے۔ ورکر والا مضمون اس واقعے کی کہانی سناتا ہے جس سے یہ اصول بنا۔
5. خاموشی کو ایک دریافت سمجھیں
“ناکام پڑھنے کو ناقابلِ مطالعہ رپورٹ کریں، کبھی پرسکون دن کے طور پر نہیں۔” یہ چھ میں سب سے مشکل اصول ہے، اور واحد اصول جس پر ہم صرف جزوی طور پر پورا اترتے ہیں۔
جہاں یہ لاگو ہوتا ہے: غلطی دینے والا پڑھنا رن کو ناکام کر دیتا ہے۔ رد کیا گیا ٹوکن یا جواب نہ دینے والا سرور منزل کو کچھ نہیں بھیجتا، کرسر کو اپنی جگہ چھوڑ دیتا ہے اور پانچ ناکام رنز کے بعد والے وقفے میں گنا جاتا ہے۔ اور ہر گھنٹے، 13 منٹ گزرنے پر، Tajo فعال سنک والی ہر ورک اسپیس کو جانچتا ہے۔ جب پچھلے 24 گھنٹوں میں کوئی کامیاب رن نہ ہوا ہو، تو وہ اپنی ٹیم کو الرٹ کرتا ہے، اس ورک اسپیس سمیت جہاں کوئی رن درج ہی نہ ہوا ہو۔ یہ گھنٹہ وار جانچ ہے۔
جہاں یہ لاگو نہیں ہوتا: مصنفین جس خاموش پڑھنے کی بات کرتے ہیں وہ ایسا پڑھنا ہے جو بغیر کسی ریکارڈ کے “OK” جواب دیتا ہے۔ ہمارا رنر اسے کامیابی گنتا ہے۔ Shopify کسٹمرز جیسے سورسز کے لیے، اگر سنک پہلے ریکارڈز دے چکا ہو، تو ایک الگ جانچ صفر ریکارڈز والے لگاتار دس کامیاب رنز کے بعد Tajo کی ٹیم کو خبردار کرتی ہے۔ Shopify آرڈرز اپ ڈیٹ کے وقت کے حساب سے پڑھے جاتے ہیں، اس لیے وہاں خالی رن معمول کی بات ہے اور یہ جانچ نہیں چلتی۔ جو سورس کچھ ریکارڈز لوٹائے، مگر جتنے لوٹانے چاہییں ان سے کم، وہ بالکل نہیں پکڑا جاتا۔
اعتراض کچھ یوں ہے: “15 منٹ کے شیڈول پر دس خالی رنز ڈھائی گھنٹے بنتے ہیں۔ پہلے ہی پر الرٹ کیوں نہیں؟” کانٹیکٹ سنکس واقعی ڈیفالٹ طور پر ہر 15 منٹ بعد چلتے ہیں۔ اور پندرہ منٹ میں کوئی نیا کسٹمر نہ آنا کسی اسٹور کے لیے عام بات ہے۔ پہلے خالی رن پر الرٹ ہر رات بجتا، اور جو الرٹ ہمیشہ بجتا ہو اسے کوئی نہیں پڑھتا۔ یہ حد رفتار کے بدلے اعتبار لیتی ہے۔ پھر بھی یہ خاموشی کے بارے میں ایک اندازہ ہے، مصنفین کا اصول نہیں۔
6. ایک بار طے کریں کہ سنک کیا لکھ سکتا ہے، اور ہر رن سے یہ ثابت کروائیں
ان کا پانچواں اصول ایجنٹ کی ترجیحات کو “ایسے اسٹور میں رکھتا ہے جسے ایجنٹ ایڈٹ نہیں کر سکتا”۔ چھٹا اصول ایجنٹ کو ہر اس جگہ صرف پڑھنے کی رسائی دیتا ہے جہاں وہ صرف پڑھتا ہے، اور ہر رن کے خرچ کی حد مقرر کرتا ہے۔ دونوں اس لیے ہیں کہ ایجنٹ دوسروں کا لکھا ہوا متن پڑھتا ہے، اور وہ متن اسے حکم دینے کی کوشش کر سکتا ہے۔
سنک کے لیے ترجیحات کی فائل کا متبادل شائع شدہ اصول ہے۔ Tajo سنک کو شائع کرنا اسے ٹھیک اسی اصول کے ڈائجسٹ سے باندھ دیتا ہے جس کا پیش منظر دیکھا گیا تھا۔ اس میں ترمیم اسے ڈرافٹ میں واپس لے جاتی ہے، اور دوبارہ چلنے سے پہلے وہ پھر پیش منظر سے گزرتا ہے۔ ہر رن، کچھ بھی بدلنے سے پہلے، جانچتا ہے کہ وہ وہی شائع شدہ ورژن انہی کنکشنز کے ساتھ چلا رہا ہے جن کے ساتھ وہ شائع ہوا تھا۔ جو رن اس جانچ میں ناکام ہو اسے دوبارہ نہیں چلایا جاتا۔ سمت بھی طے ہے: سنک کا اصول ایک ہی سمت میں لکھتا ہے اور کبھی واپس Shopify میں نہیں۔
خرچ کی حد کا کوئی متبادل نہیں۔ ہمارے سنک رنز پر فی رن خرچ کی کوئی حد نہیں۔ دوبارہ کوشش کی حد اور وقفہ یہ محدود کرتے ہیں کہ کوئی ناکامی کتنی دیر چل سکتی ہے، یہ نہیں کہ ایک رن پر کتنا خرچ آتا ہے۔
کیا بن چکا ہے، اور کیا نہیں
اس تحریر کے وقت تک جو بن چکا ہے:
- ایک کرسر جو صرف ایسے بیچ کے بعد آگے بڑھتا ہے جس کا ہر ریکارڈ پہنچ چکا ہو، اور آرڈرز کا ایک شیڈول شدہ کرسر جسے کسی شخص کے شروع کیے ہوئے رنز پیچھے نہیں کر سکتے۔
- ہر ریکارڈ کے لیے ایک ڈیلیوری کلید، جسے سات دن رکھے جانے والے مکمل تحریروں کے لیجر سے جانچا جاتا ہے۔
- ہر سنک کے لیے ایک لیز، جو لکھنے سے پہلے اور کرسر آگے بڑھنے سے پہلے جانچی جاتی ہے۔
- ہر رن کے لیے پانچ کوششیں، پہلے 60 سیکنڈ انتظار اور پھر 120، 240 اور 480، ٹکراؤ یا غلط اشاعت پر کوئی دوبارہ کوشش نہیں۔
- لگاتار پانچ رنز ناکام ہونے پر وقفہ، جو سنک کے صفحے پر دکھایا جاتا ہے۔
- ایک گھنٹہ وار الرٹ جب پچھلے 24 گھنٹوں میں کوئی رن کامیاب نہ ہوا ہو۔
- مارکیٹنگ آڈیئنس میں لکھے جانے والے کانٹیکٹس کے لیے رن کے وقت رضامندی فلٹر، اور ہر رن پر یہ جانچ کہ یہ شائع شدہ ورژن ہے۔
جو نہیں بنا، اور جس پر بھروسا کرنے سے پہلے جاننا ضروری ہے:
- صفر ریکارڈز کے ساتھ کامیاب ہونے والے پڑھنے کو ناقابلِ مطالعہ رپورٹ نہیں کیا جاتا۔ دس رنز والی وارننگ اس کا ایک حصہ ڈھانپتی ہے۔ یہ Shopify آرڈرز یا بہت کم ریکارڈز لوٹانے والے سورس کو نہیں ڈھانپتی۔
- 24 گھنٹے والا الرٹ Tajo تک پہنچتا ہے، آپ تک نہیں، اور دس رنز والی وارننگ بھی۔ البتہ وقفہ سنک کے صفحے پر نظر آتا ہے۔
- گھنٹہ وار جانچ ورک اسپیس کو دیکھتی ہے، ہر سنک کو نہیں۔ ایک صحت مند سنک اپنے ساتھ والے خاموش سنک کو چھپا دیتا ہے۔
- فی رن خرچ کی کوئی حد نہیں۔
- رکے ہوئے سنک کو کوئی چیز دوبارہ شروع نہیں کرتی۔ یہ کام ایک شخص کرتا ہے۔
- پانچ ناکامیوں والا وقفہ اور 24 گھنٹے والی جانچ پورے Tajo ڈیپلائمنٹ کے لیے طے ہیں، ہر سنک کے لیے الگ نہیں۔
جب ان میں سے کوئی بات آپ کے اپنے سنک پر نظر آئے، تو رکے ہوئے یا ناکام سنک کو بحال کریں بتاتا ہے کہ آپ کیا دیکھ رہے ہیں اور کیا کرنا ہے۔
مصنفین نے چھ اصول ایک ایسے خلاصے کے لیے لکھے جسے کوئی شخص ہر صبح پڑھتا ہے۔ سنک کا تو کوئی صبح کا قاری ہی نہیں، اسی لیے اسے ان اصولوں کی اور زیادہ ضرورت ہے۔ اصول ایک سے چار اور اصول چھ آج ہمارے رنر میں کوڈ کی صورت میں موجود ہیں۔ اصول پانچ آدھا لکھا گیا ہے: جو سنک اپنا سورس نہ پڑھ سکے، اسے یہ بات کہنی چاہیے۔
اکثر پوچھے گئے سوالات
ایک خودکار ڈیٹا سنک کو اس وقت محفوظ طریقے سے چلنے کے لیے کیا چاہیے جب کوئی اسے نہیں دیکھ رہا؟
چھ چیزیں۔ ایک کرسر جو صرف تب آگے بڑھے جب پورا بیچ پہنچ جائے۔ ہر ریکارڈ کے لیے ایک ڈیلیوری کلید جو دوبارہ کوشش پھر سے اخذ کرتی ہے اور جسے مکمل تحریروں کے لیجر سے جانچا جاتا ہے۔ ہر سنک کے لیے ایک وقت میں ایک رن۔ دوبارہ کوششوں کی ایک محدود تعداد، پھر رنز ناکام ہوتے رہیں تو وقفہ۔ ایک الرٹ جب پورے دن کچھ کامیاب نہ ہو۔ اور ایک شائع شدہ اصول جس کے بارے میں ہر رن کو ثابت کرنا ہوتا ہے کہ وہ اسی پر چل رہا ہے۔
سنک کو آخری 24 گھنٹوں جیسی مقررہ ٹائم ونڈو کیوں نہیں پڑھنی چاہیے؟
کیونکہ رنز وقت کے پابند نہیں ہوتے۔ دیر سے شروع ہونے والا رن ایک ایسا خلا چھوڑ دیتا ہے جسے ونڈو کبھی نہیں ڈھانپتی، اور جلدی شروع ہونے والا رن ریکارڈز دو بار پڑھتا ہے۔ محفوظ کیا ہوا کرسر ہر رن کو ٹھیک وہیں سے شروع کرتا ہے جہاں آخری صاف بیچ ختم ہوا تھا، چاہے رن کسی بھی وقت شروع ہو۔
Tajo دوبارہ کوشش کرنے والے سنک کو ایک ہی ریکارڈ دو بار لکھنے سے کیسے روکتا ہے؟
ہر ریکارڈ کو ایک ڈیلیوری کلید ملتی ہے، جو سنک، سورس، صفحے کے کرسر، صفحے پر جگہ اور خود ریکارڈ کا ہیش ہے۔ منزل کو کال کرنے سے پہلے کلید حاصل کی جاتی ہے اور لکھنا کامیاب ہونے پر اسے مکمل نشان زد کیا جاتا ہے، اور مکمل کلیدیں سات دن رکھی جاتی ہیں۔ دوبارہ کوشش یا بعد کا رن وہی کلید اخذ کرتا ہے اور منزل کو دوبارہ کال نہیں کرتا۔
کیا Tajo کو پتا چلتا ہے جب کوئی سورس اس لیے کچھ نہیں لوٹاتا کہ پڑھنا خاموشی سے ناکام ہو گیا؟
صرف جزوی طور پر۔ غلطی دینے والا پڑھنا رن کو ناکام کر دیتا ہے، اور وہ رن لگاتار پانچ ناکام رنز کے بعد والے وقفے میں گنا جاتا ہے۔ صفر ریکارڈز کے ساتھ کامیاب ہونے والا پڑھنا کامیابی گنا جاتا ہے۔ Shopify کسٹمرز جیسے سورسز کے لیے، اگر سنک پہلے ریکارڈز دے چکا ہو، تو صفر ریکارڈز والے لگاتار دس کامیاب رنز کے بعد Tajo کی ٹیم کو خبردار کیا جاتا ہے۔ Shopify آرڈرز کے لیے، جو اپ ڈیٹ کے وقت کے حساب سے پڑھے جاتے ہیں، یہ جانچ نہیں چلتی۔