بررسی معماری Client/Server در مدلهای تک لايه، دو لايه، سه لايه و چند لايه ,

در اواسط دهه ۸۰ ميلادی و زمانيكه اولين بارتوليدكنندگان تجهيزات شبكه، محصولات خود را به بازار عرضه كردند، واژهClient/Server وارد عرصه كامپيوتر گرديد. در آن زمان واژه فوق صرفا دررابطه با تجهيزات سخت افزاری ( كامپيوتر ) استفاده می شد و كامپيوتری كهاز آن بعنوان مركز ثقل ارائه خدمات در يك شبكه ياد می شد، را با نامServer و كامپيوتری كه از اين امكانات استفاده می كرد را بعنوان Client میشناختند ( سايه نرم افزار بر اين واژه حضور سنگينی نداشت ).
امروزه واژه فوق دارای يك معنی خاص است كه چندان مرتبط باسخت افرار نمی گردد. اغلب مردم هنوز واژه Client را به يك كامپيوتر فيزيكینسبت داده و واژه Server را به كامپيوتر فيزيكی ديگری كه به آن متصل وسرويس هائی را ارائه می نمايد، اطلاق می نمايند. مطلب فوق با اينكه درستاست ولی صرفا يك بخش اندك از تمامی واقعيت های موجود در اين زمينه است.واژه فوق امروزه در مقياس وسيعتری به خدمت گرفته می شود. بمنظور آشنائیبيشتر با اين واژه لازم است در ابتدا با ساختار و يا معماری عمومی يك نرمافزار آشنا شويم.
اغلب برنامه های كاربردی دارای سه لايه اصلی می باشند :
لايه Presentation: ( بالاترين لايه ) اين لايهمسئول ايجاد ارتباط متقابل بين انسان و كامپيوتر است ( رابط كاربر). لايهفوق مسئوليت گرفتن اطلاعات ورودی از صفحه كليد، ماوس و ساير دستگاههایورودی و نمايش اطلاعات ذيربط بر روی دستگاههای خروجی نظير صفحه نمايشگراست.
لايه Application يا Business Logic: لايه فوقمسئول اعمال و پياده سازی سياست های مورد نظر در يك نرم افزار است، درحقيقت با عملكرد لايه فوق است كه می توان تفاوت بين يك نرم افزار از نرمافزار ديگر را مشاهده و بعنوان مثال تفاوت بين يك نرم افزار ثبت سفارش ويا انبارداری را حس كرد.
لايه Service: اين لايه مسئول ارائه سرويس های خاصو مورد نياز برای ساير لايه ها نظير سرويس های مربوط به فايل، چاپ،ارتباطی و از همه مهمتر دسترسی به بانك های اطلا عاتی است. در ادامه بحثخود را بر روی مجموعه ای از نرم افزارها ئی متمركز خواهيم كرد كه نيازمندسرويس های بانك اطلاعاتی باشند.
تعداد طبقات ( Tires )، در يك نرم افزار Client Server بهنحوه ارتباط ( متراكم، معمولی ) هر يك از سه لايه گفته شده بستگی خواهدداشت. در ادامه به بررسی مدل های رايج در اين زمينه خواهيم پرداخت.
مدل One-Tire
در اين نوع نرم افزارها سه لايه گفته شده بصورت متراكم و فشرده در كناريكديگر قرار می گيرند. در مدل فوق لايه Presentation دارای آگاهی خاص وجزئی از ساختار بانك اطلاعاتی است. لايه Application اغلب بصورت موجی بالايه های Presentation و Service مرتبط خواهد بود. تمام سه لايه گفته شدهبهمراه بانك اطلاعاتی، اغلب بر روی يكدستگاه كامپيوتر قرار گرفته و اجراخواهند شد. نرم افزارهائی با اين خصوصيت بسادگی طراحی شده و بكمك ابزارهایبرنامه نويسی امروزی بسرعت نوشته خواهند شد.

