مدیریت زیرساخت ابر

مدیریت زیرساخت ابر



چکیده

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

 

 

1 مقدمه

رایانش ابری مدلی است برای فراهم کردن دسترسی آسان بر اساس تقاضای کاربر از طریق شبکه به مجموعه‌ای از منابع رایانشی قابل تغییر و پیکربندی (مثل: شبکه‌ها، سرورها، فضای ذخیره‌سازی، برنامه‌های کاربردی و سرویس‌ها) که این دسترسی بتواند با کمترین نیاز به مدیریت منابع و یا نیاز به دخالت مستقیم فراهم‌کننده سرویس به سرعت فراهم شده یا آزاد (رها) گردد.

پیدایش مفاهیم اساسی رایانش ابری به دهه ۱۹۶۰ بازمی گردد. زمانی که جان مک کارتی اظهار داشت که «رایانش ممکن است روزی به عنوان یکی از صنایع همگانی سازماندهی شود».

واژهٔ ابر در واقع بر گرفته از صنعت تلفن است به این گونه که کمپانی‌های ارتباطات راه دور که تا دهه ۱۹۹۰ تنها خطوط نقطه به نقطهٔ اختصاصی ارائه می‌کردند، شروع به ارائه شبکه‌های خصوصی مجازی با کیفیتی مشابه و قیمتهای کمتر نمودند. نماد ابر برای نمایش نقطه مرزی بین بخش هایی که در حیطه مسئولیت کاربرند و آنهایی که در حیطه مسئولیت عرضه کننده بکار گرفته می‌شد. رایانش ابری مفهوم ابر را به گونه‌ای گسترش می‌دهد که سرورها را نیز علاوه برزیر ساخت‌های شبکه در بر گیرد.

در اواسط سال ۲۰۰۸ شرکت گارتنر متوجه وجود موقعیتی در رایانش ابری شد که برای «شکل دهی ارتباط بین مصرف کنندگان خدمات فناوری اطلاعات، بین آنهایی که این سرویسها را مصرف می‌کنند و آنها که این سرویسها را می‌فروشند» بوجود می‌آید.

سرویس‌های زیرساخت ابری یا «زیرساخت به عنوان سرویس1» زیرساخت رایانه‌ای را که عموماً یک بستر مجازی است را به صورت سرویس ارائه می‌دهند. کاربران به جای خرید سخت‌افزار و نرم‌افزار و فضای مرکز داده (دیتا سنتر) ویا تجهیزات شبکه، همهٔ این زیر ساخت‌ها را به صورت یک سرویس کاملاً برونسپاری2 شده می‌خرند.

برای مدیریت سرویس‌های زیرساخت‌ ابری نرم‌افزارهایی مانند OpenStack , CloudStack , اوکالیپتوس و توسعه داده شده اند. در این گزارش قصد داریم دو مورد از نرم‌افزارهای IaaS را مورد بررسی قرار دهیم.

Openstack یک سیستم عامل ابری‌ست که توسط شرکت RedHat توسعه داده شده است.OpenStack با فراهم کردن مجموعه‌ای کامل از ابزارها این امکان را به کاربران و شرکت‌ها می‌دهد تا به راحتی منابع خود را کنترل و مدیریت کنند.در ادامه این سیستم عامل را به صورت کامل معرفی می‌کنیم و مؤلفه‌های را آن را مورد بررسی قرار می‌دهیم.

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

در بخش سوم نرم‌افزار OpenNebula را معرفی می‌کنیم و رابط‌های آنرا را مورد بررسی قرار می‌دهیم.

 

2 OpenStack

2.1 معرفی

Openstack یک سیستم عامل ابری‌3ست.openstack کنترل منابع یک دیتاسنتر – محاسباتی،ذخیره سازی و شبکه – را بر عهده دارد. کنترل این منابع با استفاده از یک داشبورد4 مدیریت می‌شود.داشبورد با فراهم کردن یک محیط مبتنی بر وب به مدیران و کاربران اجازه می‌دهد تا با اجزاء openstack در ارتباط باشند.[1]


تصویر 1

هدف پروژه‌ی openstack ، پیاده‌سازی آسان، مقیاس‌پذیری گسترده و فراهم‌سازی مجموعه‌ای غنی از امکانات می‌باشد.

 

2.2 مؤلفه‌های5 OpenStack

