غواصی در اعماق: systemd socket activation

اینم یه تجربه پراکنده دیگه!

امروز داشتم توی وب میگشتم و در مورد docker میخوندم که چشمم به این پست خورد که چطور توی pantheon تونستن با استفاده از تکنولوژی‌های مرتبط به container تونستن یه بیزنس بسیار جذاب برای ارائه یه نوع هاستینگ خاص مرتبط با drupal و wordpress بسازن. اما نکته‌ای که داشت این بود که یکی از نکاتی که منجر به خفن شدن سیستم اونها شده بود استفاده از یه ویژگی systemd به نام socket activation بود. که من یکم در موردش خوندم و بسیار ازش لذت بردم و گفتم ازش بنویسم.

قصه از اینجا شروع میشه که توی سیستم‌های مبتنی بر یونیکس از قدیم الایام یه چیزی وجود داشته با نام SysV که قدمهای مرتبط با boot سیستم توی اونجا انجام میشده. یعنی اینکه فرض کنید برای اینکه لینوکس بطور کامل بالا بیاد نیاز به داره که ۱۰ تا سرویس اجرا بشه و هر کدوم از اونها یه سری وابستگی دارن که این سیستم این قدم‌ها رو با توجه به وابستگی‌هاش اجرا میکنه. نحوه اجرا شدن این قدم‌ها توی SysV بصورت ترتیبی است که این روند باعث افزایش زمان مورد نیاز برای boot شدن سیستم میشه. توی MacOs از سیستم به نام launchd برای کاهش زمان boot پیاده‌سازی شده. همچنین توی لینوکس  راه حل‌هایی برای اجرای موازی سرویسهایی که به همدیگه وابسته نیستن مثل upstart اوبونتو توسعه پیدا کرده. اما مشکل سرعت کم boot بصورت کامل رفع نشده. به همین خاطر systemd پیاده‌سازی شده و از ساز و کاری به اسم socket activation ایجاد شده که سرویس‌ها هم بتونن با سرعت لود بشن هم مشکلی بوجود نیاد.

تقریبا همه چیز در لینوکس معمولا این سرویسها ارتباطشون از طریق socket ها ایجاد میشه و از socket به عنوان IPC استفاده میشه. حالا ایده اینه که بجای اینکه کل پروسس مربوط به یک سرویس بالا بیاد و بعد اون بیاد و سرویس رو ایجاد کنه، systemd بجای پروسه اصلی سوکت رو ایجاد کنه و هر وقت اولین درخواست به این سوکت رسید سرویس اجرا بشه و سوکت باز شده هم در اختیار پروسس این سرویس قرار بگیره. خوبی این روش هم اینه که تقریبا تمام سرویس‌های متونن همزمان اجرا بشن و خب در صورتی که یه سرویس زودتر از یه سرویس دیگه اجرا بشه و به سرویس کند نیاز داشته باشه درخواست‌هاش رو به سوکت مربوطه میفرسته تا زمانی که این سوکت بتونه چیزی دریافت کنه-لازمه بگم که هر سوکت میتونه به حجم محدودی اطلاعات رو توی خودش نگه داره- پس از اون کرنل دخالت میکنه و برنامه‌ یا برنامه ‌هایی که میخوان به اون سوکت بنویسن رو بصورت موقت متوقف میکنه. تا سرویس دهنده اجرا بشه و بیاد به درخواست‌ها پاسخ بده و سوکت با امکان نوشته شدن داشته باشه. این ایده جدید نبوده و توی inted ملقب به superserver هم برای سرویس دهنده‌های اینترنتی مثل ftp مورد استفاده قرار گرفته. اما systemd ایده رو توسعه داده و بجای سوکت‌های اینترنتی از همه نوع سوکتی پشتیبانی میکنه. این روش سود‌های دیگه‌ای هم داره:

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

همین!

منابع:

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

  1. این سایت اصلیه که کلی اطلاعات جذاب توش داره.
  2. این سایت نویسنده یا یکی از نویسندگان اصلی systemd هست
  3. اگه برنامه نویس هستید و میخواد با این مفهوم بیشتر آشنا بشید این مطلب و این یکی رو هم بخونید

 

چرا لینوکس را دوست دارم: انتقال حجم عظیمی از فایل‌

