سادگی زیباست...

بررسی انواع معماری های سیستم عامل و برنامه های سیستمی و روشهای توسعه آنها

سادگی زیباست...

بررسی انواع معماری های سیستم عامل و برنامه های سیستمی و روشهای توسعه آنها

سادگی زیباست...

۲ مطلب با کلمه‌ی کلیدی «virtualization» ثبت شده است

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

اولین مرحله برای انجام یک کار، انتخاب روش کار مناسب از بین روشهای متفاوت هست. برای هر کاری که میخواین انجام بدین، اولش باید نیازمندی های خودتون رو مشخص بکنین. نیازمندی های مساله من موارد زیر هست:

  1. بار کاری بسیار کم سیستم عامل مهمان
  2. میزان حافظه رم مورد نیاز برای ماشین ها کم باشه
  3. سیستم عامل مهمان تفاوتی نمیکنه چی باشه
  4. رابط های شبکه به صورت کامل در کنترل ماشین مجازی باشه
  5. امکان باشه که با رابط دستوری ماشین های مجازی رو کنترل کرد
من بر اساس نیازمندی خودم باید یک روش مجازی سازی استفاده میکردم. پس فاز اول تحقیقات هست. تو این پست اطلاعات کلی از مجازی سازی و روشهای اون رو بررسی میکنیم.

مجازی سازی

یه سوال، مجازی سازی همون تجرید (abstraction) هست؟ چه فرقهایی با همدیگه دارن؟
تجرید به صورت کلی اگر تعریف کنیم، یه ساده سازی از رابط برای سیستم هست. تو طراحی سیستم (همون طور که قبلا گفته بودم) از تجرید برای ساده سازی طراحی خیلی استفاده میشه. برای مثال یک فایل، تجریدی از محل خاصی از فضای ذخیره سازی است.
مجازی سازی در عوض، یک رابط جداگانه برای سیستم عرضه میکند. رابط عرضه شده توسط مجازی سازی الزاما ساده تر نیست. این رابط جدید هم برای cpu و دیسک و یا شبکه میتونه عرضه بشه. پس میتونیم بگیم که مجازی سازی برای مجموعه منابع مشخصی از سیستم، میتونه یک عده رابط های جدید تعریف بکنه و با استفاده از اون رابط ها وظایف خاصی برای سیستم مشخص کرد. مثلا برای پردازنده x86 یک رابط جدید تعریف میکنین که بتونه دستورات powerPC رو هم اجرا بکنه.

انواع متفاوت مجازی سازی

به صورت کلی میتونیم مجازی سازی رو تو سه نوع تعریف کنیم. 
  • مجازی سازی سطح سیستم -system-level virtualization
تو این روش مجازی سازی رفتار یک سیستم کامپیوتری مثل یه سیستم حقیقی تقلید(Emulate) میشه. برای مثال رفتار یه پردازنده powerPC و یا یه دونه PLC به صورت کامل تقلید میشه. تو این شرایط سیستم عاملی که تو سیستم مجازی سازی شده اجرا میشه یه سیستم عامل کامل و بدون تغییر هست. این نوع مجازی سازی خودش به دو زیر دسته تقسیم میشه:
    • Full Virtualization: در این روش مجازی سازی، سیستم مهمان اطلاعی از اینکه بر روی بستر مجازی اجرا میشود نداره.
    • Paravirtulization: در این حالت مجازی سازی، سیستم عاملی که به صورت مهمان بر روی سیستم هست، از اینکه بر روی یک بستر مجازی اجرا میشود اطلاع دارد. در این سیستم ها فرمان های ابزارهای سیستم مجازی به سیستم میزبان ارسال میشه.
    • Hardware assisted virtualization: این روش یه نوع full virtualization هست، که پردازنده اصلی دستورات خاصی برای مجازی سازی سخت افزار رو تو خودش داره. برای مثال تو پردازنده های اینتل فناوری vtx وجود داره تا بشه با استفاده از اون مجای سازی کارایی بهتری پیدا بکنه. روش این کار هم مثل همون بیت وضعیت هسته و کاربر هست. یه وضعیت اضافه میشه به اسم vritual. تو این وضعیت فرمان ارسالی مشخص میشه که از سمت سیستم مجازی داره ارسال میشه. با این روش میشه بدون کاهش سرعت سیستم جدیدی بوجود آورد.
    • Hybrid virtualization: یه روش ترکیبی بین paravirtualizatio و full virtualization هست.
برای این نوع سیستم ها میشه VMware،Xen و KVM رو مثال زد.
  • مجازی سازی سطح پردازش- Process-level virtualization
تو این شرایط ماشین مجازی یک کاربرد (پردازش) رو اجرا میکنه. کاربرد باید برای اون ماشین مجازی نوشته بشه و این ماشین مجازی روی سیستم عامل اجرا میشه. برای مثال ماشین مجازی java از این نوع مجازی سازی هست. این روش خوبی هایی هم داره، مثلا اینکه باعث میشه برنامه نوشته شده بتونه راحت روی چندین سیستم اجرا بشه. 
  • مجازی سازی سطح سیستم عامل-OS  virtualization