OpenStack از تعداد زیادی مؤلفه تشکیل شده است :[2]

  • trove
  • nova
  • glance
  • ironic
  • designate
  • oslo-incubator
  • governance
  • ...
  • cliff
  • gantt
  • keystone
  • taskflow
  • cinder
  • swift
  • python-keystonclientsite
  • shara

OpenStack پروژه‌ای متن‌باز6 است، به همین دلیل هرکسی می‌تواند بر اساس نیاز خود مؤلفه و ویژگی جدیدی به آن اضافه کند. همان‌طور که در لیست بالا مشاهده می‌کنید OpenStack از مؤلفه‌های بسیار زیادی تشکیل شده است اما هسته7 اصلی آن شامل۹ مؤلفه می‌باشد. در ادامه به معرفی و بررسی این مؤلفه‌ها می‌پردازیم.

 

2.3 هسته‌ی OpenStack

راه اندازی یک ماشین مجازی شامل تعداد زیادی تعاملات بین سرویس‌های مختلف openstack می‌باشد.نمودار زیر ارتباط و تعامل بین مؤلفه‌های مختلف openstack را نمایش می‌دهد.

تصویر 2: مؤلفه‌های اصلی openstack

همان‌طور که در نمودار بالا مشاهده می‌کنید هسته اصلی openstack شامل ۹ مؤلفه می باشد. برای توسعه‌ی این مؤلفه‌ها از زبان برنامه‌نویسی پایتون استفاده شده است.در ادامه به بررسی این ۹ مؤلفه می پردازیم:

 

2.3.1 معرفی مؤلفه‌های اصلی OpenStack[3]

جدول 1: اجزای هسته‌ی OpenStack

سرویس

نام پروژه

توضیحات

Compute

Nova

Nova ، نام پروژه محاسباتی8 OpenStack است.Nova قسمت اصلی یک سیستم IaaS می‌باشد که وظیفه‌ی کنترل محاسبات ابری را برعهده دارد. افراد و شرکت‌ها می‌توانند با استفاده از Nova سیستم‌های محاسباتی ابری خود را را مدیریت و هاست کنند.

وظیفه‌ی Nova مدیریت چرخه‌ی زندگی ماشین‌های مجازی در محیط openstack می‌باشد. مسئولیت‌ به وجود آوردن9، زمانبدی10 و انهدام11 ماشین مجازی را برعهده دارد.

Networking

Neutron

قابلیت های شبکه را برای دیگر مؤلفه‌های OpenStack فراهم می‌کند.این پروژه کمک می‌کند تا اطمینان حاصل شود هر یک از مؤلفه‌های OpenStack می‌توانند با هم ارتباط برقرار کنند.

Dashboard

Horizon

Horizon یک رابط کاربری مبتی بر وب است. این پروژه با تمامی سرویس‌های openstack در ارتباط است و امکاناتی مانند اجرای یک ماشین مجازی، اختصاص IP addresses و تنظیم کنترل دسترسی12 را بر عهده دارد.

برای توسعه و طراحی13 از فریم‌ورک‌های Django و Bootstrap استفاده شده است.

Image

Service

Glance

این پروژه سرویس هایی برای پیدا کردن14، ثبت کردن15 و بازگردانی16 تصاویر17 ماشین‌های مجازی فراهم می‌کند.با استفاده از RESTful API می‌توان گزارش18 هایی تهیه کرد که شامل متاداده هایی در مورد تصاویر ماشین مجازی هستند. تصاویر را می‌توان به صورت‌های مختلفی -یک فایل سیستمی یا با استفاده از Swift ذخیره سازی کرد.

Telemetry

Ceilometer

هدف این پروژه پیاده‌سازی سیستم حسابداری و مدیریت برای تمامی سرویس‌های openstack می‌باشد.

Identity Service

Keystone

سرویس احزار هویت19 و مجوز20 برای سرویس های دیگرOpenStack فراهم می کند.

Orchestration

Heat

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

Block

Storage

Cinder

سرویس دخیره سازی بلوک22 را برای OpenStack فراهم می‌کند.

Object

Storage

Swift

Swift مخرنی برای object/blob است که بسیار در دسترس، توزیع شده و سازگار می‌باشد. افراد و شرکت‌ها می‌توانند با استفاده از آن مقدار زیادی از اطلاعات را به صورت کارآمد، امن و ارزان دخیره‌سازی کنند.

Block

Storage

Cinder

