بخشی از مقاله
چکیده
سازگاری در یک پایگاهداده تضمین میکند که آخرین تغییرات اعمال شده در پایگاهداده مشاهده شوند. در این مقاله مدلهای سازگاری قوی و سازگاری ضعیف مورد بررسی قرار میگیرند. مدلهای مختلف سازگاری، بیشتر در سیستمهای توزیع شده و پایگاه دادههای توزیع شده کاربرد دارند که در آنها دادهها در کپیهای مختلف در نودهای مختلف در سراسر شبکه پخش میشوند؛ و برای ایجاد سازگاری بین کپیهای مختلف دادهها در نودهای مختلف شبکه، مفهوم سازگاری مطرح میشود. مدل سازگاری قوی یک سازگاری قوی را در مورد دادههای یک سیستم پایگاهی ارائه میدهد. در این مدل، زمانی یک تراکنش Commit میشود که در همه کپیهای مختلف نودهای شبکه، تغییرات دادهای اعمال شود.
در سیستمهای پایگاه دادهای Nosql که برای سیستمهای توزیع شده بزرگ با حجم دادهای بزرگ طراحی شدهاند، مدل سازگاری ضعیف کاربرد دارد. زیرا اعمال تغییرات به همه دادههای کپیهای مختلف Nodeهای شبکه، کارائی سیستم را کاهش میدهد و باعث کند شدن سیستم و عدم دسترسی به دادهها توسط انبوه کاربران میگردد. مدل سازگاری ضعیف یک سازگاری ضعیف را در مورد دادههای یک سیستم پایگاهی ارائه میدهد. در این مدل زمانی یک تراکنش Commit میشود که در اکثر کپیهای مختلف نودهای شبکه و نه لزوما در همه آنها، تغییرات دادهای اعمال شود.
-1 مقدمه
در علم کامپیوتر مدلهای سازگاری1 در - سیستمهای توزیع شده - 2 مانند سیستمهای توزیع شده - اشتراک حافظه - 3 یا - محلهای ذخیره داده - 4 توزیع شده از قبیل سیستم فایلها، پایگاه دادهها، سیستمهای - تکرار همزمانی - 5 و یا - ذخیرهسازی تحت وب - 6 بکار گرفته میشود. اگر عملیات در حافظه به دنبال قوانین خاصی باشد در اینصورت سیستم از یک مدل معینی پشتیبانی میکند. مدل - سازگاری دادهای - 7 یک قرداد بین برنامهنویس و سیستم تعیین میکند که در آن سیستم تضمین میکند که اگر برنامهنویس قوانین را دنبال بکند، حافظه سازگار خواهد بود و نتایج عملیات حافظه قابل پیشبینی خواهد بود، که این متفاوت از وابستگی Cache است.
یک مسئلهای که اتفاق میافتد در سیستمهایی که Cache و یا Cache-Less هستند، سازگاری داده نسبت به همه پردازندهها می-باشد. این کار توسط Coherence بعنوان یکپارچگی با حفظ - ترتیب جهانی - 8 انجام نمیشود که در آن تنها به یک مکان واحد و یا در یک متغیر واحد نوشته میشود و توسط همه پردازندهها دیده میشود. سازگاری عملیاتها را به ترتیب در مکانهای مختلف - در چندین مکان - به نسبت بین همه پردازندهها توزیع میکند.
زبانهای سطح بالا از قبیل Java و C++ با تبدیل عملگرهای حافظه به عملگرهای سطح پائین به شیوهای که سمنتیکهای حافظه حفظ شوند، بطور جزئی قواعد را حفظ میکنند. برای حفظ قواعد، کامپایلرها برخی دستورات حافظه را مرتبسازی مجدد میکنند. و با فراخوانی توابع کتابخانهای مانند Pthread_Mutex_Lock - - موازی سازیهای مورد نیاز را کپسوله میکنند. بررسی - Sequential Consistency - از طریق - Model Checking - عموما غیرقابل تشخیص است. حتی برای پروتکلهای. - Finite-State Cache-Coherence - مدلهای سازگاری، قواعد9 را برای نظم ظاهری و دیدی از به روزرسانیها تعریف میکنند؛ و این زنجیرهای از کشمکشها10 است. بعنوان مثال فرض میکنیم که موارد زیر رخ میدهند.
- a سطر X روی نودهای M و N تکثیر میشود.
- b کلاینت A سطر X را در نود M مینویسد.
- c بعد از یک دوره زمانی T کلاینت B سطر X را از نود N می-خواند.
مدل سازگاری تعیین میکند که آیا کلاینت B نوشته کلاینت A را میبیند یا نه. سازگاری مدلهای مختلف دارد که در زیر به دو مدل از آنها یعنی - سازگاری قوی - 11 و - سازگاری ضعیف - 12 اشاره کرده و هر کدام را به اختصار توضیح میدهیم. برای تعریف و دستهبندی مدلهای سازگاری دو روش View و Issue وجود دارد، که روش Issue محدودیتهایی را تعریف میکند که تعیین میکنند چطور یک فرآیند میتواند عملیات را انتشار بدهد Issue - بکند - . روش View ترتیب عملیات قابل مشاهده را برای فرآیندها تعریف میکند. بعنوان مثال یک مدل سازگاری میتواند تعیین بکند که یک فرآیند اجازه نداشته باشد که یک عمل را تا زمانیکه همه عملیات قبلا Issue شده، کامل شده باشند Issue بکند .[1,2]
-2 مدل سازگاری
مدلهای سازگاری مختلف شرایط متفاوتی را اعمال میکنند. یک مدل سازگاری میتواند قویتر از بقیه مطرح شود، اگر آن به همه شرایط آن مدل نیاز داشته باشد. بعبارت دیگر یک مدل با محدودیتهای کمتر، یک مدل سازگاری ضعیفتر است. این مدلها نحوه طراحی سختافزار و در سطحی بالاتر نحوه کدنویسی برنامهنویس را تعیین میکنند. مدل انتخاب شده بر نحوه مرتبسازی مجدد دستورالعملها توسط کامپایلر اثر میگذارد. بطور کلی اگر وابستگیها بین دستورالعملها کنترل شود و در همان محل بصورت مرتب شده نوشته شوند، آنگاه کامپایلر میتواند درصورت نیاز مجددا مرتبسازی انجام دهد. با این حال با مدلهای شرح داده شده، برخی مدلها ممکن است اجازه نوشتن قبل از لود را بدهند تا مرتب-سازی مجدد انجام شود، درحالیکه برخی مدلها ممکن است این اجازه را ندهند.
-1-2 سازگاری قوی
سازگاری قوی قویترین مدل سازگاری است. تحت این مدل یک Write برای یک متغیر، توسط هر پردازندهای که لازم است بلافاصله توسط همه پردازندهها دیده میشود. نمودار مدل Strict و نمودارهای مدل غیر Strict محدودیت زمان - لحظهای را توصیف میکنند. برای درک بهتر آن فرض کنید که یک - Global Clock - وجود دارد که در هر Write باید در همه - Cache - های پردازنده تا آخر آن - Clock Period - منعکس شود. و عمل بعدی باید تنها در - Clock Period - بعدی رخ دهد.
این محکمترین مدلی است که بدون عملکرد خروجی، غیرقابل اجرا است. در این مدل، نتیجه مورد انتظار برنامهنویس هر بار دریافت خواهد شد و آن قطعی است. یک سیستم توزیع شده با نودهای زیاد، برای کپی اطلاعات نوشته شده از یک نود به بقیه نودها، اندکی زمان خواهد گرفت. و این زمان نمیتواند صفر باشد زیرا تکثیر اطلاعات در فضای خالی زمانبر است و برای انتقال سریع اطلاعات به فضای خالی محدودیت وجود دارد. بنابراین در کل سازگاری قوی غیرممکن است. بنابراین بهترین کاری که میتوان انجام داد طراحی سیستمی است که - مکان تکرار - 13 نزدیک باشد، جائیکه زمان تکرار به حداقل نزدیک می-شود .[2]
در سازگاری قوی، برای بهبود در زمان پاسخ و برای جلوگیری از خرابی داده در مواردی از قبیل شکست14، داده در مکانهای مختلف ذخیره میشود - تکرار میشود - . درواقع سازگاری از تکرارها، داده را در تمام زمانها تضمین میکند. درواقعسازگاری قوی اشاره دارد به اینکه چطور میتواند داده را در مکانهای تکرار توزیع کرد - کپیبرداری در جاهای مختلف - ، تا قابلیت دسترسی به دادهها افزایش یابد و دسترسی به دادهها در هر زمان را تضمین بکند. برای اطمینان از تحملپذیری خطا، ذخیرهسازی داده را در چندین نسخه کپی میکنیم. این نسخهها مجموعه یکسان از داده را ذخیره میکنند. بنابراین درصورتیکه هر یک از این نسخهها از بین برود، داده میتواند از سایر نسخهها بدست آید.
در این روش داده در چندین نسخه تکرار میشود تا قابلیت دسترسی به آن افزایش یابد. یک زیرمجموعه از دادههای تکرار شده، توسط عملیات Read و Write قابل دسترسی است. بطوریکه نسبت تعداد کپیهای قابل دسترسی در عملیات Read و Write، سازگاری را تضمین میکند. بعنوان مثال در شکل - 1 - اگر تعداد عملیات خواندن را R و تعداد عملیات نوشتن را W و تعداد کپیها را N درنظر بگیریم دراینصورت N<R+W خواهد بود .[2]
-2-2 سازگاری ضعیف
برای بهبود زمان پاسخ و جلوگیری از گم شدن دادهها درصورت خرابی، اگر دادهها در جاهای مختلف ذخیره شوند - تکثیر شوند - ، کارائی سیستم و قابلیت دسترسی به دادهها درصورت پارتیشنبندی شبکه، میتواند سازگاری دادهای را اطمینانپذیر کند. وقتی بین کپیهای مختلف مشکل اتصال بوجود میآید و ارتباط مکانهای مختلف تکثیر، با مشکل مواجه میشود، داده نمیتواند به درستی تکثیر شود. دراینصورت قابلیت دسترسی به داده و کارائی سیستم کاهش مییابد. استفاده از تکرارهای متعدد از داده جهت اطمینان از قابلیت انعطاف- پذیری - فضای ذخیرهسازی - 15 درصورت خرابی منابع داده، حیاتی است.
نگه داشتن تمام این کپیها درحالت سازگار نیاز به سربار قابل توجهی دارد، زیرا در طی عملیات خواندن و نوشتن باید به همه کپی-های دادهها دسترسی داشته باشیم. در این حالت سازگاری داهها قابل انعطاف است. و این باعث کاهش تعداد تکرارهای در دسترس در طول عملیات خواندن و نوشتن میشود. درنهایت دادههای تغییر یافته بصورت ناهمگام به تمام مکانهای تکرار بر روی شبکه اتصال منتقل میشوند .[3] شکل - 2 - روند کار را بطور کامل نشان میدهد.
شکل : - 2 - عملیات Read و Write و نحوه توزیع داده در کپیهای مختلف در مدل سازگاری ضعیف - ممکن است Failed رخ دهد و داده نتواند از B به C کپی شود. - سازگاری ضعیف یک مدل سازگاری است که برای دستیابی به قابلیت دسترسی بالای دادهها در محاسبات توزیع شده استفاده می-شود. که بطور غیررسمی تضمین میکند که اگر هیچ به روزرسانی جدیدی برای یک آیتم داده انجام نشود، تمامی دسترسیها به آن آیتم به آخرین مقدار تغییر یافته برگشت داده خواهند شد.
در واقع سازگاری ضعیف یک تکرار خوشبینانه 16 است، و بطور گستردهای در سیستمهای توزیع شده گسترش یافته و ریشه در پروژه-های محاسباتی اولیه دارد. سیستمی که به سازگاری ضعیف دسترسی دارد دارای همگرایی است و همگرایی تکرار را بدست آورده است. سازگاری ضعیف یک تضمین ضعیف است. قویترین مدلها مانند خطیپذیری بطور قطعیسازگاری ضعیف هستند، اما سیستمی که صرفا سازگاری ضعیف است معمولا این محدودیتهای قوی را برآورده نمی-کند .[4]
سرویسهای سازگاری ضعیف بعنوان 17BASE طبقهبندی می-شوند که خاصیت 18ACID را تضمین میکنند. گاهی اوقات سازگاری ضعیف بعنوان افزایش دهنده پیچیدگی برنامههای نرمافزاری توزیع شده، مورد انتقاد قرار میگیرد. البته این انتقاد نسبی است، زیرا سازگاری ضعیف صرفا یک - تضمین حیات - 19 است و - تضمین امنیت - 20 را ایجاد نمیکند. - درنهایت همان مقدار خوانده شده را برمیگرداند - . یک سیستم سازگاری ضعیف میتواند هر مقداری را قبل از آمیختگی21 برگرداند.