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

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

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

تفاوت لایه و رده
لازم به ذکر است که در این نوع از معماری، به اشتباه از واژه لایه استفاده می‌شود. همانطور که در ابتدای مقاله ذکر کردیم، از معماری سه لایه با عنوان 3-Tier یاد کردیم. واژه Tier به معنای رده است نه لایه. هرگاه از لایه صحبت می‌کنیم، منظور قسمتی از نرم افزار است که یک عملکرد خاص را از خود نشان می‌دهد. اما زمانی که از رده صحبت می‌کنیم، منظور تقسیم بندی عملکردی نرم افزاری که روی زیرساخت‌های مجزا از هم اجرا می‌شود است. بنابراین منظور از لایه یک جداسازی منطقی و منظور از رده یک جداسازی فیزیکی است.

 

 

نکات مهم در استفاده از معماری چند لایه

از آن جایی که قرار است با لایه‌های مختلفی کار کنید، نیاز است تا از اختصاص سخت‌ افزار و پهنای باند مناسب اطمینان حاصل کنید.

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

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

 

معماری سه لایه برای پیاده سازی وب اپلیکیشن‌ها بسیار مناسب است

معماری سه لایه برای بسیاری از پروژه‌ها و نرم افزارها به خصوص توسعه وب اپلیکیشن‌ها بسیار مناسب بوده و می‌توان با استفاده از این معماری از امنیت، مقیاس پذیری و سایر مزایا بهره مند شد.

منظور از معماری سه لایه چیست؟

•             معماری سه لایه، یک ساختار مبتنی بر معماری میزبان-مشتری یا همان کلاینت-سرور (Client_Server) است که در آن از

•             منطق فرآیند تابعی

•             دسترسی به دیتا

•             ذخیره اطلاعات

•             رابط کاربری

برای توسعه و پیاده‌‌سازی ماژول‌های مستقل از هم در سیستم‌های مجزا استفاده می‌شود.

قبل از ادامه توضیحات مختصری درباره معماری کلاینت سرور بگیم و با مفاهیم اصلی این معماری و ساختار آن آشنا بشیم

کلاینت_سرور :

معماری کلاینت سرور یکی از پرکاربردترین مدل های معماری در دنیای فناوری اطلاعات است . در این مدل ، نرم افزار (یا سرویس) به دو بخش اصلی تقسیم می شود : کلاینت و سرور

 

کلاینت (Client) : این قسمت از نرم افزار مسئول برقراری ارتباط با کاربر و نمایش اطلاعات به او است . کلاینت معمولاً وظیفه ای دارد که کاربران نهایی را به انجام دادن کارهای مختلف تشویق می کند . مثلاً یک مرورگر وب به عنوان کلاینت عمل می کند و به کاربران اجازه می دهد تا وب صفحات را ببینند و با آنها تعامل داشته باشند .

سرور (Server) : این بخش از نرم افزار مسئول پردازش و ذخیره سازی اطلاعات و ارائه خدمات به کلاینت ها است . سرور معمولاً دارای پایگاه داده ها ، منطق تجاری ، و منابع دیگری است که برای ارتباط با کلاینت ها مورد استفاده قرار می گیرد .

 

معماری کلاینت سرور مدلی است که به طور گسترده در اینترنت و شبکه های محلی مورد استفاده قرار می گیرد . این مدل امکان انعطاف پذیری و بهینه سازی عملکرد سیستم ها را فراهم می کند . با توجه به اینکه کلاینت و سرور به صورت مجزا از یکدیگر عمل می کنند ، این معماری قابلیت توزیع و مقیاس پذیری را دارا می باشد .

مهمترین ویژگی معماری کلاینت سرور این است که امکان ارتباط چندین کلاینت با یک سرور یا چندین سرور با یک کلاینت را فراهم می کند . این نوع تقسیم کار بین کلاینت و سرور به بهبود کارایی ، امنیت و مدیریت سیستم ها کمک می کند .

در معماری کلاینت سرور ، کلاینت ها و سرورها معمولاً از طریق پروتکل های ارتباطی مختلفی با یکدیگر ارتباط برقرار می کنند . این ارتباطات معمولاً از طریق شبکه های مختلف انجام می شوند .

 

