ورود

View Full Version : Load Balancing



bpzone
یک شنبه 08 اسفند 1389, 14:05 عصر
با سلام
ما یک سرور داریم که روی چند ماشین آنرا اجرا می نماییم
اگه بخواهیم که یک load balancer بنویسیم که ما بین کلاینت ها و سرورها قرار بگیرد و درخواست کلاینت ها را بر روی سرور ها تقسیم کند
سرور را چه جوری باید تعریف کنیم ؟
load balancer را چگونه پیاده سازی کنیم ؟
ارتباطات بر مبنای سوکت می باشد.

kobari
سه شنبه 10 اسفند 1389, 09:57 صبح
با سلام
ما یک سرور داریم که روی چند ماشین آنرا اجرا می نماییم
اگه بخواهیم که یک load balancer بنویسیم که ما بین کلاینت ها و سرورها قرار بگیرد و درخواست کلاینت ها را بر روی سرور ها تقسیم کند
سرور را چه جوری باید تعریف کنیم ؟
load balancer را چگونه پیاده سازی کنیم ؟
ارتباطات بر مبنای سوکت می باشد.

موضوع بسيار جالبي است كه پياده سازي ‌آن بايد خيلي با دقت انجام شود چون كوچكترين مشكل آن باعث از دسترس خارج شدن كليه سرور ها خواهد شد. اگه براي يك كار جدي قراره استفاده بشه من فكر كي كنم كه استفاده از نرم افزارهاي اپن سورس مطمئن ترين راه باشه. اما اگر بلحاظ خاصي مجبور به پياده سازي آن باشي، بهتره كه اول مكانيزمها، الگوريتم ها و يا استراتژي هاي معتبر را كه براي نوشتن يك لود بلانسر لازم است ، مطالعه كنيد تا بهترين روش پياده سازي را بدست آوريد. اما در يك شكل خيلي ساده شده لود بلانسر مورد نظر شما ،كلياتي كه همينطوري به ذهن من ميرسه و فكر مي كنم لازمه بهش پرداخته بشه اينها است:

- ايجاد قابليت query گرفتن از سرور ها براي بدست آوردن آمار سوكت هاي متصل به آن (از نظر تعداد و بار پردازشي اي كه هر سوكت به سرور تحميل كرده و احيانآ مدت زمان اتصال ها و ...)
- تشخيص و انتخاب كم كار ترين سرورها
- ارسال مشخصات سوكت مربوط به سرور انتخاب شده به كلاينت
- و نهايتآ باز كردن سوكت با مشخصات ارسال شده توسط كلاينت براي اتصال به سرور

mazdadoost
سه شنبه 10 اسفند 1389, 20:54 عصر
دوست عزیز سلام
شما می خواهید منابع بهنای باند و ترافیک رو بالانس کنید یا پروسسور و حافظه یا همه! یا چه منبعی؟
من در این زمینه اطلاعات زیادی ندارم.
اما برای شروع شاید بد نباشه سورس کد یک لود بالانسر اپن سورس (http://www.inlab.de/balance.html) رو مطالعه کنید!

bpzone
چهارشنبه 11 اسفند 1389, 10:19 صبح
- ايجاد قابليت query گرفتن از سرور ها براي بدست آوردن آمار سوكت هاي متصل به آن (از نظر تعداد و بار پردازشي اي كه هر سوكت به سرور تحميل كرده و احيانآ مدت زمان اتصال ها و ...)


در این موردی که ذکر فرمودید، یکی از مواردی که با اون مشکل دارم و نمی دونم که چجوری باید این اطلاعات رو به دست بیارم ، راه حل پیشنهادی شما دوستان چی هست ؟!

javaphantom
چهارشنبه 11 اسفند 1389, 11:31 صبح
در این موردی که ذکر فرمودید، یکی از مواردی که با اون مشکل دارم و نمی دونم که چجوری باید این اطلاعات رو به دست بیارم ، راه حل پیشنهادی شما دوستان چی هست ؟!

]چیزی که من نمی فهمم اینکه در چه سطی می خوای Load balance و clustering داشته باشی؟

