object storage چیست؟ | 7 مورد از مزایای آن
Object storage (ذخیرهسازی اشیاء) که با اصطلاح object-based storage نیز شناخته میشود، نوعی روش برای نگهداری دادهها است. در این روش واحدهایی مجزا به نام آبجکت (object) در فرایند ذخیرهسازی، مدیریت و دستکاری میشوند. به این صورت که قطعاتی از دادههای مختلف که یک فایل را تشکیل میدهد با یکدیگر ترکیب شده و در storage pool (استخر ذخیرهسازی) همراه با شناسه سفارشی نگهداری میشوند.
برای نگهداری و ذخیرهکردن دیتاها روشهای متنوعی وجود دارد، مانند file storage و block storage. امروز و در این مقاله قصد داریم تا بهصورت کامل و جامع به بررسی ذخیرهسازی اشیاء بپردازیم و تفاوتهای این متد با دیگر روشها را بررسی کنیم پس تا انتهای مقاله همراه ما باشید.
object-based storage یا object storage چیست؟

روشی برای ذخیرهسازی دادهها در سطح ترابایت (TB)، پتابایت (PB) و بزرگتر است تا دادههای عظیم را بتوان راحتتر مدیریت کرد. شاید دانستن این موضوع جالب باشد که امروزه نگهداری از دادهها به یک امر مهم و حیاتی برای سازمانها و شرکتهای بزرگی همچون گوگل، فیسبوک (متا)، تلگرام و اکثر مراکزی که شبکهای اجتماعی ارائه میکنند، تبدیل شده است.
مطالعه مقاله راهنمای جامع ذخیره سازی اطلاعات را پیشنهاد می کنیم.
در نظر بگیرید که چندین میلیون انسان روزانه تعداد زیادی عکس، ویدئو، متن، سایت و… جدید را با گوشی یا لپتاپ خود تولید کرده و در شبکههایی مانند یوتیوب، فیسبوک، اینستاگرام، تیکتاک و موارد دیگر به اشتراک میگذارند. این نوع دادهها که بدون ساختار هستند (با یکدیگر ارتباطی ندارند) حجم بزرگی از فضاهای ذخیرهسازی را دربرگرفته است. چون صددرصد استفادهکنندگان از شبکههای نامبرده شده انتظار دارند تا دادههای ایشان بدون هیچ آسیبی دستنخورده باقی بماند.
شرکتی به نام IDC تخمین زده است که تا سال 2025 تقریبا 80 درصد دادههای موجود در جهان همین موارد ذکر شده (بدون ساختار) خواهند بود. پس اگر میخواهی تا در این رقابت تنگاتنگ زنده بمانی تغییر کن. منظور این است که دیگر مانند گذشته نمیشود دادهها را بهصورت سنتی ذخیره کرد زیرا در زمان نیاز جستجو و پیداکردن دادهها بسیار دشوار و زمانبر خواهد بود که بر عملکرد شبکه تأثیر خواهد گذاشت.
ازاینرو روش جدید برای ذخیرهسازی دادهها و metadadها با نام Object storage خلق شد که در آن دادهها در آبجکتهایی (Object) ذخیره شده که همین آبجکتها در استخر (pool) همراه با یک شناسه سفارشی (custom identifier) نگهداری میشوند. اگر دوستدارید تا با معماری و نحوه کار این متد آشنا شوید، به ادامه متن توجه فرمایید.