توی این روش، عملا ماشین مجازی خودش میشه یه پردازش لایه کاربر. به این معنی که در عوض شبیه سازی سخت افزار، لایه هسته برای چند برنامه سطح کاربر مثل یه هسته جداگانه سرویس میده. تو این روش بین چند سیستم عامل مهمان یک هسته مشترک وجود داره و برنامه های اون سیستم عامل مهمان مستقیما روی اون هسته اجرا میشه. برای این روش از OpenVZ و jails میشه استفاده کرد.
تو بخش بعدی در مورد انواع روشهای مجازی سازی سطح سیستم صحبت میکنیم.
۰ موافقین ۰ مخالفین ۰ ۲۳ اسفند ۹۳ ، ۱۵:۱۷
حامد شیخلو

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

این سیستم در ابتدا توسط سازمان NASA و RackSpace توسعه پیدا کرد و اولین انتشار آن در سال 2010 بوده است. این محصول از ابتدا برای استفاده عمومی بوده و به صورت متن باز عرضه شده است.

کلود چیست؟

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

سرویس های ابری میتواند به صورت خصوصی و به صورت عمومی مانند amazon ec2 باشد. میتوان سرویسهای ابری خصوصی و عمومی را با یکدیگر ترکیب کرد. برای مثال میتوان داده های مهم را در محیط ابری خصوصی نگه داری کرد. تمامی منابع امکان اشتراکی سازی بر روی فضای ابری را دارا میباشند. مدلهای اصلی سرویس ارائه شده به صورت زیر است:

  •  SaaS - Software as a Service
  • PaaS - Platform as a Service
  • IaaS - Infrastructure as a Service
نرم افزار به عنوان سرویس (SaaS) شامل یک کاربرد سرویس دهنده مرکزی است که از طریق کاربردهای سمت مشتری قابل دستیابی است، داده ها در سمت سرویس دهنده نگه داری میشود و از هر مکانی قابل دستیابی است.ایس معماری مشابه معماری سیستم های قدیمی است که به صورت مشتری-خدمت گذار بوده است، اما در این معماری جدی، تمامی کاربرد از طریق کاوشگر وب عرضه میشود. معماری SaaS توسط تولید کنندگان نرم افزار بسیار مورد استفاده قرار میگیرد، دلیل این امر کاهش هزینه پشتیبانی نرم افزار، افزایش قدرت کنترل بر روی سیستم، و همچنین قابلیت پشتیبانی سطح آخر میباشد. این مدل برای مشتری نیز به دلیل عدم وجود مشکلات نصب و راه اندازی بهتر میباشد.

PaaS یک انتخاب مناسب برای سازمانهایی است که خواهان کنترل بیشتری بر روی پایگاه داده (datacenter) خود میباشند امامشکلات ناشی از مدیریت شبکه و سیستم ها را نمیخواهند (یا نمیتوانند) مدیریت کنند. یک مثال برای این سیستم ها، سرویس ابری میزبان سرور وب میباشد که سازمان فراهم کننده سرویس ابری، مدیریت سخت افزار، سیستم عامل، شبکه، میزان بار کاری، تنظیم میزان بار کاری (load balancing)  و مدیریت پشتیبان گیری و دیگر مسائل را بر عهده دارد. فراهم کننده سرویس، برای مشتری راه اندازی و پیکربندی سرویس های مورد نیاز را فراهم میکند.

IaaS یک سیستم مجازی در اختیار مشتری قرار میدهد و مدیریت سخت افزار و نرم افزاری این سیستم به عهده مشتری است. سرویس دهنده در این مدل، مدیریت خود سیستم سخت افزاری و منبع انرژی و مسائل نگه داری سخت افزار را بر عهده دارد.

 واکاوی OpenStack
ساختار هسته openstack شامل اجزای زیر است:
  • OpenStack Compute: ماژول مدیریت و فراهم آوردن ماشین مجازی است. این ماژوا با عنوان Nova شناخته میشود. این ماژول ناظرهای (hypervisor)،از قبیل KVM, QEMU, LXC و XenServer  را پشتیبانی میکند. این ماژول کنترل تمامی بخشهای: شبکه بندی، پردازشگر، ذخیره سازی، حافظه اصلی، ساخت ، کنترل و حذف ماشین های مجازی، امنیت و کنترل دسترسی را بر عهده دارد. این مدیریت میتواند از طریق خط فرمان یا محیط گرافیکی وبی انجام شود.
  • OpenStack Glance: مدیریت سرویس ایمیج (image) سیستم openstack را بر عهده دارد. این زیر سیستم ایمیج های ماشین مجازی از قبیل Raw, Hyper-V, Virtual Box, QEMU/KVM و VMware(VMDK,OVF) را پشتیبانی میکند.
  • OpenStack Object Store: همانگونه که از نام این سرویس مشخص است، مدیریت ذخیره سازی را بر عهده دارد. به منظور قابلیت ذخیره سازی در تمام فرمتهای مورد نیاز، این زیر سیستم به صورت توزیع شده است. چندین لایه افزونگی و تکرار خودکار به منظور جلوگیری از پاک شدن داده ها وجود دارد و بازگردانی داده ها به صورت خودکار انجام میشود.
۲ موافقین ۰ مخالفین ۰ ۲۷ آبان ۹۲ ، ۱۶:۵۱
حامد شیخلو