Gogs Logo

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

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

یکی از بامزه ترین اونها نرم‌افزاری به نام Gogs هست که سعی کرده با استفاده از ویژگی‌های golang یک راه‌حل برای میزبانی git شبیه به github ایجاد کنه. نصب کردن این راه‌حل به شدت ساده است چون کلا نصب پکیج‌های golang ساده است. اما بزرگترین مشکلی که برای ما وجود داره تحریم از سمت گوگل هست که شما باید به نحوی اون رو برطرف کنید. این سرویس اونقدر قابل اطمینان بوده که آدم‌هایی پیدا شدن و با تغییر اندکی از اون به عنوان یک کپی github استفاده می‌کنند. اسم اون سایت notabug هست و پیشنهاد می‌کنم ببینیدش.

راه اندازی این سرویس حداقل برای من که خیلی کارهای مدیریت سیستمی بلد نیستم خیلی سرراست و خوب بود. امیدوارم این معرفی باعث بشه که شما هم بتونید از اون توی محل کار و حتی خونتون استفاده کنید.

همین!

بروزرسانی: با توجه به اینکه فرود عزیر تجربه contribute کردن به این پروژه رو داشتن، گفتن که نحوه اداره این پروژه خیلی بده و به همین خاطر یک fork از این برنامه به اسم gitea بوجود اومده که انگار بهتر مدیریت میشه. و اینکه کلا توجه داشته باشید که تخم مرغ‌هاتون رو توی یک سبد نگذارید!

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

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

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

لینک کتاب

همین!

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

همونطور که احتمالا همه میدونید الان بازار containerها یا همون مجازی سازی سبک در دنیا و خب در ایران داغه. من توی یه سری پست سعی میکنم (قسمت اول) که راهی رو که خودم برای درک این موضوع طی کردم رو بنویسم.

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

  • لینوکس
    • Linux-VServer: این تکنولوژی یکی از قدیمی ترین(سال ۲۰۰۱) تکنولوژی‌های مجازی سازی در سطح سیستم عامل هست که نیاز به تغییر کرنل(پچ شدن کردن) برای بوجود آوردن امکان ایزوله کردن منابع سیستم هست. این سیستم متن باز بوده ولی هیچوت تغییراتش به هسته سیستم عامل راه پیدا نکرده
    • Parallels Virtuozzo Containers : این سیستم هم بسیار قدیمی است(سال ۲۰۰۱) و بصورت تجاری توسعه پیدا کرده.
    • OpenVZ: یک محصول متن بازه که اون هم نیاز به پچ کردن کرنل داره و تغییراتش هیچوت به درون هسته لینوکس راه پیدا نکرده. شروع توسعه این ابزار به سال ۲۰۰۵ برمیگرده.
    • ابزارهای مبتنی بر cgroups و namespaces در کرنل لینوکس: این تکنولوژی در سال ۲۰۰۶ توسط مهندسان گوگل شروع شده و به کرنل لینوکس راه پیدا کرده. با توجه به این ویژگی‌ها محصولات متفاوتی تولید شده
      • lmctfy: این ابزار توسط گوگل توسعه پیدا کرده و مورد استفاده قرار گرفته. شروع توسعه این ابزار به سال ۲۰۱۳ برمیگرده.
      • LXC: این ابزار تا اونجایی که من میدونم از دل اوبانتو در اومده و تبدیل به یک ابزار قابل استفاده شده. اما به دلیل مستندات محدود خیلی مورد استفاده قرار نگرفته. شروع توسعه این ابزار به سال ۲۰۰۸ برمیگرده.
      • Docker: سازندگان این ابزار ارائه دهنده سرویس paas بودند که از روند مشابهی برای مدیریت paas خود استفاده می‌کردند و تجربیات خودشون رو در قالب این ابزار ارائه دادند. این ابزار به دلیل سادگی، مستندات خوب و معرفی راه‌حلهای کارا بسیار مقبولیت پیدا کرده. شروع توسعه این ابزار به سال ۲۰۱۳ برمیگرده.
      • libvir lxc: این ابزار هم جزئی از کتابخانه libvirt برای مدیریت تکنولوژی‌های مجازی سازی هست که ابزاری برای مجازی سازی سبک هم ارائه کرده.
  • FreeBSD Jail: در این سیستم عامل از سال ۱۹۹۸ کرنل از ویژگی‌ای به نام jail پشتیبانی میکنه که مجازی سازی سبک رو بوجود میاره. برخلاف لینوکس که چند  ویژگی مجزا کرنل برای مجازی سازی سبک استفاده میشه ویژگی jail در freebsd یک ویژگی یک پارچه برای مدیریت مجازی سازی سبک به حساب میاد ابزارهای سطح بالایی هم برای این مدیریت این ویژگی بوجود اومده که لیست کوتاه اونها در پایین اومده:
  • Solaris Containers: این تکنولوژی در هسته سولاریس از سال ۲۰۰۵ وجود داره و من اطلاع زیادی از اون ندارم
  • sysjail: این تکنولوژی در هسته netbsd و openbsd تا سال ۲۰۰۹ وجود داشته و من اطلاع زیادی از اون ندارم
  • WPARs: یک سیستم خاص منظور برای سیستم عامل AIX هست(سال ۲۰۰۷) و من اطلاع زیادی از اون ندارم
  • HP-UX Containers (SRP): این تکنولوژی مختص HPUX هست(سال ۲۰۰۷) که من باز اطلاع خاصی ازش ندارم
  • Sandboxie: این یه تکنولوژی برای ویندوز هست و من دیدم دوستانی که روی بررسی ویروسها کار میکنن ازش استفاده میکنن.

همونطور که میبیند این سیستم و تکنولوژی‌های و ابزارهای مرتبط با اونها جدید نیستن اما اخیرا دوباره مورد استفاده قرار گرفتن.

همین!

 

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

من به شخصه این مدت با توجه به ظهور پدیده ای به نام docker شرو ع به خوندن تکنولوژی‌های زیادی کردم که مهمترینشون مجازی سازی سبک یا مجازی سازی در سطح سیستم عامل هست. سعی میکنم در چند قسمت بصورت خیلی خودمونی و تو دل برو (بخوانید user friendly) بنویسم که این تکنولوژی‌های به چه دردی می‌خورن و کجاها استفاده میشن.

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

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

فعلا همین!

منتظر قسمت‌های بعدی این نوشته باشید!