در صورتيكه بخواهيم يك نرم افزار One-tire با چندين كاربررا طراحی نمائيم، می توان نرم افزار را بر روی چندين كامپيوتر اجرا و بابه اشتراك گذاشتن بانك اطلاعاتی زمينه استفاده از داده های موجود در بانكرا برای ساير كاربران نيز فراهم نمود. بانك اطلاعاتی را می توان بر رویيكدستگاه كامپيوتر معمولی در يك شبكه نظير به نظير ( Peer to Peer ) و يابر روی يك سرويس دهنده فايل ( File Server ) نصب نمود. در اين حالت هر يكاز كامپيوترهائی كه برنامه بر روی آنها اجرا می گردد می بايست دارای يكنسخه از Database Engine بوده تا قادر به استفاده از داده های موجود دربانك اطلاعاتی باشند. در اين مدل صرفا داده ها به اشتراك گذاشته شده ومنطق بانك اطلاعاتی به اشتراك گذاشته نشده است. اين نوع از نرم افزارها (چند كاربره One Tire ) تا زمانيكه تعداد كاربران كم باشد موفق عمل مینمايند ولی با افزايش تعداد كاربران، با مشكل مواجه می شوند.
علت عمده بروز مشكل پايبند بودن اين نوع از نرم افزارها بهانجام عمليات مربوط به بانك های اطلاعاتی بر روی هر يك از سرويس گيرندگاناست. مثلا اگر برنامه ای از اين نوع نياز داشته باشد كه ليست تمامیكاربرانی را كه نام آنها Reza است، را نمايش دهد، می بايست تمامی اطلاعات( ركوردهای داده و ايندكس های مربوطه ) بمنظور پاسخگوئی به درخواست واصلشده، بر روی شبكه فرستاده شود. در برخی حالا ت خاص و با توجه به پيچيدگیدرخواست های صادر شده برای اطلاعاتی خاص، ممكن است تمامی بانك اطلاعاتیبرای سرويس گيرنده ارسال گردد.
اگر از يك سطح فنی به مسئله فوق نگاه كنيم، مديريتDatabase Engine های مستقل بر روی سرويس گيرندگان بمنظور ممانعت از بروزتعارض ( Conflict ) بين دو سرويس گيرنده جهت تلاش برای دستيابی و يابهنگام سازی برخی ركوردها مشكل است ( مسئله Record Locking ).
مدل Two Tire
بمنظور حل مشكل مطرح شده در مدل One-tire از بعد كارائی و مسائل فنیمربوطه، مدل فوق معرفی گرديد. نرم افزارهائی كه با اتكا بر مدل فوق طراحیو پياده سازی می گردنند در اغلب موارد دارای عملكردی مشابه مدل One Tireبوده با اين تفاوت مهم كه Database Engine بر روی سرويس گيرنده ها اجرانخواهد شد.

در مدل فوق بانك اطلاعاتی بر روی سرويس دهنده اجرا میگردد. از روش های متعددی برای ارتباط بين لايه Application(Logic) وDatabase Service استفاده می گردد. SQL ( زبان ساختيافته پرس و جو ) ازمتداولترين روش های موجود در اين زمينه است. دستورات SQL به سرويس دهندهبانك اطلاعاتی ارسال شده و در آنجا عمليات مربوطه بصورت محلی انجام ونتيجه ( اطلاعات مربوط به درخواست ارسال شده ) برای سرويس گيرنده ها ارسالخواهد شد. در مدل فوق صرفا سرويس دهنده بانك اطلاعاتی از برنامه مجزا شدهو لايه های Presentation و Busines Logic همچنان در هم تنيده هستند. دولايه فوق همچنان دارای آگاهی اساسی ( محرمانه ) از بانك اطلاعاتی خواهندبود.
نوشتن برنامه هائی از اين قبيل تا اندازه ای پيچيده تر ازمدل قبل است. امروزه ابزارهای برنامه نويسی نيز مجهز به پتانسيل هائی شدهاند كه طراحی و نوشتن اين نوع از برنامه ها را سرعت می بخشد. اغلبابزارهای برنامه نويسی دارای امكاناتی جهت استفاده از DataBase Enginesبوده كه می توان از آنها در طراحی برنامه های One-Tire استفاده كرد ( نظيرJet Engine كه توسط اكسس و ويژوال بيسيك استفاده می گردد) اما نرمافزارهای Two Tire نيازمند محصولات مجزای بانك اطلاعاتی نظير Oracle , IBMDB2 , Sybase و SQL Sever می باشند.
مدل Three Tire
اين مدل همانگونه كه احتمالا حدس زده ايد تمامی سه لايه گفته شده را دربخش های مستقل قرار می دهد. در مدل فوق Business Logic يك سرويس است و میتواند بر روی كامپيوتر اختصاصی خود فعال و اجرا گردد. زمانيكه Businessبصورت يك سرويس دهنده در نظر گرفته می شود با نام Application Serverناميده می شود. يك Application Server اغلب ممكن است بر روی همانكامپيوتری كه DataBase Engine قرار دارد، نصب گردد. شايد يكی از دلايل مهمجهت انجام اين كار افزايش كارآئی سيستم باشد.

