بر خلاف موج های رسانه ای حوزه تکنولوژی اطلاعات یا همان  IT که هر فناوری تازه به ایران رسیده ای را شناخته شده نشان می دهند ، تجربه عینی در کسب و کارهای این حوزه و تیم های توسعه دهنده فعال در ایران ، از کم اطلاعی درباره چیستی رایانش ابری (Cloud Computing) و کاربردهای آن خبر می دهد.

این که چه زمانی و تحت چه شرایطی یک کسب و کار IT باید به دنبال ابری شدن رفته و چگونگی مهاجرت به این پشته (Stack) فناوری هنوز برای بسیاری از کسب و کارها ناشناخته است لذا در این مطلب سعی می کنم برای بسیاری از پرسش‌ها پاسخی مناسب ارائه بدهم که برای وضوح بیشتر ابتدا پرسش ها را مرور می کنیم:

  1. «رایانش ابری» چیست (همراه با مثال)؟
  2. مزایای رایانش ابری برای توسعه دهندگان، مدیران سیستم و مهندسین DevOps نسبت به روش‌های سنتی چیست؟
  3. چه زمانی باید به دنبال «ابری شدن» رفت؟
  4. فازهای مهاجرت از زیرساخت سنتی به ابری چیست و در هر فاز باید به چه چیزی توجه کرد؟
  5. انتخاب ابر‌خصوصی یا استفاده از ابر عمومی؟

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

رایانش ابری چیست؟

قبل از ارائه تعریفی برای رایانش ابری بهتر است با یک مثال قضیه را شفاف کنیم:

 

منبع آب عظیمی را فرض کنید که هر زمان ، هر مقدار و با هر ظرفی که بخواهید می‌توانید از آن آب بردارید و دقیقا به اندازه آبی که برداشته اید هزینه کنید.

 

اصطلاحی که اغلب برای توصیف از آن استفاده می‌شود «استخری» (Pool) از منابع سخت افزاری است که هر کاربر با توجه به سه اصل میتواند از آن برداشت کند:

  1. به محض تقاضا (on-demand):
    • به این معنا که به محض تقاضای منابع از سرویس دهنده ، منابع به صورت به کاربر تخصیص داده شود.
  2. منعطف بودن (elastic):
    • منابع با توجه به میزان تقاضای کاربر کم یا زیاد شود.
  3. برداشت به انتخاب شخصی (self service):
    • کاربر کنترل تمام عیاری روی میزان منابع، شکل آن و اعمال تغییرات روی آن داشته باشد.

حال باید اشاره ای به لایه های پشته نیز داشته باشیم که گزینه های عمده آن:

  1. زیرساخت (Infrastructure)
  2. سکو (Platform)
  3. نرم افزار (Software)
  4. و تابع (Function)

است.

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

رایانش ابری در مقایسه با هاست اشتراکی و روش‌های On-Prem

on-prem vs IaaS vs PaaS vs SaaS

تصور کنید برنامه ای به زبان PHP و با استفاده از چارچوب (Framework) پرطرفدار آن یعنی Laravel نوشته اید و حال نوبت به استقرار (Deploy) آن روی هاست اشتراکی یا سرور شخصی رسیده است.

با چه چالش هایی روبرو هستید؟

در هاست اشتراکی:

  • استقرار نیاز به تغییر ساختار دایرکتوری های برنامه دارد و امکان خودکار کردن آن با توجه به محدودیت های هاست اشتراکی (مثل عدم امکان برقراری ارتباط SSH) نیست.
  • با توجه به محدودیت بالا سرعت استقرار کند است و در صورت وجود خطا در برنامه نیز نمی‌توان در زمان کوتاهی نسخه قبل را مستقر کرد.
  • برخی بسته‌ها(Packages) در سیستم عامل توسعه دهنده و سرور متفاوت هستند.
  • بسیاری از امکانات چارچوب مثل استفاده از event listener ها و … غیر قابل استفاده اند.
  • همچنین علاوه بر چالش های توسعه ، مشکلاتی هم برای نگهداری(Operation) وجود دارد مثل مقیاس پذیر(Scalable) نبودن برنامه و اجزاء آن ، دشواری نظارت(Monitoring) و تجمیع گزارشات(Log Aggregation) و …
    اگر کسب و کار شما با این مشکلات دست و پنجه نرم کرده احتمالا به فکر استفاده از سرور مجازی یا اختصاصی افتاده اید.
    استفاده از VPS یا DPS ممکن است بخشی از مشکلات مذکور را حل کند اما خالی از مشکل نیست.
    سه اصل رایانش ابری که از آن یاد کردیم در راهکارهای VPS یا DPS به صورت کلی یا جزئی وجود ندارند مثلا:
  • اغلب شرکت های ارائه دهنده خدمات سنتی هنگامی که سرورهای شما تحت فشار هستند و نیاز به منابع بیشتری دارید کند عمل می کنند و باید منابع را از طریق ارسال ticket یا ایمیل درخواست کنید.
  • منابع شما به صورت خودکار مقیاس دهی نمی شوند و باید همواره یک عامل انسانی در میان باشد.
  • نمیتوانید مشخصات سخت افزاری هر سرور را هر زمان که بخواهید تغییر یا تنظیم کنید.
  • فقط روی سرور کنترل دارید و امکان تغییر مابقی اجزا مثل شبکه ، امکانات ذخیره سازی (Storage) و … را ندارید.
  • ابزاری چون API, CLI یا واسطی مبتنی بر وب (Web UI) وجود ندارد که امکان تغییر و تنظیم منابع به شکل self-service را به کاربر بدهد.
  • امکان استفاده از منابع به شکل پرداخت به میزان استفاده وجود ندارد(Pay as you go) بنابراین شما صرفا به میزان حداکثر منابعی که هنگام تهیه سرویس انتخاب کرده اید باید هزینه پرداخت کنید و نه به میزان استفاده حقیقی سرویس شما از منابع.
    حال اگر بخواهیم از امکانات مربوط به هر لایه از رایانش ابری استفاده کنیم میتوانیم در مثال Laravel به شکل زیر عمل کنیم:

