جمعه، 3 بهمنماه 1382

Linux Virtual Server Project

یکی از پیشرفتهای خیلی مهمی که کرنل 2.6 در زمینه شبکه کرده است پشتیبانی از همین پروژه ای است که عنوان همین مطلب است . در حقیقت Linux Virtual Server Project رو اینطوری تعریف کنیم که امکانی برای ایجاد یک سرور بسیار پرقدرت توسط موازی سازی تعدادی سرور با قدرت کمتر می باشد . البته مسلما یک مفهوم نرم افزاری باید از این در ذهن شما تداعی شود و نه سخت افزاری . حالا کاربردش چیست ؟!
ببینید مثلا همین Google با تعداد ویزیتوری که در روز دارد هیچ موقع یک سرور حتی خیلی قدرتمند جوابگوی درخواستهای وب آن نیست . برای اینکه بتوانند این مشکل را حل کنند می آیند و از تعداد زیادی کامپیوتر استفاده می کنند . حال برای اینکه درخواستها را میان این تعداد کامپیوتر تقسیم کنند روش های گوناگونی وجود دارد . به عنوان مثال ساده ترین روشی که امروزه هم خیلی مورد استفاده قرار می گیرد استفاده از DNS سرور هایی است که توسط الگوریتمهایی مانند Round-Robin ( یعنی چرخشی یا حلقوی ) یک اسم را به چندین آدرس اختصاص می دهند . با این روش شما هر بار درخواست سایت Google را در مرورگر خود می کنید ، چون باید این اسم google.com توسط یک DNS سرور پیدا شود و آدرس معتبری از آن بدست آید ، DNS سرور های Google هر دفعه به درخواست شما یک جواب متفاوت می دهند و اینگونه درخواستهای مختلف در بین آدرسهای مختلف تقسیم می شوند . اما این روش ایرادات زیادی دارد . با اینکه بسیار ساده و عملی است . مثلا در این روش چون DNS سرور های مختلف بسیاری از آدرسهای پر بیننده را Cache می کنند ، لذا هر دفعه از DNS سرورهای Google نمی پرسند و تا حدودی مشکلزا هستند و یا مثلا در صورتیکه یکی از سرور ها به هر دلیلی قادر به جوابگویی نباشد ، تا شما بخواهید آنرا از مدار خارج کنید و DNS های دنیا هم Update شوند حداقل 24 ساعت طول خواهد کشید و در نهایت شما اونچنان کنترلی رو تقسیم بارها ندارید .
راه بهتر استفاده از همین Virtual Server هستش . در حقیقت شما همانند این طرح یک مامور اصلی قرار می دهید که همه درخواستها به آن می آیند . حالا این مامور هر کدام از درخواستها را به ترتیبی به سرور های دیگر که در آن تعریف شده است ارجاع می دهد . حال این کار می تواند در دو لایه انجام شود . مثلا در لایه Application این کار به راحتی قابل انجام است ، مانند pWEB . اما مشکلشان این است که در لایه Application همانطور که بارها توضیح دادم ما مصرف CPU و حافظه خیلی زیادی نسبت به لایه های پائینتر داریم و این باعث می شود که در نهایت آن مامور شما که مسئول ارجاع درخواستها به سرور های مختلف است سرش خیلی شلوغ شود و به درستی از پس کار خود بر نیاید . Linux Virtual Server برای حل این مشکل آمده این تقسیم رو در لایه شبکه پیاده سازی کرده است . با این کار دیگر خیلی دستش باز می شود و Load بسیار بالایی را بدون آنکه مشکلی برایش بوجود آید می تواند تقسیم کند . خودش ادعا کرده قابلیت تقسیم بار بین 20 تا 100 سرور را به راحتی دارد و این خیلی حرف است !!! ( اگر کمی برنامه نویس و یا شبکه کار باشید می فهمید چی می گم !! )
البته در لایه شبکه هم به 3 روش می تواند این کار را انجام دهد . یکی از طریق NAT که روش خیلی ساده و هلویی است ، اما بازهم ایرادات خاص خود را دارد . ( اعم از اینکه باید مسیر رفت و برگشت از تقسیم کننده بار عبور کند و خود عمل NAT حافظه و Memory زیادی می گیرد ) . روش دیگر استفاده از Tunnel است که این روش بسیار بهتر از NAT است ، اما کمی تنظیماتش کار بیشتری می گیرد و در عین حال همه سرور های شما باید از این Protocol پشتیبانی کنند . ( این همان روشی است که WCCP در Cisco هم از آن برای تقسیم بار بین Cache سرور ها استفاده می کند ) . و در نهایت روشی منحصر به فرد که به غیر از Linux من ندیدم کس دیگری پشتیبانی کرده باشد Direct Routing است . در این روش شما می توانید جوابهای درخواستها را از مسیر های مختلفی هم ارسال کنید که این خودش باز مزیت است . به هر حال بروید و Document هاش رو بخونید اگر علاقمندید . در ضمن دقت کنید که در اینجا همه چیز در کنترل شماست . مثلا اگر بخواهید به روش های خاصی این Load رو تقسیم کنید به راحتی قابل پشتیبانی است و روش هایی را پشتیبانی کرده است که در صورت Fail کردن یکی از سرور های بلافاصله متوجه می شود و Load را از رویش بر می دارد !! خیلی کارهای باحالی کرده اند که اگر در بهرش بروید خیلی جالب است .
در ضمن برای ISP ها هم این مطلب جالب است که توسط همین امکان که به Kernel اضافه شده است ( در 2.6 همینجوری هست ، در 2.4 باید patch کنید ) یک Daemon برای WCCP بر اساس همان استاندارد کذایی نسخه 1 از Cisco ساخته ساخته شده است که در Linux می توانید با همین Virtual Server و بر اساس WCCP بین Cache سرورهای خود تقسیم بار کنید . ( گویی که Cisco توی ایران مثل پیکان شده است و هر ISP که از 16 تا خط تلفن بیشتر داشته باشد حتما یک Cisco Router که از WCCP هم پشتیبانی می کند دارد )

