Multi-tenancy معرفی ، مزایا و معایب

Multi-tenancy معرفی ، مزایا و معایب

این که به طراحان سیستم های نرم افزاری معمار گفته میشود یک امر تصادفی نیست. معماران نرم افزار مفاهیم زیادی را از مهندسین عمران الهام گرفتند. مفهوم multi tenancy یا اجاره چندگانه یکی از مفاهیم الهام گرفته شده از دنیای عمران است.
معماری multi-tenant یا multi-tenancy یک معماری نرم افزار است که در آن چند نمونه از یک برنامه روی یک سرور فیزیکی اجرا می شوند تا آن سرور بتواند به چندین مستاجر (tenant) خدمات ارائه کند.
Tenant واژه ای است برای توصیف گروهی از کاربران یا نرم افزار ها که همگی به یک منبع سخت افزاری دسترسی مشترک دارند. چندیدن tenant یا مستاجر همگی از یک ram و cpu در سرور استفاده میکنند. در مقابل multi-tenancy اصطلاح single-tenancy وجود دارد که در آن، سرور تنها یک نمونه از برنامه را اجرا می کند.
خیلی شبیه به مهندسی عمران، اجاره چند گانه، استفاده از منابع را بهینه می‌کند. درحالی که در شخصی سازی نیز از انعطاف پذیری مناسبی برخورد دار است. اجازه بدهید ابتدا این مفهوم را در مهندسی عمران به کمک چند مثال بررسی کنیم.
من در یک خانه کوچک اما مستقل بزرگ شده ام. ما چیدمان این خانه را به هر نحوی که می خواستیم انجام می دادیم. ما خانه را به دو بخش تقسیم کرده بودیم، در یک طرف میهمان سرا و طرف دیگر محل زندگی ما قرار داشت. برای این کار هیچ نیازی به کسب اجازه از همسایه ها نداشتیم. ما آزادی انجام هر کاری که میخواستیم را در قطعه زمین خود داشتیم. اما این آزادی بهایی را به دنبال داشت. در صورتی که ما هرگونه مشکلی با امکانات خانه (مثل لوله کشی آب) داشتیم باید خودمان به آن رسیدگی می کردیم.

اولین کسی باشید که به این سؤال پاسخ می‌دهید

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

مفهوم معماری multi-tenant

تصور کنید قصد دارم میزبانی (host) سرویس ایمیل و فایل هایم را خودم بر عهده بگیرم. بعد از جست و جو های فراوان سرویس owncloud را انتخاب کردم. آن را روی سرور شخصی خودم نصب کردم و برای خودم یک حساب کاربری ایجاد کردم. این یک سیستم تک کاربره ی اختصاصی است (single-user, single-tenant system). من تنها کاربر و مشتری این سیستم هستم و میتوانم هر تغییر دلخواهی مانند تغییر دامنه و رنگ پس زمینه را در آن ایجاد کنم.
پس از مدتی تصمیم می گیرم قابلیت تقویم را در اختیار همسر و فرزندانم قرار بدهم. برای هر کدام از آنها یک حساب کاربری ایجاد می کنم. حال سیستم من به یک سیستم چند کاربره اختصاصی (multi-user, single tenant) تبدیل شده است. هر کاربر می تواند قابلیت های محدودی مثل نام تقویم را برای خود شخصی سازی کند اما آنها نمی توانند عملکردی را به برنامه اضافه یا از آن کم کنند.
به عنوان مثال اگر برادر من بخواهد تقویم خود را با جیمیلش sync کند نمی تواند! چرا که اگر من این قابلیت را فعال کنم برای همه فعال می شود و من نمی خواهم پدرم را با اضافه کردن یک قابلیت جدید به تقویم سردرگم کنم. هیچ امکانی برای فعال کردن این قابلیت، تنها برای یک کاربر خاص وجود ندارد.
حال دو نفر از همکارانم که با دیدن روش مدیریت برنامه های خانوادگی من تحت تاثیر قرار گرفته اند از من میخواهند که همین کار را برای آنها نیز انجام دهم. من میتوانستم owncload را در سرور شخصی هر کدام برایشان نصب کنم. در این صورت این آزادی در اختیار آنها قرار می گرفت که برنامه را با سلیقه و تمایلات خودشان شخصی سازی کنند. اما آنها دردسر مدیریت و نگهداری یک سرور شخصی را نمی خواهند به همین خاطر از من درخواست می کنند تا این کار را برای آنها مدیریت کنم. همچنین آنها به من می گویند که نمیخواهند داده های آنها با افراد دیگری به اشتراک گذاشته شود به همین خاطر از من درخواست می کنند تا محل ذخیره سازی جداگانه ای برای هرکدام قرار دهم. این درخواست ها تمامی ندارد. یکی از آنها می خواهد در دامنه ی متفاوتی به این سرویس دسترسی داشته باشد و دیگری می خواهد از فضای ابری گوگل برای ذخیره سازی فایل هایش استفاده کند. من قادر به پیاده سازی همه این قابلیت ها برای آنها هستم به این دلیل که owncloud از multi-tenancy پشتیبانی می کند.
همکاران من از کاری که برای آنها انجام دادم ابراز رضایت می کنند و تصمیم می گیرند همه اعضای خانواده شان را به این برنامه دعوت کنند. من، به جای گرفتن یک هزینه ثابت از آنها، به میزانی که از برنامه استفاده می کنند هزینه دریافت می کنم.
این سیستم اکنون یک سامانه ی چند کاربره است که به چندین مشتری اجاره داده شده است (multi-user, multi-tenant system).
طراحی یک سیستم multi-tenant دشوار تر از یک سیستم چند کاربره است. طراحی این سیستم ها دو مدل کلی دارد :
همانند سازی (instance replication) و تفکیک داده ها (data-segregation)

 Multi-tenancy معرفی ، مزایا و معایب

