تحمل خطاپردازش جریانسیستمهای توزیعشدهرایانش ابریمهندسی دادهابر و زیرساخت
نقطه بازرسی بایت آفست در مقابل بازیابی بدون تابعیت
بررسی بایت آفست و بازیابی بدون وضعیت، رویکردهای اساساً متفاوتی را برای تحمل خطا در سیستمهای توزیعشده نشان میدهند، که در حالت اول، موقعیتهای دقیق جریان برای قابلیت از سرگیری دقیق حفظ میشوند، در حالی که حالت دوم با استفاده از منابع داده تغییرناپذیر، وضعیت را از ابتدا بازسازی میکند و سربار ذخیرهسازی را برای سادگی بازسازی از بین میبرد.
برجستهها
قابلیت بررسی بایت آفست، با از سرگیری موقعیتهای دقیق جریان به جای بازسازی وضعیت از ابتدا، امکان بازیابی در سطح میلیثانیه را فراهم میکند.
بازیابی بدون وضعیت، کل دسته از مشکلات سیستمهای توزیعشده مربوط به ثبات اسنپشات و همگامسازی وضعیت را از بین میبرد.
اثربخشی Checkpointing با عملیات غیرقطعی یا فراخوانیهای خارجی غیرخودتوان به طور قابل توجهی کاهش مییابد و پیچیدگی پنهان ایجاد میکند.
برچسب «بیتابعیت» اغلب گمراهکننده است - بیتابعیت واقعی مستلزم انتقال وضعیت به سیستمهای خارجی است که صرفاً بار عملیاتی را جابجا میکند و نه اینکه آن را از بین ببرد.
نقطه بازرسی آفست بایت چیست؟
یک تکنیک تحمل خطا که موقعیتهای دقیق بایتها را در جریانهای داده ثبت میکند تا بازیابی دقیق پس از خرابیها را امکانپذیر سازد.
در سیستمهای پردازش جریانی مانند آپاچی فلینک و کافکا استریمز برای مدیریت معنای دقیقاً-یکبار-استفاده، ریشه دارد.
به جای ذخیره اسنپشاتهای کامل وضعیت، حداقل فراداده (شناسه پارتیشن + آفست) را ذخیره میکند و به طور چشمگیری اندازه ایست بازرسی را کاهش میدهد.
با جلوگیری از بازسازی کامل وضعیت، زمان بازیابی زیر یک ثانیه را در بسیاری از استقرارهای تولیدی فعال میکند.
برای عملکرد صحیح به فضای ذخیرهسازی لاگ بادوام و قابل پخش مجدد (معمولاً Kafka، Pulsar یا Kinesis) نیاز دارد.
هنگام برخورد با عملیات غیرقطعی یا تعاملات سیستم خارجی که فاقد خودتوانی هستند، پیچیده میشود.
بازیابی بدون تابعیت چیست؟
یک الگوی بازیابی که در آن گرههای پردازشی، وضعیت را بهطور کامل از دادههای ورودی خام و بدون حفظ وضعیت پایدار محلی بازسازی میکنند.
الهام گرفته از اصول برنامهنویسی تابعی و الگوهای زیرساخت تغییرناپذیر که توسط نتفلیکس و AWS Lambda رواج یافتهاند
نیاز به پروتکلهای هماهنگی اسنپشات توزیعشده مانند Chandy-Lamport را از بین میبرد و معماری سیستم را ساده میکند.
معمولاً منجر به زمان بازیابی کندتر متناسب با مقدار دادههای تاریخی که باید دوباره پردازش شوند، میشود.
زمانی که با توابع پردازش قطعی و منابع ورودی قابل تکرار ترکیب شود، بیشترین کارایی را دارد.
در محاسبات بدون سرور و میکروسرویسها که کانتینرهای موقت رایج هستند، توجه زیادی را به خود جلب کرده است.
جدول مقایسه
ویژگی
نقطه بازرسی آفست بایت
بازیابی بدون تابعیت
ذخیره سازی دولتی
حداقل (فقط جبرانها)
هیچکدام (کاملاً کنار گذاشته شده)
سرعت بازیابی
خیلی سریع (از سرگیری از نقطه شکست)
کندتر (نیاز به پردازش مجدد کامل)
سربار ذخیرهسازی
کم (کیلوبایت فراداده)
صفر (بدون حفظ وضعیت)
الزامات منبع داده
لاگ قابل پخش مجدد با دوام
مجموعه دادههای تاریخی کامل موجود است
پیچیدگی پیادهسازی
بالاتر (هماهنگی، مدیریت دقیقاً یکباره)
پایینتر (مدل مفهومی سادهتر)
مناسب برای ایالتهای بزرگ
عالی (وضعیت برای لاگ خارجیسازی شده است)
ضعیف (پردازش مجدد مقیاسها با حجم داده)
الزامات جبرگرایی
دقیق (عدم قطعیت، بازیابی را مختل میکند)
متوسط (هیپوتنسی هنوز مهم است)
مقایسه دقیق
فلسفه بنیادی
روش بایت آفست، لاگ رویداد را به عنوان تنها منبع حقیقت در نظر میگیرد و در عین حال، بوکمارکهای دقیقی را در آن لاگ نگه میدارد. سیستم وجود حالت را تصدیق میکند و با دقت منشأ آن را ردیابی میکند. برعکس، بازیابی بدون حالت، زودگذر بودن را میپذیرد - هر گرهای میتواند در هر لحظه از بین برود زیرا هیچ چیز واقعاً در آنجا وجود ندارد. این شکاف فلسفی، تنشهای گستردهتری را در طراحی سیستم بین بهینهسازی و سادگی منعکس میکند.
ویژگیهای عملیاتی
تیمهای تولیدی که سیستمهای دارای Checkpoint را اجرا میکنند، تلاش مهندسی قابل توجهی را صرف تنظیم فواصل Checkpoint و متعادل کردن سرعت بازیابی در برابر سربار زمان اجرا میکنند. اگر Checkpointها خیلی مکرر باشند، منابع را هدر میدهید؛ اگر خیلی نادر باشند، دادههای زیادی را دوباره پخش میکنید. سیستمهای بدون وضعیت، این بار تنظیم را با سناریوهای بازیابی قابل پیشبینی اما بالقوه دردناک معاوضه میکنند، که در آن خرابی یک گره در طول اوج ترافیک ممکن است باعث تأخیرهای آبشاری در پردازش مجدد شود.
ضمانتهای ثبات
سیستمهای Checkpoint میتوانند در ترکیب با بهروزرسانیهای تراکنشی به سیستمهای خارجی، معنای پردازش دقیقاً یکباره را ارائه دهند، اگرچه این امر مستلزم مدیریت دقیق عوارض جانبی است. بازیابی بدون وضعیت به طور طبیعی به معنای حداقل یکباره متمایل است زیرا پردازش مجدد ذاتی است و آن را برای عملیاتهای خودتوان یا سناریوهایی که در آنها مدیریت تکراری در پاییندست رخ میدهد، مناسبتر میکند.
اقتصاد منابع
تصویر هزینه کل، بسیاری از متخصصان را شگفتزده میکند. Checkpointing هزینههای ذخیرهسازی و شبکه مداوم برای فرادادهها را متحمل میشود، اما در طول بازیابی، محاسبات را ذخیره میکند. Stateless تا زمانی که آن Pager ساعت ۳ صبح، زمانی که یک قطعی منطقهای، پردازش مجدد شش ماه از دادههای clickstream را مجبور به انجام مجدد میکند، ارزانتر به نظر میرسد. سازمانهایی که نیازهای بازپخش قابل پیشبینی و محدود دارند، اغلب Stateless را جذاب میدانند؛ سازمانهایی که SLA های سختگیرانه و پنجرههای زمانی بزرگ دارند، معمولاً اینطور نیستند.
بلوغ اکوسیستم و ابزارسازی
پروتکل گروه مصرفکننده آپاچی کافکا، مدیریت آفست را تقریباً برای توسعهدهندگان نامرئی کرده است، به طوری که کامیتهای خودکار و نظارت بر تأخیر مصرفکننده اکنون استاندارد شدهاند. الگوهای بدون وضعیت (Stateless) بیشتر به صورت DIY باقی ماندهاند، اگرچه چارچوبهایی مانند همزمانی تأمینشده AWS Lambda و کانتینرهای موقت Kubernetes در حال همگرایی به سمت الگوهای اولیه بدون وضعیت مدیریتشده هستند. شکاف ابزار در حال کاهش است اما هنوز پر نشده است.
مزایا و معایب
نقطه بازرسی آفست بایت
مزایا
+بازیابی سریع خرابی
+سربار ذخیرهسازی کم
+معناشناسی دقیقاً-یکبار-یکبار ممکن است
+اکوسیستم ابزارآلات بالغ
+ردیابی پیشرفت دقیق
مصرف شده
−پیادهسازی پیچیدهی دقیقاً-یکبار-مصرف
−مدیریت غیر قطعی
−سربار هماهنگی توزیعشده
−وابستگی به سیستم خارجی
−تنظیم فرکانس ایست بازرسی
بازیابی بدون تابعیت
مزایا
+سادگی مفهومی
+بدون هماهنگی عکس فوری
+سهولت مقیاسبندی افقی
+بدون ریسک فساد دولتی
+انعطافپذیری زیرساخت
مصرف شده
−زمانهای بهبودی کندتر
−هزینه کامل بازفرآوری
−در دسترس بودن دادههای تاریخی
−حداقل یک بار به طور پیشفرض
−تأخیر در طول بازسازی
تصورات نادرست رایج
افسانه
بازیابی بدون وضعیت (Stateless Recovery) به این معنی است که هیچ وضعیتی در هیچ کجای سیستم وجود ندارد.
واقعیت
بیحالتی واقعی نادر است؛ اکثر معماریهای «بیحالت» به سادگی حالت را به پایگاههای داده، حافظههای پنهان یا ذخیرهسازی اشیاء منتقل میکنند. خود گرههای پردازشی ممکن است بیحالت باشند، اما سیستم به عنوان یک کل، حالت را مدیریت میکند - فقط از طریق انتزاعهای مختلف. درک این تمایز از غافلگیریهای معماری هنگام مقیاسبندی جلوگیری میکند.
افسانه
نقطه بررسی بایت آفست، پردازش خودکار دقیقاً یکباره را تضمین میکند.
واقعیت
نقطه بازرسی به تنهایی فقط تحویل حداقل یکباره را فراهم میکند. دستیابی به معنای دقیقاً یکباره نیاز به بهروزرسانیهای تراکنشی برای سینکها، عملیات خودتوان یا مکانیسمهای حذف دادههای تکراری دارد. نشانهگذاری آفست از خواندن مجدد دادههای منبع جلوگیری میکند، اما بدون مدیریت عوارض جانبی، دادههای تکراری همچنان میتوانند از طریق خط لوله منتشر شوند.
افسانه
بازیابی بدون تابعیت همیشه ارزانتر انجام میشود.
واقعیت
اگرچه حذف ذخیرهسازی Checkpoint برخی از هزینهها را کاهش میدهد، اما محاسبات مورد نیاز برای پردازش مجدد کامل در طول بازیابی میتواند صرفهجوییها را تحت الشعاع قرار دهد. سیستمی که به ندرت با وضعیت کوچک از کار میافتد، در واقع ممکن است بدون وضعیت ارزانتر باشد، اما سناریوهای با خرابی بالا یا پنجرههای زمانی بزرگ اغلب Checkpoint را به طور کلی اقتصادیتر میکند.
افسانه
زیرساختهای ابری مدرن، بازرسی را منسوخ کرده است.
واقعیت
با وجود پیشرفتهای حاصل شده در زمینهی هماهنگی بدون سرور و کانتینر، بسیاری از سیستمهای با توان عملیاتی بالا هنوز برای بازیابی در کسری از ثانیه به بازرسی متکی هستند. Cloud-native موازنهی اساسی بین سرعت بازیابی و هزینهی بازسازی را از بین نمیبرد - فقط گزینههای پیادهسازی متفاوتی را برای هر دو رویکرد ارائه میدهد.
افسانه
شما باید منحصراً بین این دو رویکرد یکی را انتخاب کنید.
واقعیت
معماریهای ترکیبی به طور فزایندهای رایج شدهاند، که در آنها مسیرهای بحرانی برای سرعت از ایست بازرسی و پردازش کمکی برای سادگی از الگوهای بدون وضعیت استفاده میکنند. این دوگانگی بیشتر جنبه آموزشی دارد تا عملی؛ سیستمهای پیچیده اغلب بسته به حساسیت دادهها و الزامات تأخیر، هر دو رویکرد را لایهبندی میکنند.
سوالات متداول
وقتی ایست بازرسی گرفته میشود، چه اتفاقی برای دادههای داخل پرواز میافتد؟
دادههای در حال پرواز یکی از دشوارترین چالشها در سیستمهای بازرسی هستند. اکثر پیادهسازیها از یک مکانیزم مانع استفاده میکنند که در آن یک نشانگر ویژه از طریق جریان داده منتشر میشود و هنگامی که همه اپراتورها دریافت آن را تأیید میکنند، نقطه بازرسی یک تصویر لحظهای ثابت را ثبت میکند. هر دادهای که پس از مانع میرسد متعلق به دوره بعدی است. این رویکرد که توسط آپاچی فلینک پیشگام شده است، تضمین میکند که حتی پردازش میانی دادهها به طور مداوم به حالت قبل از نقطه بازرسی یا بعد از نقطه بازرسی اختصاص داده شود.
بازیابی بدون وضعیت چگونه با خرابیها در طول پردازش مجدد برخورد میکند؟
اینجاست که بازیابی بدون وضعیت، آسیبپذیری بازگشتی خود را نشان میدهد. اگر یک گره در حین بازیابی از کار بیفتد، به سادگی از ابتدا شروع میکند. در عمل، این بدان معناست که سیستمهای بدون وضعیت در طول دورههای بازیابی به زیرساختهای بسیار قابل اعتمادی نیاز دارند، یا ردیابی پیشرفت جزئی را پیادهسازی میکنند - که به طرز مشکوکی شبیه به نقطه بازرسی به نظر میرسد. اکثر سیستمهای بدون وضعیت عملیاتی، مکانیسمهای ضربان قلب سبک یا پیشرفت را برای جلوگیری از حلقههای بازیابی نامحدود اضافه میکنند.
آیا چکپوینت آفست بایت میتواند با منابع جریانی غیر کافکا کار کند؟
کاملاً، هرچند جزئیات متفاوت است. Pulsar از موقعیتهای مکاننما استفاده میکند، Kinesis از اعداد ترتیبی استفاده میکند و پیادهسازیهای لاگ سفارشی میتوانند آنالوگهای آفست خود را تعریف کنند. نیاز کلیدی، یک لاگ قابل پخش مجدد، مرتب و بادوام با موقعیت پایدار است. سیستمهای صف پیام بدون این ویژگیها - مانند برخی از کارگزاران MQTT یا سیستمهای pub/sub ساده - از چکپوینت آفست واقعی پشتیبانی نمیکنند و به استراتژیهای تحمل خطای متفاوتی نیاز دارند.
چرا برخی از مهندسان، بازیابی بدون تابعیت را «پذیرش شکست» مینامند، نه «مدیریت شکست»؟
این عبارت، یک تغییر فلسفی در طراحی سیستم را به تصویر میکشد. بازیابی بدون وضعیت به جای سرمایهگذاری سنگین در جلوگیری یا به حداقل رساندن تأثیر خرابی، فرض میکند که خرابیها طبیعی هستند و برای بازسازی آسان بهینهسازی میکند. این شبیه به نحوهای است که Chaos Monkey نتفلیکس عمداً خرابیها را القا میکند تا از انعطافپذیری اطمینان حاصل کند. چارچوب «پذیرش» اذعان میکند که در سیستمهای توزیعشده بزرگ، خرابیها اجتنابناپذیر هستند - بازیابی بدون وضعیت فقط ظاهر «مدیریت» را تغییر میدهد.
پیامدهای امنیتی ذخیره دادههای ایست بازرسی چیست؟
فرادادههای نقاط بازرسی حاوی اطلاعات حساسی در مورد موقعیتهای پردازش و احتمالاً وضعیت منطق کسبوکار هستند. در صنایع تحت نظارت، این دادهها ممکن است نیاز به رمزگذاری در حالت استراحت و در حین انتقال، ثبت دسترسی و سیاستهای نگهداری داشته باشند. بازیابی بدون وضعیت با حذف ذخیرهسازیهای وضعیت پایدار، برخی از سطوح حمله را کاهش میدهد، اما خطراتی را در مورد پردازش مجدد دادهها ایجاد میکند - بازپخش دادههای تاریخی ممکن است آن را در معرض گرههای آسیبدیده یا دسترسی غیرمجاز در طول پنجرههای بازیابی قرار دهد.
این رویکردها چگونه با انطباق با GDPR یا CCPA مقایسه میشوند؟
نقطه بازرسی درخواستهای حذف صحیح را پیچیده میکند زیرا ممکن است آفستها به دادههایی اشاره کنند که باید حذف شوند. سیستمها باید فشردهسازی لاگ، سنگ قبرسازی یا ابطال نقطه بازرسی را برای مدیریت این امر پیادهسازی کنند. بازیابی بدون وضعیت برخی جنبهها را ساده میکند زیرا هیچ وضعیت پایداری اطلاعات شخصی را در خود نگه نمیدارد، اما لاگهای قابل پخش مجدد اساسی هنوز حاوی دادههای تاریخی هستند که مشمول مقررات هستند. هیچ یک از این رویکردها کار انطباق را از بین نمیبرند. آنها فقط جایی که پیچیدگی آشکار میشود، تغییر میکنند.
آیا در طول عملیات عادی، برای checkpointing جریمه عملکردی وجود دارد؟
بله، اگرچه پیادهسازیهای مدرن آن را به حداقل میرسانند. چکپوینتهای همزمان، پردازش را به طور خلاصه مسدود میکنند، در حالی که چکپوینتهای غیرهمزمان از تکنیکهای کپی هنگام نوشتن برای گرفتن عکس فوری از وضعیت بدون توقف جهان استفاده میکنند. این جریمه به صورت افزایش تأخیر، ترافیک شبکه اضافی برای انتقال چکپوینت و ورودی/خروجی ذخیرهسازی ظاهر میشود. تنظیم شامل یافتن نقطه بهینهای است که در آن فرکانس چکپوینت، جزئیات بازیابی کافی را بدون تسلط بر منابع سیستم فراهم میکند.
چه زمانی یک شرکت از یک رویکرد به رویکرد دیگر مهاجرت میکند؟
مهاجرت معمولاً از تکامل کسبوکار پیروی میکند. استارتاپها اغلب برای سرعت بخشیدن به توسعه، کار را بدون وضعیت (stateless) آغاز میکنند، سپس با سختتر شدن توافقنامههای سطح خدمات (SLA) و افزایش انتظارات مشتری برای زمان آماده به کار (Uptime)، سیستمها را با وضعیت (stateless) راهاندازی میکنند. برعکس، شرکتها گاهی اوقات سیستمهای با وضعیت (checkpoint) بیش از حد پیچیده را به سیستم بدون وضعیت (stateless) ساده میکنند، زمانی که متوجه میشوند اهداف زمان بازیابی واقعی آنها از آنچه در ابتدا مشخص شده است، سستتر است، یا زمانی که سربار عملیاتی از ارزش بازیابی سریع فراتر میرود.
چگونه پیشنهادات ارائه دهندگان خدمات ابری بر این انتخاب تأثیر میگذارد؟
مدل اجرای زودگذر AWS Lambda به شدت از الگوهای بدون وضعیت (stateless) حمایت میکند، در حالی که AWS Kinesis و MSK ردیابی آفست مدیریتشدهای را ارائه میدهند که بازرسی را تقریباً شفاف میکند. Azure Event Hubs و Google Cloud Pub/Sub موقعیتیابی مدیریتشده مشابهی را ارائه میدهند. سطح انتزاع ارائهدهنده اهمیت دارد - IaaS سطح پایینتر، تصمیمات بیشتری را به معماران واگذار میکند، در حالی که ارائههای PaaS سطح بالاتر به طور فزایندهای مکانیسمهای بازیابی خودمحور را در خود جای میدهند که ممکن است انتخاب را محدود یا ساده کند.
معنای «دقیقاً-یکبار» چه نقشی در انتخاب بین این رویکردها دارد؟
دقیقاً-یکبار اغلب عامل تعیینکننده است. تراکنشهای مالی، مدیریت موجودی و سیستمهای صدور صورتحساب اغلب به آن نیاز دارند و به سمت بازرسی با سینکهای تراکنشی سوق داده میشوند. سیستمهای تجزیه و تحلیل، نظارت و توصیه اغلب حداقل-یکبار را با حذف دادههای تکراری در پاییندست تحمل میکنند و بازیابی بدون وضعیت را امکانپذیر میسازند. هزینه پیادهسازی دقیقاً-یکبار در سیستمهای بدون وضعیت - معمولاً از طریق کلیدهای داخلی خارجی - گاهی اوقات از پذیرش ساده بازرسی از ابتدا فراتر میرود.
حکم
زمانی که سیستم شما جریانهای با سرعت بالا را با الزامات سختگیرانه تأخیر پردازش میکند و میتوانید روی پیچیدگی عملیاتی سرمایهگذاری کنید، از روش بایت آفست چکپوینت استفاده کنید. زمانی که سادگی، مقیاسپذیری افقی و تحمل تأخیرهای گاهبهگاه پردازش مجدد، بر نیاز به failover آنی غلبه میکند، بازیابی بدون وضعیت را انتخاب کنید. بسیاری از سازمانهای بالغ در نهایت رویکردهای ترکیبی را اتخاذ میکنند و مسیرهای بحرانی را چکپوینت میکنند و در عین حال پردازش کمکی را بدون وضعیت نگه میدارند.