دیتابیس به عنوان یک خدمت : PaaS یا SaaS؟

با گسترش بیش از پیش رایانش ابری، هرچیزی بعنوان یک خدمت ارائه شد. اوایلی که رایانش ابری مفهومش عرضه شد صرفا مفاهیم PaaS و SaaS و IaaS خیلی مطرح بودند. اما امروزه حتی شاهد اینیم که یک نرم‌افزار یا مفهوم خاص هم ممکنه بعنوان یک خدمت ارائه بشه. سوال اینه، چرا نشه؟ چرا وقتی میشه عمده نرم‌افزارها و خدمات رو به دنیای آنلاین برد و بار پردازشی کامپیوتر و سرور خودمون رو در قبال هزینه اندک کاهش داد، هنوز بچسبیم به شکل قدیمی دانلود باینری و نصاب و ...؟ خلاصه این سوالات بارها پاسخ داده شدند. چیزی که قراره امروز در موردش بحث کنم مفهوم نسبتا جدیدیه به اسم Database as a service یا «دیتابیس بعنوان یک خدمت» و این که در چه دامنه‌ای از رایانش ابری قرار می‌گیره. تعریف SaaS و PaaS بهتره قبل از این که بررسی کنیم DBaaS ها کجا قرار می‌گیرند، تعریف این دو مفهوم رو یک بار دیگر با هم بررسی کنیم. چرا که لازمه در این بررسی از مفاهیم و تعاریف آگاه باشیم. تعریف SaaS (نرم‌افزار بعنوان یک خدمت): نرم‌افزار بعنوان یک خدمت، یعنی شما حالت «کاربر نهایی» یک نرم‌افزار رو در شبکه ابری دریافت کنی. مثالش هم Google Drive, Google Doc, Office 365, Evernote و امثال اینان. به این شکل که شما نرم‌افزار رو در مرورگر (یا نمونه کوچک‌شده‌ای از مرورگر در قالب نرم‌افزار رومیزی) مشاهده می‌کنید و باهاش کار می‌کنید. تعریف PaaS (سکو بعنوان یک خدمت): سکو بعنوان یک خدمت، یعنی بستری برای شما فراهم بشه که بتونید نرم‌افزارهای خودتون رو میزبانی کنید. به چه شکل؟ به این شکل که من به شما میگم روی سرورهای سرویسم، روبی و پایتون و Go نصب کردم. شما میتونید نرم‌افزاری که با این زبان‌ها نوشتید رو اینجا میزبانی کنید. بهتون خدمات دیتابیس هم جدا میدم. به هر اپ هم انقدر CPU و انقدر RAM میدم و الی آخر. گرچه این تعاریف کامل نیستن و خیلی راحت بخوام بگم هرکدومشون میتونن یه کتاب باشن، اما خب حقیقت اینه که همین دید کلی می‌تونه به شما کمک کنه که ادامه بحث رو بهتر متوجه بشید. پس خیلی وقت تلف نمی‌کنم و می‌رم سر اصل مطلب. دیتابیس ابری، دیتابیس بعنوان یک خدمتدر دنیای فعلی، هر روز «یه چیزی از عه سرویس» بازارش داغه. و خب دیتابیس هم از این قاعده مستنثناء نبوده و نیست. در سال‌های اخیر در ایران هم تلاش‌هایی براش شده. حالا کاری به این که کدوم بیزنس چنین سرویسی ارائه میده نداریم. شاید یک روزی اونها رو هم بررسی کردیم. حالا بیاید ببینیم که DBaaS به طور خلاصه چیه؟ فارسیش میشه این که شما به جای این که یک سرور دیتابیس راه‌اندازی کنید، از یک شرکتی خدمات دیتابیستون رو دریافت کنید. اون شرکت چی‌کار می‌کنه؟ براتون روی شبکه ابریش یک دیتابیس (معمولا درون یک کانتینر) میسازه و بهتون اطلاعات دسترسیش رو میده. این شکل از خدمات گرفتن، مزایا و معایب زیادی داره، اما کفه مزایاش سنگین‌تره و خب شاید براتون جالب باشه بدونید که شرکت‌های بزرگ دنیا هم دنبال این روش هستن و اکثرا هم مشتری آمازون و مایکروسافتن. البته Reliability هم اینجا فاکتور مهمیه و شخصا این مورد رو در سرویس‌دهندگان ایرانی ندیدم (صادق باشیم با هم و اشتباهات رو گوشزد کنیم بهتره، نه؟) و خب فعلا برای بیزنس‌های ایرانی بهتره که همون روش سنتی برن جلو. خلاصه، ایده پشت DBaaS اینه : مدیر دیتابیس در یک سازمان، نباید دغدغه‌ای جز مدیریت کردن دیتابیس و دیتای سازمان داشته باشه. لازم نیست بار اضافی نصب و راه‌اندازی و به کارگیری دیتابیس هم رو دوشش باشه. حالا سوال پیش میاد : این DBaaS قصه ما، SaaS حساب میشه یا PaaS ؟ در ادامه این مورد رو بررسی می‌کنیم. دیدگاه SaaS در این دیدگاه، ما سیستم مدیریت دیتابیس - هرچی که هست - رو به شکل یک نرم‌افزار نگاه می‌کنیم. این نرم‌افزار، آخر آخرش میرسه دست کاربر و اینجا کاربر ما جای یک شخص، یک سازمانه. آیا این دیدگاه دیدگاه درستیه؟ نظر من اینه که هم بله و هم خیر. بله، چون بالاخره MySQL آب‌نبات چوبی که نیست، نرم‌افزاره. و این نرم‌افزار در قالب یک سرویس داره ارائه میشه. اما چرا خیر؟ چون DBMS ها حالت End User ندارند. حقیقت اینه که الان پیش خودتون می‌گید «پس توسعه‌دهنده و مدیر دیتابیس چی؟» و خب حق دارید. اما دقت کنید که DBMS صرفا یک ابزاره که یک مجموعه دیتا رو در یک فرمت خاص، ذخیره و بازیابی کنه. اما از دید کسی که سرویس DBaaS رو توسعه میده (یکیش خود من، که مدتها داشتم روش کار می‌کردم و حتی ممکنه دوباره هم به اون دنیای زیرساخت برگردم)، این مفهوم به SaaS نزدیکه. اما باید دید دیگر و دید کاربر و مشتری رو هم اینجا بررسی کرد. دیدگاه PaaSیک اپلیکشن جنگو، ریلز یا لاراول رو فرض کنید. این اپلیکیشن‌ها چه چیزایی دارن که باهاشون در ارتباطه؟ یک لیست ببینیم : کد اصلی که شامل همون کدهای پایتون و روبی و ... میشه. کد فرانت‌اند دیتابیس این سه مورد کجا قرار می‌گیرن؟ خب وقتی که میخواید اپ رو روی یک PaaS قرار بدید، معمولا یه سری فایل باید بنویسید به اسم مانیفست که این فایل‌ها معمولا در فرمت YAML نوشته میشن. در این فایل، باید بگید که مثلا ایمیج front-end-1 برای اپ do-not-trust-laravel استفاده میشه و db-1 هم دیتابیسشه. ضمن این که پورت‌ها و متغیرهای محیطی و ... رو هم باید در همین فایلها ارائه کنید. در بعضی از PaaS ها ممکنه صرف یک docker compose کافی باشه، در بعضی هم نه. این فایل مانیفست اینطوریه که «احتمالا» اون پشت یک شبکه یا محیط ایزوله‌ای میسازه، اپها رو ران می‌کنه و به هم متصل می‌کنه و بعد آماده استفاده میشه. خب اگر از این دید نگاه کنیم، در یک معماری سیستم هرچند ساده هم «دیتابیس» جزئی از پلتفرم محسوب میشه و نرم‌افزار صرف نیست. چرا؟ چون تقریبا اپی در دنیا وجود نداره که به شکلی یک دیتابیسی نداشته باشه. معمولا هم وقتی قراره اپی به شکل سنتی دپلوی بشه، اولین کار بعد تهیه سرور و سخت‌افزار مناسب، نصب و راه‌اندازی دیتابیسه. پس بیایم از دید مشتری نگاه کنیم. از دید مشتری - چه سازمان و چه شخص - دیتابیس بخشی از پلتفرم دیده میشه. پس میشه گفت که مشتری اون رو PaaS می‌بینه، هر قدر هم دیزاین سیستم هلو و راحت و SaaS گونه بوده باشه. بالاخره چی شد؟حقیقتا دلیلی که به DBaaS ها میگن DBaaS فکر کنم برای شما مشخص شده باشه. مطمئنا در شرکت‌هایی مثل آمازون هم این بحث‌ها در گرفته و به این نتیجه رسیدند که بگن این خودش یک کتگوری جدا در رایانش ابری محسوب میشه. این مطلب، حاصل یک بحث تلگرامی با «امیرمحمد» بود. اون هم نه یک بحث گذاری ساده. بحثی که از پاییز ۹۹ درگیرش بودیم :) طبیعیه که بیش از این‌ها بحث کردیم، اما بخش بزرگی از این بحث به منطق کسب و کار تبدیل شد و طبیعتا در یک پست ویرگولی اون رو بیان نخواهم کرد. اما نتیجه بحث جالب بود که چرا میگن DBaaS و نمیگن «بخشی از PaaS» یا هرچیز دیگه. در پایان، ضمن تشکر از وقتی که بابت خوندن این پست صرف کردید، نظر شما چیه در مورد این موضوع؟