معماری Object storage
در معماری ذخیرهسازی اشیاء (Object storage)، آبجکتها واحدهای ناپیوسته و گسستهای هستند که در محیط مسطح (از نظر ساختاری) نگهداری میشوند. منظور مسطح بودن محیط این است که هیچ سلسلهمراتب پیچیده یا دایرکتوری (مسیریابی) خاصی بهمانند معماری file storage وجود ندارد. هر object یک مخزن سادهای است که اطلاعات توصیفی و شناسه شناسایی منحصربهفردی را در خود دارد. (بهجای نام فایل و مسیر آن)
برای درک بهتر معماری object-based storage فرض کنید که میلیونها کتاب باید در یک کتابخانه دستهبندی و در قفسههای مخصوص خود نگهداری شوند. خب این کار انجام شد، حال نیاز است تا دادههای مربوط به کتابها (مانند سال انتشار، نویسنده، ناشر، موضوع و…) را نیز در دیتابیسی ذخیره کنید. اولین راهکاری که به ذهنمان خطور خواهد کرد، ایجاد پوشههایی بهصورت سلسلهمراتب، بر اساس موضوع، تاریخ، نویسنده و… است.
این کار برای ذخیره 100 عدد کتاب مناسب است. در زمان ذخیره 1000 کتاب، پیداکردن دادههای مربوط به کتابی خاص دشوارتر خواهد بود. اما زمانی که صحبت از میلیون میشود، پیداکردن دادههای یک کتاب شاید غیرممکن باشد. یعنی میخواهید به خواننده بگویید که برو یک ماه یا 6 ماه دیگر بیا تا بگویم جای کتاب کجاست؟
برای حل این مشکل میتوان دادهها را با معماری ذخیرهسازی بر مبنای شیء، نگهداری کرد تا جستجو و پیداکردن آنها نیز سادهتر باشد. به این صورت که داده، فراداده (meta data) و شناسه یک کتاب در یک Object ذخیرهشده و در یک محیط مسطح قرار میگیرد. حال با یک فراخوانی ساده API میتوان بهراحتی کتابی را پیدا کرد. با بزرگتر شدن تعداد آبجکتها نیز میتوان استخرهای ذخیرهسازی (storage pool) را گسترش داد و در هر مکانی نگهداری کرد.
بارگذاری دادههای یک سایت دقیقا با همین روش صورت میگیرد. یعنی اطلاعات صفحهای از طریق یک API (مانند مرورگر کروم یا موزیلا) درخواست میشود و با استفاده از پروتکل HTTP بستهها (Objects)، ازطریق دستورات GET، PUT، POST و DELET، مدیریت میشوند. (HTTP مخفف Hypertext Transfer Protocol است که برای انتقال دادههای فرامتن مانند تصاویر، ویدئوها، متن و… برای بارگذاری سایت استفاده میشود)
موارد استفاده از Object Storage
هنگام ساخت برنامههای جدید باید با دید مبتنی بر Object Storage به فرایند طراحی و ساخت نگاه کرد. برنامههای عصر دیجیتال بهجای تکیه بر سیستمهای فایلی خوشهای و دستگاههای حد نصاب، به مدیریت خطا و ثبات داده نیاز دارند تا حتی در صورت خرابی زیرساخت شبکه، همچنان در دسترس بمانند.
عملا بسیاری از برنامههای کاربردی فعلی مدلهای استقرار بومی دارند تا با زیرساختهای بومی ابری و مهمتر از Object Storage سازگار باشند. در این حالت زمانی که برنامه پردازش یا ایجاد یک تکه داده را به پایان برساند، میتوان آن در یک آبجکت استوریج ذخیره و در مواقع نیاز بازیابی کرد.
حتی میتوانیم از باکت (Bucket) آبجکت استوریج برای راهاندازی رویدادها استفاده کنیم. سناریویی را تصور کنید که در آن یک برنامه تلفن همراه عکس و ویدیو آپلود میکند و قبل از انتشار آنها، پردازشهایی انجام میدهد. در این حالت بهمحض آپلود عکس یا ویدیو، یک رویداد تازه راهاندازی میشود تا به برنامه پشتیبان اطلاع دهد که یک شی جدید برای پردازش وجود دارد و زمانی که پردازش شی به پایان رسید، خروجی را میتوان توسط باکت به شبکه توزیع محتوای (CDN) منتقل کرد.
ذخیره سازی مبتنی بر اشیاء ابری عمومی یا خصوصی؟
ابر عمومی ممکن است همیشه گزینه مناسبی برای همه بارهای کاری یا برای ذخیره همه دادههای کاربر نباشد. علیرغم این واقعیت که ابر عمومی بلافاصله در دسترس است، با گذشت زمان و با رشد مجموعه دادهها، میتواند سنگین و ناکارآمد شود. بهطور کلی ابر عمومی با این ایده شکل گرفت که در صورت تمایل مقیاسش کم و زیاد شود. در حالی که فضای ذخیرهسازی همیشه نیازمند ظرفیت بیشتر و مقیاس بزرگتر است.
مسئله بعدی هزینه خدمات ارائهدهنده فضای ابری اس که شامل هزینه ذخیرهسازی بهعلاوه بازاریای میشود. حتی برخی از ارائهدهندگان به ازای تعداد عملیات APIی که شما درخواست میکنید، کارمزد انتقال در شبکه را کم و زیاد میکنند!
چرا از Object Storage استفاده کنیم؟
این راه حل مقیاسپذیر با امنیت بالا، انعطافپذیری زیاد، مدیریتپذیری قابل قبول و تعمیر و نگهداری کمهزینه در اختیار کاربران قرار میگیرد تا دسترسی از راه دور را آسان کند. چند نوع مختلف ذخیرهسازی ابری مبتنی بر شی وجود دارد، از جمله:
ذخیرهسازی مبتنی بر شئ کوبرنتیز (Kubernetes Object Storage)
ذخیرهسازی شی Kubernetes به کاربر امکان میدهد برنامه و سرویسهای ضروری را در یک کانتینر یا خوشه ذخیره کند. این کانتینر به عنوان یک واحد عمل میکند و میتواند به طور مستقیم در محیطهای محاسباتی مختلف مستقر شود. در نتیجه برنامه از قابلیت حمل بالاتری برخوردار میشود. این خوشهها میتوانند پاسخگوی نیازهای مقیاسپذیری حجم کاری کاربر باشند. حتی میتوانند قابلیت بهبود خودکار برای مجموعه فراهم کنند. یعنی چنانچه برنامه به هر دلیلی از کار بیافتد، کوبرنتیز بهطور خودکار با استقرار مجدد راهاندازی، برنامه را به حالت موردنظر بازمیگرداند. این ویژگی فرایند مدیریت ذخیرهسازی اشیا را بهبود میبخشد.
ذخیرهسازی مبتنی بر شئ داکر (Docker Object Storage)
زمانی که برای برنامههای کاربردی حیاتی خود به ذخیرهسازی و زیرساخت با کارایی بالا نیاز دارید، یک ذخیرهسازی Docker مبتنی بر شئ مشکلتان را به بهترین شکل ممکن حل میکند.
ذخیرهسازی مبتنی بر شئ بومی ابری (Cloud-Native Object Storage)
استقرار ذخیرهسازی شی بومی ابری پیادهسازی داخلی ندارد. از یک یا چند ابر تشکیل میشود و کاربران مواقعی که میخواهند از زیر بار مدیریت معماری زیربنایی سیستم شانه خالی کنند، میتوانند سراغ این راهحل ابری بروند.
ذخیرهسازی مبتنی بر شئ چند ابری (Multi-cloud Object Storage)
چنانچه در بحثهای ذخیرهسازی و امنیت نیازهای گسترده و مختلفی دارید، پیشنهاد میکنیم از ذخیرهسازی مبتنی بر شئ چند ابری استفاده کنید تا ابرهای خصوصی و عمومی در اختیارتان قرار گیرد.
مزایای روش ذخیرهسازی بر مبنای شیء (object-based storage)
اشاره شد که در دنیای امروز ذخیره، مدیریت، کنترل، دسترسی و جستجو دادهها رفتهرفته به دلیل افزایش حجم اطلاعات، سختتر شده است. ازاینرو نیاز به روشهای ذخیرهسازی نوین همراه با ویژگیهای خاص حس میشود. در ادامه به مهمترین مزایای Object storage پرداختهایم.
۱) ذخیره و مدیریت دادههای بدون ساختار
دادههای بدون ساختار مانند اطلاعات مربوط به یک کتاب (نویسنده، سال انتشار، موضوع، ناشر و…) همواره ثابت هستند اما ممکن است در هر زمانی به آنها نیاز باشد. از مثالهای دیگر برای یک unstructured data میتوان به ویدیوهای تولید شده در شبکههای مجازی، عکسهایی که در اینستاگرام پست میشوند، انواع دادههای فرامتنی (hypertext) که هر روز در وب انتشار پیدا میکنند و… اشاره کرد. این دادهها بهصورت غیرقابلباوری درحالرشد و تکثیر هستند.
زیرا روزبهروز شاهد بهترشدن کیفیت تصاویر و ویدئوها هستیم که حجم آنها نیز به طبع بالا میرود. شاید 10 سال پیش کل حافظه یک کامپیوتر 50 مگابایت نبود، اما امروزه یک عکس بیش از 50 مگ فضا نیاز دارد. سهم بزرگی از دادههای موجود در جهان مربوط به همین دیتاهای بدون ساختار است که با Object storage میتوان آنها را مدیریت و نگهداری کرد.
۲) مقیاسپذیری بالا
ذخیره کردن دادهها در روش مبتنی بر اشیاء مقیاسپذیری بالایی دارد. یعنی با برقراری ارتباط و اتصال میان سرورهای متعدد بهصورت ابری میتوان در مقیاس ترابایت (TB)، پتابایت (PB) و… دادهها را ذخیرهسازی کرد. زیرا سلسلهمراتبی در کار نیست و تنها مانند یک خط صاف و نامحدود دادهها را روی آن آویزان میکنیم.
برای مثال زمانی که DATAهای یک کتاب بهصورت File Storage ذخیره شود، به دلیل وجود ستونها و ساختاری دایرکتوری، نیاز به داشتن تمامی دادهها در یک محل هستیم. درحالیکه در روش object-based storage هر داده یک شناسه مخصوص به خود دارد که هرجایی باشد با آن شناسه میتوان پیدایش کرد. مانند پاسپورت که چه در ایران باشید و چه در آمریکا، پیداکردن شما غیرممکن نخواهد بود.