در سطح JVM. در سطح DB درسطح web application server یا هر چی دیگه .اول مشخص کن که در چه سطحی می خوای این کار رو انجام بدی تا بشه حرف زد..

bpzone
چهارشنبه 11 اسفند 1389, 12:21 عصر
معماریی که قرار است بر روی اون کار بشه به این شرح می باشد:
تمام درخواست های ( چه از محیط وب و چه شبکه داخلی ) توسط سروری به اسم LoadBalancer دریافت می گردد.
در این سیستم یک Application یکسان همزمان بر روی چند سرور دیگر در پشت LoadBalancer در حال اجرا می باشند و تمامی این Application Server ها به یک DataBase Server متصل می باشند

حالا کاری که قرار است انجام بشه ...
پخش کردن درخواست ها برای سروری که دارای فعالیت کمتری می باشد توسط LoadBalancer است.
و سعی در اینکه بتوان ارتباط مستقیمی ما بین Server و Client به وجود آورد .

javaphantom
چهارشنبه 11 اسفند 1389, 13:56 عصر
معماریی که قرار است بر روی اون کار بشه به این شرح می باشد:
تمام درخواست های ( چه از محیط وب و چه شبکه داخلی ) توسط سروری به اسم LoadBalancer دریافت می گردد.
در این سیستم یک Application یکسان همزمان بر روی چند سرور دیگر در پشت LoadBalancer در حال اجرا می باشند و تمامی این Application Server ها به یک DataBase Server متصل می باشند

حالا کاری که قرار است انجام بشه ...
پخش کردن درخواست ها برای سروری که دارای فعالیت کمتری می باشد توسط LoadBalancer است.
و سعی در اینکه بتوان ارتباط مستقیمی ما بین Server و Client به وجود آورد .


چه محیط وب چه شبکه داخلی با یک protocol کار می کنند مثلا همون web که می گی رو http protocol داره صحبت می کنه که رو TCP IP هست.

اون load balancerی که داری می گی من با apache کار کردم. که به عنوان یک load balancer عمل می کنه.
apache server

اطلاعات بیشتر بگو تا بیشتر بهت راهنمایی کنم

bpzone
چهارشنبه 11 اسفند 1389, 15:41 عصر
اون load balancerی که داری می گی من با apache کار کردم. که به عنوان یک load balancer عمل می کنه.
apache server


می خوام چرخ رو دوباره اختراع کنم
هدفم شبیه ساری هست و اینکه بتونم مکانیزم بکار رفته رو درک کنم !

kobari
چهارشنبه 11 اسفند 1389, 22:40 عصر
در این موردی که ذکر فرمودید، یکی از مواردی که با اون مشکل دارم و نمی دونم که چجوری باید این اطلاعات رو به دست بیارم ، راه حل پیشنهادی شما دوستان چی هست ؟!
اينكه تمام اپليكيشن سرورها نهايتآ به يك سرور ديتابيس وصل مي شند بمعني اينه كه بار پردازش در سرور ديتا بيس متمركز مي شه. بنا براين شايد زياد نشه بار پردازش را توضيع كرد. مگر اينكه خود اپليكيشن سرورها هم داراي پردازش هاي جداگانه و زمانبري باشند كه ما فرض را براين مي گذاريم.
براي پياده سازي لود بلانسر نياز به يك سري اطلاعات داريم كه يايد بصورت ديناميك يا استاتيك آنها را بدست آوريم .فعلا فرض را استاتيك مي گذاريم.
چون برنامه ها از قبل مشخص هستند بايد بتونيم تخميني از زمان اجراي هر برنامه بدست آوريم . براي اندازه گيري دستورات اس كيو ال ، اكثر ديتا بيس سرورها امكان اين را دارند كه بتونيم يك query plan ‌از SQL ها بگيرم در اين كوري پلان ها زمان تقريبي اجراي دستورات sql ثبت ميشه كه بايد در شرايط پيك كاري و شرايط عادي اين زمان ها را اندازه گيري كنيم و در جدولي كه براي اين كار در نظر مي گيريم ذخيره كنيم و به آنها زمان پردازش برنامه در اپليكيشن سرور را هم اضافه كنيم تا بتوانيم از آن بعنوان پارامتر تصميم گيري استفاده كرد

