ورود

View Full Version : سوال: ارتباط نرم افزارهاي نصب شده در چند شهر با سرور مركزي ؟



Modifier
شنبه 12 تیر 1389, 19:17 عصر
سلام

ميخوام يه راهنمايي حتي كوچيك بكنيد كه چنين كاري چطوري و با چه تكنولوژي بايد صورت بگيره ...

و اين سيستم چه خصوصياتي بايد داشته باشه ؟

ممنون.

يا علي.

Mahyaa
یک شنبه 13 تیر 1389, 10:14 صبح
نرم افزار نصب شده یعنی چی؟ همه به یک دیتابیس سرور محلی متصلند؟

اگر بله، باید برید سراغ Replication

مهران رسا
یک شنبه 13 تیر 1389, 10:18 صبح
سلام

ميخوام يه راهنمايي حتي كوچيك بكنيد كه چنين كاري چطوري و با چه تكنولوژي بايد صورت بگيره ...

و اين سيستم چه خصوصياتي بايد داشته باشه ؟

ممنون.

يا علي.
کار نرم افزار های شما چیه ؟ چه چیزی رو باید به اشتراک بگذارند ؟ بیشتر در این مورد توضیح بدید .

Modifier
یک شنبه 13 تیر 1389, 11:05 صبح
کار نرم افزار های شما چیه ؟ چه چیزی رو باید به اشتراک بگذارند ؟ بیشتر در این مورد توضیح بدید .
يه نرم افزار فرض كنيد حسابداري (ببخشيد اجازه ندارم در موردش چيزي بگم) ميخوام sql server توي يك شهر باشه و خود نرم افزار رو تو چندتا شهر ديگه هم نصب كنم و اينها به DB دسترسي داشته باشن...

Mahyaa
یک شنبه 13 تیر 1389, 11:32 صبح
همونطور که قبلا هم گفتم، باید دیتابیس سرور رو در سرورها محلی (در همون LAN) نصب کنید و بر اساس نیازتون یک نوع Replication انتخاب کنید (مثلا Transactional) و تنظیم کنید که داده ها با سرور اصلی بروز بشن. من فرض کردم که دیتابیس سرور شهرهای مختلف میتونند همدیگر رو ببینند یا سرور اصلی دارای یک IP اختصاصی یا Dedicated است.

راه دیگه اینه که یک Dedicated IP برای سرور اصلی داشته باشید و با استفاده از این IP و با باز کردن یک پورت خاص از هر جای دنیا کانکت بشید. این راه برای برنامه های تحت فرم زیاد جالب نیست و مشکلات خاص خودش رو داره.

hamid-nic
دوشنبه 14 تیر 1389, 00:18 صبح
راه دیگه اینه که یک Dedicated IP برای سرور اصلی داشته باشید و با استفاده از این IP و با باز کردن یک پورت خاص از هر جای دنیا کانکت بشید. این راه برای برنامه های تحت فرم زیاد جالب نیست و مشکلات خاص خودش رو داره.
سلام
چرا این روش جالب نیست ؟ مگه چه مشکلاتی داره ؟

Mahyaa
دوشنبه 14 تیر 1389, 09:46 صبح
سلام
چرا این روش جالب نیست ؟ مگه چه مشکلاتی داره ؟


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

وقتی اتصال به اینترنت به هر نحوی قطع و وصل میشه، همون سشن دوباره متصل نمیشه و ممکنه برنامه کار نکنه (بستگی به برنامه داره مثلا ممکنه در این برنامه، کانکشن فقط در صورت نیاز ایجاد میشه که در این صورت این مشکل پیش نمیاد).
برنامه کند تر از حد توقع کاربر میشه و اگر کوئری ها در حد خوبی بهینه نباشن برنامه فریز میشه. کلا برنامه های فرمی که به یک سرور خارج از LAN وصل میشن معمولا نرم و تمیز کار نمیکنند.

همونطور که گفتم تا حد زیادی میشه حلش کرد ولی نه برای برنامه ای که قبلا نوشته شده.

در نهایت آخر کار به این نتیجه میرسیم که شاید Replication، کم هزینه ترین راه باشه.

vcldeveloper
دوشنبه 14 تیر 1389, 13:31 عصر
در نهایت آخر کار به این نتیجه میرسیم که شاید Replication، کم هزینه ترین راه باشه.
Replication چندان هم کم هزینه نیست؛ شما میخواید روی هر کدام از کلاینت ها یک نسخه از SQL Server را نصب کنید (همین خودش به تنهایی پر هزینه هست؛ هم از نظر زمان نصب، هم از نظر امکانات سخت افزاری و نرم افزاری مورد نیازش، هم از نظر نگهداری آن)، سپس برای هر کدام از این Serverها، یک Replication با سرور مرکزی ایجاد کنید، که این هم خودش پر هزینه هست، و Replication جزو سرویس های پیچیده SQL Server محسوب میشه.

مشکلاتی که مطرح کردید، مشکل اتصال به یک سرور راه دور نیستند، بلکه مشکلات مربوط به طراحی و پیاده سازی بد و غلط برنامه هستند. استفاده از Replication برای همچین مواردی، یعنی بی خیال مشکلات برنامه بشیم، و این مشکلات را بر دوش SQL Server بیاندازیم.


برنامه کند تر از حد توقع کاربر میشه و اگر کوئری ها در حد خوبی بهینه نباشن برنامه فریز میشه.
برنامه نویس باید کوئری های بهینه بنویسه. در ضمن، در یک برنامه راه دور، باید نتایج را به نحوی درخواست کنه که موجب ترافیک بیش از اندازه در شبکه نشه (مثلا درخواست داده ها به صورت صفحه به صفحه).
اگر کوئری سنگین هست، و نمیشه بیشتر از این اون رو بهینه کرد، باید اجرای کوئری را بصورت Asynchronous انجام بده، نه اینکه برای یک اتصال زمان بر شبکه، بیاد از همون Thread اصلی برنامه استفاده کنه، و بگه کوئری برنامه رو Freeze میکنه.