۳) کاهش پیچیدگی
فایلهای مربوط به طراحی خود من مانند فوتوشاپ و ایلاستریتور بهصورت تاریخ بندی ذخیره شده است. یعنی سلسلهمراتبی که برای ذخیره آنها استفاده کردهام بهصورت مثلا 1401/01/30، 1401/01/31 و… است. اگر بخواهم سندی را میان این تعداد پوشه پیدا کنم، باید یا تاریخ آن را به یادآورم و با مراجعه به پوشه مربوطه تکتک فایلها را باز کنم و یا اسم تمپلیت را به یادآورم و آن را در منوی Search جستجو کنم.
زمانی که تعداد فایلها بالا برود پیچیدگی که در ذخیرهسازی دادهها وجود دارد بیشتر و بیشتر میشود (مثلا تعداد پوشهها بیشتر میشود). زمانی که با APIها سروکار داریم برای کاهش پیچیدگی میتوان از روش object storage استفاده کرد زیرا API با جستجوی تنها شناسه داده بهسرعت آن را پیدا میکند.
۴) بکآپگیری بسیار سادهتر
مهمترین کاری که برای جلوگیری از رخداد فاجعه باید انجام داد، داشتن پشتیبان از دادهها است. در روشهای سنتی و قدیمیتر برای بکآپگیری باید یک شیء فیزیکی مانند هارد درایو یا دیسک برای این کار تهیه میشد که ممکن بود همان نیز خراب شود و امنیت دادهها به خطر بیفتد.
اما در ذخیرهسازی مبتنی بر Object میتوان به تعداد زیاد دادهها را تکرار و تکثیر کرد و اگر دادهای از بین رفت، بدون وقفه از جایگزین آن بهره برد. برای این کار سیستم ابری (اتصال و ارتباط میان دیتا سنترها و سرورهای متعدد در سراسر جهان) کارآمد خواهد بود. زیرا از هر داده در مکانهای مختلف یک پشتیبان خواهیم داشت.
۵) کاستومایز کردن متا دیتاها (Customizable metadata)
دوباره تکرار میکنم که در متد Object storage، هر آبجکت یا شیء مخزنی بوده که حاوی متا دیتاهایی (اطلاعات مربوط به مسیریابی، شناسه منحصربهفرد، خط و مشی نگهداری و حفظ دادهها و…) است. از دیگر مزایای این متد میتوان به قابلیت تنظیم کردن (Customizable) metadataها اشاره کرد که در تجزیهوتحلیل دادهها با استفاده از هوش مصنوعی و موارد دیگر کاربرد دارد.
۶) صرفهجویی در هزینهها
سرویسهای ابری ارائهدهنده Storage مبتنی بر اشیاء، بر اساس میزان نیاز به منابع قیمتگذاری میشوند. یعنی اگر نیاز به مثلا 100 ترابایت فضای ذخیرهسازی دارید، بدون لزوم برای پرداخت هزینههای اولیه و سرمایهگذاری، (مثلا تهیه سرور) قیمت 100 TB برای شما محاسبه خواهد شد.
همچنین قیمتگذاریها به صورتی است که با افزایش نیاز، مبلغ پرداختی کاهش مییابد تا انعطافپذیری بیشتری برای مصرفکنندگان حاصل شود. برای مثال هزینه اشتراک 200 ترابایت فضا از مجموع دو سرویس 100 ترابایتی کمتر است. علاوه بر تعرفههای پایین قیمتگذاری در این متد، به دلیل نیاز به منابع سختافزاری کم برای پیادهسازی object storage، نیاز به تهیه دستگاههای بسیار قدرتمند با قیمت گزاف نیست.
برای مطالعه بیشتر مقاله رایانش ابری چیست؟ را پیشنهاد میکنیم.
۷) سازگاری با سیستم ابری (Cloud System)
اگر دقت کرده باشید، اکثر ویژگیها و مزایای ذکر شده برای ذخیرهسازی مبتنی بر Object، همراه با سیستم ابری بود. امروزه اکثر سرویسها و خدمات شرکتها در حال حرکت به سمت Cloud System است تا از مزایای آن بهرهمند شوند. یکی از این مزایا حذف محدودیت مکانی با اتصال و ارتباط مداوم میان دیتا سنترها در نقاط مختلف جهان است.
تکنولوژی Object storage نیز به دلیل سازگاری با این سیستم میتواند بر مزایای خود بیفزاید. برای مثال اگر سایتی از ایران لود میشود، دادهها از نزدیکترین سرور به ایران سرو خواهند شد که سرعت سایت و ارسال دادهها افزایش خواهد یافت. همچنین امنیت دادهها و اطلاعات بیشازپیش خواهد بود، چون از هر داده پشتیبانی در نقطه دیگر جهان وجود دارد.
تفاوتهای File Storage و Block Storage در مقایسه با Object storage
بر اساس انواع مختلف دادهها و عملکردهای مورد انتظار، از روشهای مختلف ذخیرهسازی استفاده میشود. برای مثال دادههای ساختاریافته و متمرکز در قالب block storage و file storage مدیریت و کنترل میشوند. اما با ظهور اینترنت و بروز تفاوتهای عظیم در روشهای اشتراکگذاری و استفاده از دادهها، نیاز بود تا روش جدید با ویژگیهای سازگارتر با internet و شبکه خلق شود (object storage). در ادامه با بررسی این 2 مؤلفه سنتی در ذخیرهسازی دادهها و اطلاعات، شاید بهتر با تفاوتهای آنها آشنا شوید.
File storage
در این متد، دادهها با متا دیتاهایی مانند زمان ایجاد، آخرین بهروزرسانی، نام فایل و نوع فایل برچسبگذاری میشوند و در پوشههایی مبتنی بر سلسلهمراتب و دایرکتوری خاصی قرار میگیرند. دقیقا مانند ذخیره و نگهداری اسناد در بایگانیهای یک سازمان.
اگر دقت کرده باشید زمانی که مثلا یک کاغذ قرار بود تا در بایگانی سازمانی ذخیره شود، ابتدا قفسه موردنظر سپس کشوی مربوط به موضوع آن پیدا میشد و سپس در آنجا قرار میگرفت. همچنین برای دسترسی به اسناد باید همین مسیر طی میشد. ایرادی که به File storage وارد بود، دستوپاگیر بودن فرایند جستجو در زمان افزایش حجم اطلاعات است.
Block storage
ذخیرهسازی با استفاده از بلوکبندی روش بهتری نسبت به مورد قبلی است. زیرا در block storage با تقسیمبندی یک فایل به بلوکهای هماندازه و ذخیره آنها با آدرسهای جداگانه، عملکرد بهتری ایجاد میشود و همچنین دیگر نیازی به ساخت پوشه و سلسلهمراتب همراه با دایرکتوریها برای دسترسی به دادهها نیست.
برای استفاده از یک فایل، سیستمعامل آدرسهای هر بلوک را فراخوانی میکند و با گرد هم آوردن آنها، سند اصلی را میسازد. این نوع معماری از نگهداری و مدیریت فایلها، سرعت بالا و تاخیر کم باعث میشود تا در برخی برنامههای تجاری، پایگاهدادهها، ماشینهای مجازی و در کل مواردی که نیاز به پردازش سریع است، بسیار کاربردی باشد.

