نمایش مطلب نمایش مطلب

نوآوریهای PVM


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

این مستند موارد نوآوری، شرح مباحث مربوط به آن و اهمیت هر کدام را به تفکیک توضیح میدهد.

 

  • XParam

امروزه تبادل اطلاعات در قالب XML امری مرسوم بوده و استفاده از این قالب اطلاعاتی جهت ذخیره‌سازی و یا ارسال/دریافت اطلاعات به یک استاندارد تبدیل شده است.

بنابراین یکی از دغدغه‌های اصلی برنامه‌نویسان جهت توسعه برنامه‌های کاربردی تبدیل اطلاعات از قالب برنامه‌نویسی شده (Object) به XML و یا به عکس میباشد.

 

  • راهکارهای موجود

هم‌اکنون این عمل به ۳ شیوه امکان پذیر است:

استفاده از XML Parser در این شیوه برنامه‌نویس برای هر شیء به صورت مستقل اقدام به Parse رشته دریافتی و استخراج اطلاعات از آن میکند. استفاده از تکنیکهای Serialize در این روش برنامه‌نویس بر اساس تکنولوژی Serialize که انتخاب کرده است اقدام به توسعه توابعی برای هر شیء خود میکند که اطلاعات موجود در کلاس را به XML و به عکس تبدیل میکند. استفاده از Code Generator در این شیوه برنامه‌نویس ساختار XML خود را در قالب DTD ویا XSD در اختیار Code Generator قرار میدهد و Code Generator بر اساس قواعد خود، Code را به زبان ++C برای ساختار داده مورد نظر را تولید میکند. این کد قادر خواهد بود اطلاعات کلاس مورد نظر را به XML تبدیل و از XML بخواند. نقاط ضعف راهکارهای موجود به این شرح است:

در شیوه Code Generator هر گونه تغییر در ساختار داده‌ای نیازمند تولید مجدد Code میباشد. در تمامی موارد برنامه‌نویس نیازمند توسعه مستقل تبدیل به/از XML برای ساختارهای داده‌ای (کلاسها) میباشد. این موضوع بار توسعه‌ای زیادی را بر برنامه تحمیل میکند. برنامه‌نویس درگیر جزئیات ساختاری و پردازشی XML میشود. به طور عمومی هر تکنیکی که منجر به تولید کد بیشتر در برنامه شود، به معنای افزایش احتمال بروز خطا در برنامه میباشد.

 

  • شرح نوآوری

XParam با هدف ایجاد ساختار پارامتری منعطف توسعه یافته است. در این ساختار Typeهای داده‌ای مشخصی وجود دارند و همچنین امکان افزودن پارامترهای داده‌ای بیشتر توسط کاربر با توسعه کلاسهای ++C وجود دارد.

برای توضیح بیشتر از یک مثال شروع میکنیم، در XParam جهت نمایش ساختار XML به شرح تصویر 1 کلاسی به شرح تصویر 2 توسعه می‌یابد.

 

تصویر 1: نمونه رشته XML

 

تصویر 2: پارامتر توسعه یافته توسط XParam

چنانچه مشاهده میشود در تعریف یک پارامتر که میتواند یکی از اشیاء موجود در برنامه باشد، بر اساس ساختار XParam مشخصات داده‌ای توسعه یافته و به عنوان یک عنصر ورودی/خروجی به سیستم اضافه میشوند (addParam).

بدینصورت برنامه‌نویس بدون درگیری با جزئیات ساختاری رشته ورودی/خروجی (XML) اقدام به تعریف پارامترهای داده‌ای و نحوه چینش آنها میکند. سپس برنامه‌نویس قادر خواهد بود با فراخوانی دستورات زیر پارامتر را به XML تبدیل و یا از XML فراخوانی کند.

 

Server server; server.loadXmlDoc("path/to/xml/file.xml"); /* بازیابی از فایل */

server.loadXmlStr("xml-formatted-string"); /* بازیابی اطلاعات از یک رشته */

server.xml();

 

  • مزیتها و نوآوریهای XParam به این شرح است:

XParam ساختاری منعطف جهت توسعه پارامترهای داده‌ای با قواعد ++C در اختیار برنامه‌نویس قرار میدهد.

Typeهای داده‌ای و همچنین صحت ورودی و محدوده داده‌ای توسط XParam کنترل میشود به عنوان مثال در کلاس Server، پارامتر داده‌ای cpuUsage از نوع Float میباشد که مقادیر آن میتواند بین عدد ۰(صفر) و ۱۰۰ باشد. در صورتیکه مقدار ورودی به پارامتر از محدوده تعیین شده خارج شود اخطار صادر خواهد شد. مثال دیگر در این مورد پارامتر ip است که از جنس IPxParam است. این نوع داده آدرسهای ویرایش ۴ و ۶ را پشتیبانی میکند. به عبارتی چنانچه رشته ورودی آدرس صحیح ۴ یا ۶ نباشد، XParam از خواندن آن جلوگیری خواهد کرد.

Typeهای داده‌ای در XParam قابل توسعه هستند. XParam چند فیلد پایه‌ای همچون XintParam, XfloatParam, XenumParam و ... دارد. در ساختار ارثبری XParam این امکان توسعه توسط کاربر وجود دارد تا پارامترهای داده‌ای مورد نظر خود را تعریف و در پارامترهای دیگر استفاده کند. در این زمینه پارامترهای داده‌ای خاصی همچون IPxParam, MACAddress, BoolParam و ... توسط تیم توسعه XParam ایجاد شده است. چنانچه رجوعی به مثال تصویر ۲ داشته باشیم، پارامتر Server میتواند به عنوان یک پارامتر داده‌ای در دیگر پارامترهای استفاده گردد.

برنامه‌نویس از جزئیات ساختاری XML رها میشود. XParam با هدف توسعه یک ساختار پارامتری تعریف شده است که داده‌ها امکان تبدیل به انواع فرمتهای داده‌ای از جمله XML را داشته باشد. تغییر در ساختار داده‌ای بسیار روان بوده و نیاز به تولید Code ندارد. جهت تبدیل اطلاعات به فرمتهای داده‌ای، نیاز به کد نویسی مجزا برای هر کلاس وجود ندارد. با XParam برنامه‌نویس صرفا اقدام به توسعه پارامترها و یا اشیاء خود با استفاده از قواعد میکندو تمامی تبدیلها به فرمتهای داده‌ای توسط XParam انجام میشود.

 

  • آینده XParam

ٓ از اهداف آینده این ساختار عبارت است از:

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

 

  • اهمیت XParam

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

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

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

 

  • XList

در زبان ++C لیستها و یا Containerها دارای جایگاه ویژه‌ای به منظور حفظ اطلاعات در زمان اجرا میباشند. از این رو مکانیزمهای مدیریت همزمانی دسترسی به آنها بسیار مهم است.

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

 

  • راهکارهای موجود

مکانیزم رایج جهت کنترل همزمانی در لیستها استفاده از mutex و یا rw-lock ها میباشد.

در صورت استفاده ازmutex همیشه یک فعالیت بر روی لیست وجود خواهد داشت، چه خواننده باشد و یا نویسنده. Rw-lock این امکان را فراهم میکند تا خوانندگان لیست بتوانند به صورت همزمان اقدام به فعالیت بر روی لیست نمایند، با ورود write تمامی فعالیتهای read/write متوقف شده و صرفا یک write روی لیست فعالیت میکند. قابل ذکر است فعالیت read بر روی لیست به معنای جستجو و حرکت در لیست و قابلیت write به معنای حذف/اضافه عناصر از/به لیست میباشد.

نکات ضعف راهکاری موجود به این شرح است:

تمامی فعالیتهای read نیازمند استفاده از مکانیزم Lock میباشند، این موضوع به دلیل اینکه در اغلب برنامه‌های کاربردی تعداد فعالیتهای read زیاد است نیازمند استفاده از lock در مکانهای متعدد دارد. استفاده از lock در مکانهای مختلف در برنامه‌کاربردی احتمال بروز Dead lock را افزایش میدهد. چنانچه عملیات writeی در حال اجرا باشد، کلیه فعالیتها اعم از read و write متوقف میشوند. در این صورت در صورتیکه به هر دلیل عملیات write طولانی شود و یا اینکه به صورت نامحدود متوقف شود کل برنامه دچار مشکل میشوند.

 

  • شرح نوآوری