در نوع همانند سازی، سیستم برای هر مستاجر(tenant)خود یک نمونه جدید از برنامه می سازد. در نوع تفکیک داده ها، برنامه بین مستاجرین به اشتراک گذاشته می شود اما داده های هرکدام از آنها در یک منبع جداگانه ذخیره می شود. این منبع جداگانه می تواند یک پایگاه داده ی جدا و یا جداول مجزا باشد. جهت پشتیبانی این نوع از طراحی نیاز است تا یک لایه مدیریت به سیستم اضافه شود تا زمانی که یک مستاجر جدید ثبت نام می کند یک منبع داده ی اختصاصی برای آن تدارک ببیند. سیستم های multi-tenant شامل شخصی سازی ظاهر برنامه، قابلیت های انتخابی و هزینه محاسبه شده بر
اساس مصرف مستاجر است که لایه مدیریت مسئولیت تمامی این کار ها را بر عهده دارد.
تا اکنون باید برای شما مشخص شده باشد که یک سیستم multi-tenant برای هر برنامه ی تحت وبی مناسب نیست. معمولا سیستم های چند کاربره برای سامانه هایی که ارتباط یک کسب و کار با مشتری را برقرار می کنند مناسب است و سیستم های multi-tenant برای برنامه هایی که ارتباط یک کسب و کار با چند کسب و کار دیگر را برقرار می کنند انتخاب بهتری است.

مزایای سیستم های single-tenant

در این سیستم ها به واسطه این که هیچ اشتراک منابعی وجود ندارد مشتری کنترل بیشتری در اختیار دارد که این امر چند فایده دارد.
شخصی سازی بیشتر: از آنجایی که تنها مشتری برنامه، شما هستید تا جایی که نیاز دارید می توانید برنامه را برای نیاز های خود شخصی سازی کنید. در صورتی که در سیستم های multi-tenant این شخصی سازی محدودیت هایی دارد.
امنیت بیشتر در مقابل تهدید ها: محیط برنامه را شما کنترل می کنید. به همین خاطر این که چه چیزی به برنامه شما وارد شود و از آن خارج شود کاملا تحت نظارت شماست و این میتواند از برخی مشکلات امنیتی احتمالی جلوگیری کند.
بازیابی سریع تر: در صورت از دست رفتن اطلاعات یا مشکلات مشابه انجام عملیات بازیابی برای یک مشتری سریع تر از چندین مشتری صورت می گیرد.
نبود همسایه مزاحم: از آن جایی که در سیستم های multi-tenant منابع به اشتراک گذاشته می شوند. در صورتی که یکی از مشتری ها استفاده سنگینی از سیستم داشته باشد ممکن است سرعت شما نیز پایین بیاید.

معایب سیستم های single tenant

این سیستم ها نقص هایی را نیز با خود به همراه دارند.
هزینه: هیچگونه اشتراک هزینه ای در مواردی مثل نگهداری از سرور یا نظارت بر آن وجود ندارد.
مسئولیت بیشتر: خود مشتری مسئولیت بروزرسانی، پشتیبان گیری و بازیابی داده های از دست رفته را دارد.
بهره وری کمتر: اینگونه سیستم ها در صورتی که از همه ظرفیت آنها استفاده نشود و یا بیش از حد ظرفیتشان از آنها استفاده شود بهره وری کمتری دارند.

مزایای سیستم های multi tenant

از آنجایی که شما تنها هزینه منابعی که مصرف کردید را پرداخت می کنید هزینه این سیستم ها به مراتب کمتر است و این اصلی ترین مزیت آنهاست. علاوه بر این مزیت های دیگری شامل موارد زیر را نیز دارند.
میزبانی ساده تر: با توجه به این که مدیریت سخت افزار سرور بر عهده شما نیست زمان زیادی برای شما صرفه جویی می شود.
بروزرسانی راحت تر: بروز رسانی برنامه و سرور دیگر مشکل شما نیست و شما همیشه آخرین نسخه از آنها را در اختیار خواهید داشت.
بهره وری بیشتر: از آنجایی که مشتری فرآیند نصب و پیکربندی برنامه در سرور را انجام نمیدهد از منابع سیستم به بهترین شکل ممکن استفاده می شود و این موضوع باعث افزایش بهره وری برنامه می شود.

معایب سیستم های multi-tenant

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

همینطور که تا اکنون متوجه شده اید همه برنامه های تحت وب نباید چند کاربره باشند و همه برنامه های تحت وب چند کاربره هم نباید multi-tenant باشند. همه این راه حل ها نسبی اند. یک معمار باید با توجه به نیازمندی های موجود راه حل درست را از میان راه های مختلف انتخاب کند. در صورتی که شما هم سیستم های multi tenant را در سطح وب می شناسید در بخش نظرات نام آنها را برای مان بنویسید.