معایب Object Storage چیست؟
اکنون که تا حد خوبی با آبجکت استوریج و کاربردهای آن آشنا شدید، ممکن است با دیدن این تیتر تعجب کنید و بپرسید مگر این روش ذخیرهسازی معایب هم دارد؟ بله. البته که دارد. مثلا اینکه اشیاء ثابت هستند و پس از افزودن آنها به راهحل ذخیرهسازی اشیاء، قابلیت ویرایش ندارند. بهعلاوه نوشتن اشیا در سختافزاهای قدیمی یا سیستمهای ذخیرهسازی قدیمی سرعت زیادی ندارد و کند است. گذشته از اینها، ذخیرهسازی اشیاء با پایگاه دادههای قدیمی سازگار نیست و برای آنها باید به دنبال یک چاره دیگر بود.
سوالات متداول
Object storage سرویس ذخیرهسازی کاملا مقیاسپذیر، قابل برنامهریزی و ماندگار است که دادههای مختلف را در ترکیب با یکدیگر همراه با شناسه سفارشی نگهداری میکن
با استفاده از این خدمات میتوان دادهها را بهگونهای کامل امن و راحت بهطور مستقیم از برنامهها ذخیره و بازیابی کرد، دادههای پشتیبانگیری و بایگانی را خارج از سایت ارسال کرد، دادههای بزرگ را برای دستیابی به بینش بهتر تجزیه و تحلیل کرد و در مقیاس بزرگ برنامههای کاربردی تحت وب ساخت.
از مهمترین مزیتهای ذخیرهسازی آبجکت میتوان به تجزیه و تحلیل بهتر دادههای بزرگ، مقیاسپذیری نامحدود، بازیابی سریعتر دادهها، دسترسیپذیری، کاهش هزینهها و قابلیت مدیریت دادهها اشاره کرد.
از ذخیرهسازی آبجکت میتوان برای حجم انبوهی از دادههای بدون ساختار بیگ دیتا، نرمافزارهای وب و آرشیوهای بکآپ استفاده کرد. ارائهدهندگان سرویسهای ویدئویی و سرگرمی، بایگانی اسناد، خدمات هوش مصنوعی، ذخیرهسازی اطلاعات کاربران، سرویسهای تولید و انتشار محتوا و سرویسهای ابری و ذخیرهسازی میتوانند از آن به بهترین شکل ممکن استفاده کنند.
انواع object storage به سه دسته ذخیرهسازی عمومی (Public)، ذخیرهسازی خصوصی (Private) و ذخیرهسازی ترکیبی (Hybrid) تقسیم میشود.
بسته به نوع خدمات ارائه دهنده، معمولا میتوانید تمام دادهها، به اندازه دلواه و با انواع فرمتها را ذخیره کنید.
بسته به میزان اعتبار سرویس ارائه دهنده و قانونی بودن آن، معمولا این خدمات با هزینه مقرون بهصرفه و قابلیت دسترسی بسیار بالا ارائه میشوند. بسیاری از این سرویسها ۱۰ روز بسته رایگان در اختیار کاربران قرار میدهند تا ویژگیهای محیط و امنیت آن را بررسی کنید.
جمعبندی
با پیشرفت تکنولوژی، انسانها و کاربران نیاز دارند تا سرعت عملیاتهای پردازشی نیز بهبود یابد. یکی از مثالهای بارز آن، افزایش دادهها بدون ساختاربندی (unstructured data) مانند ویدئوها، تصاویر، صفحات وب و موارد مشابه که توسط اینترنت اشیاء تولید میشوند، است. هر فردی دوست دارد تا در زمان وبگردی و یا استفاده از شبکههای اجتماعی مانند اینستاگرام، بهسرعت منابع درخواست شده لود شود. ازاینرو نیاز است تا از روشها و معماریهای نوینی برای مدیریت و کنترل دادهها استفاده شود.
یکی از این معماریهای نوین Object storage است که در آن دادهها توسط مخازنی (Objects) که حاوی متا دیتاهایی (meta data) از قبیل شناسه منحصربهفرد و برخی اطلاعات توصیفی است، نگهداری میشوند. در این مقاله سعی شد تا به بررسی دقیق این روش همراه با مقایسه آن با متدهای سنتی بپردازیم. امید است تا خواند آن برای خوانندگان گرامی مفید باشد.
دیدگاهتان را بنویسید