اگر اتصال به سرور به صورت پیوسته نیاز نیست، باید مکانیزم سبکی برای ذخیره موقت داده ها به صورت Local پیش بینی بشه، تا در زمان نیاز، داده های Local ذخیره شده، به سرور ارسال بشند.

برنامه نویس باید نسبت به کدهایی که موجب اتصال به شبکه میشند، حساس باشه؛ و از اتصال های غیر ضروری، و ارسال و دریافت داده بیخودی اجتناب کنه.

سرعت اتصال به شبکه باید متناسب با نوع داده های ارسالی و دریافتی باشه، کسی که فرضا با هر کوئری چند عکس را رد و بدل میکنه، نباید انتظار داشته باشه که بهینه ترین نرم افزار جهان هم روی خط Dial-up براش معجزه کنه.

ساختار بانک اطلاعاتی باید به درستی طراحی شده باشه، تا کوئری های مورد نظر، در کوتاه ترین زمان ممکن آماده بشند.

سخت افزار و اتصال شبکه سرور هم باید متناسب با نوع و تعداد درخواست ها تعیین بشه.

goolestan
دوشنبه 14 تیر 1389, 14:07 عصر
سلام دوستان عزیز این کاری که میخواهید انجام بدهید نیاز به یک معماری خیلی قوی DataBase و App دارد و کار هر کسی نیست کمتری شرکتی هم وجود دارد که الگوریتم قوی برای این موارد دارند
در ضمن هزینه این کار هم بالاست و هزینه های بعدی این کار جهت نگهداری DataBase بسته به تعداد تراکنش های برنامه تون افزایش میابد
اگه خواستید میتوانید با Goool59@yahoo.com با بنده ارتباط برقرار کنید در ضمن Repilcation بد ترین حالت ممکن مینونه برای این مسئله باشه اگه کوچکترین اشتباهی در طراحی بانک تون داشته باشد

Mahyaa
سه شنبه 15 تیر 1389, 09:06 صبح
Replication چندان هم کم هزینه نیست؛ شما میخواید روی هر کدام از کلاینت ها یک نسخه از SQL Server را نصب کنید (همین خودش به تنهایی پر هزینه هست؛ هم از نظر زمان نصب، هم از نظر امکانات سخت افزاری و نرم افزاری مورد نیازش، هم از نظر نگهداری آن)، سپس برای هر کدام از این Serverها، یک Replication با سرور مرکزی ایجاد کنید، که این هم خودش پر هزینه هست، و Replication جزو سرویس های پیچیده SQL Server محسوب میشه.

مشکلاتی که مطرح کردید، مشکل اتصال به یک سرور راه دور نیستند، بلکه مشکلات مربوط به طراحی و پیاده سازی بد و غلط برنامه هستند. استفاده از Replication برای همچین مواردی، یعنی بی خیال مشکلات برنامه بشیم، و این مشکلات را بر دوش SQL Server بیاندازیم.


برنامه نویس باید کوئری های بهینه بنویسه. در ضمن، در یک برنامه راه دور، باید نتایج را به نحوی درخواست کنه که موجب ترافیک بیش از اندازه در شبکه نشه (مثلا درخواست داده ها به صورت صفحه به صفحه).
اگر کوئری سنگین هست، و نمیشه بیشتر از این اون رو بهینه کرد، باید اجرای کوئری را بصورت Asynchronous انجام بده، نه اینکه برای یک اتصال زمان بر شبکه، بیاد از همون Thread اصلی برنامه استفاده کنه، و بگه کوئری برنامه رو Freeze میکنه.

اگر اتصال به سرور به صورت پیوسته نیاز نیست، باید مکانیزم سبکی برای ذخیره موقت داده ها به صورت Local پیش بینی بشه، تا در زمان نیاز، داده های Local ذخیره شده، به سرور ارسال بشند.

برنامه نویس باید نسبت به کدهایی که موجب اتصال به شبکه میشند، حساس باشه؛ و از اتصال های غیر ضروری، و ارسال و دریافت داده بیخودی اجتناب کنه.

سرعت اتصال به شبکه باید متناسب با نوع داده های ارسالی و دریافتی باشه، کسی که فرضا با هر کوئری چند عکس را رد و بدل میکنه، نباید انتظار داشته باشه که بهینه ترین نرم افزار جهان هم روی خط Dial-up براش معجزه کنه.

ساختار بانک اطلاعاتی باید به درستی طراحی شده باشه، تا کوئری های مورد نظر، در کوتاه ترین زمان ممکن آماده بشند.

سخت افزار و اتصال شبکه سرور هم باید متناسب با نوع و تعداد درخواست ها تعیین بشه.

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

در مورد Replication هم درست میگی من یک لحظه این رو در نظر گرفتم که هر محل برای خودش یک سرور جدا داره و SQL Server هم که خوب مجانیه! که خوب هیچکدوم درست نیست.

من الان برای یکی از کارهای خودم دارم از همین اتصال استفاده میکنم.
خوب من از اول که برنامه رو طراحی میکردم میدونستم که چه جور اتصالی دارم و به این مشکلات بر نخوردم.
یک برنامه دیگه ای رو در شرکتمون داریم که حدود سه سال پیش توسط تیم دیگه ای تولید شده ولی نمیتونیم به راحتی به سرور راه دور متصلش کنیم. ما Replication رو انتخاب کردیم.