Meysam's Experiences

MeyEx ,محلی برای انتشار تجربیات من در زمینه های مرتبط با حوزه ی تولید نرم افزار

Meysam's Experiences

MeyEx ,محلی برای انتشار تجربیات من در زمینه های مرتبط با حوزه ی تولید نرم افزار

Meysam's Experiences

در زمینه ی تولید نرم افزار فعالیت دارم. نوشته های این بلاگ به طور خاص در مورد تمامی زمینه هایی که منتهی به تولید نرم افزار و یا تجربیاتی که در محیط کاریم کسب می کنم خواهند بود. [البته فعلا به دلیل مشغله های جانبی دیگر و داشتن مخاطب در آن حوزه ها, مطالب کمی غیر نرم افزار شده است!]
در این بلاگ سعی شده که مطالب به صورت تخصصی و دسته بندی شده منتشر شوند

تابلوی اعلانات
جدیدترین نظرات
  • Ali در ۳۱ تیر ۹۶، ۱۵:۴۷ ، نظرش اين بود كه:
    عالی

چرا RAID برای پایگاه های داده بسیار مهم است؟

دوشنبه, ۲۶ خرداد ۱۳۹۳، ۱۲:۳۲ ق.ظ

چرا RAID برای پایگاه های داده بسیار مهم است؟

این متن، ترجمه ایست آزاد، از  Why is RAID So Important for Databases?

یک طراحی خوب برای سرورهای یک سرویس دهنده، دارای تعداد خیلی کمی از نقاطی که باعث اختلال و شکست در کار آن بشود، است و یا اینکه اصلا این چنین ضعفی ندارد. یکی از معمول ترین مولفه هایی که باعث ضعف می شود، دیسک ها هستند. برای همین افزونگی داده ها برای قابلیت بازیابی اطلاعات ضروری می شوند. RAID  یک سیستم دیسکی است که درصد تحمل خطای بهتری را به وسیله استفاده از افزونگی دیسک ها فراهم می کند.

RAID یک سیستم دیسکی است که شامل چندین دیسک که یک آرایه نامیده می شوند می باشد که عملکرد،تحمل خطا،ظرفیت ذخیره سازی بهتری را با هزینه ای متوسط، فراهم می آورد. زمانی که سیستم سرور خود را پیکربندی می نمایید، به طور معمول مجبور به انتخاب یکی از دو روش ذیل برای دیسک  درایو های داخلی سرورتان هستید.

1. RAID سخت افزاری

2. RAID نرم افزاری،

 

سامانه RAID به طور گسترده ای به عنوان یک راهکار ذخیره سازی برای کسب بهترین عملکرد استفاده می شوند، بسته به اینکه برنامه کاربردی بر نوشتن اطلاعات تمرکز دارد یا بر خواندن اطلاعات. مدیر پایگاه داده، Ray Rankins  ( لینک سایت شرکت مشاوره ای ایشان )در کتابش که در مورد برنامه های DataBase-Related (لیست کتاب ها)است، توضیح می دهد که برای کمینه نمودن جابه جایی هد دیسک و بیشینه نمودن عملکرد I/O، این یک کار درست که  خواندن/نوشتن های تصادفی (مثل عملیات دست کاری داده) و خواندن/نوشتن خطی (مثل لاگ تراکنش های سیستم) را در میان دیسک های مختلف توزیع نمایید. من موافقم و نظر او را تائید می کنم. به عنوان مثال، SQL Server یا هر پایگاه داده دیگر، شدیدا بر عملیات I/O متمرکز است.

 

برای توضیح اهمیت RAID در پایگاه داده، من از SQL Server به عنوان مثال استفاده خواهم کرد، گرچه شما می توانید این مفاهیم را در انتخاب خودتان از میان پایگاه های داده دیگر نیز پیاده سازی نمایید. مفاهیم کم و بیش در همه موارد شبیه هم هستند.

گرچه RAID یک بخش از یک پایگاه داده مثل SQL Server نیست، اما پیاده سازی RAID می تواند مستقیما بر نحوه عملکرد SQL Server تاثیر بگذارد.