XList یک لیست پیوندی دو جهته را با مشخصات زیر در اختیار کاربر قرار میدهد:

فعالیتهای read نیازمند هیچگونه مکانیزم Lock نیستند در نتیجه میتوانند به صورت کاملا آزاد در لیست حرکت کنند. 'این موضوع باعث کاهش شدید حجم Lockهای برنامه کاربردی و به تبع آن کاهش پیچیدگی و کاهش احتمال بروز Dead Lock در برنامه میشود.' همزمان با فعالیتهای read و بدون توقف آنها امکان انجام یک عملیات write وجود دارد. در نتیجه فعالیتهای read در برنامه که معمولا حجم قابل توجهی از فعالیتهای بر روی لیست را تشکیل میدهند، به هیچ عنوان متوقف نمیشوند، حتی در صورتیکه عملیات write با مشکل مواجه شود. جهت توضیح بیشتر نحوع عملکرد XList از یک مثال استفاده میکنیم: در تصویر 3 نمایی از XList را مشاهده میکنید.

سناریوی موجود به این شرح است: در این لیست پردازش P1 بر روی عنصر A و در حال حرکت به سمت راست، پردازش P3 بر روی عنصر C و در حال حرکت به سمت چپ و P2 و P4 در حال فعالیت بر روی نود B میباشند. کاربر نیاز به حذف عنصر B از سیستم دارد.

 

تصویر 3: نمایی از XList

در اولین مرحله از حذف عنصر B اشاره‌گرهای موجود به عنصر از عناصر قبل و بعد تغییر می‌یابند. این موضوع در تصویر 4 نمایش داده شده است.

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

 

تصویر 4: اولین مرحله از حذف عنصر در XList

 

این مرحله در XList با تابع xerase_prepare پیاده‌سازی میگردد.

با این تغییر پردازشهای موجود بر روی دیگر عناصر، امکان مشاهده عنصر حذف شده را نخواهند داشت (P1 بر روی A و P3 بر روی C) و همچنین پردازشهای موجود بر روی B این امکان را دارند تا در جهات عقب و جلو حرکت کنند. هنگامی که پردازشهای عنصر در حال حذف به اتمام رسیدند عنصر هدف به صورت کامل از حافظه پاک میگردد.

 

تصویر 5: آخرین مرحله از حذف عنصر در XList

این مرحله با تابع xerase انجام میپذیرد.

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

چنانچه مشاهده میگردد شیوه مدیریت اشاره‌گرها و همچنین اضافه و حذف عناصر به گونه‌ای است که فعالیتهای read در هر موقعیتی امکان جابه‌حایی در لیست را دارند.

قابلیتی که XList در اختیار قرار میدهد هم‌اکنون در زبان برنامه‌نویسی ++C وجود ندارد (و تا حد اطلاع همچنین در دیگر زبانهای برنامه‌نویسی) و تلاشی است در جهت بهبود فضای توسعه برنامه‌های کاربردی در زبان ++C و کاهش پیچیدگیها و احتمال بروز خطا.

 

  • آینده XList

تیم توسعه در تلاش است تاXList قابلیت مدیریت همزمانی چندین عملیات write را نیز داشته باشد.

 

  • اهمیت XList

توسعه برنامه‌های کاربردی در زبان ++C به دلیل قابلیتهای این زبان برنامه‌نویسی روز به روز در حال افزایش است. در این میان مدیریت همزمانی در برنامه‌های کاربردی بزرگ به دلیل بهره برداری از قابلیتهای Multi-Threading از اهمیت روز‌افزونی برخوردار است.

در برنامه‌های کاربردی به میزانی که از تعداد Lockهای برنامه کاسته میشود، بر قابلیت اطمینان برنامه افزوده گشته و احتمال بروز Dead-Lock تا حد زیادی کاهش می‌یابد.