معماری سه لایه، اپلیکیشن را از نظر منطقی و فیزیکی جدا می‌کند. این نوع از معماری، ساختار غالبی است که برای طراحی اپلیکیشن‌های کلاینت-سرور استفاده می‌شود.

 

اجازه دهید سه لایه‌ای را که نام‌گذاری معماری سه لایه از آن گرفته شده است، معرفی کنیم:

•             لایه نمایش (Presentation)

•             لایه کاربرد (Application)

•             پایگاه داده (Database)

در ادامه، سه لایه گفته شده را با جزئیات بیشتری بررسی خواهیم کرد.

 

لایه نمایش

لایه بالایی این ساختار، مربوط به لایه نمایش است. در این لایه، اطلاعاتی مرتبط با سرویس‌های معمول در وب سرویس‌ها یا وب اپلیکیشن‌ها نمایش داده می‌شود. این اطلاعات به صورت یک رابط کاربری گرافیکی نشان داده می شوند. لایه نمایش روی مرورگرها یا اپلیکیشن‌های دسکتاپ نمایش داده می‌شود. در واقع لایه نمایش را می‌توانید در کامپیوتر‌ها، موبایل‌ها، تبلت‌ها و سایر دستگاه‌های خود مشاهده کنید. این لایه نماینده فرانت اند است و مستقیماً با چیزی که کاربر نهایی با آن تعامل دارد، سروکار دارد. هدف اصلی طراحی این لایه، نمایش اطلاعات به کاربر و جمع آوری اطلاعات از آنان است. این لایه معمولاً توسط فریم ورک‌های توسعه وب، اچ تی ام ال (HTML) سی اس اس (CSS) یا جاوا اسکریپت ساخته می‌شود و با سایر لایه‌ها به وسیله ارسال نتایج به مرورگر یا از طریق ارسال درخواست‌های رابط برنامه نویسی کاربر (API)، ارتباط برقرار می‌کند.

 

لایه کاربرد یا اپلیکیشن

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

 

لایه داده یا پایگاه داده 

این لایه، میزبان سرورها است، جایی که داده‌ها و اطلاعات ذخیره و بازیابی می‌شوند. از این لایه با عنوان بک اند (back-end) یا سمت سرور نیز یاد می‌شود. داده‌های موجود در این لایه به صورت مجزا از سرورهای اپلیکیشن و لایه منطق نگهداری می‌شوند. پایگاه داده موجود در این لایه با استفاده از سیستم‌های مدیریت پایگاه داده نظیر

•             مونگو دبی بی (Mongo DB)

•             اوراکل (Oracle)

•             مای اس کیو ال (My SQL)

•             پستگرس کیو ال (Postgree)

•             مایکروسافت اس کیو ال سرور  (SQL Server)

پیکربندی و مدیریت می‌شوند.

مهم‌ ترین مزایا و معایب استفاده از معماری سه لایه

مزیت اصلی معماری سه لایه، دادن آزادی عمل به تیم‌های توسعه است. به این صورت که هر عضو تیم‌ می‌تواند به صورت مجزا از بقیه، بخشی از نرم افزار را توسعه دهد یا آن قسمت را بروزرسانی کند. انجام این بروزرسانی یا تغییر روی سایر بخش‌های نرم افزار و کار توسعه دهندگان آن‌ قسمت‌ها تأثیرگذار نخواهد بود.افراد هر تیم (یا حتی تیم‌های مختلف) با توجه به مهارت و دانش خود روی قسمت‌هایی که طراحی آن فقط به آن‌ها مربوط است کار خواهند کرد.

توسعه نرم افزار با توجه به جدا شدن قسمت فرانت اند و دیتابیس نرم افزار از یکدیگر به راحتی صورت می‌گیرد. در واقع در بخش فرانت نرم افزار، تنها موارد لازم و ضروری نمایش داده می‌شوند. به عبارت دیگر محاسبات لازم در بخش پایگاه داده و لایه میانی انجام شده و تنها یک خروجی که نیاز است کاربر آن را ببیند به او نمایش داده می‌شود. با استفاده از معماری سه لایه می‌توان در آینده سخت افزار جدیدی (مثلاً یک سرور جدید) را به سیستم اضافه کرد و نرم افزار قابلیت مدیریت حجم بیشتری از داده را داشته باشد. همچنین به کمک این معماری می‌توان محصولات نرم افزاری را به سرعت با تکنولوژی‌های جدید تطبیق داد. مؤلفه‌های حیاتی اپلیکیشن را می‌توان به صورت مجزا از یکدیگر حفظ کرد، در حالی که کل سیستم همواره با بهبود و پیشرفت همراه است. چرخه تولید و بروزرسانی نرم افزار با اطمینان از تأثیر حداقلی روی تجربه کاربران نهایی صورت خواهد گرفت.