يكی از مزايای مهم و كليدی، داشتن يك Application Serverاين است كه بتوان آن را در محلی قرار داد كه به بهترين نوع ممكن خدمات خودرا ارائه نمايد. در اين مدل مسئله حائز اهميت در اين است كه تمامیApplication Serverها بتوانند و می بايست سرويس بانك اطلاعاتی خود را ازيك كامپيوتر مركزی دريافت دارند. ( ممكن است در برخی حالات تعدادی ازكاربران نرم افزار از يك Application Server كه بر روی يك كامپيوتر مجزاقرار گرفته است استفاده نمايند و يك كاربر از راه دور ممكن استApplication Server را بر روی يكدستگاه كامپيوتر اختصاصی اجرا نمايد.)بهرحال محل Application Server و Database Server ارتباطی با كاربر نداشتهو تمامی آنها با يك روش يكسان از نرم افزار و توانائی آن استفاده مینمايند.
در مدل فوق لايه Presentation دارای آگاهی خصوصی از بانكاطلاعاتی نبوده و لايه فوق از طريق لايه Application Server و بكمك يكاستراتژی خاص با بانك اطلاعاتی مرتبط خواهد بود. مرورگرها در حالت خاصدارای هيچگونه شناختی از ساختار بانك اطلاعاتی در سايت Amazon.com نمیباشند ولی با اين حال قادر به ارتباط با بانك اطلاعاتی و خريد يك كتابهستند. در مدل فوق با نگرش وب، سرويس گيرنده از طريق يك پروتكل خاص با يكApplication Server مرتبط می گردد. برنامه هائی از اين نوع ( مدل ThreeTire ) پيچيده تر از مدل های قبلی بوده و هنوز ابزارهای برنامه نويسی خاصیدر اين زمينه وجود ندارد و برنامه نويسان مجبور به نوشتن حجم بالائی ازكدها خواهند بود.
مدل N Tire
اين مدل امروزه بسرعت رايج و مطرح شده است. در حقيقت مدل Three Tire درحالت خاص به سمت N-Tire ميل خواهد كرد. در اين حالت يك Application Serverمی تواند درخواست خود را از چندين سرويس ديگر داشته باشد. هر يك از سرويسهای صدا زده شده نيز خود می توانند سرويس های ديگری را جهت پاسخگوئی بهدرخواست واصل شده، فعال نمايند. واژه MiddleWare اغلب جهت تشريح ارتباط يكبرنامه يا Business Logic بر روی يك Application Server استفاده می گردد.

چه ميزان از Bussines Logic می بايست بر روی Application Server قرار گيرد؟
بدون شك يكی از بخش های مهم هر نرم افزار كه دائما می تواند دستخوشتغييرات گردد، مجموعه قوانينی است كه با اعمال آنها سياست عملكردی يك نرمافزار تعيين می گردد. مثلا در يك سيستم بازرگانی می توان قانونی را داشتهباشيم كه برای خريدهای بالای يكصد هزار تومان مجوز مدير مربوطه فرض است.در اين حالت می توان قانون فوق را بصورت يك روتين ( سرويس ) و بصورت جامعطراحی و در لايه Application قرار داد، سرويس فوق می تواند توسط سايرسرويس های موجود در اين لايه و يا ساير لايه ها مورد استفاده قرار گيرد.بديهی است در صورتيكه اين سياست به نوعی تغيير نمايد و قرار شود از اين پسخريدهای بالای يكصد و پنجاه هزار تومان مكلف به تاييد مديريت مربوطهباشند، بسادگی با اعمال تغيير در روتين فوق و تزريق سياست جديد، زمينهاستفاده اتوماتيك از آن برای ساير سرويس های استفاده كننده فراهم می گردد.

