منظور از برنامه های توزیع شده (Distributed Applications) چیست ؟
بسیاری از برنامه های کاربردی و اختصاصی به دلایلی مختلف از بخش
های مختلف و در بسیاری از مواقع مستقل از هم تشکیل شده اند، یعنی نیاز سازمان و
شرکت استفاده کننده از نرم افزار باعث می شود که نرم افزار های مورد نیاز به این
روش پیاده سازی شوند. این نیاز باعث شده است که این نحوه پیاده سازی برنامه
ها بسیار مرسوم شده و نرم افزار های حرفه ای، حداقل یک بخشی از آن به صورت مستقل از
هم پیاده سازی می شوند. این استقلال بخش ها به ما این امکان را می دهد که بتوانیم
بخش های مختلف نرم افزار را ( که به صورت مستقل پیاده سازی شده اند ) روی سیستم
عامل های مختلف توزیع کنیم، یعنی سیستم عامل های مختلف مسئول اجرا کردن بخش های
مختلف نرم افزار می گردند. بنابراین بسیاری از محدودیت های سخت افزاری ، زمانی و ساختاری از بین
خواهد رفت. لذا به این نوع نرم افزار ها، برنامه های توزیع شده اطلاق می شود.
شکل 1:
معماری Service Oriented چیست؟
نرم افزار های توزیع شده ( که در بالا اشاره شد ) در ساده ترین
حالت روی یک سیستم عامل یعنی روی یک ماشین ( کامپیوتر ) اجرا می شوند، یا بهتر است
اینگونه بگوییم اگر نیازی به نوشتن برنامه توزیع شده نباشد ، و برنامه به روش
معمولی پیاده سازی شود، روی یک ماشین به راحتی و به بهترین حالت اجرا خواهد شد. حال
یک قدم جلوتر می رویم و میخواهیم از یک معماری چند لایه برای پیاده سازی همان نرم
افزار قبلی استفاده کنیم، همانطور که می دانید این لایه های نرم افزار هر کدام
وظایف خاص خود را دارند، مثلا در بدیهی ترین حالت یکی از لایه ها تنها وظیفه ارتباط
با بانک اطلاعاتی ( جایی که دیتا در آن ذخیره شده و از همان جا بازیابی می شود) را
دارد و از کار لایه های دیگر اطلاعی ندارد. اگر معماری چند لایه به نحوی پیاده سازی
گردد که کل آن داخل همان ماشین اجرا شود، بخش های مختلف نرم افزار به راحتی با هم
ارتباط برقرار خواهند کرد و اطلاعات مورد نیاز یکدیگر را با ساختار های مختلف به
همدیگر ارسال خواهد کرد ( مانند خروجی های مختلف یک تابع برای استفاده در بخش های
مختلف برنامه ).
حال میخواهیم تغییراتی در این نحوه ارتباط بخش ها و لایه های
برنامه ایجاد کنیم که بتوانیم هر بخش ( یا چند بخش ) را روی یک ماشین مجزا (
سیستم عامل ) قرار دهیم، حال هر کدام از این لایه ها که در ماشین های مختلف
قرار دارند باید به لایه دیگر خدمتی ( منظور همان Service است ) ارایه کنند.
و ارتباط بین لایه های مختلف برنامه تنها با استفاده از این سرویس ها خواهد بود،
بنابراین ما به معماری پیاده سازی نرم افزاری که بخش های مختلف آن به هم سرویس های
مشخص ارائه می کنند ، معماری سرویس گرا ( SOA = Service Oriented Architecture )
اطلاق می کنیم.
حال به یک موضوع برخورد می کنیم، چه پلتفرم های می توانند از این
سرویس ها استفاده کنند، آیا تنها خود ما قادر خواهیم بود که از این سرویس هایی که
خودمان نوشتیم استفاده کنیم ، یا دیگران نیز میتوانند از آن استفاده کنند. قطعا
برنامه نویس های دیگر نیز باید بتوانند از آن استفاده کنند، و چون هر برنامه نویس
با زبان برنامه نویسی خاصی، برنامه های خود را تولید میکند، این معماری و ساختار
باید قابلیت آن را داشته باشد که به تمامی این زبان ها این خدمت را ارایه کند، به
این دلیل باید یک زبان مشترک بین همه زبان های برنامه نویسی وجود داشته باشد که به
ایجاد ارتباط بین ما و آنها کمک کند، به عنوان نمونه XML نیاز ما را برای این کار مرتفع خواهد کرد،
یعنی XML ساختار مشترک بین زبان های مختلف برنامه نویسی است که همه
زبان ها قابلیت درک آن را دارند . پس سرویس های مختلف نوشته شده ما باید با
زبان XML با هم صحبت کنند. کلامی که با زبان XML بیان می شود را هر زبان برنامه
نویسی درک خواهد کرد.
شکل 2:
تکنولوژی های اولیه موجود برای ایجاد سرویس در برنامه های توزیع شده :
برخی از تکنولوژی هایی که اوایل برای پیاده سازی برنامه های قابل
استفاده در سیستم ها و معماری های توزیع شده مورد استفاده قرار می گرفت عبارت بود (
و هست ) از
مواردی چون:
Enterprise Services، NET Remoting. ، Web Services و...
در این مجال می خواهیم توضیح کوتاهای در مورد Web Services ارایه کنیم و خواهیم دید
چرا سیر تکامل Web Services منجر به ایجاد WCF گردید.
Web Services از تکنولوژی های اولیه ای بود که برای نوشتن Service های مورد نیاز در
سیستم های توزیع شده استفاده می شد. البته این تکنولوژی هنوز هم در سطح گسترده ای
مورد استفاده قرار می گیرد و بیشتر برنامه هایی که توسط این تکنولوژی برای استفاده
دیگر برنامه ها ایجاد شده بود، هنوز هم به بهترین شکل فعال بوده و استفاده کنندگان
از این برنامه ها هنوز هم از آنها بهره می جویند. مثلا شرکت هایی که سرویس های
هواشناسی ارایه می دهند و در اولین نسخه های خود با تکنولوژی Web Service آن را به
دنیای مصرف ارایه دادند و هنوز هم این سرویس ها را با همان تکنولوژی ارایه می دهند و
مصرف کنندگان آن خدمات ، خوشحال و راضی به استفاده از آن خدمات ادامه می دهند.
اما شاید وب سرویس کاستی هایی داشته باشد که در شرایط اضطراری خود را بروز می دهند،
که اشاره کوتاهی به آنها می کنیم:
- شاید یکی از عمده ترین اشکالات یا کمبود های Web Service این است که تنها از
پروتکل و قرار داد انتقال داده HTTP استفاده می کند، در حالی که پروتکل های متعدد
دیگری وجود دارد که برای مرتفع کردن نیاز های متنوع دیگری در این حوزه پیاده سازی
شده اند، اما Web Service قادر نیست تحت این پروتکل ها انتقال اطلاعات انجام دهد،
بنابراین اگر دو برنامه کاربردی بخواهند ارتباط بینشان به صورت باینری باشد و از
پروتکل TCP برای ارتباط با یکدیگر استفاده کنند، وب سرویس از ارایه خدمان به این دو
برنامه عاجز خواهد بود.
چه باید کرد؟ در این صورت نیاز به استفاده از یک تکنولوژی
دیگر احساس می شود. یعنی یک تکنولوژی دیگری را باید فرا گرفت، مثلا: Remoting
Services ، کارزار بعدی این است که خود Remoting Services نیز در پلت فرم های
گوناگون تعاریف خود را دارد و به عنوان مثال برنامه نویس دات نت باید از Dot Net Remoting برای پیاده سازی این کار استفاده کند، پس باید آن را هم یاد بگیرد.
یکی دیگر از اشکالات عمده ای که به Web Service وارد است
محدودیت در میزبانی آن است، وب سرویس تنها میتواند روی IIS میزبانی شود،
یعنی فقط سرور های ویندوز . در حالی که این مشکل در WCF مرتفع شده است و wcf امکان
میزبانی روی Windows ، WAS , پلتفرم های دیگری را نیز دارد. شاید همین کاستی ها بود
که مایکروسافت تکنولوژی WCF را به وجود آورد.
شکل 3:
WCF چیست ؟
همانطور که می دانید WCF مخفف شده سه کلمه Windows
Communication Foundation است که برای ایجاد برنامه های سرویس گرا به وجود
آمده است، این سرویس گرایی بدین صورت معنی می شود که برنامه دومی وجود دارد که ما
از نحوه پیاده سازی آن بی اطلاع هستیم ولی با استفاده از این تکنولوژی به آن برنامه
خدمات ارایه می کنیم، و اطلاعات درخواستی آن برنامه را با در نظر گرفتن استاندارد
های لازم و مسائل امنیتی مورد نیاز، فراهم می کنیم. بنابراین این چنین بگوییم که
WCF برای ایجاد و توسعه سرویس هایی استفاده می شود که قابلیت دسترسی برای تعداد
زیادی از مشتریان مختلف را فراهم می آورد، دارد.
WCF محیطی را فراهم می کند که بتوان
خدماتی را برای برنامه نویسان زبان های برنامه نویسی مبتنی بر Windows ( و میزبانی
شده توسط Windows ) و همچنین مشتریان متعصب Linux و یا هر نوع دیگر از سیستم
عامل ها ارایه کرد. WCF امکانات بسیار بیشتری نسبت به Web Service فراهم کرده است.
Wcf اکثر پروتکل های مورد نیاز برنامه نویسان ، مانند http , tcp, msmq و ... را
پشتیبانی می کند، نکته حائز اهمیت این است که ارایه خدمات تحت کلیه این
پروتکل ها همه با یک روش برنامه نویسی قابل پیاده سازی است (unification در wcf) و برنامه نویس
می تواند تنها با
تغییر در پیکربندی سرویس خود ، این سرویس را با پروتکل های مختلف ارایه کند تا
سرویس گیرنده های مختلفی بتوانند از این سرویس استفاده کنند. بنابراین WCF مجموعه
ای از کتابخانه های نرم افزاری است که برای ایجاد سیستم هایی به وجود آمده
است که برای ارسال درخواست و دریافت نتیجه آن همواره پیام هایی را بین خود و
مشتری رد و بدل می کنند.
بهتر است اشاره کنیم که WCF بعد از دان نت فریم وورک نسخه 3.0 ارایه شده است.
شکل 4:
چرا ما باید از WCF استفاده کنیم ؟
حال می خواهیم بگوییم که در نهایت چرا استفاده از WCF برای ما مفید
بوده و توسط برنامه نویسان حرفه ای توصیه می شود. یا شاید بهتر است بگوییم مزایای
WCF چیست؟
1- یکی از مزیت های اصلی WCF قابلیت همکاری آن با دیگر برنامه ها
و سرویس ها بدون در نظر گرفتن پلتفرم آن برنامه ( سرویس ) است. این ویژگی در برخی
از تکنولوژی ها وجود ندارد، به عنوان مثال در Dot Net Remoting هر دو طرف سرویس
دهنده و سرویس گیرنده باید از Dot Net پشتیبانی کنند. به چنین برنامه
هایی برنامه های interoperabile ( همکنش پذیر یا سازگار ) گفته می شود.
توضیح بیشتری در مورد برنامه های سازگار در ادامه مطالب ارایه شده است.
2-
WCF از پروتکل های مختلفی برای ارتباط بین سرویس دهنده و سرویس گیرنده
استفاده می کند در حالی که تکنولوژی هایی مانند Web Services فقط از پروتکل HTTP
استفاده می کنند. بنابراین اگر دو برنامه ( سرویس دهنده و سرویس گیرنده ) بخواهند
با یک پروتکل دیگری مانند TCP با یکدیگر ارتباط برقرار کنند، وب سرویس باید جای خود
را به WCF بدهد.
3- یکی دیگر از مزایای غیر قابل انکار WCF قابلیت میزبانی آن در بستر های مختلف است،
در حالی که تکنولوژی هایی مانند Web Service تنها روی IIS قابلیت میزبانی دارند. یک
سرویس WCF را می توان روی IIS ، WAS ، Self-Hosting و Windows Service
میزبانی کرد.
4- WCF قابلیت اعتماد و امنیت بیشتری نسبت به تکنولوژی وب سرویس ( ASMX ) دارد
.
5- WCF
دارای سیستم و کتاب خانه توابع درونی برای گرفتن لاگ و ثبت گزارش است. این در حالی
است که در تکنولوژی های دیگر برای لاگ گیری نیاز به کدنویسی وجود دارد.
6- با استفاده از WCF ، ما یک سرویس را پیاده سازی می کنیم ، و هر تعداد ، نقطه
پایانی که برای پشتیبانی از تمام کاربران را نیاز داشته باشیم را پیکربندی می کنیم و
نیازی نیست برای هر نقطه پایانی توابع مختص آن را پیاده سازی کنیم ، فقط کافی است
تغییرات کوچکی در پیکربندی برای تکمیل درخواست ها از طرف دیگر برنامه ها
ایجاد کنیم.
7- WCF فرمت پیام امن را برای انتقال روی شبکه فراهم می کند.
8- WCF از Load balancing و Scaling پشتیبانی میکند. در مورد Scalability یا مقیاس
پذیری برنامه توضیحاتی را در ادامه مطلب ارایه می کنیم.
9- شاید بتوان گفت که WCF و Ajax به نحوی با هم ادغام شده اند و همچنین WCF
به طور پیش فرض از Json نیز پشتیبانی می کند.
10- و بسیاری مزایای ریز و درشت دیگر ...
شکل 4:
شکل 5:
برنامه سازگار(interoperable Application) چیست؟
به یک برنامه، که بتواند با هر برنامه ی پیاده سازی شده در هر
نرم افزار دیگر با هر پلتفرمی ارتباط برقرار کند ، برنامه سازگار می گویند .
وب سرویس ها سازگار هستند، چون بر مبنای XML پیاده سازی شده اند و چون استاندارد
خروجی آنها XML است و XML نیز یک زبان قابل شناسایی برای تمامی پلتفرم های دیگر
است.
Dot Net Remoting Services سازگار نیستند و فقط می توانند با برنامه هایی ارتباط
برقرار کنند که از Dot Net پشتیبانی کنند.
شکل 6:
Scalability یا مقیاس پذیری چیست ؟!
Scalability زمانی مطرح می شود که یک وب سایت یا برنامه، کاربران
زیادی را داشته باشد ( یعنی استفاده کننده های همزمان زیادی را بخواهد پوشش دهد ) و
یا بخواهد پردازش های سنگینی را روی اطلاعات و دیتای ذخیره شده انجام دهد. و در این
صورت نباید کارایی و performance برنامه کاهش پیدا کند. زمانی که برنامه ما کاربران
محدودی دارد ، شاید بحث در مورد واژه مقیاس پذیری محلی از اعراب نداشته باشد ( گرچه
همیشه باید این موضوع را هر چند به طور خفیف مورد عنایت قرار دهیم )، اما زمانی که
برنامه ما به طور وسیعی توسط کاربران در هر ساعتی از شبانه روز مورد استفاده قرار
می گیرد، این جاست که اگر برنامه ما از کارایی لازم برخودار نباشد، با شکست مواجه
خواهیم شد.
اکثر برنامه هایی که با کاربران سر و کار دارند حد اقل از سه بخش عمده
تشکیل شده اند. بخش اول ، بخشی است که کاربران مستقیم با آن در ارتباط هستند (
همیشه در حال کلیک و یا تایپ و یا کار با موشواره هستید) یعنی همان جا که اطلاعات و
بخش های نرم افزار توسط چشمانمان قابل مشاهده است که به این بخش واسط کاربری می گویند
( User Interface ). بخش دوم ، قسمتی است که در آن پردازش های لازم بر روی اطلاعات
دریافت شده ( از بخش سوم ) انجام شده و به نحو قابل فهم و قابل تفسیری به شکل گویا
به کاربران نمایش داده می شود، شاید این لایه اسامی ترجمه شده عجیبی داشته باشد،
چون این لایه با اسامی مانند "لایه کسب و کار" ، "لایه منطق تجاری (business
logic layer)" ، " لایه منطقی برنامه" خوانده می شود. ما اینجا اسم دیگری برای آن
مشخص می کنیم، از آنجا که این لایه وظیفه ارتباط با لایه اول ( واسط کاربری ) و
لایه سوم ( لایه دیتا ) را دارد به آن لایه میانی می گوییم. بخش سوم نیز بخش بانک
اطلاعاتی یا به اصطلاح لایه دیتا (Data Layer) است که کلیه ذخیره سازی های مربوط به
اطلاعات و عملیات چند گانه ( درج و حذف و ویرایش و گزارش گیری از دیتا و ... )
در این لایه انجام می گیرد. ( البته بخشی از برخی از این کار های مربوط به لایه
دیتا ممکن است بنا به دلایلی در لایه میانی نیز انجام گیرد.) این لایه ارتباط
مستقیم با دیسک سخت ( یا همان هارد کامپیوتر ) دارد. در هر کدام از این سه لایه در
هر لحظه پردازش های مختص آن لایه در حال انجام است و هر کدام به اندازه لازم از
منابع سخت افزاری و نرم افزاری استفاده می کنند .
این مقدمه چینی را کردیم که
با این موضوع برسیم که در برنامه های کوچک تمامی این سه لایه می توانند داخل یه باکس
یکتا قرار بگیرند و بحث لایه ها دیگر مطرح نباشد. یعنی این سه لایه را به صورت یک
لایه واحد ببینیم.( هر اسمی هم بخواهیم می توانیم برای آن قرار دهیم). ولی در برنامه
های بزرگ، داستان تغییر میکند چون درخواست ها از برنامه بسیار زیاد بوده و در هر
لحظه Request های زیادی به برنامه ارسال می شود، برای بالا بردن کارایی ، این نیاز
پیدا می شود که هر لایه روی یک دستگاه جداگانه قرار بگیرد که در استفاده از منابع
سخت افزاری و نرم افزاری دچار کمبود نشویم. نوشتن برنامه های با این صورت و با در
نظر گرفتن تمامی لایه های لازم، باعث می شود که برنامه ما Scalable یعنی مقیاس پذیر
شود.
شکل 7:
Unification چیست؟
یکی از مواردی که در WCF انجام شده است، رهایی دادن برنامه نویس از
درگیری های پیاده سازی یک سرویس برای تکنولوژی های مختلف است. جایی در بالا اشاره
کرده بودیم که WCF تکنولوژی های مختلف پیاده سازی یک سرویس را گرد هم آورده و تحت
یک واحد مستقل ارایه کرده است. این کار باعث شده است که برنامه نویسان علاقه بیشتری
برای استفاده از WCF داشته باشند و این نیز بدین معناست که رغبت به پیاده سازی نرم
افزار های مبتنی بر سرویس بیشتر شده است و بهره وری توسعه دهندگان نرم افزار
ها بوسیله یکی شدن تکنولوژی ها بالا رفته است. منظور از تکنولوژی هایی که در این
پاراگراف گفتیم، موارد زیر است که در بالا نیز به آنها اشاره کرده ایم.
1) Com+ Services : تکنولوژی Com+ نیز زیرساخت
های لازم را برای ایجاد برنامه های توزیع شده فراهم می کند. Com+ امکانات مختلفی مانند ادغام
Object ها و اشیا فقط در زمان اجرا و فعال سازی برنامه ، و ایجاد برنامه های کاربردی بسیار امن و مقیاس پذیر
را به برنامه نویسان ارایه میکند.
2) Web Service : همان دوست قدیمی است که در بالا به
آن اشاره کردیم و مدت زمات زیادی است که به کمک ما آمده اند.
3) .NET Remoting
4) MSMQ :
MSMQ مخفف سرواژه های Microsoft Message Queuing می باشد که توسط مایکرو سافت درون
سیستم عامل ویندوز، ایجاد شده است.صف MSMQ به برنامه نویس این تضمین را می دهد که پیام ها را به صورت مطمئن ، بین
سرویس دهنده و سرویس (WCF) ، ارسال کند.
شکل 8:
منابع:
WCF Tutorial
Developing Service-Oriented Applications with WCF