در کل، مزایای معماری سه لایه را می‌توان در موارد زیر خلاصه کرد:

•             توسعه سریع‌تر: به علت توسعه هر لایه توسط تیم‌های جداگانه، می‌توان توسعه تمام لایه‌ها را به صورت همزمان پیش برد. بنابراین زمان عرضه محصول به بازار کاهش پیدا می‌کند. هر تیم نیز می‌تواند بهترین زبان برنامه نویسی و ابزار را برای خود انتخاب کند.

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

 

مقیاس پذیری

•             قابلیت اطمینان بالاتر: ایراد در عملکرد یک لایه، به ندرت یا به سختی روی عملکرد سایر لایه‌ها تأثیرگذار خواهد بود.

•             امنیت بیشتر: به علت این که دو لایه نمایش و داده نمی‌توانند به صورت مستقیم با هم ارتباط برقرار کنند، یک لایه اپلیکیشن که به خوبی طراحی شده باشد می‌تواند نقش یک فایروال را نیز بازی کند. در این صورت از نفوذ به نرم افزار با استفاده از روش‌هایی مانند تزریق اس کیو ال، پیشگیری می‌شود.

•             استفاده مجدد آسان: از آنجایی که نرم افزار به لایه‌های جدا از هم تقسیم شده است، به راحتی می‌توانید هر لایه را در پروژه‌ها یا نرم افزارهای دیگر دوباره استفاده کنید.

•             اضافه کردن ویژگی‌های جدید آسان است: اگر بخواهید ویژگی جدیدی را به نرم افزار خود اضافه کنید، می‌توانید این کار را بدون گذاشتن تأثیر منفی روی قسمت‌های موجود نرم افزار انجام دهید.

•             واضح‌تر بودن ساختار نرم افزار: ساختار پروژه در این نوع از معماری واضح‌تر بوده و مشخص کردن وظایف در آن راحت‌تر است.

 

اما در کنار مزایا، معماری سه لایه می‌تواند شامل معایبی هم باشد.

مهم‌ترین عیب‌های استفاده از معماری سه لایه عبارت است از:

•             پیچیدگی بیشتر در مقایسه با مدل‌های دو لایه و تک لایه. این پیچیدگی به علت جدا بودن لایه‌های نمایش و پایگاه داده و عدم ارتباط مستقیم آن‌ها با یکدیگر است. بنابراین پیاده سازی لایه‌ها نیاز به تلاش بیشتری دارد و پیچیده‌تر است و در واقع به کدنویسی بیشتری نیاز است.

•             ارتباط کلاینت با پایگاه داده، یک ارتباط دائمی نیست. (تا درخواست ارسال نشود، ارتباطی صورت نمی‌گیرد)

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

•             ممکن است به سرورهای پراکسی مجزا احتیاج پیدا شود. ترافیک شبکه در صورت استفاده از سرورهای پراکسی مجزا افزایش می‌یابد.

•             جداسازی فیزیکی سرورهایی که حاوی لایه اپلیکیشن هستند و سرورهای پایگاه داده، ممکن است بر عملکرد کلی سیستم و سرعت آن تأثیر منفی بگذارد.

 

تفاوت بین معماری دو لایه و معماری سه لایه

معماری دو لایه، یک نوع از معماری در مهندسی نرم افزار محسوب می‌شود که در آن لایه نمایش روی یک کلاینت اجرا شده و لایه داده روی سرور ذخیره می‌شود. جدا سازی این دو مؤلفه از یکدیگر منجر به ایجاد یک معماری دو لایه می‌شود.

 

معماری دو لایه

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

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

تفاوت کلیدی در معماری دو لایه و سه لایه، در پیاده سازی منطق نرم افزار و انجام محاسبات است.

مثالی ساده از معماری سه لایه در مهندسی نرم افزار

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

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