سرویس دخیره سازی بلوک23 را برای OpenStack فراهم می‌کند.

برای هرکدام از این ۹ مؤلفه‌ی اصلی یک رابط کاربردی برنامه‌نویسی24 تعریف شده است. این رابط امکان را می‌دهد تا تمامی مؤلفه‌ها به راحتی با یکدیگر در ارتباط باشند. این رابط‌ها به صورت RESTful پیاده‌سازی شده‌اند.در ادامه به تعریف RESTful API می‌پردازیم و رابط‌های مؤلفه‌های OpenStack را مورد بررسی قرار می‌دهیم.

 

2.3.2 رابط‌های مؤلفه‌های OpenStack

همان‌طور که گفته شود رابط‌های OpenStack به صورت RESTful پیاده‌سازی شده‌اند.پس در ابتدا این رابط‌ها را تعریف و ویژگی آن‌ها را مورد بررسی قرار می‌دهیم.

REST 25 چیست؟

REST انتزاعی26 از معماری شبکه‌ جهانی وب است. به طور دقیق‌تر، REST یک سبک معماری‌ست که متشکل از مجموعه‌ای هماهنگ از محدودیت‌های معماری اعمال‌شده به مؤلفه‌ها، اتصال‌دهنده‌ها و عناصر داده درون یک سیستم توزیع‌شده است.REST به منظور تمرکز بر نقش مؤلفه‌ها و محدودیت‌های موجود هنگام تعامل مؤلفه‌ها از جزئیات پیاده‌سازی مؤلفه‌ها و سینتکس27 پروتکل‌ها چشم‌پوشی می‌کند.[4]

ويژگی‌های یک سیستم REST توسط شش قاعده تعریف می‌شود:[5]

  1. کلاینت – سرور28 باشد.

  2. بدون حالت29 باشد.

  3. قابلیت cache داشته باشد.30

  4. سیستم لایه‌بندی31 شده داشته باشد.

  5. واسط یکنواخت32 داشته باشد.

  6. دارای قابلیت کد در صورت نیاز باشد.33

معماری REST به‌گونه‌ای است که از پروتکل HTTP استفاده می‌کند. منابع34 مفهوم مرکزی REST می‌باشند.منابع با کمک URI 35نمایش داده می‌شوند.کلاینت درخواستی36 را با استفاده از URI و متدهای پروتکل HTTP ارسال می کند و سرور بر اساس آن متد و URI پاسخ را برای کلاینت ارسال می‌کند.

جدول 2: متدهای HTTP

Examples

Action

HTTP
Method

http://example.com/api/orders
(retrieve order list)

Obtain information about a resource

GET

