PDA

View Full Version : تقسیم بار بروی سرور های مختلف



nafasak
چهارشنبه 12 بهمن 1390, 10:26 صبح
یک سایت بزرگ رو در نظر بگیرید با کاربران بسیار زیاد.
مثلا همه از طریق یک لینک یک رکورد رو میخوان در یک جدول درج کنن.
حالا چه اتفاقی می افته؟ سمت سرور چطور میشه؟؟
اینکه چطور چند سرور مختلف ست میکنن که تمام این درخواست ها بین این سرورها تقسیم بشه بعد همگی در یگ دیتابیس واحد ثبت بشه و ....

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

ممنون..

micro24
چهارشنبه 12 بهمن 1390, 15:31 عصر
سلام

Cluster را مطالعه کنید

in_chand_nafar
چهارشنبه 12 بهمن 1390, 20:24 عصر
دوست عزيز SQL Server عملا از LoadBalanced كلاستر (NLB) پشتيباني نمي كنه چون لود بالانس كلاستر فقط در برنامه هايي جواب ميده كه State Less باشند مثل IIS و ساير سرويس هاي ويندوز اما شركت هايي اومدن و اينكار را در بانك اطلاعاتي خودشون انجام دادن مثل اوراكل My SQL در اوراكل اين تكنولوژي RAC نام داره يه سر به اينجا (http://www.shabakeh-mag.com/article.aspx?id=1004104)بزن (و در ضمن جهت سلامتي مايكروسافت يه لعنت به اوركل بفرست)
خوب اما براي SQL Server راه حل چيست يه شركتي به نام SANBOLIC (http://www.sanbolic.com/SQL_Server.htm)اين كار را انجام داده و
اما مايكروسافت چي كار كرده توي نسخه 2008R2 به بالا و 2012 (ماه مارس مياد) اومده از تكنولوژي اوپن سورس Hadoop استفاده كرده
اينجا (http://www.opatan.ir/hadoop/hadoop-overview/)سر برن ثواب داره
اينجا (http://www.opatan.ir/hadoop/history-of-hadoop/)بري طوري نميشه
خوب اگه اون دو لينك بالا رو خوندي يه سري مطلب در مورد اين پروژه و الگوريتمش گير آوردي
يه سري هم به سايت مايكروسافت بزن
http://blogs.msdn.com/b/uk_faculty_connection/archive/2011/11/20/microsoft-big-data-solution-sql-server-apache-hadoop-and-windows-azure.aspx
http://www.microsoft.com/download/en/details.aspx?id=27584
--------------------------------
ببين دوست اون داستان هاي كه بالا گفتم رو يه خورده فراموش كن سناريوي خودت رو بيشتر توضيح بده تا بهتر راهنمايي بشي در ضمن SQL Server را دست كم نگير
همين جوريش هم كلي جوابت رو ميده در ضمن به نظر من اگر مي خواهي توي ساير لايه هاي برنامه ات مثل لايه سرويس ها مثل بيزنس لاير و ديتا لاير اين كار را انجام بده
بهتر كه سناريوي خودت رو بنويسي تا بيشتر راهنمايي بشي در ضمن اگر خواستي Hadoop رو محض آزمايش و.. راه بياندازي پيام خصوصي بده تا يه پروژه تعريف كنيم يه خورده سرم براي تحقيق و... درد مي كنه
موفق باشي از نحوه نوشتن جملاتم ناراحت نشو چون امروز كمي حوصله ندارم
خداحافط علي يارت

nafasak
چهارشنبه 12 بهمن 1390, 22:13 عصر
خیلی ممنون از توضیحات خوب شما،

همونطور که گفتی بهتر کمی بیشتر توضیح بدم، صورت مسئاله اینه ،
یه سایت خیلی بزرگ شبیه فیس بوک با کلی امکانات که در لحظه کلی درخواست به سمت سرور میاد.
من در نظر گرفتم که از چند دیتابیس استفاده کنم. یکی برای ثبت نام و اطلاعات حیاتی کاربر، یکی برای اطلاعات ثانوی کاربر مثل کامنت هاش و فایلاش و ...
(البته اینو بگم میخوام خیلی قوی کار کنم برای همین ممکنه سوالات عجیب و غریبی که به فکرم میرسه رو هم اضافه کنم ، شما ببخشید...)
1- آیا اینکه از چند دیتابیس بسته به طبقه بندی کلی از نظر درخواست استفاده بشه خوبه؟؟
خب، حالا در دیتابیس دوم گروه زیادی از کاربران با هم میخوان LIKE بزنن اما برای نوع های مختلفی از قبیل عکس، کامنت، پروفایل و ... که هر کدوم برای خودشو یک جدول جداگانه دارند.
2- آیا بهتره جدول Like برای هرکدام از نوع هایی که گفتم جداگانه بسازم یا اینکه یک جدول Like داشته باشم و با یک فیلد مثلا Type رکوردهارو جدا کنم.
3- حالا در حالت دوم در این لحظه که این همه درخواست برای یک SP میاد Hadoop یا چیزی مثل اون درخواست هارو کنترل میکنه؟
4- توی کد من چیکار باید انجام بدم؟ یا توی spها و جداول؟

...فعلا همین...
ممنون

in_chand_nafar
پنج شنبه 13 بهمن 1390, 10:31 صبح
خوب غكر كنم شايد سناريوي شما بيشتر آزمايش و... باشه تا واقعي چون ما توي ايران واقعا Solution نداريم كه Hadoop و... را بتوان توي اون استفاده كرد يكي از راه هاي فسقلي و آسان و معمولي كه من خودم هم به ازاي تهيه گزارش هاي يكپارچه چند بانك اطلاعاتي استفاده كردم
Distribute Query‌است اطلاعات روي چند سرور ذخيره شذه با اين روش همه اطلاعات را از روي اين چند تا كشيدم بيرون و...
اما بيشتر پردازش اصلي در اين حالت روي سروري است كه اطلاعات را Merge‌مي كند
اما بد نيست بري دنبال اين موضوع كه در زير مي بيني (البته باز روشي نيست كه واقعا بار پردازشي را مثل Hadoop و يا RAC مربوط به اوراكل مديريت كنه و...)
Federated Database Servers (http://msdn.microsoft.com/en-us/library/ms190381.aspx)


http://msdn.microsoft.com/en-us/library/aa177979%28v=sql.80%29.aspx

اگر خواستي در مورد Hadoop كار كني در مورد R&D و... مي تونيم با هم همكاري كنيم موفق باشيد

nafasak
پنج شنبه 13 بهمن 1390, 10:50 صبح
بازم ممنون،
راستش مسئاله آزمایش نیست.
مسئاله اینه که من میخوام تکنولوژی روز رو بدونم.
و اینه من به عنوان یک تولید کننده نرم افزار برای استفاده از این تکنولوژی باید چه تدابیری در کدنویسی (نرم افزار / دیتابیس) داشته باشم. یعنی چه کارهای مرسوم و جدید رو باید انجام بدم و چه کارهای مرسومی رو نباید انجام بدم، مسئاله اصلا ایران نیست. مسئاله تکنولوژی روز برای یک کار بزرگه....
در مورد 4 تا سوال در پست قبل من 1 و 2 رو تا حدی فهمیدم که جدا سازی کار درستیه. باز هم اگه نظری دارید خوشحال میشم بفرمایید.
3 و 4 رو هنوز نمیدونم...
{
3- حالا در حالت دوم در این لحظه که این همه درخواست برای یک SP میاد Hadoop یا چیزی مثل اون درخواست هارو کنترل میکنه؟
4- توی کد من چیکار باید انجام بدم؟ یا توی spها و جداول؟
}

in_chand_nafar
پنج شنبه 13 بهمن 1390, 12:51 عصر
اگر از Hadoop استفاده كنيد توي كد لازم نيست كاري انجام بديد روش كار Hadoop اين است كه بانك اطلاعاتي شما را بين سرور هاي مختلف پخش مي كند وقتي Insert انجام مي ديد خود به خود ديتا شما بين چندين سرور درج ميشه و وقتي Select مي كنيد اين ديتا از روي هر كدام از سرورها خونده ميشه (تعدادي از سرور 1 تعدادي از سرور 2 و.../دقيقا مثل RAID) و در اختيار شما قرار مي گيره
Hadoop تقر يبا مشابه Google File System است شما در حالت عادي ايندكس ها و... را درست تنظيم كنيد در ضمن با مسائل مربوط به SQL Tuning هم سعي كنيد آشنا شويد
http://en.wikipedia.org/wiki/Apache_Hadoop (Google File System)
خيلي خوشحال مي شوم مي بينم توي انجمن بچه ها دنبال يه همچين مسائلي در حد Enterprise هستند
موفق و مويد باشيد

v.hosseini2008
دوشنبه 24 بهمن 1390, 08:05 صبح
با سلام خدمت همه دوستان.

در پست ها از Hadoop صحبت شده بود ولی چیزی که من در این مورد میدونم این هست که Hadoop یک FrameWork هست که جهت آنالیز دیتا ها سنگین انجام میشه که در روش های سبک تر آن همان BI میباشد ،Hadoop از روش MapReduce جهت آنالیز استفاده میکنه که همان روش گوگل یا هو و ... میباشد اما مسئله که باید به آن دقت کرد اینه که ما قرار نیست Data را آنالیز کنیم قرار هست که Data را بر روی چندین سرور توزیع کنیم.جهت این توزیع همان طور که یکی از دوستان نقل کرده اند میشه که از Add Hoc Distribute Query‌ها مثل Linked Servers استفاده نمود و طبق یک الگوریتمی Data را بر روی سرور های مختلف با توجه به Request های ارسالی توزیع کرد و در زمان واکشی از Object هایی مثل Linked Servers یا OpenRowSet استفاده نمود.

nafasak
دوشنبه 24 بهمن 1390, 08:13 صبح
شما منبع خاصی رو در رابطه با مطالبی که فرمودید سراغ دارید ؟

in_chand_nafar
دوشنبه 24 بهمن 1390, 09:44 صبح
برای تقسیم بار روش های مختلفی جهت تقسیم و انتقال دیتا روی سرورهای مختلف وجود داره
1- Federation database :توی Books Online مطلب کاملی درباره اون جود داره
یکی از این روش ها این است که شما بیس داده ها رو طوری در نظر بگیرین که عملا روی چند سرور تقسیم شده باشند
برای مثال در جدول کاربران فرض می کنیم 60 میلیون رکورد قرار است ذخیره شود (هر چند این عملا برای SQL چیزی نیست) می گوییم از رکورد 1 تا 30 میلیون روی سرور A و از رکورد 30 میلیون به بعد در سرور B بعد با استفاده از Distribute Query و... اطلاعات را یه جا جمع می کنیم که بزرگترین مشکل این روش این است که شما عملا وقتی دارید دیتاها را در یک جا جمع می کنید بار پردازش اون رو روی یه سرور میگذارین
2 - Peer to peer Replication : وقتی از این روش استفاده می کنید انگا یه شبکه فول مش دارین دیتا روی تمامی سرورها کپی در موقع واکشی داده ها برای پردازش می تونید با لود بالانسر و... کاربران را بین سرورهای مختلف پاس بدین اما مشکل این روش این است که عین دیتا شما در تمامی سرورها کپی میشه و بعدها و....

3- SQL Server 2012 :عزیزم [/URL] یه سناریوی به نام HADR داره که تیو اون شما می توانید از انواع روش های HA (ترکیبی و...) استفاده کنید در این حالت کافی است در این حالت فرض کنید که شما چندتا سرور دارین که روی یک Storage در حال کار هستند یکی از این سرور دسترسی کامل به بانک شما داره و مابقی سرورها Disaster اون هستن (تا زمان 2008 این طور بود ) اما در 2012 شما دسترسی Readonly به سایر نودها دارین ولی عملا شما باید یه Storage مشترک داشته باشین و .... البته لازم می دونم که فعلا دارم روی این قضیه با VM کار می کنم نظرات قطعی و... را در آینده Release خواهم کرد
4- Hadoop : کلیه مواردی که در بالا گفتم از دوستانم شنیدم و واقعا آزمایش نکردم اما می دونم اون ها اینکاره بودن و.... در این مورد هم یه سری تحقیق می کنم و نتیجه رو می گم از دوست عزیزم [URL="http://barnamenevis.org/member.php?108179-v.hosseini2008"]v.hosseini2008 (http://barnamenevis.org/member.php?108179-v.hosseini2008)
می خوام که اگر منبع خوب و... که با این موضوع کار کرده باشه اطلاع رسانی کنند موفق باشید

in_chand_nafar
دوشنبه 24 بهمن 1390, 12:13 عصر
آقا ثواب کردی این بحث رو زنده کردی دو سه تا مطلب گیر آوردم و اگر خدا خواست یه سری سیستم خوب داره به دست میرسه برای تست این حالت در ضمن یه سری به اینجا بزن

http://facility9.com/2010/12/getting-started-with-hive/
https://ccp.cloudera.com/display/SUPPORT/Downloads
http://hadoop.apache.org/common/docs/r0.20.2/quickstart.html
http://pages.cs.brandeis.edu/~cs147a/lab/hadoop-windows/ (http://pages.cs.brandeis.edu/%7Ecs147a/lab/hadoop-windows/)
http://www.slideshare.net/Mathias-Herberts/hadoop-pig-syntax-card
http://hadoop.apache.org/

v.hosseini2008
شنبه 29 بهمن 1390, 11:19 صبح
برای تقسیم بار روش های مختلفی جهت تقسیم و انتقال دیتا روی سرورهای مختلف وجود داره
1- Federation database :توی Books Online مطلب کاملی درباره اون جود داره
یکی از این روش ها این است که شما بیس داده ها رو طوری در نظر بگیرین که عملا روی چند سرور تقسیم شده باشند
برای مثال در جدول کاربران فرض می کنیم 60 میلیون رکورد قرار است ذخیره شود (هر چند این عملا برای SQL چیزی نیست) می گوییم از رکورد 1 تا 30 میلیون روی سرور A و از رکورد 30 میلیون به بعد در سرور B بعد با استفاده از Distribute Query و... اطلاعات را یه جا جمع می کنیم که بزرگترین مشکل این روش این است که شما عملا وقتی دارید دیتاها را در یک جا جمع می کنید بار پردازش اون رو روی یه سرور میگذارین
2 - Peer to peer Replication : وقتی از این روش استفاده می کنید انگا یه شبکه فول مش دارین دیتا روی تمامی سرورها کپی در موقع واکشی داده ها برای پردازش می تونید با لود بالانسر و... کاربران را بین سرورهای مختلف پاس بدین اما مشکل این روش این است که عین دیتا شما در تمامی سرورها کپی میشه و بعدها و....

3- SQL Server 2012 :عزیزم [/URL] یه سناریوی به نام HADR داره که تیو اون شما می توانید از انواع روش های HA (ترکیبی و...) استفاده کنید در این حالت کافی است در این حالت فرض کنید که شما چندتا سرور دارین که روی یک Storage در حال کار هستند یکی از این سرور دسترسی کامل به بانک شما داره و مابقی سرورها Disaster اون هستن (تا زمان 2008 این طور بود ) اما در 2012 شما دسترسی Readonly به سایر نودها دارین ولی عملا شما باید یه Storage مشترک داشته باشین و .... البته لازم می دونم که فعلا دارم روی این قضیه با VM کار می کنم نظرات قطعی و... را در آینده Release خواهم کرد
4- Hadoop : کلیه مواردی که در بالا گفتم از دوستانم شنیدم و واقعا آزمایش نکردم اما می دونم اون ها اینکاره بودن و.... در این مورد هم یه سری تحقیق می کنم و نتیجه رو می گم از دوست عزیزم [URL="http://barnamenevis.org/member.php?108179-v.hosseini2008"]v.hosseini2008 (http://barnamenevis.org/member.php?108179-v.hosseini2008)
می خوام که اگر منبع خوب و... که با این موضوع کار کرده باشه اطلاع رسانی کنند موفق باشید


دوست عزیز لطفا در مورد بند 3 اگر رفرنسی دارین معرفی کنید و یا اینکه یک مقداری واضح تر توضیح بدین ممنون.و اما در مورد Hadoop من اون چیزی را که خودم خوندم مطرح کردم ولی بصورت عملی با هاش کار نکردم.
و مطلب دیگه اینگه Federation database فکر میکنم در خصوص دیتا بیس های IBM قابل اجرا است اینطور نیست؟

in_chand_nafar
شنبه 29 بهمن 1390, 12:01 عصر
این کلمه را در Books online سرچ کنید
Federated Database Servers (http://msdn.microsoft.com/en-us/library/ms190381.aspx)
در ضمن این مبحث روی اکثر بانک های اطلاعاتی وجود دارد