Clicky

لاگ در دیوایس تعبیه شده - انتشار برخط

نحوه محاسبه حقوق عادلانه
لاگ در دیوایس تعبیه شده

 

  • تعریف مشکل
  • راه حل‌ پیشنهادی
  • پیاده سازی
  • نتیجه گیری

تعریف مشکل

لاگ‌گیری در پروژه‌های نرم‌افزاری یکی از اصول اولیه است اما در سیستم‌های استریم پروسسینگ و سرور‌ها و پروژه‌هایی که بر اساس دیتای دریافتی کار می‌کنند این قضیه حساس‌تر می‌شود و دلیل آن احتمال بروز هرگونه خطا در برنامه و در نهایت پردازش نشدن داده مورد انتظار است.

برای مثال وقتی سرور وظیفه دریافت یک دستور از کاربر و ارسال آن به یک بورد را دارد نیاز است دستور به صورت کامل قابل بازیابی باشد و در صورت خطا در پروژه باید بتوان دلیل آن را بررسی کرد. اگر شما دیتای دریافتی را در قالب همیشگی به دیتابیس بیافزایید ممکن است در زمانی که داده در حال نوشتن است مشکلی برای سیستم پیش بیاید و داده نوشته نشود در این صورت باید بتوان بعد از راه‌اندازی مجدد دستورات دریافت شده از سمت کاربر را اجرا نمود.

راه حل‌ پیشنهادی

برای حل این مشکل ساده ترین راه این است که دستور دریافتی از سمت کاربر را با بالاترین سرعت و بدون نیاز به ایندکس کردن یا پردازش اضافی در هارد بنویسیم. در این صورت بعد از نوشتن داده در هارد می‌توانیم این تضمین را به کاربر بدهیم که دستور ارسالی از سمت آن در سیستم فراموش نخواهد شد و حتی در صورت خطا در برنامه و کرش ناگهانی بعد از بازیابی سیستم میتوان از روی فایل لاگ دستوراتی دریافتی رو دوباره اجرا کرد.

در واقع نیاز است به ترتیب جریان داده دقت کنیم برای مثال برای دریافت دستور از کاربر و اجرا آن نیاز است به صورت زیر عمل کنیم

  1. لاگ کردن دستور ارسال شده از سمت کاربر
  2. اقدام برای اجرای دستور
  3. بررسی انجام دستور
  4. ارسال وضعیت اجرای دستور به کاربر

برای درک بهتر فرض کنید ما اول دستور را اجرا کنیم و سپس آن را لاگ کنیم در این صورت در صورتی که اجرای دستور با مشکل مواجه شود هیچ وقت دستور لاگ نخواهد شد و در نتیجه در صورتی که در زمان اجرای دستور سیستم با مشکلی مواجه شود و کرش کند، در صورت بالا آمدن دوباره هیچ اطلاعاتی از دستور در حال اجرا وجود نخواهد داشت.

پیاده سازی

برای پیاده‌سازی این کار معمولا از سیستم‌های مناسب لاگ‌گیری استفاده می‌شود البته این سیستم‌ها جدای از لاگ توسعه است و نیاز به یک مکانیزم قابل اتکا‌تر دارد. kafka یکی از بهترین‌گزینه ها برای این منظور است زیرا با سرعت بالا استریم‌های دریافتی از منابع مختلف را یکپارچه کرده و می‌نویسد. اما kafka تنها گزینه نیست و با توجه به شرایط پروژه باید برای استفاده از تکنولوژی‌های موجود تصمیم گرفت برای مثال ما در حال توسعه یک سیستم استریم پروسسینگ هستیم که شرایط خاصی دارد یعنی در واقع این سیستم برای دیتابیس از mongodb استفاده می‌کند و همچنین بر روی یک بورد embedded راه اندازی و اجرا خواهد شد.

در بررسی استفاده از kafka در این سیستم به چند مورد بر می‌خوریم:

مشکلات

پیش‌نیاز اضافی

 تابحال در این پروژه kafka وجود نداشته و در صورتی که فقط برای لاگ گیری از آن استفاده کنیم یک پیش نیاز سنگین که بر پایه java است به پروژه اضافه شده و به تبع آن نیاز است java را نیز جزو پیش‌نیاز‌های سیستم در نظر بگیریم.

کمبود منابع

 در صورتی که از kafka استفاده کنیم به تبع آن باید سرویس‌ها و دیگر منابع مورد نیاز kafka را نیز در اختیار سیستم قرار دهیم و این موضوع با چابکی در اجرا در تناقض است چون در صورتی که منابع بیشتری نیاز داشته باشیم امکان انتقال سیستم به یک بورد ضعیف‌تر وجود ندارد وهمچنین مصرف برق نیز افزایش پیدا می‌کند و در صورت استفاده از باتری برای سیستم ممکن است این افزایش میزان مصرف برق مشکل ایجاد کند.

پیچیدگی سیستم

در صورت افزود kafka پروژه به یک سرویس خارجی نیازمندی پیدا می‌کند و باید برای کاربرد درست یک ماینتور از این سرویس خارجی داشته باشد و مانیتور چندین سرویس خارجی و در کل وجود چندین سرویس احتمال ایجاد مشکل را افزایش می‌دهد.

مزایا

پایداری بیشتر

البته از مزایای استفاده از یک سرویس خارجی دیگر برای لاگ گیری می‌توان به این اشاره کرد که در صورت بروز خطا در دیگر سرویس‌ها سیستم ما بالا بوده و توانایی دریافت دستورات را داراست برای مثال اگر دیتابیس با مشکلی مواجه شود سیستم می‌تواند همچنین به کار خود ادامه دهد و دستورات دریافتی از کاربر را اجرا خواهد کرد.

نتیجه گیری

به دلایل ذکر شده در بخش مشکلات، استفاده از kafka در قدم اول منطقی به نظر نمی‌رسد ولی گزینه دیگر استفاده از خود mongodb است که خود سایت mongodb در پستی به این موضوع پرداخته است برای مطالعه بیشتر می‌توانید به MongoDB is Fantastic for Logging مراجعه کنید.

بنابراین به نظر می‌رسد بهتر است در این پروژه برای لاگ گیری از همان دیتابیس mongodb استفاده کرد.

نظرات خود را در قسمت نظرات پست با ما در میان بگذارید و در صورتی که علاقمند به مشارکت در بحث هستید می‌توانید از گروه تلگرام https://t.me/moderncloud_ir_group با ما در ارتباط باشید.

۵
از ۵
۸ مشارکت کننده

جستجو در مقالات

رمز عبورتان را فراموش کرده‌اید؟

ثبت کلمه عبور خود را فراموش کرده‌اید؟ لطفا شماره همراه یا آدرس ایمیل خودتان را وارد کنید. شما به زودی یک ایمیل یا اس ام اس برای ایجاد کلمه عبور جدید، دریافت خواهید کرد.

بازگشت به بخش ورود

کد دریافتی را وارد نمایید.

بازگشت به بخش ورود

تغییر کلمه عبور

تغییر کلمه عبور

حساب کاربری من

سفارشات

مشاهده سفارش