ردیابی توزیعشده چیست؟
ردیابی توزیعشده، مشاهده درخواستهای داده در حین جریان یافتن آنها در یک سیستم توزیعشده است. معماری مدرن میکروسرویسها اغلب دارای چندین مؤلفه کوچک مستقل است—این مؤلفهها بهطور مداوم با استفاده از APIها برای انجام کارهای پیچیده با یکدیگر ارتباط برقرار کرده و تبادل داده میکنند. با ردیابی توزیعشده، توسعهدهندگان میتوانند مسیر یک درخواست را در سراسر میکروسرویسهای مختلف ردیابی کنند—یا بهصورت بصری دنبال کنند. این دید به عیبیابی خطاها یا رفع اشکالات و مشکلات عملکرد کمک میکند.
مزایای ردیابی توزیعشده چیست؟
توسعهدهندگان نرمافزار میتوانند سیستمهای ردیابی توزیعشده را تقریباً در هر محیط ابری بومی پیادهسازی کنند و همچنین ردیابیهای توزیعشدهای را که برنامههای ابری تولید میکنند، ثبت کنند. علاوه بر این، ابزارهای ردیابی از زبانهای برنامهنویسی و پشتههای نرمافزاری متعددی پشتیبانی میکنند و به تیمهای نرمافزاری اجازه میدهند تا دادههای عملکرد برنامههای مختلف را در یک پلتفرم واحد نظارت و جمعآوری کنند.تیمهای توسعه از ردیابی توزیعشده برای بهبود قابلیت مشاهده و همچنین حل مشکلات عملکردی استفاده میکنند که ابزارهای اشکالزدایی و نظارت نرمافزاری معمولی نمیتوانند به آنها کمک کنند.
مزایای بیشتر ردیابی توزیعشده در زیر آمده است.
تسریع عیبیابی نرمافزار
برنامههای مدرن برای تبادل داده و انجام درخواستهای سرویس در سراسر سیستمهای توزیعشده به تعداد زیادی میکروسرویس متکی هستند. عیبیابی مشکلات عملکرد در معماری مبتنی بر میکروسرویسها به طور قابل توجهی چالشبرانگیزتر از یک برنامه نرمافزاری یکپارچه است. برخلاف یک برنامه یکپارچه، علت اصلی یک مشکل نرمافزاری خاص ممکن است آشکار نباشد—تعاملات همپوشان و پیچیده بین چندین ماژول نرمافزاری میتواند تشخیص مشکلات را دشوار کند.با ردیابی توزیعشده، تیمهای نرمافزاری میتوانند دادههایی را که از مسیرهای پیچیده متصلکننده میکروسرویسهای مختلف و ذخیرهسازی داده عبور میکنند، نظارت کنند. با استفاده از ابزارهای ردیابی توزیعشده، تیمهای نرمافزاری درخواستها را ردیابی کرده و مسیرهای انتشار داده را با دقت تجسم میکنند. تیمهای نرمافزاری میتوانند مشکلات عملکرد را به سرعت حل کرده و اختلالات سرویس را به حداقل برسانند.
بهبود همکاری توسعهدهندگان
اغلب چندین توسعهدهنده در ساخت یک برنامه ابری دخیل هستند و هر کدام مسئول یک یا چند میکروسرویس هستند. اگر توسعهدهندگان نتوانند دادههای مبادلهشده توسط میکروسرویسها را ردیابی کنند، روند توسعه نرمافزار کند میشود. با سیستمهای ردیابی توزیعشده، توسعهدهندگان میتوانند با ارائه دادههای تلهمتری، مانند گزارشها و ردیابیها، برای هر درخواست سرویسی که میکروسرویس ایجاد میکند، همکاری کنند. توسعهدهندگان میتوانند به طور دقیق به اشکالات و سایر مشکلات نرمافزاری که در طول آزمایش و تولید کشف میشوند، پاسخ دهند.
کاهش زمان ورود به بازار
سازمانهایی که پلتفرمهای ردیابی توزیعشده را مستقر میکنند، میتوانند تلاشها برای انتشار برنامههای نرمافزاری برای کاربران نهایی را ساده و تسریع کنند. تیمهای نرمافزاری ردیابیهای توزیعشده را بررسی میکنند تا بینشی به دست آورند که توسعه نرمافزار را سرعت میبخشد، هزینههای توسعه را به حداقل میرساند، رفتارهای کاربر را درک میکند و آمادگی بازار را بهبود میبخشد.
انواع مختلف ردیابی توزیعشده چیست؟
تیمهای نرمافزاری از ابزارهای ردیابی توزیعشده برای نظارت، تجزیه و تحلیل و بهینهسازی برنامهها استفاده میکنند.
ردیابی کد
ردیابی کد یک فرآیند نرمافزاری است که جریان کدهای منبع را در یک برنامه هنگام انجام یک عملکرد خاص بررسی میکند. این به توسعهدهندگان کمک میکند تا جریان منطقی کد را درک کرده و مشکلات ناشناخته را شناسایی کنند. به عنوان مثال، توسعهدهندگان از ردیابی کد برای تأیید اینکه درخواست سرویس مراحلی را برای پرس و جو از یک پایگاه داده فراخوانی کرده است، استفاده میکنند. اگر برخی از عملکردهای نرمافزاری نتوانند پاسخ دهند، سیستم ردیابی وضعیت خطای مناسب را جمعآوری کرده و توجه را به زمان پاسخ جلب میکند.
ردیابی برنامه
ردیابی برنامه روشی است که در آن توسعهدهندگان میتوانند آدرسهای دستورالعملها و متغیرهای فراخوانیشده توسط یک برنامه فعال را بررسی کنند. هنگامی که یک برنامه نرمافزاری اجرا میشود، هر خط کدی را که در یک فضای حافظه اختصاص داده شده خاص قرار دارد، پردازش میکند. برنامه همچنین متغیرهای ذخیره شده در حافظه ماشین را پردازش میکند. بررسی تغییرات در حافظههای برنامه و داده بدون یک ابزار خودکار چالشبرانگیز است. با ردیابی برنامه، تیمهای نرمافزاری میتوانند مشکلات عملکرد عمیق مانند سرریز حافظه، مصرف بیش از حد منابع و عملیات منطقی مسدودکننده را تشخیص دهند.
ردیابی سرتاسری
با ردیابی سرتاسری، تیمهای توسعه میتوانند تغییر شکل دادهها را در طول مسیر درخواست سرویس پیگیری کنند. هنگامی که یک برنامه یک درخواست را آغاز میکند، دادهها را برای پردازش بیشتر به سایر مؤلفههای نرمافزاری ارسال میکند. توسعهدهندگان از ابزارهای ردیابی برای پیگیری و جمعآوری تغییراتی که دادههای حیاتی از ابتدا تا انتها متحمل میشوند، استفاده میکنند. این یک دیدگاه مبتنی بر برنامه از درخواستهای جاری در برنامه ارائه میدهد.
ردیابی توزیعشده سرتاسری در معماری میکروسرویسها چگونه کار میکند؟
هنگام استفاده از برنامهها، کاربران درخواستهای سرویس را آغاز میکنند و مؤلفههای مختلف برنامه درخواست را پردازش میکنند.فرض کنید کاربری در یک برنامه رزرو فیلم آنلاین، یک رزرو بلیط انجام میدهد. کاربر جزئیات تماس، جزئیات فیلم و اطلاعات پرداخت خود را وارد کرده و گزینه “رزرو کن” را انتخاب میکند. یک درخواست ایجاد میشود که به موارد زیر میرود:
- میکروسرویس A که دادههای وارد شده توسط کاربر را اعتبارسنجی میکند.
- میکروسرویس B که دادهها را از A گرفته و یک رکورد در پایگاه داده مشتری ایجاد میکند.
- میکروسرویس C که دادهها را از B گرفته و پرداخت را اعتبارسنجی میکند.
- میکروسرویس D که دادهها را از C گرفته، یک صندلی را تخصیص میدهد و دادههای بلیط فیلم را تولید میکند.
- میکروسرویس E که دادهها را از D گرفته و یک فایل PDF بلیط فرمتشده ایجاد میکند.
سپس یک پاسخ حاوی فایل PDF بلیط از طریق زنجیره میکروسرویسها از E به D به C به B به A بازگردانده میشود تا در نهایت به کاربر برسد. مثال بالا ساده است—یک درخواست اغلب از چندین ده میکروسرویس و حتی زنجیرههای مؤلفههای نرمافزاری شخص ثالث خارج از برنامه عبور میکند. این امر روند را بهطور فزایندهای پیچیده میکند.سیستمهای ردیابی توزیعشده این تعاملات درخواستهای سرویس با سایر میکروسرویسها و مؤلفههای نرمافزاری در محیط محاسبات توزیعشده را ردیابی میکنند. یک ردیابی توزیعشده نشاندهنده جدول زمانی و تمام اقداماتی است که بین تولید درخواست و دریافت پاسخ رخ میدهد. تیمهای نرمافزاری از ردیابی برای دنبال کردن حرکت دادهها از طریق چندین میکروسرویس که درخواست اولیه با آنها تعامل دارد، استفاده میکنند.
اسپن (Span)
هنگام پردازش یک درخواست سرویس، یک برنامه ممکن است چندین عمل انجام دهد. این اقدامات در ردیابی توزیعشده به عنوان اسپن نشان داده میشوند. به عنوان مثال، یک اسپن ممکن است یک فراخوانی API، احراز هویت کاربر یا فعال کردن دسترسی به ذخیرهسازی باشد. اگر یک درخواست واحد منجر به چندین عمل شود، اسپن اولیه (یا والد) ممکن است به چندین اسپن فرزند منشعب شود. این لایههای تودرتوی اسپنهای والد و فرزند، یک نمایش منطقی پیوسته از مراحل انجام شده برای تکمیل درخواست سرویس را تشکیل میدهند.
شناسه ردیابی (Trace ID)
سیستم ردیابی توزیعشده برای ردیابی هر درخواست، یک شناسه منحصر به فرد به آن اختصاص میدهد. هر اسپن همان شناسه ردیابی را از درخواست اصلی که به آن تعلق دارد، به ارث میبرد. اسپنها همچنین با یک شناسه اسپن منحصر به فرد برچسبگذاری میشوند که به سیستم ردیابی کمک میکند تا فراداده، گزارشها و معیارهای جمعآوری شده را یکپارچه کند.
جمعآوری متریک (Metric collection)
همانطور که هر اسپن از طریق میکروسرویسهای مختلف عبور میکند، متریکهایی را اضافه میکند که بینش عمیق و دقیقی در مورد رفتار نرمافزار در اختیار توسعهدهندگان قرار میدهد. شما میتوانید نرخ خطا، مهر زمانی، زمان پاسخ و سایر فرادادهها را با اسپنها جمعآوری کنید. پس از اینکه ردیابی یک چرخه کامل را به پایان رساند، ابزار ردیابی توزیعشده تمام دادههای جمعآوری شده را یکپارچه میکند.به عنوان مثال، یک فراخوانی API با زمان پاسخ، وضعیت خطا و تفکیک عملکردهای ثانویه انجام شده توسط چندین سرویس شخص ثالث ارزیابی میشود. ابزار ردیابی دادهها را به اشکال بصری تبدیل میکند و شاخصهای کلیدی و خلاصه عملکرد را برجسته میکند. به این ترتیب، مهندسان قابلیت اطمینان سایت میتوانند به سرعت خطاها را شناسایی کرده، عناصر داده حیاتی را بررسی کرده و با تیمهای توسعه برای رفع مشکلات عملکرد و اطمینان از انطباق با توافقنامههای سطح سرویس (SLA) همکاری کنند.
استانداردهای ردیابی توزیعشده چیست؟
استانداردهای ردیابی توزیعشده یک چارچوب مشترک و ابزارهای نرمافزاری برای توسعهدهندگان فراهم میکنند. این استانداردها درخواستهای سرویس را در محیطهای کاربردی مدرن نظارت، تجسم و تجزیه و تحلیل میکنند. با استانداردسازی گردش کار ردیابی درخواست، تیمهای نرمافزاری میتوانند ردیابی درخواست را بدون گرفتار شدن در وابستگی به یک فروشنده خاص، پیادهسازی کنند.بخشهای زیر استانداردهایی را شرح میدهند که برای فعال کردن قابلیت همکاری هنگام انجام ردیابی توزیعشده معرفی شدهاند.
OpenTracing
OpenTracing یک استاندارد ردیابی توزیعشده متنباز است که توسط بنیاد محاسبات بومی ابر (CNCF) توسعه داده شده است. OpenTracing بر توانمندسازی توسعهدهندگان برای تولید ردیابیها با استفاده از یک API ابزار دقیقسازی تمرکز دارد. این به توسعهدهندگان اجازه میدهد تا ردیابیهای توزیعشده را از بخشهای مختلف پایگاه کد، کتابخانه یا سایر وابستگیها تولید کنند.
OpenCensus
OpenCensus شامل کتابخانههای چندزبانه است که قادر به استخراج معیارهای نرمافزاری و ارسال آنها به سیستمهای بکاند برای تجزیه و تحلیل هستند. توسعهدهندگان میتوانند از API ارائه شده برای مدیریت نحوه تولید و جمعآوری ردیابیها استفاده کنند. برخلاف OpenTracing، توسعهدهندگان با OpenCensus از یک مخزن پروژه واحد به جای پایگاههای کد و کتابخانههای جداگانه کار میکنند.
OpenTelemetry
OpenTelemetry، OpenTracing و OpenCensus را متحد میکند. این استاندارد بهترین ویژگیهای هر دو استاندارد را برای ارائه یک چارچوب جامع ردیابی توزیعشده ترکیب میکند. OpenTelemetry کیتهای توسعه نرمافزار گسترده، APIها، کتابخانهها و سایر ابزارهای ابزار دقیقسازی را برای پیادهسازی آسانتر ردیابی توزیعشده فراهم میکند.
تفاوت بین ردیابی توزیعشده و ثبت وقایع (Logging) چیست؟
ثبت وقایع، روشی برای ثبت رویدادهای خاصی است که هنگام اجرای یک برنامه رخ میدهند. ابزارهای ثبت وقایع، رویدادهای دارای مهر زمانی – مانند خطاهای سیستم، تعاملات کاربر، وضعیتهای ارتباطی و سایر معیارها – را جمعآوری میکنند تا به تیمهای توسعه در تشخیص ناهنجاریهای سیستم کمک کنند. بهطور کلی، دو نوع ثبت وقایع وجود دارد:
- ثبت وقایع متمرکز: تمام فعالیتهای ثبتشده را جمعآوری کرده و در یک مکان واحد ذخیره میکند.
- ثبت وقایع توزیعشده: فایلهای ثبت وقایع را در مکانهای جداگانه در فضای ابری ذخیره میکند.
هر دو روش ثبت وقایع، یک نمای کلی ایستا از حوادث ارائه میدهند که به توسعهدهندگان نشان میدهد چه اتفاقی در برنامه افتاده است. در مقابل، ردیابی توزیعشده یک مسیر ممیزی ارائه میدهد که با مرتبط کردن دادههای تلهمتری مختلف جمعآوریشده در طول دوره یک درخواست سرویس، علت وقوع یک حادثه را روشن میکند. ردیابی توزیعشده ممکن است از ثبت وقایع و سایر روشهای جمعآوری داده برای ردیابی یک درخواست سرویس خاص استفاده کند.
چالشهای ردیابی توزیعشده چیست؟
ردیابی توزیعشده تلاشهای توسعهدهندگان را در تشخیص، اشکالزدایی و رفع مشکلات نرمافزاری ساده کرده است. با وجود این، چالشهای زیر همچنان باقی ماندهاند که تیمهای نرمافزاری هنگام انتخاب ابزارهای ردیابی باید به آنها توجه داشته باشند.
-
ابزار دقیقسازی دستی: برخی از ابزارهای ردیابی، تیمهای نرمافزاری را ملزم به ابزار دقیقسازی دستی کدهای خود برای تولید ردیابیهای لازم میکنند. هنگامی که توسعهدهندگان کدها را برای ردیابی درخواستها تغییر میدهند، خطر بروز خطاهای کدنویسی وجود دارد که بر نسخههای تولید تأثیر میگذارد. علاوه بر این، عدم وجود اتوماسیون، ردیابی را پیچیده میکند و منجر به تأخیر و احتمالاً جمعآوری نادرست دادهها میشود.
-
پوشش محدود فرانتاند: اگر ابزارهای ردیابی آنها محدود به تجزیه و تحلیل بکاند باشد، توسعهدهندگان ممکن است نتوانند نظارت کاملی بر مشکلات عملکرد داشته باشند. در برخی موارد، سیستم ردیابی توزیعشده تنها زمانی شروع به جمعآوری دادهها میکند که اولین سرویس بکاند درخواست را دریافت کند. این بدان معناست که توسعهدهندگان نمیتوانند مشکلات ناشی از سرویسهای فرانتاند را در طول جلسه کاربری مربوطه تشخیص داده و بررسی کنند.
-
نمونهبرداری تصادفی: برخی از ابزارها به تیمهای نرمافزاری اجازه نمیدهند ردیابی را اولویتبندی کنند و قابلیت مشاهده را به ردیابیهای نمونهبرداریشده بهطور تصادفی محدود میکنند. با دادههای نمونه محدود، سازمانها به رویکردهای عیبیابی نرمافزاری اضافی برای ثبت مشکلات عمدهای که از ابزار ردیابی فرار میکنند، نیاز دارند.