مشاهده پذیریمیکروسرویسهاورود به سیستمنظارتزیرساخت ابریسیستمهای توزیعشده
مشاهدهپذیری در میکروسرویسها در مقابل ثبت وقایع سیستم یکپارچه
قابلیت مشاهده میکروسرویسها، ردیابی، معیارها و گزارشهای توزیعشده را در بین سرویسهای مستقل ارائه میدهد، در حالی که گزارشگیری یکپارچه بر سوابق متمرکز از یک برنامه واحد تمرکز دارد. انتخاب صحیح به پیچیدگی سیستم، مقیاس و میزان بینش مورد نیاز تیمها در تعاملات سرویس بستگی دارد.
برجستهها
قابلیت مشاهده میکروسرویسها، ردپاها، معیارها و گزارشها را به عنوان سیگنالهای یکسان در نظر میگیرد، در حالی که گزارشگیری یکپارچه تقریباً به طور کامل بر سوابق متنی متکی است.
ردیابی توزیعشده به تیمها اجازه میدهد تا دقیقاً مشخص کنند که کدام سرویس خاص باعث خرابی شده است، چیزی که لاگهای سنتی در مرزهای سرویس با آن مشکل دارند.
ثبت وقایع یکپارچه برای شروع به زیرساخت و تخصص بسیار کمتری نیاز دارد، و این امر آن را برای سیستمهای کوچکتر یا قدیمی جذاب میکند.
قابلیت مشاهده با پیچیدگی سیستم افزایش مییابد، در حالی که ثبت وقایع یکپارچه با افزایش اندازه برنامه و ترافیک، رو به کاهش میگذارد.
قابلیت مشاهده در میکروسرویسها چیست؟
یک رویکرد چندبعدی که ردیابیها، معیارها و گزارشها را برای درک رفتار در سرویسهای توزیعشده و مستقل پیادهسازیشده ترکیب میکند.
ساخته شده بر سه ستون: ردیابی توزیعشده، معیارها و ثبت وقایع ساختاریافته در سراسر سرویسها
از شناسههای همبستگی برای دنبال کردن یک درخواست واحد هنگام جابجایی بین دهها یا صدها سرویس استفاده میکند.
برای جمعآوری و مصورسازی دادهها به ابزارهایی مانند OpenTelemetry، Jaeger، Prometheus و Grafana متکی است.
طراحی شده برای مدیریت زیرساختهای زودگذر که در آنها کانتینرها و پادها دائماً بالا و پایین میچرخند
تیمهای SRE را قادر میسازد تا ناهنجاریها را از طریق اهداف سطح سرویس و بودجهبندی خطا تشخیص دهند.
ثبت وقایع سیستم یکپارچه چیست؟
یک رویکرد سنتی که در آن یک برنامه واحد، ورودیهای لاگ را در فایلهای متمرکز یا یک مخزن لاگ واحد برای اشکالزدایی و حسابرسی مینویسد.
لاگها از یک کدبیس که به عنوان یک فرآیند واحد اجرا میشود، سرچشمه میگیرند و دنبال کردن مسیرهای درخواست را ساده میکنند.
معمولاً از گزارشگیری مبتنی بر فایل، syslog یا تجمیعکنندههای سادهی گزارش مانند Logback یا log4j استفاده میکند.
اشکالزدایی معمولاً شامل بررسی فایلهای لاگ یا پرسوجو از یک نمونه پشته ELK است.
سربار عملکرد حداقل است زیرا ثبت وقایع در یک محیط زمان اجرا اتفاق میافتد
پیادهسازی آسانتر همبستگی از طریق زمینه محلی نخ یا شناسههای ساده جلسه
جدول مقایسه
ویژگی
قابلیت مشاهده در میکروسرویسها
ثبت وقایع سیستم یکپارچه
معماری
در بسیاری از سرویسها توزیع شده است
برنامه یکپارچه واحد
انواع دادههای اولیه
ردیابیها، معیارها و گزارشها
گزارشها در درجه اول، و گاهی اوقات معیارها
درخواست ردیابی
ردیابی توزیعشده با زمینهی گسترده
ردیابی مبتنی بر thread-local یا session-based
پیچیدگی ابزار
زیاد - نیاز به ابزار دقیق در سراسر خدمات دارد
کم - یک خط لوله تک ورودی کافی است
مقیاسپذیری
مقیاس افقی با تعداد سرویس
محدود به توان عملیاتی تک برنامه
تشخیص خرابی
مشخص میکند که کدام سرویس باعث تأخیر یا خطا شده است
آسانتر در یک فرآیند، سختتر در مرزها
الزامات ذخیرهسازی
پایگاههای داده با حجم بالا، اغلب سری زمانی
متوسط، معمولاً فایلهای مسطح یا یک شاخص
هزینه اجرا
سرمایهگذاری اولیه قابل توجه
هزینه اولیه راهاندازی کمتر
مقایسه دقیق
فلسفه و رویکرد اصلی
قابلیت مشاهده میکروسرویسها فرض میکند که شما نمیتوانید هر حالت خرابی را از قبل پیشبینی کنید، بنابراین شما به اندازه کافی دادههای متنوع جمعآوری میکنید تا پس از بروز مشکلات، سوالات جدیدی بپرسید. ثبت وقایع یکپارچه (Monolithic logging) رویکرد سادهتری دارد: ثبت سوابق متنی کافی برای بازسازی آنچه در طول یک درخواست اتفاق افتاده است. رویکرد اول، وقایع را به عنوان یک سیگنال در میان بسیاری از سیگنالها در نظر میگیرد، در حالی که رویکرد دوم، وقایع را به عنوان سیگنال اصلی برای درک رفتار سیستم در نظر میگیرد.
اشکالزدایی و تحلیل ریشهای مشکلات
وقتی چیزی در تنظیمات میکروسرویسها دچار مشکل میشود، مهندسان به سراغ ردیابیهای توزیعشده میروند تا ببینند دقیقاً کدام سرویس باعث تأخیر شده یا خطایی را برگردانده است. در یک سیستم یکپارچه، توسعهدهندگان معمولاً یک فایل لاگ را باز میکنند، به دنبال یک مهر زمانی یا شناسه کاربری میگردند و ورودیهای متوالی را میخوانند. مسیر یکپارچه حس شهودیتری دارد، اما وقتی سیستم به اندازهای بزرگ میشود که یک فایل لاگ واحد غیرقابل استفاده میشود، از هم میپاشد.
ابزار و زیرساخت
پشتههای مشاهدهپذیری معمولاً یک کتابخانه ابزار دقیق مانند OpenTelemetry، یک backend ردیابی مانند Jaeger یا Tempo، یک مخزن معیارها مانند Prometheus و یک لایه داشبورد مانند Grafana را ترکیب میکنند. ثبت وقایع یکپارچه اغلب به موارد بسیار کمتری نیاز دارد - یک چارچوب ثبت وقایع، یک ارسالکننده گزارش مانند Filebeat و شاید یک خوشه ELK یا OpenSearch. زنجیره ابزار میکروسرویسها به بلوغ عملیاتی بیشتری نیاز دارد، اما وقتی سیستمها پیچیده میشوند، نتیجه میدهد.
عملکرد و سربار
ردیابی توزیعشده، با انتشار محدودهها در مرزهای سرویس، هزینههای جهش شبکه و سریالسازی را افزایش میدهد، اگرچه استراتژیهای نمونهبرداری، سربار را قابل مدیریت نگه میدارند. ثبت وقایع یکپارچه نزدیک به فرآیند برنامه باقی میماند، بنابراین ضربه عملکرد عمدتاً از ورودی/خروجی دیسک و قالببندی گزارش است. هر دو رویکرد میتوانند عملکرد را کاهش دهند اگر ثبت وقایع در سطوح طولانی در تولید باقی بماند، اما محیطهای میکروسرویس معمولاً به تنظیم دقیقتری نیاز دارند.
وقتی هر کدام منطقی به نظر میرسند
قابلیت مشاهده در محیطهایی با استقرارهای مکرر، سرویسهای چندزبانه و تیمهایی که به مالکیت مستقل اجزا نیاز دارند، میدرخشد. ثبت وقایع یکپارچه همچنان برای برنامههای کوچکتر، سیستمهای قدیمی یا سناریوهایی که انطباق با مقررات مستلزم ردیابیهای حسابرسی سرراست است، مناسب است. بسیاری از سازمانها در واقع هر دو را اجرا میکنند - گزارشهای سنتی را برای انطباق نگه میدارند در حالی که ابزارهای مشاهده را برای بینش مهندسی لایهبندی میکنند.
مزایا و معایب
قابلیت مشاهده در میکروسرویسها
مزایا
+قابلیت مشاهده کامل درخواست
+همبستگی چند سیگنالی
+مقیاسهایی با پیچیدگی
+شیوههای SRE را فعال میکند
مصرف شده
−هزینه ابزارسازی بالاتر
−منحنی یادگیری تندتر
−سربار ذخیرهسازی بیشتر
−نیاز به نظم و انضباط ابزار دقیق دارد
ثبت وقایع سیستم یکپارچه
مزایا
+ساده برای پیاده سازی
+هزینه عملیاتی کمتر
+برای اکثر تیمها آشناست
+پیگیری آسان حسابرسی
مصرف شده
−بینش محدود بین سرویسهای مختلف
−با اندازه به خوبی مقیاس بندی نمی شود
−نقطه شکست منفرد
−مرتبط کردن رویدادها دشوارتر است
تصورات نادرست رایج
افسانه
گزارشها به تنهایی برای اشکالزدایی هر سیستمی کافی هستند.
واقعیت
لاگها برای سیستمهای یکپارچه به خوبی کار میکنند، اما در سیستمهای توزیعشده که یک درخواست واحد به سرویسهای زیادی برخورد میکند، اثربخشی خود را از دست میدهند. معیارها و ردپاها با نشان دادن الگوها و زنجیرههای سببی که لاگها به راحتی نمیتوانند آنها را آشکار کنند، شکافها را پر میکنند.
افسانه
مشاهدهپذیری صرفاً ثبت وقایع با نامی جدید است.
واقعیت
قابلیت مشاهده، رشتهی وسیعتری است که شامل لاگها میشود، اما معیارها و ردپاها را نیز به عنوان سیگنالهای درجه یک اضافه میکند. هدف از جستجوی رکوردها به پرسیدن سوالات دلخواه در مورد رفتار سیستم بدون ارسال کد جدید تغییر میکند.
افسانه
سیستمهای یکپارچه نیازی به مشاهدهپذیری ندارند.
واقعیت
حتی برنامههای کاربردی منفرد نیز پس از رسیدن به مقیاس معنادار، از معیارها، ردیابیها و گزارشهای ساختاریافته بهرهمند میشوند. قابلیت مشاهده به معنای درک وضعیت سیستم است که صرف نظر از معماری اعمال میشود.
افسانه
ردیابی توزیعشده برای استفاده در تولید بسیار گران است.
واقعیت
سیستمهای ردیابی مدرن از نمونهگیری مبتنی بر سر یا مبتنی بر دم برای ثبت زیرمجموعهای از درخواستها استفاده میکنند. این روش سربار را پایین نگه میدارد و در عین حال دادههای کافی برای تشخیص اکثر مشکلات را فراهم میکند.
افسانه
تغییر به میکروسرویسها به طور خودکار قابلیت مشاهده را بهبود میبخشد.
واقعیت
میکروسرویسها قابلیت مشاهده را دشوارتر میکنند، نه آسانتر، زیرا اکنون قطعات متحرک بیشتری برای نظارت دارید. بدون ابزار و تجهیزات مناسب، در مقایسه با یک سیستم یکپارچه با ابزار دقیق، قابلیت مشاهده در واقع کاهش مییابد.
سوالات متداول
تفاوت بین مشاهدهپذیری و ثبت وقایع چیست؟
ثبت وقایع (Logging) یکی از انواع دادههای تلهمتری است - رویدادهای گسسته که توسط یک برنامه ثبت میشوند. مشاهدهپذیری (Observability) ویژگی یک سیستم است که توصیف میکند چقدر میتوانید وضعیت داخلی آن را از خروجیهای خارجی درک کنید. مشاهدهپذیری از وقایع، معیارها و ردگیریها (Traces) با هم استفاده میکند، در حالی که ثبت وقایع (Logging) تنها بر روی رکوردهای متنی تمرکز دارد.
چرا میکروسرویسها به ردیابی توزیعشده نیاز دارند؟
یک درخواست تککاربره در معماری میکروسرویسها ممکن است قبل از تکمیل، از پنج، ده یا تعداد بیشتری سرویس عبور کند. ردیابی توزیعشده، آن درخواست را در مرزهای سرویس با استفاده از شناسههای همبستگی و محدودهها دنبال میکند و امکان مشاهده محل صرف زمان و منشأ خرابیها را فراهم میکند.
آیا میتوان از لاگینگ سنتی در محیط میکروسرویسها استفاده کرد؟
بله، اما بدون شناسههای مشترک، مرتبط کردن لاگها بین سرویسها دشوارتر میشود. اکثر تیمها لاگهای ساختاریافته را با شناسههای همبستگی اضافه میکنند، سپس ردیابی لایهای و معیارها را روی آن قرار میدهند تا تصویر کاملی از رفتار سیستم به دست آورند.
سه رکن مشاهدهپذیری چیست؟
این سه رکن عبارتند از لاگها، معیارها و ردگیریها. لاگها رویدادهای گسسته را ثبت میکنند، معیارها دادههای عددی را در طول زمان ثبت میکنند و ردگیریها مسیر یک درخواست را از طریق سیستمهای توزیعشده نشان میدهند. این سه رکن در کنار هم به تیمها اجازه میدهند تا به سؤالات مربوط به عملکرد، خطاها و تجربه کاربری پاسخ دهند.
آیا OpenTelemetry استانداردی برای مشاهدهپذیری است؟
OpenTelemetry به استاندارد بالفعل برای ابزار دقیق در اکثر زبانها و پلتفرمها تبدیل شده است. این پروژه، پروژههای OpenTracing و OpenCensus را ادغام کرده و اکنون توسط بنیاد محاسبات ابری بومی (Cloud Native Computing Foundation) و با پشتیبانی گسترده فروشندگان و ابزارهای متنباز پشتیبانی میشود.
هزینه مشاهدهپذیری در مقایسه با ثبت وقایع چقدر است؟
قابلیت مشاهده معمولاً به دلیل فضای ذخیرهسازی اضافی، مجوزهای ابزار و زمان مهندسی برای ابزار دقیق، هزینه بیشتری دارد. با این حال، اغلب میانگین زمان لازم برای حل مشکل را کاهش میدهد و از قطعیهای پرهزینه جلوگیری میکند، که میتواند سرمایهگذاری اولیه برای سازمانهایی که سیستمهای پیچیده را اداره میکنند، جبران کند.
آیا مونولیتها از ابزارهای مشاهدهپذیری بهرهمند میشوند؟
کاملاً. حتی برنامههای کاربردی منفرد نیز از ردیابی توزیعشده در فرآیند خود، از معیارهایی که روند عملکرد را نشان میدهند و از لاگهای ساختاریافتهای که پرسوجوی آنها آسانتر است، ارزش کسب میکنند. ابزارهای مشاهده منحصر به میکروسرویسها نیستند.
فاصله (span) در ردیابی توزیعشده چیست؟
یک span نشان دهنده یک واحد کاری واحد در یک trace است، مانند یک query پایگاه داده یا یک فراخوانی HTTP بین سرویسها. spanها دارای نام، زمان شروع، مدت زمان و ابرداده هستند و از طریق روابط والد-فرزندی به یکدیگر پیوند میخورند تا یک trace کامل را تشکیل دهند.
چگونه لاگها را در سراسر میکروسرویسها مرتبط میکنید؟
تیمها معمولاً یک شناسه همبستگی را در لبه سیستم تزریق میکنند و آن را از طریق هدرهای HTTP، فرادادههای پیام یا متن رشته منتشر میکنند. هر سرویسی آن شناسه را در ورودیهای گزارش خود قرار میدهد، بنابراین یک جستجوی واحد در تمام سرویسها، مسیر کامل درخواست را برمیگرداند.
آیا استارتاپها باید از قابلیت مشاهده استفاده کنند یا به ثبت وقایع (logging) پایبند باشند؟
استارتاپهای نوپا معمولاً با ثبت وقایع ساختاریافته و معیارهای پایه شروع میکنند، زیرا این روشها سریعتر ارسال میشوند و هزینه کمتری دارند. با رشد سیستم و افزایش تعداد تیمها، اضافه کردن ردیابی و یک پلتفرم مشاهده یکپارچه برای حفظ سرعت توسعه ارزشمند میشود.
حکم
زمانی که سیستم شما شامل سرویسهای مستقل زیادی است و نیاز به درک تعاملات بین سرویسها به صورت بلادرنگ دارید، قابلیت مشاهده میکروسرویسها را انتخاب کنید. برای برنامههای سادهتر که رکوردهای متمرکز، قابلیت مشاهده کافی را فراهم میکنند و سربار عملیاتی بیش از بینش جزئی اهمیت دارد، از ثبت وقایع یکپارچه استفاده کنید. در عمل، سیستمهای بالغ اغلب هر دو رویکرد را با هم ترکیب میکنند تا اینکه کاملاً به یکی از آنها متعهد شوند.