نحوه و زمان تغيير سياست فوق از ديدگاه استفاده كننده ولايه Presentation مهم نبوده و تغييرات بصورت خودكار در تمامی سرويس هایموجود در ساير لايه ها حس خواهد شد. بنابراين مجموعه قوانين و سياست هائیكه در روند عملياتی يك نرم افزار نقش تعيين كننده ای را دارند، می بايستدر لايه Application قرار گرفته تا بدينوسيله امكان درج تغييرات و اعمالسياست های جديد مركزيت يافته و مسائل مربوط به پشتيبانی و ارتقا يك نرمافزار با اطمينان خاطر و صرف كمترين زمان و هزينه صورت پذيرد.
در برخی از موارد می توان اين سياست ها را در قالب مجموعهای از سرويس ها در لايه Presentation قرار داد. بررسی صحت داده های ورودیيك نمونه مناسب در اين زمينه است. در اين مورد اغلب قوانين جهت بررسیاعتبار و صحت داده های ورودی بر روی لايه Presentation قرار خواهد گرفت.بديهی است در چنين حالتی بجای ارسال اطلاعات بررسی نشده به لايهApplication و بكارگيری يك روتين جهت بررسی صحت داده ها، می توان اينعمليات را در لايه Presentation قرار داد تا بدينوسيله از يكطرف ترافيكمحيط انتقال داده ها افزايش نيابد و از طرف ديگر كاربران رودرو با لايهPresentation بازخوردهای سريعی را از سيستم داشته باشند. بهرحال در چنينحالاتی بخشی از منطق عملكرد يك نرم افزار را در لايه Presentation قرارداده ايم. در صورتيكه حجم Logic اضافه شده در لايه Presentation كم وناچيز باشد، در اينصورت لايه فوق بصورت انحصاری مسئوليت های پيش فرض خودرا دنبال خواهد كرد. در چنين وضعيتی سرويس گيرنده را Thin Client میگويند. در حالتيكه بر روی سرويس گيرنده، Logic بالائی قرار گرفته باشد، بهآن Fat Client می گويند.بهترين نمونه از يك Thin Client، مرورگرهای وببوده كه قادر به ارتباط با انواع نرم افزهائی است كه بر روی وب سايت قراردارند.
جمع بندی
واژه Client Server دارای معانی بمراتب بيشتری نسبت به جداسازی يككامپيوتر سرويس گيرنده و سرويس دهنده از يكديگر است واژه فوق بسرعت دردنيای نرم افزار نيز مطرح و دارای جايگاه ويژه ای در اين زمينه شده است.از ديدگاه فوق يك روتين ( سرويس ) می تواند ارائه دهنده خدمات خاصی بهساير سرويس ها باشد. در چنين وضعيتی سرويس ارائه دهنده خدمات را Server وسرويس استفاده كننده از يك خدمات را Client می گويند. با تعميم سياست هایطراحی نرم افزار از مدل های One Tire به Two-Tire و Three Tire و نهايتاN-Tire و تاكيد بر نگرش ساختيافته و اصولی به عملكرد هر يک از لايه ها،مفهوم روتين های سرويس دهنده ( Server ) و روتين های سرويس گيرنده(Client) جايگاه ممتازی را پيدا نمودند.

يك سرويس می تواند در عين خدمات دهی به ساير سرويس هایمتقاضی، خود نيز از خدمات ساير سرويس ها استفاده نمايد. بنابراين يك سرويسدهنده در چنين حالتی بصورت اختصاصی صرفا رسالت سرويس دهی و يا سرويس گيریرا انجام نخواهد داد. اگر از ديگاه هر لايه به عملكرد سرويس ها نظری داشتهباشيم، قطعا تمامی آنها مسئوليت ارائه يك سرويس خاص را در لايه مربوطهبرعهده خواهند داشته و قدرمطلق تمامی آنها ارائه خدمات است. مهمترين مزيتنگرش فوق حركت بi سمت توليد سرويس هائی خواهد بود كه اولا امكان استفادهاز آنان در چندين نرم افزار فراهم شده و ثانيا زمينه تحقق اصل بسيار مهماستفاده مجدد از كدهای نوشته شده (Reusable Code) نيز فراهم می گردد.امروزه با توجه به نياز روزافزون به طراحی و پياده سازی نرم افزارهای متكیبر وب، مدل های Three Tire و N-Tire بشدت مورد توجه طراحان و پيادهكنندگان نرم افزارهای متكی بر بستر وب قرار گرفته است.