اینم یه تجربه پراکنده دیگه!

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

خب اول بگم که کل پارتیشن‌های لپ‌تاپ من ext4 بود و نمیشد بدون خراب کردن پارتیشن بندی این انتقال انجام بشه. همچنین حجم کل فایلهای روی لپ‌تاپ من عددی نزدیک به ۸۵۰ گیگا بایت بود که خب عدد بسیار بزرگیه. همچنین باید بگم که کارت شبکه لپ تاپ من متاسفانه ۱۰۰ مگه.

مراحل کارهای انجام شده اینا بود:

  • نصب کردن لینوکس روی لپ تاپ  مقصد
  • نصب samba رو کامپیوتر خودم
  • مونت کردن samba به عنوان یک فولدر در لپ تاپ مقصد
  • و کپی کردن بهینه فایلها با استفاده از rsync

نکته اساس این کار استفاده از rsync هست چون حجم اطلاعات اونقدر زیاده که حدودا ۲۰ ساعت انتقالش طول میکشه. توی این زمان زیاد هزارتا اتفاق ممکنه بیفته از قطع شدن برق تا مشکل شبکه و حتی در موارد خاص قاط زدن سیستم عامل. مزیت rsync اینه که بصورت بهینه کلی فایل رو کپی میکنه و هیچ پیش فرضی نداره که همه انتقال پشت سر هم انجام بشه و انتفاق میتونه قطع بشه و دوباره شروع بشه. همین باعث میشه که من با خیال راحت‌تر انتقال رو انجام بدم و تا الان حدود ۳۵۰ گیگ از اطلاعات رو انتقال بدم و هنوز هم انتقال ادامه داره.

همین!

پ.ن. این انتقال طولانی من رو به این نتیجه رسوند که داشتن یک NAS در خونه از اوجب واجباته

راهکارهای متن باز برای Network Attached Storage

اینم یه تجربه پراکنده دیگه!

امروز میخوام درباره Network Attached Storage یا همون NAS یکم بنویسم. خب از اونجایی که من علاقه‌مند به سیستم های متن بازم پس بازهم در مورد راهکارهایی که متن باز این سیستم رو پیاده‌سازی میکنن حرف میزنم. فکر کنم که بهتره هرچه سریعتر لیست این محصولات رو بگم:

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

پروتکل‌های ارتباطی که معمولا هر کدوم از این محصولات پشتیبانی میکنند هم توی لیست پایین اومدن:

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

مقایسه FreeNAS با Openfiler توی این لینک پیدا میشه

مقایسه FreeNAS با NAS4Free توی این لینک پیدا میشه

همین!

نحوه نصب سرور Firefox sync

خب این یه تجربه پراکنده دیگه!

من همیشه با ازدیاد تب ها باز توی مرورگر مورد علاقم که همون فایرفاکس باشه مشکل داشتم. یعنی همیشه تب های خیلی زیادی باز بودن و من همیشه با مدیریتشون مشکل داشتم. چند ماهی بود که یه راه به نسبت خوب برای مدیریت تب‌ها پیدا کرده بودم و اونم استفاده از Tab Group ها توی فایرفاکس بود. که اگه عمری بود یه روز هم درباره اون مینویسم.

بزرگترین مشکل استفاده از گروها تب‌ها اینه که اگه خدای نکرده فایرفاکس crash کنه و بسته بشه و شما در نوبت بعد به اشتباه تب ها دوباره باز نشه همه چیز از دست رفته و مثلا من خودم شاید نزدی به ۱۰۰ تب رو از دست دادم و خب این برام خیلی دردناک بود.

حالا یه راهی که برای حل این مشکل پیدا کردم اینه که از ویژگی sync تو فایرفاکس استفاده کنم. بعدش دیدم که حتی میشه یه سرور محلی برای این کار داشت. این خیلی خوب بود چون هم میشد یه کار گیکی کرد هم اطلاعات من حفظ میشد.

من با استفاده از این لینک روی لینوکسم یه سرور محلی نصب کردم که از sqlite به عنوان دیتا بیس استفاده میکنه و در یه حرکت برای حفظ اطلاعاتم فایل دیتابیس رو روی dropbox گذاشتم و همه چیز به خوبی و خوشی انجام شد.