bpzone
پنج شنبه 12 اسفند 1389, 10:14 صبح
در سمت DB پردازش سنگینی وجود نداره
بیشتر بار روی Application هست
چیزی که من میخوام پیاده سازی کنم وصل کردن Client به Server هست که LoadBalancer تشخیص میده
توی این قسمت من مشکل دارم و نمی دونم که باید چیکار کنم !

kobari
پنج شنبه 12 اسفند 1389, 14:35 عصر
در سمت DB پردازش سنگینی وجود نداره
بیشتر بار روی Application هست
چیزی که من میخوام پیاده سازی کنم وصل کردن Client به Server هست که LoadBalancer تشخیص میده
توی این قسمت من مشکل دارم و نمی دونم که باید چیکار کنم !

- كلاينت درخواست اتصال به اپليكيشن سرور را به لود بلانسر مي فرستد.
- لود بلانسر يك اپليكشن سرور انتخاب مي كند و آي پي و شماره پورت و ساير مشخصات را براي كلاينت ارسال مي كند.
- كلاينت يك سوكت جديد با مشخصات دريافت شده جهت اتصال به اپليكيشن سرور باز مي كند.

bpzone
پنج شنبه 12 اسفند 1389, 20:31 عصر
- كلاينت درخواست اتصال به اپليكيشن سرور را به لود بلانسر مي فرستد.
- لود بلانسر يك اپليكشن سرور انتخاب مي كند و آي پي و شماره پورت و ساير مشخصات را براي كلاينت ارسال مي كند.
- كلاينت يك سوكت جديد با مشخصات دريافت شده جهت اتصال به اپليكيشن سرور باز مي كند.

من دقیقاً همین کار رو انجام دادم
آیا در سیستم ها و Application های واقعی هم همین عمل انجام میشه ؟
به عنوان مثال در apache server که یکی از دوستان اشاره کرد !

kobari
جمعه 13 اسفند 1389, 22:44 عصر
من دقیقاً همین کار رو انجام دادم
آیا در سیستم ها و Application های واقعی هم همین عمل انجام میشه ؟
به عنوان مثال در apache server که یکی از دوستان اشاره کرد !

خوب اگه اينكار و كردي و جواب گرفتي كه خيلي عاليه . حالا اگر دنبال روش هاي استاندارد هستي بنظر من وقتش است كه از google كمك بگيري و keyword هاي زير را سرچ كني :
load balancing strategy
load balancing algorithm
load balancing mechanism
تا اونجا كه من بصورت گذرا ديدم آلگوريتم هاي استانداردي براي اينكار ثبت شده. اگه در پيگيري موضوع واقعآ جدي هستي پيشنهاد مي كنم كه قبل از برنامه نويسي يك مقدار وقت بگذاري و حتمآ مقالات مرتبط با موضوع را مطالعه كني. كاري كه مي خواي انجام بدي ظرافت هاي خاص خودشو داره و بايد با پشتوانه اطلاعاتي محكم به برنامه تبديل بشه.
با آرزوي موفقيت

bpzone
دوشنبه 16 اسفند 1389, 15:59 عصر
- كلاينت درخواست اتصال به اپليكيشن سرور را به لود بلانسر مي فرستد.
- لود بلانسر يك اپليكشن سرور انتخاب مي كند و آي پي و شماره پورت و ساير مشخصات را براي كلاينت ارسال مي كند.
- كلاينت يك سوكت جديد با مشخصات دريافت شده جهت اتصال به اپليكيشن سرور باز مي كند.

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