یگر چیست؟
یگر نرمافزاری است که میتوانید برای نظارت و عیبیابی مشکلات در اجزای نرمافزاری به هم پیوسته به نام میکروسرویسها استفاده کنید. چندین میکروسرویس برای تکمیل یک عملکرد نرمافزاری واحد با یکدیگر ارتباط برقرار میکنند. توسعهدهندگان از یگر برای تجسم زنجیره رویدادها در این تعاملات میکروسرویس استفاده میکنند تا در صورت بروز مشکل، آن را جدا کنند. یگر به نام ردیابی یگر (Jaeger Tracing) نیز شناخته میشود، زیرا مسیر یک درخواست را از طریق مجموعهای از تعاملات میکروسرویس دنبال یا ردیابی میکند.
چرا یگر مهم است؟
در گذشته، طراحی نرمافزار به صورت یکپارچه بود و چندین عملکرد در یک پایگاه کد واحد بستهبندی میشدند. به عنوان مثال، برای طراحی یک برنامه سفارش غذا، منوی غذا، رستورانها و سیستمهای پرداخت همگی در یک واحد نرمافزاری واحد بستهبندی میشدند. این نوع طراحی نرمافزار، راه حل را پیچیدهتر و نگهداری آن را دشوارتر میکرد. وقتی توسعهدهندگان تغییراتی در کد در یک منطقه ایجاد میکردند، کل سیستم را تحت تأثیر قرار میداد و مدیریت تغییرات را به فرآیندی طولانی و خستهکننده تبدیل میکرد. برای حل این مشکل، طراحی معماری مدولارتر شد.
میکروسرویسها
برنامههای مدرن به عنوان مجموعهای از واحدهای مستقل کوچک به نام میکروسرویسها عمل میکنند. به عنوان مثال، یک برنامه مدرن سفارش غذا ممکن است از این بخشها تشکیل شده باشد:
- یک سرویس موقعیت جغرافیایی برای تشخیص محل مشتری
- سرویسی که سفارشها را جمعآوری و به رستورانها ارسال میکند
- درگاه پرداخت با چندین گزینه پرداخت
هر میکروسرویس به عنوان یک برنامه مستقل کار میکند و به پایگاه داده و منطق خود دسترسی دارد. میکروسرویسها با استفاده از درخواستها و پاسخها، مانند یک برنامه وب، با یکدیگر ارتباط برقرار میکنند. سیستم مبتنی بر میکروسرویس نیز سیستم توزیعشده نامیده میشود.
عیبیابی معماری میکروسرویسها
به دلیل رفتار پیچیده میکروسرویسها، بررسی مشکلات در سیستمهای توزیعشده چالشبرانگیز است. به عنوان مثال، ثبت سفارش غذا در یک برنامه مدولار ممکن است چندین درخواست را به میکروسرویسهای مختلف فعال کند. این درخواستها میتوانند به طور همزمان و مستقل اتفاق بیفتند و نیازی به ترتیب متوالی ندارند. اگر مشکلی در سفارش غذا رخ دهد، توسعهدهندگان باید مشخص کنند که کدام میکروسرویس باعث آن شده است. روشهای ردیابی مشکل معمولی فقط تصویر جزئی از درخواست را ارائه میدهند و عیبیابی میکروسرویسها را خستهکننده میکنند.
یگر ابزاری نرمافزاری است که تیمهای فناوری اطلاعات از آن برای کسب دید و شفافیت در کل زنجیره رویدادها استفاده میکنند. آنها میتوانند مشکلات را سریعتر حل کرده و تجربه مشتری را بهبود بخشند.
یگر برای چه مواردی استفاده میشود؟
توسعهدهندگان از یگر برای بهبود عملکرد سیستم توزیعشده به روشهای مختلف استفاده میکنند. در زیر چند نمونه ارائه میدهیم.
- نظارت بر تراکنش توزیعشده: یگر ویژگیهایی دارد که حرکات داده بین میکروسرویسها را نظارت میکند. توسعهدهندگان میتوانند رویکردی فعال برای شناسایی و حل مشکلات قبل از مختل کردن تجربه کاربر اتخاذ کنند.
- بهینهسازی تأخیر: تجزیه و تحلیل یگر میتواند گلوگاهها را در میکروسرویسهایی که سرعت برنامه را کاهش میدهند، پیدا کند. توسعهدهندگان از یگر برای بررسی رفتار میکروسرویسها و یافتن راههایی برای سریعتر کردن آنها استفاده میکنند.
- تحلیل علت ریشهای: در معماری میکروسرویس، یک مشکل میتواند منجر به مشکلات دیگر شود. توسعهدهندگان میتوانند از یگر برای یافتن نقطه شروع مجموعهای از مشکلات مرتبط در یک برنامه استفاده کنند.
- تحلیل وابستگی سرویس: وابستگی سرویس به این معنی است که یک برنامه برای اجرا به چندین جزء وابسته است. به عنوان مثال، یک برنامه ناوبری به خدمات موقعیت مکانی در برنامه تلفن همراه وابسته است. توسعهدهندگان از یگر برای درک روابط پیچیده بین میکروسرویسهای مختلف استفاده میکنند.
- انتشار زمینه توزیعشده: انتشار زمینه توزیعشده روشی است که یک برنامه اطلاعات توصیفی را به همراه دادهها منتقل میکند. این به توسعهدهندگان کمک میکند تا عملکرد میکروسرویس را به طور کلی ارزیابی کنند. به عنوان مثال، یگر درخواستهای سفارش را با نام مشتری برچسبگذاری میکند تا توسعهدهندگان بتوانند مسیر درخواست را با مشتری خاص مرتبط کنند.
یگر چگونه کار میکند؟
یگر بر اساس اصول ردیابی توزیعشده کار میکند و از چارچوب OpenTracing استفاده میکند.
- ردیابی توزیعشده: ردیابی توزیعشده یک تکنیک نرمافزاری است که دنباله رویدادها را در بین میکروسرویسها نظارت میکند. تمام اتصالات را ردیابی میکند و نمودارها و نمودارهایی را برای تجسم مسیرهای درخواست در یک برنامه ارائه میدهد. یگر به عنوان یک ابزار ردیابی توزیعشده، حرکات درخواست را با اختصاص یک شناسه منحصر به فرد به هر درخواست و جمعآوری اطلاعات هنگام پردازش درخواست توسط یک سرویس خاص ردیابی میکند.
- OpenTracing: OpenTracing یک چارچوب متنباز یا رایگان است که استانداردهایی را برای ایجاد ردیابی توزیعشده دقیق و آماده به کار در سیستمهای نرمافزاری مدرن ارائه میدهد. به عنوان مثال، یک استاندارد مشترک برای تعریف ساختار اطلاعات نظارتشده که بین میکروسرویسها منتقل میشود، ارائه میدهد. یگر از OpenTracing برای ارائه یک راه حل کامل برای جمعآوری، ذخیره، مدیریت، تجزیه و تحلیل و تجسم دادههای میکروسرویس استفاده میکند.
- مدل داده OpenTracing: مدل داده OpenTracing تعریف اساسی را برای اتصال دادهها از اجزای مختلف ارائه میدهد. دو اصطلاح اصلی که استفاده میکند، بازه (span) و ردیابی (trace) هستند.
- بازه (Span): بازه یک واحد منطقی واحد از کار است که در یک سیستم ردیابی توزیعشده انجام میشود. هر بازه این اجزا را دارد:
- نام عملیات
- زمان شروع و زمان پایان
- برچسبها یا مقادیری که به توسعهدهندگان در تجزیه و تحلیل بازه کمک میکنند
- لاگهایی که هر پیامی را که میکروسرویس تولید میکند ذخیره میکنند
- زمینه بازه یا توضیحات اضافی بازه
- ردیابی (Trace): ردیابی مجموعهای از یک یا چند بازه است که متعلق به یک فرآیند مشابه هستند. رویدادهایی را که در یک زمان خاص رخ میدهند، نشان میدهد. بازههایی که متعلق به یک ردیابی مشابه هستند، شناسه ردیابی مشابهی را به اشتراک میگذارند. به عنوان مثال، ردیابی که هنگام سفارش غذا توسط مشتری ایجاد میشود، منجر به بازههای زیر میشود:
- مشتری سفارش را ثبت میکند
- پرداخت پردازش میشود
- لیست سفارش به رستوران ارسال میشود
- غذا تحویل گرفته میشود
- غذا تحویل داده میشود
اجزای یگر چه هستند؟
پلتفرم ردیابی توزیعشده یگر از اجزای زیر تشکیل شده است.
- مشتری یگر (Jaeger Client): مشتری یگر شامل پیادهسازیهای خاص زبان API OpenTracing در زبانهای برنامهنویسی مانند Go، JavaScript، Java، Python، Ruby و PHP است. توسعهدهندگان از این APIها برای ایجاد بازههای یگر بدون نوشتن کد منبع برای ردیابی توزیعشده استفاده میکنند.
- عامل یگر (Jaeger Agent): عامل یگر یک دیمون شبکه یا فرآیندی است که به طور مداوم در پسزمینه اجرا میشود تا عملکردهای مورد نیاز سایر فرآیندها را انجام دهد. به بازههایی که مشتری از طریق پروتکل دادهنگار کاربر (UDP) ارسال میکند، گوش میدهد، نوعی روش ارتباطی که به برنامهها اجازه میدهد پیامها را از طریق شبکه مبادله کنند. عامل در محیطهای کانتینری مانند Amazon Elastic Kubernetes Service به مشتری متصل میشود. عامل بازهها را به صورت دستهای گروهبندی میکند و آنها را به جمعآورنده ارسال میکند. این امر به برنامه اجازه میدهد بدون ارسال فعال اطلاعات ردیابی به بکاند یگر اجرا شود.
- جمعآورنده یگر (Jaeger Collector): جمعآورنده یگر یک جزء نرمافزاری است که ردیابیها را از جمعآورنده یگر بازیابی میکند. ردیابیها را بررسی، پردازش و در پایگاه داده ذخیره میکند.
- ذخیرهسازی (Storage): سیستم ردیابی یگر بازهها را دریافت و در یک بکاند ذخیرهسازی دائمی یا پایگاه داده ذخیره میکند. ذخیرهسازی دائمی به این معنی است که دادههای ذخیره شده حتی در صورت خاموش شدن رایانه دست نخورده باقی میمانند. به عنوان مثال، توسعهدهندگان از سرویس AWS OpenSearch به عنوان ذخیرهسازی دائمی برای ذخیره و پذیرش بازهها استفاده میکنند.
- درونریز (Ingester): یک راه برای استقرار یگر، ارسال دادههای ردیابی به Kafka است، یک سیستم توزیعشده برای برنامهها برای ذخیره و بازیابی جریانهای اطلاعات. درونریز یک ماژول است که دادههای ردیابی را از Kafka میخواند و به طور جداگانه ذخیره میکند.
- پرس و جو (Query): سرویس پرس و جو اطلاعات ردیابی را از پایگاه داده بازیابی میکند. توسعهدهندگان از پرس و جوها برای یافتن ردیابیها با زمان، برچسبها، مدت زمان و عملیات خاص استفاده میکنند.
- کنسول یگر (Jaeger Console): کنسول یگر یک برنامه نرمافزاری با رابط کاربری است که میتوانید از آن برای مشاهده و تجزیه و تحلیل ردیابیها استفاده کنید. دادههای ردیابی را در نمودارها و نمودارها نمایش میدهد.
توسعهدهندگان چگونه از یگر استفاده میکنند؟
هنگامی که توسعهدهندگان یک برنامه را میسازند، از کتابخانههای مشتری یگر برای ایجاد بازهها استفاده میکنند. با افزودن کدها به برنامه برای تولید دادههای ردیابی، آنچه به عنوان یک برنامه ابزار دقیق شناخته میشود، ایجاد میکنند. برنامه ابزار دقیق به طور خودکار موارد زیر را تولید میکند:
- بازههای حاوی شناسه بازه، شناسه ردیابی، برچسبها، لاگها و زمینه بازه
- ردیابی برای هر درخواست
توسعهدهندگان از کنسول یگر برای جستجو، فیلتر، تجسم و تجزیه و تحلیل این دادههای ردیابی توزیعشده استفاده میکنند. آنها میتوانند از نرمافزار رابط کاربری یگر برای مشاهده اطلاعات دقیق مانند مدت زمان فرآیند، خطاها و لاگها از میکروسرویسها استفاده کنند.
استراتژیهای نمونهبرداری یگر چه هستند؟
یک برنامه ابزار دقیق به طور خودکار دادههای ردیابی را هر زمان که برنامه در حال اجرا است، منتقل میکند. میتوانید از این دادههای ردیابی برای اندازهگیری عملکرد برنامه استفاده کنید. به آن دادههای تلهمتری نیز گفته میشود. برای جلوگیری از غرق شدن بکاند یگر با دادههای تلهمتری بیش از حد، میتوانید با پیکربندی استراتژیهای نمونهبرداری در پیادهسازی یگر خود، آن را فیلتر یا نمونهبرداری کنید. اینها برخی از استراتژیهای نمونهبرداری هستند:
- نمونهبرداری ثابت (Constant sampling): تعداد نمونههای یکسان را برای همه انواع ردیابیها جمعآوری میکند.
- نمونهبرداری احتمالی (Probabilistic sampling): نمونهها را به طور تصادفی جمعآوری میکند تا زمانی که به درصد معینی برسد.
- نمونهبرداری محدود کننده نرخ (Rate limiting sampling): تعداد مشخصی از نمونهها را در هر ثانیه بازیابی میکند.
- نمونهبرداری تطبیقی (Adaptive sampling): به طور خودکار نرخ نمونه را برای دستیابی به تعدادی ردیابی برای مدت زمان خاص تنظیم میکند.