http://example.com/api/orders/123
(retrieve order #123)

Obtain information about a resource

GET

http://example.com/api/orders
(create a new order, from data provided with the request)

Create a new resource

POST

http://example.com/api/orders/123
(update order #123, from data provided with the request)

Update a resource

PUT

http://example.com/api/orders/123
(delete order #123)

Delete a resource

DELETE

 

برای پیاده‌سازی RESTful API به کمک پایتون37 می‌توان از framework زیر استفاده کرد:

  1. Django
  2. Flask
  3. Bottle
  4. Werkzeug

با وجود این framework ها، توسعه‌دهندگان Openstack خود با استفاده از ماژول‌های پایتون اقدام به طراحی RESTful API کرده‌اند.این ماژول‌ها عبارتند از:

  • eventlet
  • greenlet
  • Routes
  • ...
  • WebOb
  • websockify
  • wsgiref
  • SQLALchemy

برای مثال رابط Glance API را مورد بررسی قرار می‌دهیم. می‌خواهیم اطلاعاتی در مورد تصاویر موجود در پایگاه داده‌ی Glance به دست آوریم.

ابتدا با کمک ماژول pycurl درخواستی را می‌سازیم که شکل نهایی این درخواست به صورت زیر می‌باشد:

جواب رابط Glance :

 

 

2.4 معماری پیاده‌سازی OpenStack[3]

یکی از معماری‌های متداول برای پیاده‌سازی openstack استفاده از معماری Three-Node with OpenStack Networking می‌باشد:

  • نود کنترل‌کننده Identity service, Image Service ، بخش‌های مدیریتی محاسبات و شبکه،Networking plug-in و داشبورد را اجرا می‌کند. همچنین شامل سرویس‌های پایگاه داده، message broker و NTP38 می‌باشد. در صورت تمایل، نود کنترل‌کننده بخش‌هایی از Block Storage , Object Storage , Database Service , Orchestration و Telemetry را اجرا می‌کند. این مؤلفه‌ها ویژگی‌های اضافی برای محیط OpenStack فراهم می‌کنند.

  • نود شبکه Networking plug-in, layer 2 agent و layer3 agent را اجرا می کند. سرویس‌های لایه‌ی دوم شامل آماده‌سازی39 تونل‌ها و شبکه‌های مجازی می‌باشد.سرویس‌های لایه سوم شامل مسیریابی 40 ،‌ NAT و DHCP می‌باشد. همچنین این نود اتصال به اینترنت برای ماشین‌های مجازی فراهم می‌کند.

  • نود محاسبات بخش مانیتور ماشین مجازی را اجرا می کند. به طور پیش‌فرض این نود از KVM برای مانیتور ماشین مجازی استفاده می‌کند.همچنین این نود Networking plug-in و layer 2 agent را اجرا می کند.

تصویر 3: معماری Three-Node

3 اوکالیپتوس41

اوکالیپتوس[7] نرم‌افزاری مبتنی بر لینوکس است که ابرهای خصوصی و ترکیبی را بر روی زیرساخت‌42های موجود پیاده‌سازی می‌کند .اوکالیپتوس تجمع منابع محاسباتی، دخیره‌سازی و شبکه را مقدور می‌سازد .این منابع می‌توانند بر اساس حجم کاری نرم‌افزار43 افزایش یا کاهش داده شوند.[6]

 

3.1 مؤلفه‌های اوکالیپتوس

اوکالیپتوس از ۶ مؤلفه تشکیل شده است:[8] [9]

تصویر 4: مؤلفه‌های اوکالیپتوس

 

جدول 3: معرفی مؤلفه‌های اوکالیپتوس

نام مؤلفه

زبان برنامه‌نویسی

توضیحات

 

Cloud Controller

(CLC)

Java

CLC برای مدیران،توسعه دهندگان و کاربران نهایی44 نقطه‌ی ورود به کلود محسوب می‌شود. ClC برای به دست آوردن اطلاعات در مورد منابع از مؤلفه‌های دیگر گزارش‌ می‌‌گیرد، برای زمانبدی در سطح بالا تصمیم‌گیری می‌کند و درخواستهایی به Cluster Controller ارسال می‌کند.

به عنوان یک رابط کاربری برای پلت‌فرم مدیریت،CLC وظیفه‌ی مدیریت و نمایش منابع مجازی را دارد.

Warlus

Java

Warlus به کاربر اجازه می‌دهد تا داده‌ها را صورت Objects/Buckets دخیره کند.با استفاده از Warlus می‌توانید Buckets را بسازید،پاک کنید ویا لیست کنید.

Cluster Controller (CC)

C

CC با اجرا شدن برروی یک ماشین واسط که دارای اتصال به شبکه است، ماشین‌هایی که CLC و NC را اجرا می‌کنند به یگدیگر متصل می‌کند. CC شبکه‌های ماشین مجازی را مدیریت می‌کند.CC همچنین اطلاعاتی را در مورد مجموعه‌ی NCها جمع‌آوری می‌کند و اجرای ماشین مجازی را زمانبدی می‌کند.

Storage Controller

(SC )

Java

SC با CC و NC در ارتباط است و حجم بلوک ها و spanshot های ماشین‌های مجازی در یک کلاستر را مدیریت می‌کند.

Node Controller

(NC )

C

NC بر روی همه‌ی ماشین‌هایی که VM instances را هاست می‌کنند اجرا ‌می‌شود.NC فعالیت‌های VM را کنترل می‌کند.این فعالیت‌ها شامل اجرا45، بازرسی46 و خاتمه دادن VM instances می‌باشد.

Vmware Broker

(VB )

-

VB مؤلفه‌ی اختیاری اوکالیپتوس است و در صورتی قابل‌ دسترسی که کاربر مشترکِ47 اکالیپتوس باشد.VB این امکان را فراهم می‌کند تا ماشین‌های مجازی بر روی زیرساخت‌ Vmware پیاده‌سازی شوند.

4 OpenNebula

OpenNebula [10] نرم‌افزاری متن‌باز، برای مجازی‌سازی دیتاسنتر استفاده می‌شود.این نرم‌افزار به گونه‌ای طراحی شده است تا به راحتی با هر زیرساختی تطبیق داده شود و همچین توسط مؤلفه‌های جدید توسعه یابد.نتیجه یک سیستم ماژولار است که می‌تواند انواع معماری‌های ابر پیاده‌سازی کند و با سرویس‌های دیتاسنترهای متعدد رابطه داشته باشد.در ادامه رابط‌های اصلی OpenNebula را بررسی می‌کنیم.[11]

++C زبان برنامه نویسی مورد استفاده در هسته‌ی OpenNebula می‌باشد.از Ruby برای توسعه و طراحیCLI و GUI استفاده شده است.

ما رابط‌های OpenNebula را به دو دسته‌ی اصلی تقسیم کرده‌ایم: رابط‌های ابر48 و رابط‌های سیستم‌49.

تصویر 5: رابط‌ها و معماری OpenNebula

4.1 Cloud Interfaces

رابط‌های ابر این امکان را برای کاربر فراهم می‌سازد تا از طریق REST API به راحتی ماشین‌های مجازی،شبکه‌ها و تصاویر را مدیریت کند.رابط‌های ابر پیچیدگی‌های ابر را مخفی می‌کند و مخصوصاً برای کاربران انتهایی مفید است. OpenNebula دو نوع رابط را پیاده‌سازی می‌کند:

نام رابط

توضیحات

EC2-Query API

OpenNebula قابلیت‌های ارائه شده توسط [12] Amazon's EC2 API -به طور عمده،قابلیت‌هایی که مربوط به مدیریت ماشین‌مجازی باشند-پیاده‌سازی می‌کند.در این صورت می‌توان از تمامی ابزارهای گزارش EC2 استفاده کرد تا به OpenNebula Cloud دسترسی داشت.

OCCI-OGF

این رابط یک سرویس RESTful است که امکان ساختن،کنترل کردن و مانیتور منابع ابر را فراهم می‌سازد.

 

4.2 Systems Interfaces

نام رابط

توضیحات

OpenNebula XML-RPC Interface

رابط اصلی OpenNebula است. با استفاده از این رابط می‌توان به تمامی قابلیت‌های OpenNebula

دسترسی داشت.برای مثال می‌توان منابع OpenNebula (ماشین‌های مجازی،شبکه‌ها،تصاویر، کاربرها، هاست‌ها و کلاسترها) را مدیریت کرد.

اگر برای نرم‌افزارهای ابر50 کتابخانه‌های تخصصی توسعه می‌دهید یا نیاز به این رابط سطح پایین برای ارتباط با هسته‌ی OpenNebula دارید از رابط XML-RPC استفاده کنید.

The OpenNebula Cloud API

(OCA)

این رابط یک راه ساده و راحت برای ارتباط با هسته‌ی OpenNebula فراهم می‌کند.رابط‌های OCA قابلیت‌هایی مانند XML-RPC فراهم می‌سازد.

اگر ابزارهای پیشرفته‌‌ی IaaS توسعه می‌دهید که نیازمند دسترسی کامل به قابلیت‌های OpenNebula می‌باشد از رابط‌های OCA استفاده کنید.

OpenNebula Drivers Interfaces

تعاملات میان OpenNebula و زیرساخت‌های ابر توسط درایورهای مخصوص هر زیر‌ساخت انجام می‌گیرد.

OpenNebula Database

OpenNebula حالت51 و اطلاعات حسابداری زیادی را در پایگاه داده به صورت مداوم ذخیره‌سازی می‌کند.

 

1IaaS

2Outsource

3Cloud Opreating System

4Horizon

5Components

6Open Source

7Core

8Compute

9Spawning

10Scheduling

11Decommissioning

12Access Control

13Develop & Design

14Discovering

15Registering

16Retrieving

17Images

18Query

19Authentication

20Authorization

21Developers

22Block Storage

23Block Storage

24API

25Representational State Transfer

26Abstraction

27Syntax

28Clinet - Server

29Stateless

30Cacheable

31Layered System

32Unifrom Interface

33Code on Demand

34Resources

35Uniform Resource Identifier

36Request

37Python

38Network Time Protocol

39Provisioning

40Routing

41Eucalyptus

42Infrastructure

43Application

44End-Users

45Execution

46Insepection

47Subscriber

48Cloud Interfaces

49System Interfaces

50Cloud Applications

51State