پروژه آماری الگوریتمهای كنترل همروندی در 16 صفحه ورد قابل ویرایش
چكیده : در این گزارش ما به بررسی ویژگی های الگوریتمهای كنترل همروندی توزیعی كه بر پایه مكانیزم قفل دو مرحله ای(2 Phase Locking) ایجاد شده اند خواهیم پرداخت. محور اصلی این بررسی بر مبنای تجزیه مساله كنترل همروندی به دو حالت read-wirte و write-write میباشد. در این مقال، تعدادی از تكنیكهای همزمان سازی برای حل هر یك از قسمتهای مساله بیان شده و سپس این تكنیكها برای حل كلی مساله با یكدیگر تركیب میشوند.
در این گزارش بر روی درستی و ساختار الگوریتمها متمركز خواهیم شد. در این راستا برای ساختار پایگاه داده توزیعی یك سطحی از انتزاع را در نظر میگیریم تا مساله تا حد ممكن ساده سازی شود.
1. مقدمه : كنترل همروندی فرآیندی است كه طی آن بین دسترسی های همزمان به یك پایگاه داده در یك سیستم مدیریت پایگاه داده چند كاربره هماهنگی بوجود میآید. كنترل همروندی به كاربران اجازه میدهد تا در یك حالت چند برنامگی با سیستم تعامل داشته باشند در حالیكه رفتار سیستم از دیدگاه كاربر به نحو خواهد بود كه كاربر تصور میكند در یك محیط تك برنامه در حال فعالیت است. سخت ترین حالت در این سیستم مقابله با بروز آوری های آزار دهنده ای است كه یك كاربر هنگام استخراج داده توسط كاربر دیگر انجام میدهد. به دو دلیل ذیل كنترل همروندی در پایگاه داده های توزیعی از اهمیت بالایی برخوردار است:
- كاربراان ممكن است به داده هایی كه در كامپیوترهای مختلف در سیستم قرار دارند دسترسی پیدا كنند.
- یك مكانیزم كنترل همروندی در یك كامپیوتر از وضعیت دسترسی در سایر كامپیوترها اطلاعی ندارد.
مساله كنترل همروندی در چندین سال قبل كاملا مورد بررسی قرار گفته است و در خصوص پایگاهدادههای متمركز كاملا شناخته شده است. در خصوص این مسال در پایگاه داده توزیعی با توجه به اینكه مساله در حوزه مساله توزیعی قرار میگیرد بصورت مداوم راهكارهای بهبود مختلف عرضه میشود. یك تئوری ریاضی وسیع برای تحلیل این مساله ارائه شده و یك راهكار قفل دو مرحله ای به عنوان راه حل استاندارد در این خصوص ارائه شده است. بیش از 20 الگوریتم كنترل همروندی توزیعی ارائه شده است كه بسیاری از آنها پیاده سازی شده و در حال استفاده میباشند.این الگوریتمها معمولا پیچیده هستند و اثبات درستی آنها بسیار سخت میباشد. یكی از دلایل اینكه این پیچیدگی وجود دارد این است كه آنها در اصطلاحات مختلف بیان میشوند و بیان های مختلفی برای آنها وجود دارد. یكی از دلایل اینكه این پیچدگی وجود دارد این است كه مساله از زیر قسمتهای مختلف تشكیل شده است و برای هر یك از این زیر قسمتها یك زیر الگوریتم ارائه میشود. بهترین راه برای فائق آمدن بر این پیچدگی این است كه زیر مساله ها و الگوریتمهای ارائه شده برای هر یك را در ی.ك سطح از انتزاع نگاه داریم.
با بررسی الگوریتمهای مختلف میتوان به این حقیقت رسید كه این الگوریتمها همگی تركیبی از زیر الگوریتمهای محدودی هستند. در حقیقت این زیر الگوریتمها نسخههای متفاوتی از دو تكنیك اصلی در كنترل همروندی توزیعی به نامهای قفل دو مرحله ای و ترتیب برچسب زمانی میباشند.
همانطور كه گفته شد، هدف كنترل همروندی مقابله با تزاحمهایی است كه در اثر استفاده چند كاربر از یك سری داده واحد برای كاربران بوجود میآید است. حال ما با ارائه دو مثال در خصوص این مسائل بحث خواهیم نمود. این دو مثال از محك معروف TPC_A مقتبس شده اند. در این مثالها، یك سیستم اطلاعات را از پایگاه داده ها استخراج كرده و محاسبات لازم را انجام داده و در نهایت اطلاعات را در پایگاه داده ذخیره مینماید.
حالت اول را میتوان بروزآوری از دست رفته نامید. حالتی را تصور كنید كه دو مشتری از دو سیستم مجزا بخواهند از یك حساب مالی برداشت نمایند. در این حالت فرض كنید در غیاب سیستم كنترل همروندی، هر دو با هم اقدام به خواندن اطلاعات و درج اطلاعات جدید در سیستم میكنند. در این حالت در غیاب سیستم كنترل همروندی تنها آخرین درج در سیستم ثبت میشود. این حالت در شكل 1 نشان داده شده است.
6-قفل دو مرحلهای با نسخه اولیه : قفل دو مرحلهای با نسخه اولیه یك تكنیك از نوع قفله دو مرحلهای است كه كه به افزونگی داده توجه خاصی دارد. یك كپی از هر داده منطقی به عنوان یك كپی یا نسخه اولیه از داده مزبور مطرح میشود. قبل از دسترسی به هر گونه كپی از داده های منطقی، قفل صحیح باید از كپی اولیه اخذ شود.
برای قفلهای خواندنی این روش تعامل و ارتباطات بیشتری را نیاز دارد.فرض كنید كه T یك تراكنش باشد كه بخواهد داده x را بخواند. در اینصورت اگر X1 كپی اولیه از x باشد و xi برای خواندن توسط تراكنش در دسترس باشد، تراكنش بایستی با x1 كه كپی اولیه داده است تعامل داشته و قفل خود را بدست آورد و پس از آن نیز با تعامل با xi داده مورد نظر خود را از Xi بخواند. برای قفلهای نوشتنی بر عكس پیاده سازی پایه قفل دو مرحله ای تراكنش احتیاجی به تعامل بیشتر با سایر dm ها ندارد. در پیاده سازی پایه قفل دو مرحله ای، اگر یك تراكنش میخواست داده x را بروز كند، لازم بود تا بر تمامی نسخه های x قفل نوشتنی بزند و سپس عمل نوشتن را بر روی تمامی نسخه های x انجام دهد اما در اینجا فقط لازم است كه تراكنش قفل نوشتن را بر روی كپی اولیه قرار دهد و در صورت بدست آوردن قفل، باید عملیات نوشتن را مانند روش قبل بر روی تمامی نسخه های x انجام دهد.
6-قفل دو مرحلهای با رای گیری : قفل دو مرحله ای با رای گیری پیادهسازی دیگری از روشهای قفل دو مرحله ای است كه در آن افزونگی داده بیشتر مد نظر قرار گرفته است. این روش شكل تغییر یافته الگوریتم توافق اكثریت توماس است و تنها برای همزمان سازیهای ww مناسب است.
برای فهم بهتر این روش بهتر است آنرا در داخل روش two phase commit توصیف كنیم. فرض كنید یك تراكنش بخواهد بر روی داده x مقدار جدیدی را بنویسد، در اینصورت درخواست قفل به تمامی نسخه های داده x ارسال شود. در صورتیكه قفل قابل تخصیص باشد، DM دریافت كننده قفل بایستی یك پیام تخصیص قفل صادر نماید. در صورتیكه قفل قابل تخصیص نباشد نیز یك پیام بلوكه شدن در خواست قفل ارسال میگردد. در صورتیكه پیامها از dm های مختلف برگشت داده شد، حال tm ارسال كننده درخواست قفل اقدام به تصمیمگیری مینماید. در صورتیكه تعداد قفلهای اخذ شده دارای اكثریت باشند، آنگاه tm دقیقا مانند حالتی عمل میكند كه قفلهای لازم را بر روی نسخه داده ای مزبور بدست آورده است. در این حالت tm باقی عملیات یعنی نوشتن بر روی داده مزبور را انجام میدهد. در صورتیكه قفلهای لازم بر روی داده مورد نظر به تعداد اكثریت نباشد، Tm منتظر دریافت پاسخ تخصیص قفل از dm هایی كه پاسخ بلوكه شدن قفل را ارسال نمودند، میشود. در این حالت با دریافت پاسخ جدید از dm هایی كه قبلا درخواست را بلوكه كردند، tm تعداد قفلهای لازم را بررسی میكند. در صورت اخذ اكثریت آرا، اجرای خود را ادامه میدهد. از آنجائیكه فقط یك تراكنش میتواند در هر لحظه اكثریت قفلهای نوشتن را بدست آورد در نتیجه فقط در هر لحظه فقط بك تراكنش میتواند بر روی اطلاعات تغییرات اعمال نماید. در هر لحظه فقط یك تراكنش میتواند در فاز نوشتن خود قرار داشته باشد. در نتیجه تمامی نسخه های x دارای یك ترتیب مشخص و مشترك از مقادیر میباشند. نقطه قفل یك تراگنش جایی است كه یك تراكنش توانسته است اكثریت قفلهای لازم را برای نوشتن برای هر آیتم دادهای در مجموعه نوشتاری خود بدست آورد. برای بروز آوری های با حجم بالا ، تراكنش بایستی اكثریت قفلهای نوشتن را بر روی تمامی آیتمهای داده ای نوشتنی خود قبل از ارسال دستورات نوشتن بدست آورد.
در حقیقت، قفل دو مرحله ای با رای گیری میتواند برای همزمان سازی عملیات های rw سازگار شود. برای اینكار برای خواندن یك نسخه دادهای بایستی قفل خواندن از تمامی نسخه های داده ای درخواست شود. در صورتیكه اكثریت قفل خواندن از dm ها بدست آید میتواند اطلاعات مورد نظر را بخواند. این روش روش بسیار خوب و قدرتمندی است ولی در این روش برای خواندن یك آیتم داده ای بایستی از تمامی سایتهایی كه دارای یك نسخه از آیتم دادهای مذكور هستند قفل خواندن اخذ شود كه عملا سیستم را بسیار كند میكند.
7- قفل دو مرحلهای متمركز : بجاری توزیع نمودن زمانبندها بر روی سایتهای مختلف، همه زمانبندها را بر روی یك سایت متمركز خواهیم نمود. در این خالت اگر یك تراكنش بخواهد به یك داده x دسترسی پیدا كند باید از سایت مذكور درخواست قفل مناسب بر روی داده مذكور نماید. در این وضعیت داده ممكن است بر روی یك سایت غیر از سایت زمانبند مركزی قرار داشته باشد.
فرض كنید تراكنشt بخواهد داده x را بخواند در اینصورت بایستی t یك قفل خواندن را از سایت مركزی درخواست نماید. در این حالت اگر قفل تخصیص داده شود تراكنش میتواند اطلاعات را از یكی از سایتهایی كه دارای xهستند درخواست نماید. در غیر اینصورت باید منتظر دریافت مجوز تخصیص ثقفل خواندن از سوی سایت زمانبند مركزی باشد. در حالتی كه داده x بر روی سایت مركزی زمانبند نیز باشد، درخواست قفل و داده بطور مشترك به سایت مركزی ارسال میشود، در صورتیكه قفل قابل تخصیص باشد، عملیات خواندن به همراه تخصیص قفل انجام میشود. برای عملیات بروز آوری و نوشتن نیز فرآیند تخصیص قفل به همین نحو است با این تفاوت كه بعد از تخصیص قفل و اعلام به درخواست كننده از سوی سایت مركزی زمانبندی، سایت درخواست كننده موظف است تمامی كپی های نسخه های اطلاعاتی را بروز نماید. این روش نیز مانند قفل دو مرحلهای كپی اولیه مستلزم نقل و انتقال مضاعف پیام میباشد.