یگر نرمافزاری است که میتوانید برای نظارت و عیبیابی مشکلات در اجزای نرمافزاری به هم پیوسته به نام میکروسرویسها استفاده کنید. چندین میکروسرویس برای تکمیل یک عملکرد نرمافزاری واحد با یکدیگر ارتباط برقرار میکنند. توسعهدهندگان از یگر برای تجسم زنجیره رویدادها در این تعاملات میکروسرویس استفاده میکنند تا در صورت بروز مشکل، آن را جدا کنند. یگر به نام ردیابی یگر (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): جمعآورنده یگر یک جزء نرمافزاری است که ردیابیها را از جمعآورنده یگر بازیابی میکند. ردیابیها را بررسی، پردازش و در پایگاه داده ذخیره میکند.