بررسی مزایای استفاده از سرویس ابری در مقایسه با توسعهی مستقیم (۱)
فرض کنیم شما توسعهدهندهی مجربی هستید و یک روز در دفتر کار خود سرگرم بررسی برنامههایتان برای توسعه کسبوکار هستید که ناگهان دوستتان تماس گرفته و ایدهای جالب را با شما در میان میگذارد. این ایدهی کسبوکار میتواند یک برنامه ،بازی موبایل، وبسایت خرید یا هر ایدهی دیگری برای تبدیل خلاقیت به پول باشد. با هم جلسهای میگذارید و در آن تصمیم گرفته میشود که دوستتان بخش مدیریت و بازاریابی را بر عهده بگیرد و شما تکنولوژی را جلو ببرید و احتمالاً چنین جملاتی از دوستتان میشنوید: "باید خیلی سریع باشیم، با خیلیها حرف زدهام، فقط در انتظار آماده شدن نرمافزار هستند"، "شرکتهای دیگری روی این ایده کار میکنند، سرعتمان باید بیشتر باشد"، "منابع محدودی در اختیار داریم، باید از این منابع به نحو احسن استفاده شود و نمیتوانیم خرج اضافی داشته باشیم" و جملاتی از این قبیل که بیشتر بر روی سرعت توسعه، محدودیت منابع و رقابت بالا تأکید دارند.
اگر سابقهی حضور شما در دنیای توسعهی برنامه و بازی و وبسایت زیاد باشد احتمالاً بارها و بارها با این تجربه مواجه شدهاید. اغلب طولانی شدن زمان توسعه و افزایش هزینهها سبب دلسردی و شکست پروژههای استارتاپی میشود، درواقع به گزارش Forbes بیش از 90 درصد استارتاپها شکست میخورند و دلیل این آمار را میتوان در مشکلات مذکور جستوجو کرد.
زمان و کیفیت نقش اصلی را در توسعهی یک نرمافزار بازی میکنند. در این مطلب میکوشیم نشان بدهیم استفاده از دو سرویس پایگاه داده (Database) و مدیریت کاربران (User Management) چگونه میتواند سرعت و کیفیت توسعهی نرمافزار را بهبود ببخشند.
کیفیت بالاتر به منابع و زمان بیشتری نیازمند است و زمان بیشتر رقابت در کسبوکار را تحتالشعاع خود قرار میدهد. در چنین وضعیتی است که کسبوکارها به راهحلهایی برای افزایش سرعت توسعهی نرمافزار روی میآورند و به همین دلیل است که طبق پیشبینیهای انجامشده حجم بازار Baas (Backend as a Service)ها تا سال ۲۰۲۰ به ۳۱ میلیارد دلار افزایش خواهد یافت، بازاری که برای مسائلی از قبیل پایگاه داده (Database)، مدیریت کاربران، مدیریت فایلها، زیرساخت بازیها، چت و ارائهی خدمات بلادرنگ (Real-time)، تحلیل و امکان ارسال Push Notification به کاربران راهحلهایی بدیع و آسان ارائه میدهد.
در شرکت Kinvey - بهعنوان یکی از شرکتهای پیشرو در زمینه محصولات ابری - تحقیقی با استفاده از تهیه پرسشنامه از ۱۰۰۰ طراح برنامههای موبایل درباره میزان زمان موردنظر برای یک توسعه یک برنامه اولیه قابلعرضه (MVP) برای بخشهای مختلف هسته Front و کل Backend انجام گرفته است. در این مقاله تنها به بخشهای ذخیره داده (Data storage) و مدیریت کاربران (User Management) شامل احراز هویت و اعتبار سنجی این تحقیق نگاه شده است.
پایگاه داده بهعنوان سرویس
در ابتدا حالتی را در نظر بگیریم که خودمان سرویس پایگاه داده را فراهم آوریم. فرض کنیم از قبل پایگاه دادهی خود را انتخاب کرده باشیم. ابتدا بایستی مدل ERD خود را طراحی کرده، تمامی ستونهای جدولها را لیست کنیم. سپس بایستی با استفاده از کدی که مینویسیم امکان دسترسی به محتویات پایگاه داده را برای واسط خود فراهم آوریم. بسته به الگوی مورداستفاده (Pattern) در پیادهسازی و تأمین امکان دسترسی واسط به محتویات پایگاه داده، مقدار زمانهای متفاوتی را به ما تحمیل خواهد کرد. بهعنوانمثال در معماری MVC به –حداقل- ۳ متد برای هر کارکرد (Functionality) نیاز داریم. راهاندازی (Setup) و تنظیمات سرور هم به لحاظ پایگاه داده و هم به لحاظ سرور وب هزینه و زمان اضافهای را به تیم توسعه تحمیل خواهد کرد. این سناریو در کمترین حالت صرفنظر از هزینههای راهاندازی (Setup) بهصورت متوسط چند ساعت برای هر کارکرد (Functionality) از ما خواهد گرفت. از طرف دیگر این سناریو برای حالتی با تعداد درخواستهای پایین طراحی شده است؛ پس از توسعهی کسبوکار و افزایش تعداد مشتریان –که منجر به افزایش درخواستهای فرستاده شده میشود- مسئلههای جدیدتری مطرح میشود که هزینههای بسیاری را برای گروه توسعه ایجاد میکند. هزینههایی که بههیچوجه قابلمقایسه با هزینهی توسعهی اولیه نیستند و گاه به چندین برابر آن میرسند. این وضعیت مسائلی مانند مقیاسپذیری (Scalability) و در دسترسپذیری (Availability) را پررنگتر میکند که تنها با استفاده از مهارت تیم توسعه و صرف زمان بیشتر امکان برآوردن این مسائل فراهم آورده میشود.
حال اگر همین سناریو را با استفاده از سرویسهای BaaS (Backend as a Service) که خدمات پایگاه داده ارائه میدهند پیادهسازی کنیم، کافی است جدول خود را در پنل درست کرده و ویژگیهای مختلف (Fields) آن را اضافه کنیم. تنها با صرف همین چند دقیقه کار انجام میشود و بعدازآن کافی است واسط کاربری خود را به سرویس مذکور وصل کنیم. مسائلی که در زمان توسعه کسبوکار نرمافزار را تحت تأثیر قرار میدهد پیشازاین در توسعه سرویس لحاظ شده است.
بر اساس تحقیقی که Kinvey انجام داده است زمان صرف شده برای بخش ذخیره داده یک برنامه کاربردی اولیه (MVP) در حدود ۱۳ روز زمان میبرد که این زمان به صفر روز کاهش مییابد. بایستی تأکید شود که این تحقیق تنها برای یک برنامه کاربردی اولیه و بسیار ساده بوده، مشکلاتی از قبیل مقیاسپذیری و در دسترسپذیری که در برنامههای با مقیاس بالا دیده میشود لحاظ نشده است.
سرویس پایگاه دادهی بکتوری برای پیادهسازی سناریوی دوم به توسعهدهندگان ارائه شده است، سرویسی که بهوسیله راهکارهای تیم تست و البته برنامههای متنوعی که مبتنی بر آن توسعه دادهشدهاند امتحان خود را پس داده است و مسائلی از قبیل در دسترسپذیری و مقیاسپذیری نیز در آن لحاظ شدهاند تا از هزینههای ثانویهی تحمیلی به تیم توسعهی نرمافزار هم جلوگیری به عمل آید.
مدیریت کاربران بهعنوان سرویس
مدیریت کاربران همواره یکی از چالشهای اصلی توسعهی نرمافزار محسوب میشود. مدیریت کاربران شامل احراز هویت کاربران (Authentication) و اعتبارسنجی (Authorization) آنها برای انجام عملیات مختلف است. انتخاب یک پروتکل امن به همراه داشتن دانش فنی موردنیاز این بخش از توسعهی نرمافزار را تبدیل به یکی از پرخطرترین بخشهای آن در دنیا کرده است. امروزه مهمترین مشکل سیستمهای نرمافزاری توسعه دادهشده در کشور مشکلات امنیتی در توسعهی آنها است. این مشکلات امنیتی ریشه در دانش فنی پایین شرکتهای کامپیوتری درزمینهی امنیت نرمافزار و پروتکلهای مربوط به آن دارد. معمولاً سازمانهای بزرگ برای حل این مسئله متخصص امنیت نرمافزار را به استخدام درمیآورند که طبیعتاً استخدام یک نیرو برای امر امنیت برای شرکتهای با منابع محدود امکانپذیر نیست.
سرویس کاربران بکتوری با ارائهی خدمات مدیریت کاربران، این مشکل را حل کرده است. تیم توسعهی بکتوری با داشتن نیروهای متخصص درزمینهی امنیت ضمن فراهم آوری پروتکل امنیتی مبتنی بر OAuth2 برای احراز هویت توانسته نیاز گروههای توسعهی نرمافزار به ارتباطات امن را بهخوبی برآورده کند و این چالش را از سر راه توسعهدهندگان بردارد. برای اعتبارسنجی کاربران نیز با امکان تعریف نقش (Role) و اعتبار دهی به آنها برای انجام فعالیتهای مختلف با استفاده از تعریف ACL بر روی جدول و دادهها توانسته امکان اعتبار دهی به کاربران را فراهم آورد. برای توضیحات بیشتر میتوانید به مستندات بکتوری مراجعه کنید. مطابق تحقیق انجامشده در Kinvey زمان توسعه برای بخش مدیریت کاربران از ۱۳ روز به تنها ۲ روز کاهش پیدا میکند. همانطور که در سرویس پایگاه داده اشاره شد، مسائلی مانند مقیاسپذیری و در دسترسپذیری در این تحقیق موردنظر قرار نگرفته است، که با لحاظ کردن آنها تأثیر استفاده از این قبیل سرویسها در مقیاس بالا بیشتر و بهتر به چشم خواهد آمد.
در این مقاله سعی شد با تمرکز بر دو سرویس پایگاه داده و احراز هویت کاربران به بررسی مزایای استفاده از بکتوری در مقایسه با توسعهی مستقیم پرداخته شود. طبیعی است بررسی تمامی سرویسها و امکانات بکتوری مجال مفصلتری را میطلبد و در پستهای بعدی بلاگ به این مقایسه برای سایر چالشهای توسعهی نرمافزار خواهیم پرداخت.