[ جمعه، 3 بهمنماه 1382، 0:42 صبح ]

سلام زیاد متوجه نشدم چون تو این بحثای شما خیلی وارد نیستم اما خیلی از نوع توضیحاتت خوشم اومد ممنون از نوشته هات تنها کاری که از دستم بر میاد تشکره

[ علی صدیقی ] | [ جمعه، 3 بهمنماه 1382، 4:18 صبح ]

کمی یواشتر بنویس... سواد ما کمه

[ مجتبی کمالیان ] | [ جمعه، 3 بهمنماه 1382، 9:49 صبح ]

خيلي خوب بود.نمي دونم اما چند روز هست ذهنم به اين مشغوله كه ممكنه دوستاني مثل شما كه تجربه خوبي دارند با linux party يا lan party از نوع لينوكسي موافق باشند يا نه !!!

[ JraNil ] | [ جمعه، 3 بهمنماه 1382، 11:00 صبح ]

به طور کل NAT چندان Memory Hunter نیست ،‌بستگی به خیلی چیزها داره این جریان ... مثلا CONFIG_NETFILTER_DEBUG یا استفاده نکردن از Connection Tracking ! :(

[ Armin ] | [ جمعه، 3 بهمنماه 1382، 4:52 بعدازظهر ]

سلام
مطلب جالب و مفيدی بود .
اما فکر ميکنم قبلا در مورد اين موضوع VirtualServer يک بار نوشته بودين . البته من مطلب قبلی شما رو به طور کامل نخوندم اما اين رو که خوندم مفيد و جالب بود .
موفق باشيد .
اميد حسینی

[ امید حسینی ] | [ جمعه، 3 بهمنماه 1382، 11:20 بعدازظهر ]

وبلاگ خیلی خوبی داری. کاملا" تخصصی هست و بدرد بخور. می تونی یه راهنمایی بکنی که DCS(distribution control system)چی هست؟ یا از کجا می تونم مطالب خوب در مورد پروژه هاش بدست بیارم؟

[ دفتر خط خطي ] | [ یکشنبه، 5 بهمنماه 1382، 6:39 بعدازظهر ]

سلام خسته نباشي
عالي بود
خداحافظ

[ يك دوست ] | [ پنجشنبه، 9 بهمنماه 1382، 1:37 بعدازظهر ]
ارسال نظرات









اطلاعات شما را بیاد داشته باشم ؟