زیرساخت به عنوان خدمت (IaaS):

  • راه اندازی برنامه Laravel مد نظر روی چندین سرور ابری(instances) که روی یک شبکه داخلی (private network) هستند و سپس اتصال آن‌ها به سرورهای پایگاه داده(که می توانند جهت امنیت بیشتر روی شبکه های داخلی دیگر باشند).
  • استفاده از LBaaS (یا Load Balancer as a Service) که ترافیک خارجی را بین سرورهای مختلف برنامه از طریق یک آی پی  مجازی(Virtual IP) توزیع می‌کند.
  • استفاده از دیواره آتش داخلی که سیاست های مختلفی را برای کنترل ترافیک بین ماشین های درون یک شبکه یا ترافیک خارجی اعمال می‌کند.
  • تخصیص چند دیسک جانبی به سرورهای دیتابیس در قالب Block Storage که کار را به نسبت VPS یا DPS راحت تر می کنند.
  • استفاده از امکاناتی مثل مقیاس دهنده خودکار(Auto Scaler) که با توجه به فراخوانی (Trigger)‌های سیستم مانیتورینگ تعداد سرورها، دیسک ها و هر منبع دیگری را کاهش یا افزایش می‌دهد.
  • سرویس هایی مثل Amazon VPC، GCP و‌… امکانات یک دیتاسنتر فیزیکی را به شکل مجازی عرضه می‌کنند و در ایران نیز سرویس دهنده هایی که از OpenStack برای ارائه زیرساخت استفاده می‌کنند چنین امکانی را ارائه می‌دهند.

Infrastructure as a service example

سکو به عنوان خدمت(PaaS):

برای سرعت و راحتی بیشتر در توسعه و استقرار در لایه بعدی «سکو‌»، که وقتی توسط یک ارائه دهنده (Provider) عرضه می‌شوند به آن PaaS می‌گویند‌، اغلب از طریق راهکارهای مبتنی بر دربرگیرنده‌ها (Container-Based Solutions) استفاده می‌شود به خصوص اگر بخواهیم از معماری میکروسرویس (Microservice architecture) استفاده کنیم.

در این صورت میتوانیم با containerized کردن برنامه و استقرار آن روی ابزار Orchestration مانند Kubernetes به هدف خود برسیم.

تقریبا همه ارائه دهنده‌های خارجی یعنی Amazon, Google, Microsoft و اخیرا RedHat با محصول جالبش یعنی OpenShift راهکارهایی مبتنی بر Kubernetes ارائه می‌دهند اگرچه قبل از این روش ابزار دیگری مثل Beanstalk,AppEngine و Heroku وجود داشتند که راهکاری متفاوت را ارائه می‌کردند(بعضی به ابزار گروه اول CaaS یا Container as a Service نیز می‌گویند).

نرم افزار به عنوان خدمت(SaaS):

اگر خدمات ابری صرفا به لایه نرم افزار خلاصه شود و مشتری دغدغه دیگری جز استفاده از نرم افزار نداشته باشد به لایه SaaS رسیده ایم.

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

برای مثال سرویس های شرکت Atlassian مثل Jira, Confluence, Trello یا سرویسی مثل Postgres شرکت Heroku

 

تابع به عنوان خدمت‌(FaaS):

FaaS vs Traditional

تا به حال به این فکر کرده اید که برای کاربردهایی همچون پردازش تصویر، پردازش صوت و … بتوانید صرفا برای مدت کوتاهی از یک تابع استفاده کنید و این تابع به صورت خودکار تمامی منابع مورد نیاز برای این پردازش را داشته باشد؟

خدماتی مثل AWS Lambda چنین امکانی را فراهم می‌کنند که تحت عنوانی کلی تر یعنی Serverless نیز ذکر می‌شوند(در مطالب بعد به آن خواهیم پرداخت).

 واژه نامه:

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

 

معنی XaaS:

            که مخفف anything as a service است و به تحویل هر محصول (هر چیز) به عنوان خدمات به مشتری اشاره دارد.

            مثلا:

  • Storage as a Service
  • Network as a Service
  • Firewall as a Service

معنی Stack:

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

عبارت On-Prem:

به معنی نصب نرم افزار یا ارائه خدمات با توجه به شرایط مد نظر مشتری است که بیشتر در روش های سنتی مثل Virtualization استفاده می‌شد.

معنی Deploy:

به راه اندازی نرم افزار روی یکی از لایه های مذکور استقرار گفته می‌شود.

معنی Scale:

به میزان منابع تخصیص داده شده به هر کدام از لایه ها مقیاس یا Scale می‌گویند.

عبارت Virtual IP:

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

معنی Instance:

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

 

اصطلاح Orchestration:

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

دسته بندی شده در: