در حوزه کاری ما همیشه نیازمندیهای جدید باعث پیشرفت، ارتقاء و پیچیدهتر شدن سیستمهای سخت افزاری و نرم افزاری میشوند. بطور مثال زمانیکه نیاز شد چندین سیستم از دادههای مشترکی استفاده کنند، در معماری Single Tier قسمت Database از سایر قسمتها جدا شد و در سخت افزار دیگری قرار گرفت. به این صورت این معماری تبدیل به Two Tier شد و سپس برای اینکه تغییرات، کمترین تاثیر را در سیستم ما داشته باشد و با کمترین هزینه به Platformهای دیگر نیز سرویس بدهیم، قسمت Presentation از سایر قسمتها جدا شد و در سخت افزارهای دیگری قرار گرفت. به این صورت تبدیل به معماری Three Tier شد و همینطور نیازهای جدید باعث شد معماری N Tier پیچیدهتر شود. البته پیچیدگی که باعث تکامل آن شد یا بطور مثال نیاز به پردازش تعداد بیشتری عملیات بصورت همزمان، که باعث شد سیستمهای ما از حالت Single Task تبدیل به Parallel System و سپس Distributed system شوند. واقعیت این است که در دنیای امروز، نیازهای جدیدی بوجود آمدهاند؛ نیازهایی که یک سخت افزار به تنهایی قادر به ارائه راهکاری برای آنها نیست. واقعا یک سخت افزار که یک سرویس را ارائه میدهد، چه خصوصیاتی باید داشته باشد که مثلا در ثانیه حدود 50 میلیون عملیات را بصورت همزمان انجام دهد؛ یا مثلا سرویس مورد نظر حدود 400 میلیون کاربر فعال که روزانه بیشتر وقت خود را به استفاده از این سرویس اختصاص میدهند داشته باشد؟
آیا میدانستید که Facebook در حال حاضر بیشتر از 400 میلیون کاربر فعال دارد که حدود 200 میلیون از این کاربران هر روز از این سرویس استفاده میکنند؟ آماری که این سرویس داده به این صورت است که تا سال 2010، کاربرانش در هر روز حدود 16 بیلیون دقیقه از وقت خودشان را به استفاده از این سرویس اختصاص دادهاند. در هر هفته کاربران این سرویس حدود 6 بیلیون مطلب را که شامل عکس و متن بوده را به اشتراک گذاشتهاند. هر ماه بیشتر از 3 بیلیون عکس توسط این سرویس Upload شدهاست. کاربرانش روزانه بیشتر از 1 بیلیون عکس را توسط این سرویس مشاهده کردهاند. این سرویس در ثانیه حدود 50 میلیون عملیات را انجام میدهد!
آیا میدانستید که سرویس Twitter در حال حاضر 350 میلیون کاربر فعال دارد که حدود 100 میلیون از این کاربران روزانه از این سرویس استفاده میکنند و هر روز کاربران این سرویس 500 میلیون توییت را ارسال میکنند. این سرویس در فینال جام جهانی حدود 618,725 توییت را در یک دقیقه دریافت کردهاست.
و یا سرویس Telegram حدود 100 میلیون کاربر فعال دارد که بصورت متوسط در هر روز 220 هزار کاربر جدید در آن ثبت نام میکنند. کاربران این سرویس روزانه 15 بیلیون پیام را ارسال میکنند و 700 میلیون عکس را به اشتراک میگذارند.
چه سروری به تنهایی میتواند این آمار و ارقام را پوشش دهد؟ هزینه خرید و نگهداری آن چقدر است؟ چقدر باید هزینه کنیم تا این سرور از دسترس خارج نشود؟ یک سرور به تنهایی چه راهکاری را میتواند ارائه دهد که هیچوقت از دسترس خارج نشود؟
بهتر است بدانید که سرویس Facebook روی بیش از 60,000 سرور ارائه میشود! چه سروری به تنهایی میتواند کارآیی 60,000 سرور را داشته باشد؟
چه نوع پایگاه داده ای که روی یک سرور سرویس ارائه میدهد، قادر است روزانه به بیشتر از 1 تریلیون درخواست، پاسخ دهد؟ اصلا چه سروری به تنهایی قادر است این حجم داده را که هر روز رو به افزایش است، نگهداری کند؟
بهتر است بدانید پایگاه داده سرویسهای شرکت Apple، روی بیش از 75,000 Node قرار دارند که روزانه حدود 10 پتابایت داده ذخیره میکنند. یا Netflix که از 2,500 Node استفاده میکند و روزانه 420 ترابایت داده را در قالب 1 تریلیون درخواست دریافت میکند یا Easou که پایگاه داده آن روی 270 Node قرار دارد و روزانه 300 ترابایت داده را در قالب 800 میلیون درخواست دریافت میکند! اینها اعداد و ارقامی نیستند که ما بتوانیم با SqlServerی که روی یک سرور قرار دارد، پوشش دهیم.
چه تعداد سرویس را در کشورمان میشناسید که در زمان بالا رفتن تعداد درخواست از دسترس خارج میشوند؟ چه تعداد سرویس را میشناسید که تنها راهکاری را که میتوان در این زمان برای آنها ارائه داد، ارتقاء سخت افزار آنهاست؟ پس از مدتی با بالا رفتن تعداد کاربران، دوباره سخت افزار را ارتقاء میدهیم. تا کجا باید این کار را تکرار کنیم؟ چقدر هزینه کنیم برای سخت افزاری که ممکن است به هر دلیلی در هر لحظه از دسترس خارج شود؟ آیا با توجه به آمار تعداد کاربران، تعداد درخواست و حجم دادهی سرویسهایی که میشناسید و قابل مقایسه با آمار ذکر شده است، باز هم از دسترس خارج میشوند؟
در سری مقالات Distributed systems in .NET سعی میکنیم شما را با خصوصیات و اصطلاحات موجود در سیستمهای توزیع شده آشنا کنیم و ابزارهایی را که در NET. برای پیاده سازی این نوع سیستمها وجود دارد، به شما معرفی کنیم و با هم ببینیم که این نوع سیستمها چه راهکاری را برای رفع نیازمندیهای ما ارائه میدهند.
منبع :dotnettips.info