PDA

View Full Version : تفاوت اتصال به سرور توسط برنامه ویندوزی با وب سایت



negar.rafie
یک شنبه 11 مهر 1395, 12:06 عصر
سلام
فرض کنید ما قصد راه اندازی یک شبکه اجتماعی را داریم
حال تفاوت نرم افزاری که به صورت ویندوز اپلیکیشن راه اندازی میشه با نرم افزاری که به صورت یک سایت راه اندازی میشه در چیست؟
مثلا کلوب را به جای اینکه بیایم به صورت سایتراه اندازی کنیم به صورت یک نرم افزار ویندوزی پیاده سازی کنیم
ایا از لحاظ سرعت و موارد دیگه باهم فرق دارن؟

golbafan
یک شنبه 11 مهر 1395, 13:23 عصر
سلام
هم بله و هم نه !!!

بسته به تکنولوژی هایی که استفاده میشه و همچنین روش پیاده سازی سایت و نرم افزار و ایجاد کانکشن ها میتونه سرعت اپلیکیشن بیشتر و یا کمتر از وبسایت بشه
بطور کلی اون چیزی که خیلی مهم هست اینه که شما چه مقدار اطلاعات رو از سرور به سمت کلاینت فراخوانی کنید و همچنین مهمه که چه مقدار بار پردازشی روی سرور ایجاد کرده باشید

در صورتی که نرم افزار شما مستقیم به سرور دیتابیس در شبکه وصل باشه هر کوئری که میزنید باید کلی دیتا به سمت کلاینتها شیر بشه که باعث مصرف بالای ترافیک و کند شدن سیستم ها میشه
فرض کنید 500 کلاینت دارید و هرکدوم هر 10 ثانیه کوئری هایی میزنن به سمت سرور. سرور باید 50 کوئری در هر ثانیه پردازش کنه و سپس داده های زیاد و مختلفی رو به سمت هر کلاینت شیر کنه
و اگر داده ها مثلا شامل عکس هم باشن دیگه بدتر... ممکنه اصلا سرور نتونه این همه ترافیک رو پشتیبانی کنه!!!

