تحول NETFLIX با DevOps
تحول NETFLIX با DevOps
Netflix به عنوان متخصص DevOps بسیار مورد توجه است. اما تعمدا به DevOps فکر نمی کند! این مطالعه موردی، به بررسی نحوه اجرای دواپس توسط Netflix با الهام گرفتن از اصول آن و تمرکز بر فرهنگ مشارکتی که برای نوآوری ارزش قائل است، میپردازد.
اگرچه Netflix، یک شرکت سرگرمی است، اما بسیاری از شرکت های برتر فناوری را، از نظر نوآوری پشت سر گذاشته است. Netflix با برنامه تک پخشی استریم ویدیویی خود، طی سالها با تلاشهای مهندسی، فرهنگی و توسعه محصول در سطح جهانی، بر دنیای فناوری تأثیر قابل توجهی گذاشته است.
DevOps، یکی از این روشهایی ست که Netflix نمونهای عالی از آن می باشد. فرهنگ DevOps، برای این شرکت مزایای زیادی از جمله موارد زیر داشت:
• این شرکت را قادر به نوآوری سریعتر کرده است که منجر به مزایای بسیاری در کسب و کار می شود.
• دستیابی به اهداف تعیین شده در زمان عالی.
• ویژگیهای جدید را سریعتر به کاربران ارائه دهند،
• تعداد مشترکان و ساعات پخش خود را افزایش دهند.
امروزه، Netflix با نزدیک به 214 میلیون مشترک در سراسر جهان و پخش استریم در بیش از 190 کشور، پرمصرف ترین سرویس استریم در سطح جهان است و بسیاری از این موفقیت ها را، مدیون توانایی آن در پذیرش فناوریهای جدیدتر و فرهنگ DevOps است که به آنها اجازه میدهد تا به سرعت خواستههای مصرفکننده را، خلاقانه برآورده کنند و تجربیات کاربر را افزایش دهند. اما Netflix به DevOps فکر نمی کند!
پس چگونه آنها تبدیل به نمونه کامل DevOps شدند؟ در این مطالعه موردی، در مورد اینکه چگونه Netflix به طور طبیعی فرهنگ DevOps را با ایدههای غیر چارچوبی توسعه داده و چگونه برای آنها سودمند است، آشنا خواهید شد.
آکادمی احمدزاده، یک شرکت مشاوره و پیادهسازی پیشرو مدیریت چابک است که به کسبوکارها کمک میکند تا محصولات نوآورانهای بسازند و خواستههای کاربران پویا را به طور موثر برآورده کنند. برای رشد کسب و کار خود با DevOps، همین امروز با ما تماس بگیرید!
حرکت Netflix به سمت فضای ابری
همه چیز با بدترین قطعی برق در تاریخ Netflix شروع شد، زمانی که آنها در سال 2008 با یک خرابی بزرگ پایگاه داده مواجه شدند و نتوانستند دی وی دی را برای سه روز برای اعضای خود ارسال کنند. در آن زمان، Netflix تقریباً 8.4 میلیون مشتری داشت و یک سوم آنها تحت تأثیر این قطعی قرار گرفتند. این امر باعث شد Netflix، به سمت فضای ابری حرکت کند و زیرساخت های خود را به طور کامل تغییر دهد. Netflix، شرکت AWS را به عنوان شریک ابری خود انتخاب کرد و نزدیک به هفت سال طول کشید تا انتقال ابر خود را تکمیل کند.
Netflix فقط سیستم ها را منتقل نکرده و آنها را در AWS رها نکرده است. در عوض، تصمیم گرفت که کل برنامه را در فضای ابری بازنویسی کند تا واقعاً همه چیز از پایه ابری شود، که در نهایت نحوه عملکرد شرکت را تغییر داد. به گفته یوری ایزرایلوسکی، معاون مهندسی ابر و پلتفرم در Netflix :
“ما متوجه شدیم که باید از نقاط شکست با مقیاس عمودی، مانند پایگاه دادههای رابطهای در مرکز دادهمان، به سمت سیستمهای توزیعشده بسیار قابل اعتماد، افقی مقیاسپذیر و توزیعشده در ابر حرکت کنیم.”
به عنوان بخش مهمی از تحول، Netflix یک برنامه جاوا مبتنی بر مرکز داده یکپارچه خود را، به معماری میکروسرویس جاوا مبتنی بر ابر تبدیل کرد که نتیجه، تغییرات زیر را به همراه داشت:
• مدل داده غیرمعمول با استفاده از پایگاه داده NoSQL
• تیمها را در Netflix فعال کرد تا بهطور آزادانه هم تیمی شوند.
• به تیم ها اجازه داد تا تغییرات را با سرعتی که برایشان راحت بود ایجاد کنند.
• هماهنگی ریلیز متمرکز.
• چرخه های تهیه سخت افزار چند هفته ای منجر به تحویل مداوم شد.
• تیم های مهندسی، تصمیمات مستقل را با استفاده از ابزار سلف سرویس گرفتند.
در نتیجه، این برنامه به Netflix کمک کرد تا نوآوری را سرعت بخشد و با فرهنگ DevOps آشنا شود. Netflix همچنین هشت برابر بیشتر از سال 2008 میلادی مشترک یافت. همچنین ساعات پخش ماهانه Netflix از دسامبر 2007 میلادی تا دسامبر 2015 میلادی هزار برابر افزایش یافت.
پیشنهاد میشود مقاله DevOps و نقش آن در موفقیت 10 شرکت برتر دنیا را نیز بخوانید.
شکل 1: نمایش گرافیکی رشد Netflix
Netflix، پس از تکمیل مهاجرت ابری خود به AWS تا سال 2016:
شکل 2: Netflix، پس از انتقال ابری خود به AWS
و تمام موارد فوق را بدون هیچ مرکز عملیات شبکه و حدود 70 مهندس عملیات انجام داد، که همگی مهندسان نرم افزار بودند و بر روی ابزارهای نوشتن تمرکز داشتند و به تیم توسعه نرم افزار دیگر امکان می داد روی مواردی که در آنها مهارت دارند، تمرکز کنند.
میمون آشوب Netflix و ارتش بوزینه
انتقال به فضای ابری، Netflix را، در برابر انواع قطعی هایی که در سال 2008 میلادی با آن مواجه شد، مقاوم کرد. اما آنها می خواستند برای هر گونه خطای غیرقابل مشاهدهای که باعث آسیب مشابه یا بدتر، در آینده می شود، آماده باشند.
مهندسان Netflix، دریافتند که بهترین راه برای جلوگیری از شکست، شکست مداوم است. بنابراین تصمیم گرفتند، زیرساخت ابری خود را ایمنتر، امنتر و به روش DevOps (با خودکار کردن خرابی و تست مداوم) در دسترس قرار دهند.
میمون آشوب
Netflix، ابزاری برای تست مداوم توانایی پلت فرم برای دوام در قطعیهای غیرمنتظره بدون تأثیر بر مصرفکنندگان بنام میمون آشوب را ایجاد کرد. میمون آشوب، پردازنده ای است که به طور مداوم در تمام محیطهای Netflix اجرا میشود و بهطور تصادفی نمونههای تولید و خدمات در معماری را از بین میبرد تا در موارد زیر به تیم توسعه کمک کند:
• نقاط ضعف سیستم را شناسایی کنند؛
• مکانیزم های بازیابی خودکار را برای مقابله با نقاط ضعف ایجاد کنند؛
• کد آنها را در شرایط شکست غیرمنتظره تست کنند؛
• سیستم های مقاوم در برابر خطا را به صورت روزانه بسازند.
ارتش بوزینه
مهندسان Netflix پس از موفقیت با میمون آشوب می خواستند انعطاف پذیری خود را در برابر انواع شکست های اجتناب ناپذیر تست کنند و شرایط غیرعادی را تشخیص دهند. بنابراین، آنها ارتش بوزینه را ساختند، ارتش مجازی از ابزارهایی که در زیر مورد بحث قرار گرفته است.
شکل 3: ارتش بوزینه Netflix
میمون تاخیر
این ابزار تأخیرهای کاذب در لایه های ارتباطی سرویس گیرنده RESTful ایجاد می کند، کاهش خدمات را شبیه سازی می کند و بررسی می کند که آیا سرویس های بالادستی به درستی پاسخ می دهند یا خیر. علاوه بر این، ایجاد تأخیرهای بسیار زیاد میتواند کل زمان از کارافتادگی سرویس را بدون از بین بردن بخش فیزیکی آن و تست ظرفیت تحمل شبیهسازی کند. این ابزار به ویژه برای تست سرویس های جدید با شبیه سازی قطع وابستگی ها بدون تأثیر بر بقیه سیستم مفید بود.
میمون انطباق
این ابزار مواردی را که به بهترین شیوه ها اجرا نشده است را غیر فعال می کند تا صاحب سرویس فرصتی برای راه اندازی مجدد آنها بیابد.
میمون دکتر
این ابزار موارد ناسالم را با به چالش کشیدن تست های سلامت که روی هر نمونه اجرا میشود، شناسایی میکند و همچنین سایر علائم سلامت خارجی (مانند بار CPU) را نظارت میکند. موارد ناسالم پس از شناسایی علت اصلی مشکل، توسط صاحبان سرویس از سرویس حذف و خاتمه مییابند.
میمون سرایدار
میمون سرایدر تضمین می کند که محیط ابری بدون درهم ریختگی و ضایعات اجرا شود. همچنین منابع استفاده نشده را، جستجو کرده و آنها را دور می اندازد.
میمون امنیتی
بسط و گسترش میمون انطباق که نقض یا آسیب پذیری های امنیتی را شناسایی می کند (به عنوان مثال، پیکربندی نادرست گروه های امنیتی AWS) و موارد متخلف را حذف می کند. همچنین تضمین میکند که گواهیهای SSL (لایه سوکتهای امن) و DRM (مدیریت حقوق دیجیتال) معتبر بوده و تمدید نمیشوند.
10-18 میمون
مخفف بومی سازی-بین اللملی سازی (Localization-Internationalization) است که مشکلات پیکربندی و زمان اجرا را، در مواردی که به کاربران در چندین مکان جغرافیایی با زبانها و مجموعه کاراکترهای مختلف سرویس میدهند، شناسایی میکند.
گوریل آشوب
مانند میمون آشوب، گوریل خاموشی کل منطقه قابل دسترس آمازون را شبیهسازی میکند تا بررسی کند که آیا سرویسها بهطور خودکار به مناطق قابل دسترس عملکردی بدون دخالت دستی یا تأثیر مشهود بر روی کاربران، تعادل مییابند یا خیر.
امروزه، Netflix هنوز از مهندسی آشوب استفاده میکند و یک تیم اختصاصی برای تست های آشوب به نام تیم مهندسی انعطافپذیر (که قبلاً تیم آشوب نامیده میشد) دارد.
به نوعی، ارتش بوزینه اصول اتوماسیون DevOps، تضمین کیفیت و اولویت بندی نیازهای کسب و کار را در خود گنجانده است. در نتیجه، به Netflix کمک کرد تا توانایی مقابله با شکستهای غیرمنتظره را توسعه دهد و تأثیر آنها را بر کاربران به حداقل برساند.
در 21 آوریل 2011 میلادی، AWS یک قطعی بزرگ را در منطقه شرق ایالات متحده تجربه کرد، اما پخش جریانی Netflix بدون هیچ وقفه ای اجرا شد. و در 24 دسامبر 2012 میلادی، AWS در خدمات “متعادل کننده بار الاستیک” (ELB) با مشکلاتی مواجه شد، اما Netflix خاموشی فوری را تجربه نکرد. وبسایت Netflix، در تمام مدت قطعی فعال بود و از اکثر سرویسها و پخش استریم آنها-در برخی دستگاهها با تأخیر بیشتر- پشتیبانی میکرد.
سفر کانتینری Netflix
Netflix دارای ابر بومی، معماری VM انعطاف پذیر مبتنی بر میکروسرویس، CI/CD فعال، و انعطافی مقیاسپذیر می باشد که بدون SPoF (نقطههای شکست واحد) و اجزای نرمافزاری کوچک قابل مدیریت، مطمئنتر بود. پس چرا آنها از فناوری کانتینر استفاده کردند؟ عوامل اصلی سرمایه گذاری Netflix در کانتینرها عبارتند از:
• تصاویر کانتینر مورد استفاده در توسعه محلی بسیار شبیه به تصاویر مورد استفاده در تولید است. این بسته بندی انتها به انتها به تیم توسعه این امکان را می دهد تا برنامه های کاربردی را، به راحتی در محیط های شبیه تولیدی بسازند و تست کنند و هزینه های سربار توسعه را کاهش دهند.
• تصاویر کانتینر به ساخت تصاویر خاص برنامه کمک می کند.
• کانتینرها سبک وزن هستند و امکان ساخت و استقرار آنها سریعتر از زیرساخت VM است.
• کانتینرها فقط الزامات یک برنامه کوچکتر و متراکم تر را دارند، که هزینه کلی زیرساخت و تاثیر آن را کاهش می دهد.
• کانتینرها بهره وری تیم توسعه را، بهبود می بخشند و به آنها امکان سریعتر توسعه، استقرار و نوآوری را می دهند.
علاوه بر این، تیمهای Netflix، از قبل استفاده از کانتینرها را آغاز کرده بودند و مزایای ملموسی را مشاهده کرده بودند. اما آنها با چالشهایی مانند انتقال به کانتینرها بدون بازسازی، اطمینان از اتصال یکپارچه بین ماشینهای مجازی و کانتینرها مواجه شدند. در نتیجه، Netflix یک پلتفرم مدیریت کانتینر به نام Titus طراحی کرد تا نیازهای منحصر به فرد خود را برآورده کند.
Titus یک راه حل اجرای کانتینر مقیاس پذیر و قابل اعتماد برای Netflix ارائه کرد و به طور یکپارچه با AWS ادغام شد. علاوه بر این، استقرار آسان گروه های کانتینری و برنامههای خدماتی را فعال کرد.
شکل 4: Netflix and Titus
Titus، بعنوان یک واحد استقرار استاندارد و یک سیستم زمانبندی کارهای گروهی عمومی، خدمت میکرد که Netflix توانست، پشتیبانی خود را از موارد استفاده گروهی رو به رشد گسترش دهد.
• کاربران گروهی همچنین می توانند زیرساخت های پیچیده را بسرعت جمع آوری کنند و نمونه های بزرگتر را در بسیاری از بسته های کاری به طور موثر دسته بندی کنند. کاربران گروهی می توانند بلافاصله کدهای توسعه یافته محلی را، برای اجرای مقیاس شده در Titus برنامه ریزی کنند.
• فراتر از گروه، کاربران خدمات Titus با مدیریت منابع سادهتر و محیطهای آزمایش محلی مطابق با استقرار تولید بهره بردند.
• تیم توسعه همچنین می توانند نسخه های جدید برنامه ها را سریعتر از قبل اجرا کنند.
به طور کلی، استقرار Titus در یک یا دو دقیقه انجام شد که دهها دقیقه زودتر طول کشید. در نتیجه، کاربران گروهی و خدماتی می توانند به صورت بومی و بسرعت تست کنند و با اطمینان بیشتری نسبت به قبل اجرا شوند.
وبلاگ فناوری Netflix معتقد است که ” موضوعی که زیربنای همه این پیشرفتها است، سرعت نوآوری توسعهدهندگان است.”
سرعت نوآوری، Netflix را قادر می سازد تا ویژگی های سریعی را به مشتریان ارائه دهد و همچنین کانتینرها را برای کسب و کارشان بسیار مهم می کند.
فرهنگ Netflix :”آنچه را که می سازید را اجرا کنید “
Netflix، به طور قابل توجهی، در بهبود توسعه و عملیات برای تیم های مهندسی سرمایه گذاری و آزمایش می کند. اما قبل از اینکه Netflix مدل «آنچه را که میسازید را اجرا کنید» را بپذیرد، تیمهایی را حذف کرده بود. تیم های عملیات بر روی استقرار، بهره برداری و پشتیبانی از بخش هایی از چرخه عمر نرم افزار متمرکز شدند. و تیم توسعه کد را، برای استقرار و عملیات به تیم عملیات تحویل دادند. بنابراین هر مرحله در (Software Development Life Cycle)SDLC متعلق به شخص دیگری به این صورت بود:
شکل 5: نقش های تخصصی در Netflix
نقش های تخصصی کارایی را، در هر بخش ایجاد کردند اما ناکارآمدی هایی در کل SDLC ایجاد شد. مسائلی که با آن مواجه شدند، عبارت بود از:
- بخش های انفرادی که پیشرفت سرتاسری را کند می کردند؛
- اضافه شدن ارتباطات اضافی، گلوگاه ها و عدم اثربخشی حلقههای بازخورد؛
- انتقال دانش بین تیم توسعه و تیم عملیات و مهندسی اعتبار سایت از بین رفت؛
- زمان بیشتر برای شناسایی و حل مشکلات استقرار؛
- شکاف های طولانی تر بین تکمیل کد و استقرار(انتشار هفته ها طول می کشد).
آنچه را که می سازید اجرا کنید
برای مقابله با چالشهای فوق و الهام گرفتن از اصول DevOps، Netflix مالکیت مشترک SDLC را ترغیب و بخش های انفرادی را خراب کرد. تیم هایی که سیستم را توسعه می دهند، مسئول عملیات و پشتیبانی آن بودند. هر تیم مسائل مربوط به استقرار، اشکالات عملکرد، شکاف های هشدار، برنامه ریزی ظرفیت، پشتیبانی شرکا و غیره را داشت.
شکل 6: تیم های عملیاتی در Netflix
علاوه بر این، آنها ابزار متمرکزی را برای سادهسازی و خودکار کردن برخورد با مشکلات رایج توسعه تیمها معرفی کردند. هنگامی که نیازهای “ابزار اضافی” ایجاد می شود؛ تیم مرکزی می سنجد که، آیا نیازها در تیم های توسعه چندگانه و ابزارهای ساخته شده، مشترک هستند یا خیر. در صورت بروز مشکلات بسیار خاص تیم، تیم توسعه تصمیم می گیرد که آیا نیاز به اندازه کافی مهم است که به تنهایی حل شود یا خیر.
شکل 7: ابزار متمرکز در Netflix
تیم توسعه چرخه کامل
با ترکیب ایدههای بالا، Netflix مدلی ساخت که در آن، تیمهای توسعهدهنده به ابزارهای بهرهوری مجهز هستند و مسئولیت کل SDLC را بر عهده دارند، همانطور که در زیر نشان داده شده است.
شکل 8: چرخه کامل توسعه در Netflix
Netflix، برای کمک به توسعهدهندگان جدید در ایجاد این مهارتها، آموزشها و پشتیبانی مداوم را به اشکال مختلف (مانند اردوهای راهاندازی توسعهدهندگان) ارائه کرد. ابزارهای با کاربرد آسان نیز، برای خطوط استقرار به تیم توسعه کمک کردند، بعنوان مثال، Spinnaker که یک پلت فرم تحویل مداوم برای انتشار تغییرات نرم افزاری با سرعت و اطمینان بالا است.
با این حال، چنین مدل هایی نیاز به تغییر قابل توجهی در ذهنیت تیم ها و توسعه دهندگان دارند. برای اجرای این مدل در خارج از Netflix، می توانید با ارزیابی آنچه نیاز دارید شروع کنید، هزینه ها را محاسبه کنید و کمترین پیچیدگی را در کار قرار دهید و سپس تغییر ذهنیت داشته باشید.
درس هایی که می توانیم از استراتژی دواپس Netflix بیاموزیم.
روش های Netflix، منحصر به محیط کار و نیازهای خودش است و برای همه سازمان ها مناسب نمی باشد. اما در اینجا چند درس، برای یادگیری از استراتژی DevOps این شرکت وجود دارد که می توانید آنها را بکار گیرید:
• سیستم هایی نسازید که به تیم توسعه شما نه می گویند.
Netflix، هیچ برنامه زمانبندی فشاری، پنجره های فشاری یا بوته ای ندارد که تیم توسعه باید از آنها عبور کنند تا کد خود را به مرحله تولید برسانند. در عوض، هر مهندس در Netflix به محیط تولید دسترسی کامل دارد و نه سیاست های سختگیرانه و نه رویه ای وجود دارد که مانع از دسترسی آنها به محیط تولید شود.
• تمرکز بر روی آزادی و مسولیت مهندسان
Netflix، افراد باهوش را استخدام کرده و به آنها آزادی عمل می دهد تا مشکلات را به روشی که خود میدانند، حل کنند. بنابراین نیازی به ایجاد محدودیتها و حفاظهای مصنوعی برای پیشبینی آنچه تیم توسعه باید انجام دهند، نیست. اما باید، افرادی را استخدام کنید که بتوانند تعادل آزادی و مسئولیت را ایجاد کنند.
• به هر قیمتی به زمان بیکاری فکر نکنید
Netflix، میلیونها کاربر خود را با زمان انتظار تقریباً بینظیری به سرور میرساند. اما زمانی که آنها شروع به تست محیط خود برای مقابله با شکست غیرمنتظره کردند، به این موضوغ فکر نکردند.
• جایزه سرعت نوآوری
Netflix، از مهندسانش میخواهد کارهای سرگرمکننده، هیجانانگیز و ویژگیهای جدیدی را ایجاد و توسعه دهند تا مشتریانش را با کاهش زمان ورود به بازار خوشحال کنند.
• بسیاری از فرآیندها و رویه ها را حذف کنید
بسیاری از فرآیندها، حرکت سریع سازمان را محدود می کنند. بنابراین، Netflix بر استخدام افرادی متمرکز است که می توانند به آنها اعتماد کنند و توانایی تصمیم گیری مستقل داشته باشند.
• زمینه تمرین بیش از کنترل
Netflix کنترل و ضمانت بیش از حد نمی کند. آنها روی زمینه تمرکز می کنند. مدیران Netflix اطمینان میدهند که تیمهایشان به جای کنترل کردن، جریانی باکیفیت و ثابت از زمینه کسبوکار دارند.
• بسیاری از استانداردهای مورد نیاز را انجام ندهید، اما روی فعال سازی تمرکز کنید
تیمهای Netflix، با انتخاب زبانهای برنامهنویسی، کتابخانهها، چارچوبها یا IDEها به بهترین نحو کار می کنند. علاوه بر این، آنها برای بازنویسی بخشی از سیستم، نیازی به انجام هیچ گونه فرآیند تحقیق یا تأیید ندارند.
• بخش های انفرادی ایجاد نکنید(دیوارها و نرده ها را از میان بردارید)
تیمهای Netflix میدانند که در کجای اکوسیستم، کارشان با سایر تیمها، وابسته می شود بنابراین، هیچ حصار عملیاتی وجود ندارد که تیم توسعه بتوانند کد را برای تولید ارسال کنند.
• فرهنگ “شما می سازید، شما آن را اداره می کنید” را بپذیرید
Netflix بر سهولت مالکیت تمرکز دارد. بنابراین فرهنگ “آنچه را که می سازید عمل کنید” را دارد اما با ایده توانمندسازی که قبلاً در مورد آن یاد گرفتیم.
• روی داده ها تمرکز کنید
Netflix یک شرکت داده محور و تصمیم محور است. حدس نمی زند و یا قربانی غرایز درونی و تفکر سنتی نمی شود. روی الگوریتمها و سیستمهایی سرمایهگذاری میکند که حجم عظیمی از دادهها را به سرعت جمعآوری میکنند و در صورت بروز مشکل اطلاع میدهند.
• همیشه رضایت مشتری را در اولویت قرار دهید
هدف نهایی DevOps، مشتری محوری و تمرکز بر بهبود تجربه کاربر می باشد.
• DevOps را انجام ندهید، اما روی فرهنگ تمرکز کنید
در Netflix ، DevOps به عنوان نتیجه شگفت انگیز فرهنگ، تفکر و عملکرد سالم ظاهر شد.
جمع بندی
Netflix، برای سالها یک استاندارد طلایی در دنیای DevOps بوده است، اما کپی پیست کردن فرهنگ آنها برای هر سازمانی کارساز نیست. DevOps، ذهنیتی است که نیازمند قالبگیری فرآیندها و ساختار سازمانی شما برای بهبود مستمر کیفیت و افزایش ارزش کسبوکار شما است. DevOps را، میتوان از طریق روشهای زیادی مانند اتوماسیون، یکپارچهسازی مداوم، تحویل، استقرار، تست مداوم، نظارت و موارد دیگر اجرا کرد.
در آکادمی احمدزاده، ما با تجربیات خود به شما کمک میکنیم تا خطوط تحویل و استقرار را با زنجیره ابزار DevOps و مهارتهای مناسب سادهسازی کنید. تیم ما با خدمات مدیریت شده DevOps در سازمان شما، به تسریع چرخه عمر محصول، نوآوری سریعتر، دستیابی به حداکثر کارایی تجاری و کاهش زمان عرضه به بازار کمک میکند.
جهت درخواست مشاوره کلیک کنید.
حتما نظر خودتون رو برامون بنویسید
دیدگاهتان را بنویسید