این بود یه تجربه پراکنده دیگه

مجازی سازی و تکنولوژی‌های مرتبط

پیش نوشت: یکم با خودم درگیرم که چطور باید نوشت. هدفم از نوشتن اینجا ارائه سرنخ‌هایی هست که اگه کسی خواست، بتونه بره و مابقی ماجرا رو پیگیری کنه.

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

خب تکنولوژی‌های مختلفی وجود داره که باهاش مجازی سازی صورت میگیره که خب به طبع من دوست دارم متن باز هاش رو معرفی کنم. خیلی هم هدف معرفی عمیق این تکنولوژی‌ها و سرویس‌ها نیست. هدفم اینه که از نقطه نظر خودم که یه مهندس نرم افزار یا توسعه دهنده هستم ببینم چه تکنولوژی‌هایی وجود داره و چطور میشه از اون برای «بهبود زندگی» یه برنامه نویس استفاده کرد.

لیست این تکنولوژی‌ها از این قرارن

اما نکته قابل توجهی که به نظر من مهمه اینه که از منظر یه شرکت که قراره یه سرویس مجازی سازی ارائه کنه و بفروشه یا اینکه سرویس‌های اصلی شرکتش رو به این زیرساخت‌ها مهاجرت بده مساله انتخاب بین این تکنولوژی‌ها بسیار مهم میشه. اما در سطح توسعه دهنده‌ها خیلی اهمیت خاصی نداره که از کدوم یک از این سیستم‌ها استفاده می‌شه. من تقریبا تمام کارهای خودم رو با استفاده از kvm و virtual box‌ انجام میدم. 

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

  • Redhat Enterprise Virtualization
  • Promox Ve
  • Ubuntu Cloud

البته من سعی کردم بیشتر بگردم اما سیستم‌عامل‌های دیگه‌ای پیدا نکردم اما اگه شما میشناسید سیستمی رو بگید که به این لیست اضافه شه.

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

جایگزین‌های متن باز DropBox

من دوباره برگشتم با یه موضوع پراکنده دیگه!

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

اما یه راه حل دیگه است که من بیشتر ازش خوشم اومد. اونم یه راه حل مبیتی بر معماری p2p هست. شرکت (یا بنیاد) bittorrent لطف کرده مبتنی بر پروتکل torrent یه سیستم غیر متمرکز اشتراک گذاری فایل و sync کردن فایلها بین دستگاه‌های مختلف شما ایجاد کرده بدون اینکه نیازی به سرور متمرکزی باشه. تنها نیازه که برنامه bittorrent sync رو روی کامپیوترتون نصب کنید و فولدری که میخواید رو مشخص کنید و با یه مشخصه تصادفی که برای اون فولدر تولید میشه میتونید بین تمام کامپیوترهاتون فایل رو به اشتراک بگذارید.

یه راه حل دیگه هم اخیرا توی سایت unixmen معرفی شده که اون هم استفاده از یه نرم افزار اپن سورس دیگه به اسم seafile هست.

با توجه به مواردی که من بررسی کردم به نظر میرسه راه‌حل‌های مناسبی برای جایگزین شدن با dropbox وجود داره که هم متن بازن هم مدیریتشون دقیق‌تره. ولی من ترجیح میدم از نسخه bittorrent استفاده کنم چون حداقل به زیرساخت خاصی نیاز نداره.

Zpanel‌ جایگزین متن باز مناسب برای Cpanel

من تصمیم گرفتم خاک گرفتگی این جا رو یکم کم کنم
پس هر از گاهی یه چیزی مینویسم

توی سایت یونیکسمن یه پست زده که توش توضیح داده یه جایگزین متن‌باز برای یه کنترل پنل هاستینگ قوی به نام cpanel‌ وجود داره که اسمش zpanel هست که به نظر میرسه چیز بسیار خوبیه. البته خود من هم یه مدت علاقه داشتم به اینکه آیا جایگزین دیگه ای وجود داره یه نه؟

چیزایی که من پیدا کردم اینان البته نمیدونم اون چیزایی که من پیدا کردم چیزای خوبی هستن یا اما ارزش بررسی کردن دارن. لیستش اینان

امیدوارم بدرد کسی بخوره!