'XList مکانیزمی را در اختیار برنامه‌نویس قرار میدهد تا ضمن کاهش قابل توجه تعداد Lockهای مورد نیاز، قابلیت پایداری برنامه را در صورت بروز مشکل افزایش دهد(عدم قطعی فعالیتهای read در صورت بروز مشکل برای write).'

XList توسعه برنامه‌های کاربردی در ++C را ساده‌تر، کم‌ریسکتر و همچنین سریعتر میکند.

 

  • Sball

هم‌اکنون به دلیل مطرح شدن مباحث Cloud Computing و توسعه امکانات پردازشی، علاوه بر امکان ذخیره‌سازی اطلاعات به صورت Distribute، نیاز تازه‌ای با عنوان امکان توسعه اشیاء بر مبنای ذخیره و پردازش Distribute نیز قابل طرح است.

به عبارتی توسعه‌دهندگان نیازمند محیطی هستند که امکان توسعه اشیاء‌( Attribute/Method) به صورت کلاستری را فراهم آورد.

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

 

  • راهکارهای موجود

Distributed Filesystemها در چند ساله اخیر در عرصه ذخیره‌سازی اطلاعات رواج چشم گیری یافته‌اند. البته در این عرصه گوگل با Google File System پیشتاز بوده است.

تمرکز این تکنولوژیهای بر ذخیره‌سازی اطلاعات (Object) به صورت Distribute میباشد. به عبارتی تمرکز و نگاه این تکنولوژیهای بر فضای داده‌های(Attributes) اشیاء بوده و به فضای عملیاتی(Methods) آنها نگاهی ندارند.

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

 

  • شرح نوآوری

Sball به دنبال ایجاد فضای پردازشی و ذخیره‌سازی به صورت Distribute میباشد. قابلیتهای Sball به این شرح میباشد:

  • همه چیز در قالب اشیاء و اتصالات بین آنها پیاده‌سازی میشوند (والد تمامی اشیاء SballObject میباشد).
  • علاوه بر Distribution در ذخیره‌سازی اطلاعات، اشیاء Cluster Aware هستند و این امکان برای آنها وجود دارد تا پردازشهایی در سطح کلاستر انجام دهند. بنابراین مفهوم Distribute برای پردازش و اطلاعات در Sball با هم پیوند میخورند.

در Sball یک شیء با تمامی مفاهیم مربوط به شیء (Attributes, Methods) به صورت کلاستری و Distribute مورد بهره‌برداری قرار میگیرد.

Sball فضای برنامه‌نویسی و مفهومی تازه‌ای را در دنیای محاسبات ابری ایجاد کرده است.

در تصویر 6 نمونه‌ای از شیء توسعه یافته در Sball نمایش داده شده است.

 

تصویر 6: نمونه‌ای از شیء توسعه یافته در Sball

 

  • آینده Sball

طراحی Sball با قابلیت توسعه‌پذیری و مقیاس‌پذیری در فضای پردازش و ذخیره‌سازی توسعه یافته است.

Sball قادر است نگاه تازه‌ای به توسعه برنامه‌های کاربردی به صورت کلاستر و پردازش توزیع شده را ایجاد کند و به تبع آن Framework ویژه‌ای را در اختیار قرار دهد.

Sball قادر است محاسبات ابری را تغییر مفهوم داده و تمرکز بر توسعه اشیاءی که آگاهی نسبت به کلاستر دارند را جایگزین ماشین مجازی نماید.

 

  • اهمیت Sball

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

در این فضا امکان ارایه راهکارهای نوین و ابتکاری و همچنین احتمال اقبال به آن در سطح جهانی وجود دارد.

از سوی دیگر Sball قابلیتی را در اختیار برنامه‌نویسان قرار میدهد تا فارغ از پیچیدگیهای مربوط به فضای توزیع شده صرفا به توسعه اشیاء خود بپردازند. تمامی فعالیتهای مربوط به فضای توزیع شده توسط Sball مدیریت میشود.

بنابراین Sball پدیده نو و تازه‌ای در دنیای برنامه‌های کاربردی و محاسبات ابری میباشد.

آدرس کوتاه :