انواع متفاوتی از RAID در دسترس هست، از قبیل RAID 0، RAID 1، RAID 2، RAID 3، RAID 4،RAID 5، RAID 6،RAID 10 و  RAID 01 . دراین مقاله در مورد RAID هایی که احتمالا به عنوان یک مدیر پایگاه داده سیکوئل سرور با آن مواجه خواهید شد را بررسی خواهیم کرد. برای مثال: سطوح RAID 0,1,5 و 10  و همچنین مزایا و معایب از جنبه تحمل خطا و عملکرد.

توجه: RAID یک جایگزین برای پشتیبانی نیست. پشتیبانی برای هر سیستم خیلی ضروری است.

انواع RAID (مزایا و معایب)

 ما تنها در مورد RAID 0,1,5,10 بحث خواهیم کرد. ( از دید پایگاه داده)

RAID 0: به عنوان Disk Stripping نیز شناخته شده است. این نوع RAID افزونگی یا تحمل خطا را فراهم نمی کند، در عوض، داده ها را در دو درایو به حالت متناوب می نویسد. این کار باعث فراهم آمدن بهترین عملکرد I/O می شود. اگر شما 8 تکه داده داشته باشید،برای مثال، تکه 1،3،5 و 7 در اولین درایو و تکه 2،4،6 و 8 در دومین درایو نوشته می شود، اما همه آن ها در یک ترتیب مشخص خطی بر روی دیسک درایو ها نوشته خواهند شد. RAID 0 طراحی ساده، پیاده سازی ساده تری دارد و سرباری برای توازن داده ها ندارد. مشکل آن این است که هر تکه از داده تنها در یک دیسک نوشته می  شود و اگر یکی از دیسک ها دچار میشکل شود، تمامی داده از بین خواهد رفت.

RAID 1: به عنوان Disk Mirroring نیز شناخته شده است. این نوع RAID بر خلاف نوع قبلی، یک نمونه مشابه و اضافی از دیسک انتخاب شده ایجاد می کند، در نتیجه تحمل خطای خوبی را فراهم می کند. این نوع  RAID را می توان به وسیله 2 دیسک درایو پیاده سازی کرد. عیب این نوع این است که، سربار زیاد و همچنین نرخ بالایی را برای ذخیره سازی داده ایجاد می کند.

به دلیل ضیق وقت، از ترجمه بخش های RAID 5 و 10 صرفنظر می کنم. و ما بقی مطلب را درج میکنم.

کدام نوع RAID برای پایگاه داده من مناسب است؟

حال که شما یک دید کلی در مورد سطوح مختلف RAID پیدا کردید، اجازه بدهید تا ببینیم کدام نوع آن برای یک پایگاه داده مناسب است؟. پاسخ این سوال به عوامل مختلفی بستگی دارد.

برای مثال، کدام یک برای شما مهم است؟ دسترس پذیری، عملکرد و یا هزینه؟. نیازمندی های شما برای تحمل خطا (fault tolerance) و عملکرد چیست؟

در اینجا جدولی داریم در مورد عملکرد و تحمل خطایی که توسط سیستم RAID فراهم آمده اند.

 

خواندن ( داده کوچک)

خواندن(داده بزرگ)

نوشتن (داده کوچک)

نوشتن (داده بزرگ)

تحمل خطا

RAID 0

خوب

خیلی خوب

خیلی خوب

خیلی خوب

ندارد

RAID 5

خوب

خیلی خوب

ضعیف

خیلی خوب

دارد

RAID 10

خیلی خوب

خوب

خوب

خوب

دارد

فرض بر این است که تمامی سطوح مختلف RAID در جدول فوق، از تعداد درایو یکسانی برخوردار هستند.

زمانی که این جدول را برای پایگاه داده ای از جنس SQL Server در نظر بگیریم، می بینیم که هیچ کدام از سطوح RAID که در جدول فوق آمده اند مناسب نیستند.در بیشتر اوقات، SQL Server عملیات خواندن حجیم و عملیات نوشتن سبکی را انجام می دهد. بنابراین برای پایگاه داده که عملیات نوشتن بیشتری دارد RAID 5 ، انتخاب خوبی نیست. در مقابل، RAID 10 گزینه خوبی برای پایگاه داده ای با حجم عملیات نوشتن بیشتر، هست.

در اینجا، برخی نکات که در زمان تصمیم گیری برای انتخاب سطح RAID مناسب برای پایگاه داده به ما کمک می کنند آورده شده.

  • دیتا، Log فایل ها، پایگاه داده temp و فایل های پشتیبان باید بر روی درایوهای فیزیکی مجزا و یک آرایه از دیسک ها قرار بگیرند.
  • RAID 1 معمولا برای نگه داری فایل های سیستم عامل، باینری، index file goups و database transaction log files مورد استفاده قرار می گیرند. نکته حیاتی برای فایل های log و عملکرد شاخص ها (index)، تحمل خطا و همچنین سرعت نوشتن خوب، است.
  • از آنجایی که log فایل به صورت خطی نوشته می شود و تنها برای عملیات بازیابی خوانده می شوند بنابراین سطح RAID توصیه شده، RAID 1 و یا  RAID 10  می باشد. نکته، اگر RAID 1 شما در حالت استفاده 100 درصد می باشد، RAID 10 را برای عملکرد بهتر انتخاب نمایید.
  • برای فایل های با دسترسی تصادفی و عملیات خواندن حجم های بزرگی از دیتا، چسبیده بودن دیتا (پشت سر هم قرار داشتن قطعات دیتا)، بنابراین سطح RAID 5 توصیه می شود.
  • برای فایل های داده ای که نیاز به عملکرد خوب نوشتن دارند، RAID 10 توصیه می شود. از یک کنترل کننده battery backed caching RAID controller برای عملکرد نوشتن بهتر استفاده نمایید.
  • برای فایل های tempdb با عملکرد نوشتن/خواندن خوب، RAID 0,1 یا 10  توصیه می شود. گرچه tempdb شامل اطلاعات موقتی هست و مدیران پایگاه داده اغلب RAID 0 را برای tempdb به کار می برند، به یاد داشته باشید که SQL Server به tempdb برای انجام خیلی از فعالیت هایش نیاز دارد. بنابراین اگر شما می خواهید که سیستمتان همیشه در دسترس باشد، در مورد RAID 0 تجدید نظر کنید.
  • قرار دادن log فایل ها و یا tempdb  بر روی آرایه RAID 5 توصیه نمی شود، به این دلیل که RAID 5 عملکرد مناسبی برای عملیات نوشتن ندارد. گرچه مدیران پایگاه داده در این مورد اختلاف نظر دارند.
  • درایوهای کوچک سریع را به جای درایوهای بزرگ کند انتخاب نمایید

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

این متن، ترجمه ایست آزاد، از  Why is RAID So Important for Databases?

  • میثم هوشمند

نظرات (۱)

  • احمد تاج بخش
  • سلام و خسته نباشید ...
    مطلب مفیدی بود و نکات بسیاری دارد ...
    برای تفهیم بیشتر ای کاش یک معرفی مختصر از RAID بندی هارد ها می کردی که اصلا برای چی از این تکنولوژی استفاده می کنیم چه مزایایی دارد و  چه معایبی دارد؟
    البته مطلب خیلی طولانی و جامع میشد اما یه بیسی داشت ...
    همیشه موفق و سربلند باشید  
    پاسخ:
    سلام
    ترجمه ی یک مقاله بود؛ و خب در مقاله اشاره ای به تکنولوژی raid نشده بود؛
    پیشنهاد خوبیه؛
    چرا توی وبلاگ شما منتظرش نباشیم؟!
    :)

    ارسال نظر

    ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
    شما میتوانید از این تگهای html استفاده کنید:
    <b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
    تجدید کد امنیتی