در وب سایت ها شما درخواست رو به یک سرور میفرستید که وب سایت (سرویس) اصلی در اون قرار داره و از اونجایی که اون سرویس دسترسی بهتری به داده ها داره جستجو رو در خودش انجام میده و نتیجه رو بصورت یک صفحه html به شما برمیگردونه
مثلا جستجو در گوگل به طور ساده: شما یک کوئری ارسال میکنی مثلا: (https://www.google.com/search?q=%D8%B3%DB%8C%D8%A8&ie=utf-8&oe=utf-8) که در حد چند بایت هست و شبکه رو اشغال نمیکنه بعد سرویس جستجوی گوگل با توجه به کوئری جستجو رو در خودش انجام میده و نتیجه رو که میتونه شامل میلیون ها رکورد باشه به شما با کد های html ساده و کم حجم (در حد چند کیلوبایت) نشون میده
(برای مثال فوق گوگل صفحه رو به حجم 400 کیلوبایت که شامل عکس هم هست بصورت فشرده ارسال میکنه که بعد از آنپک شدن در مرورگر میشه حدوداً 1.2 مگابایت)

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

نرم افزار 3 لایه:
1- نرم افزار کلاینت: کار این نرم افزار، ایجاد یک کوئری (مثل جستجو در گوگل) از موارد درخواستی شما و ارسال به نرم افزار یا سرویس موجود در سرور هست و همچنین ترجمه و نمایش پاسخهای دریافتی از سرور
2- نرم افزار سرور: کار این نرم افزار یا سرویس، پردازش کوئری دریافتی از سمت سما و جستجو در دیتابیس (همجوار) و ایجاد یک پاسخ با حجم کم هست (مثلا در قالب json)
3- دیتابیس اصلی که فقط نرم افزار سرور میتونه بهش دسترسی داشته باشه

لایه های بیشتر:
در صورت زیاد بودن درخواستها نرم افزار سرور میتونه بجای اتصال مستقیم به سرور فقط نقش یک rooter رو ایفا کنه و مثلا اگر در هر ثانیه داره 1000 کوئری دریافت میکنه بیاد کار تقسیم اینها به گروههای 20 تایی رو انجام بده و مثلا هر 20 کوئری رو برای پردازش و جمع آوری داده به یک سرور دیگه ارسال کنه . بعد داده ها رو از اون سرورها جمع آوری کنه و برای کلاینت های درخواست کننده ارسال کنه

بیشتر:
این وسط میتونه تکنولوژی های دیگه ای هم مثل کلاستریگ و پارتیشنینگ در سمت سرور(های) دیتابیس انجام بشه


نتیجه گیری:
اینکه سرعت کار چقدر باشه بیشتر از هر چیز به نحوه معماری شبکه/پروژه و استفاده از انواع مناسب تکنولوژی مربوط میشه

negar.rafie
سه شنبه 13 مهر 1395, 11:57 صبح
ممنون از شما استاد بزرگوار
یعنی شما میگید بهتره اینگونه برنامه ها را حتما به صورت یک وب سایت پیاده سازی کنیم؟و خیلی بهتر هستش از اینکه به صورت ویندوز اپلیکیشن پیاده سازی بشن؟

Mani_rf
سه شنبه 13 مهر 1395, 12:53 عصر
زمانی که شما تصمیم میگیرید یک برنامه مالتی پلتفرم در این ابعاد بسازید باید استاندارد هایی رو رعایت کنید که در توسعه به مشکلات جدی نخورید.
برای مثال دیتایی که برای همه پلتتفرم ها فرستاده میشه باید و باید دقیقا یکسان باشه، این به این معناست که شما باید سرویس هایی روی سرور داشته باشی که با استفاده از متدها و سیگنچر های یکسان برای همه پلتفرم ها کار کنه.
درواقع شما به هیچ عنوان اجازه ندارید که توی برنامه نسخه ویندوزی کانکشن مستقیم به دیتابیس بزنید. این کار نه تنها از نظر امنیتی مشکل جدی داره بلکه امکاناتی مثل ایجاد CDN یا کش های سروری برای جلوگیری از سلکت های مکرر و یا حتی Load Balance های ساده سرور ها رو از شما میگیره.
از هیچ جا بجز خود سررور نباید امکان اتصال به دیتابیس وجود داشته باشه و باید از معماری های Service Base استفاده بشه.

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

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

برای مثالی که فرمودید (شبکه اجتماعی):
1- سنگ بزرگیه و پیاده سازیش نیاز به تجربه زیاد داره. من این کار رو انجام دادم و البته تحویل دادم اما با مواردی برخورد میکنید که حتی تصوری هم ازش ندارید. مثل تفاوت زمانی مناطق مختلف جغرافیایی.
2- پیشنهاد میکنم که فقط یک نسخه وب داشته باشید و به مالتی پلتفرم بودن فکر نکنید مگر این که داشتن نسخه ویندوزی برای شما مزیت خاصی تولید کنه. برای مثال شما میخواید یک عکس رو به کاربر طوری نمایش بدید که نتونه از روش کپی بگیره، این کار توی ویندوز و موبایل امکان پذیر هست اما توی وب هرگز (برای نمونه استراتژی تلگرام در نمایش عکس های زمان دار. حتی نمیشه از صفحه اسکرین شات گرفت).
3- بزرگترین مزیت وب اینه که نیازی به برنامه نویسی مکرر برای دیوایس های متفاون ندارید و میشه اون رو مالتی پلتفرم تصور کرد.

Naghibi
شنبه 15 آبان 1395, 08:37 صبح
درواقع شما به هیچ عنوان اجازه ندارید که توی برنامه نسخه ویندوزی کانکشن مستقیم به دیتابیس بزنید. این کار نه تنها از نظر امنیتی مشکل جدی داره بلکه امکاناتی مثل ایجاد CDN یا کش های سروری برای جلوگیری از سلکت های مکرر و یا حتی Load Balance های ساده سرور ها رو از شما میگیره.
از هیچ جا بجز خود سررور نباید امکان اتصال به دیتابیس وجود داشته باشه و باید از معماری های Service Base استفاده بشه.

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

DrPedram
شنبه 15 آبان 1395, 13:56 عصر
سوال منم هست!

Mani_rf
شنبه 15 آبان 1395, 16:42 عصر
با تشکر از استاد گرامی
میشه یکم بیشتر توضیح بدین که سمت سرور چه برنامه ای باید وجود داشته باشه؟ یعنی فرض کنید ما یک برنامه ویندوز اپلیکیشن داریم که روی سیستم کلاینت ها نصب میشه و دیتابیس آن روی سرور قرار گرفته. با توجه به گفته شما برنامه نباید کانکشن مستقیم به دیتابیس بزنند، پس چه اتفاقی باید بیفتد؟ سمت سرور باید یه سرویس اجرا شود یا یه ویندوز اپلیکیشن دیگه که جوابگوی کلاینت ها باشد؟

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

baidin
چهارشنبه 27 اردیبهشت 1396, 01:15 صبح
زمانی که شما تصمیم میگیرید یک برنامه مالتی پلتفرم در این ابعاد بسازید باید استاندارد هایی رو رعایت کنید که در توسعه به مشکلات جدی نخورید.
برای مثال دیتایی که برای همه پلتتفرم ها فرستاده میشه باید و باید دقیقا یکسان باشه، این به این معناست که شما باید سرویس هایی روی سرور داشته باشی که با استفاده از متدها و سیگنچر های یکسان برای همه پلتفرم ها کار کنه.
درواقع شما به هیچ عنوان اجازه ندارید که توی برنامه نسخه ویندوزی کانکشن مستقیم به دیتابیس بزنید. این کار نه تنها از نظر امنیتی مشکل جدی داره بلکه امکاناتی مثل ایجاد CDN یا کش های سروری برای جلوگیری از سلکت های مکرر و یا حتی Load Balance های ساده سرور ها رو از شما میگیره.
از هیچ جا بجز خود سررور نباید امکان اتصال به دیتابیس وجود داشته باشه و باید از معماری های Service Base استفاده بشه.

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

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

برای مثالی که فرمودید (شبکه اجتماعی):
1- سنگ بزرگیه و پیاده سازیش نیاز به تجربه زیاد داره. من این کار رو انجام دادم و البته تحویل دادم اما با مواردی برخورد میکنید که حتی تصوری هم ازش ندارید. مثل تفاوت زمانی مناطق مختلف جغرافیایی.
2- پیشنهاد میکنم که فقط یک نسخه وب داشته باشید و به مالتی پلتفرم بودن فکر نکنید مگر این که داشتن نسخه ویندوزی برای شما مزیت خاصی تولید کنه. برای مثال شما میخواید یک عکس رو به کاربر طوری نمایش بدید که نتونه از روش کپی بگیره، این کار توی ویندوز و موبایل امکان پذیر هست اما توی وب هرگز (برای نمونه استراتژی تلگرام در نمایش عکس های زمان دار. حتی نمیشه از صفحه اسکرین شات گرفت).
3- بزرگترین مزیت وب اینه که نیازی به برنامه نویسی مکرر برای دیوایس های متفاون ندارید و میشه اون رو مالتی پلتفرم تصور کرد.
سلام
دوست عزیز اگه امکانش هست خطی که مشخص کرده ام را بیشتر توضیح بدید.
تشکر

Mani_rf
پنج شنبه 28 اردیبهشت 1396, 10:29 صبح
معماری های وجود دارند که اصولا طراحی و پیاده سازی اونها بر مبنای ارتباط با دیتابیس از طریق سرویس هاست که به service-oriented architecture (SOA) Programming (https://en.wikipedia.org/wiki/Service-oriented_architecture) معروف هستند.
در این معماری ها برنامه شما فقط از طریق یک واسط که سرویس باشه به دیتابیس دسترسی داره و هیچ کانکشن مستقیمی از برنامه اتفاق نمی افته.
برای مثال :
زمانی که تو برنامه جستجو انجام میدید، برنامه یک سرویس رو فراخوانی میکنه و پارامتر های لازم رو بهش میده و منتظر پاسخ میمونه. پس از دریافت پاسخ اطلاعات رو نمایش میده.
و یا هنگامی که میخواید یک رکورد جدید ثبت کنید، اطلاعات اون رکورد رو به سرویس میفرستید و سرویس بعد از بررسی و ثبت پاسخ مبنی بر ثبت شدن یا وجود ایراد رو برای شما برمیگردونه.