مقایسه Asynchronous Replication و Synchronous Replication
در این مقاله میخوانید
- MySQL Replication یا تکرار داده در MySQL چیست؟
- عوامل تأثیرگذار در MySQL Replication
- مقایسه استراتژیهای Asynchronous Replication و Synchronous Replication در MySQL Replication
- جدول مقایسه کلی
- Asynchronous Replication بهتر است یا Synchronous Replication؟
- معرفی سایر روشهای MySQL Replication
- جمعبندی
- سؤالات متداول
Replication ویژگی قدرتمندی است که برای پایگاههای داده MySQL ایجاد شده است. این عملیات فرایند تکثیر دادهها از سرور اصلی (Master) به سرور یا سرورهای فرعی (Slave) را بهراحتی انجام میدهد. بدینترتیب، میتوانید دادههای خود را با استفاده از چندین روش ازجمله Asynchronous Replication و Synchronous Replication در سرورهای متفاوتی ذخیره کنید و سیستم دیتابیس قویتر و مقیاسپذیرتری داشته باشید.
استفاده از MySQL Replication برای مدیریت سرورها در کسبوکارهای روبهرشد و بزرگ، بهشدت توصیه میشود. در این مطلب، روشها و استراتژیهای تکثیر داده در MySQL را بهطورکامل توضیح میدهیم و به تفاوتها و شباهتهای آنها اشاره میکنیم.
MySQL Replication یا تکرار داده در MySQL چیست؟
MySQL Replication یا تکرار دادهها در MySQL فرایندی است که به یک یا چند سرور MySQL که بهعنوان Slave شناخته میشوند، اجازه میدهد تا بهطورخودکار با دادههای سرور MySQL اصلی همگامسازی شود. بهعبارتدیگر، در فرایند MySQL Replication تمام دادههای موجود در یک دیتابیس به دیتابیسهای دیگر ارسال میشوند که میتواند مزایای زیادی ازجمله Scale-Out (ارسال درخواستهای Read به سرورهای دیگر) و پشتیبانگیری و امنیت دادهها داشته باشد.
عملیات MySQL Replication امکان ذخیره دادههایتان در چندین دیتابیس را مهیا میکند؛ ازاینرو، میتوانید عملیاتهای مختلفی مانند ارسال کوئری Read و پشتیبانگیری و گزارشگیری را روی دیتابیسهای دیگر انجام دهید و بار روی دیتابیس اصلی را کاهش دهید.
برای انجام عملیات MySQL Replication، چندین روش وجود دارد که میتوانید ازطریق آنها دادههایتان را با دیتابیسهای دیگر بهاشتراک بگذارید.
عوامل تأثیرگذار در MySQL Replication
قبل از شروع عملیات MySQL Replication، باید عوامل تأثیرگذار بر اجرای فرایند تکرار داده در دیتابیس را بشناسید. این عوامل عبارتاند از:
- فاصله: هرچه فاصله بین سرورها بیشتر باشد، تأخیر بیشتری در انتقال دادهها مشاهده میشود.
- پهنای باند: سرعت اینترنت و اتصال شبکه باید برای انتقال سریع و دائمی دادهها کافی باشد.
- نرخ داده: نرخ داده باید کمتر از پهنای باند موجود باشد تا شبکه بیشازحد مشغول نشود.
- فناوری: برای استفاده بهینه از شبکه باید کارهای تکراری همزمان انجام شوند.
برای شناخت بیشتر سیستمهای مدیریت دیتابیس نسبی از جمله SQLite MySQL PostgreSQL مقالهی زیر را بخوانید.
مقایسه استراتژیهای Asynchronous Replication و Synchronous Replication در MySQL Replication
Asynchronous Replication (تکرار غیرهمزمان دادهها) و Synchronous Replication (تکرار همزمان دادهها) دو روش اصلی و اساسی در MySQL Replication هستند که بیشترین کاربرد را دارند.
۱. استراتژی Synchronous Replication (تکرار همزمان)
Synchronous Replication منتظر میماند تا تمام نودها قبل از ارائه پاسخ به کاربر، تراکنش را انجام دهند؛ دقیقاً برخلاف عملیات Asynchronous Replication که در پسزمینه بعد از یک Commit به Master رخ می دهد. با این روش تکثیر دادهها، میتوانید مطمئن باشید که اگر تراکنش را انجام دهید، آن تراکنش در هر نود انجام میشود.
- در این روش، همزمان با ایجاد یا بهروزرسانی داده در دیتابیس اصلی، دادهها در دیتابیسهای ثانویه تکثیر میشوند و با تضمین اینکه همه تراکنشها روی تمام نودها در Commit پایگاهداده انجام میشوند، مشکلات ازدستدادن دادهها را برطرف می کند.
- در این روش، دادهها پس از تغییر یا ایجاد در دیتابیسهای Slave بهسرعت منتشر میشوند.
- درمجموع، هر دو دیتابیس بهصورت همزمان سینک میشوند.
- برای عملیات Disaster Recovery کارآمدتر است.
- عملکرد و دردسترسبودن دائمی شبکه بسیار مهم است.
- زمانی عملیات تکثیر بهپایان میرسد که دیتابیس اصلی وجود داده در دیتابیسهای ثانویه را تأیید کند؛ بههمیندلیل، نرخ ازدسترفتن دادهها صفر است.
- عملکرد کلی کمی کُندتر است.
- در این حالت، قبل از ارسال تأییدیه به سیستم اصلی، تأییدیه از دیتابیس محلی برای وجود فایلها گرفته و سپس به سرور اصلی ارسال میشود.
روش های مهم افزایش امنیت دیتابیس MySQL را در مقاله زیر بخوانید.
۲. استراتژی Asynchronous Replication (تکرار غیرهمزمان)
روش Asynchronous Replication نیز یکی از روشهای معروف تکثیر داده در MySQL است. با استفاده از روش async، تمام عملیات تکرار از پایگاهداده جدا میشود و این عملیاتها در پسزمینه انجام میشود که رویدادها را از لاگ باینری روی دیسک میخواند و درصورت نیاز، آنها را دردسترس Slaveها قرار میدهد. این عملیات هیچ تغییری در نحوه عملکرد برنامه بهوجود نمیآورد. همچنین، async سرعت پاسخ MySQL به برنامه را کاهش نمی دهد.
- در این حالت، همزمان با ایجاد تغییر در دیتابیس اصلی، عملیات تکرار دادهها آنی انجام نمیشود و با کمی تأخیر انجام میشود.
- دادهها بین چند ثانیه تا چند دقیقه تأخیر دارند و همواره در حال همگامسازی هستند.
- دیتابیس را میتوان در مکانی بسیار دور برای Disaster Recovery قرار داد؛ زیرا به همگامسازی آنی نیازی ندارد. البته در فواصل بیشتر از ۳۰ میلیثانیه، ممکن است کارایی کاهش پیدا کند.
- در این روش، عملکرد کلی و دردسترسبودن شبکه بهبود خواهد یافت و پهنای باند بیشتری دراختیارتان قرار خواهد گرفت؛ زیرا کپیها بهصورت آنی انتقال داده نخواهند شد.
- این روش برای بازیابی دیتابیس مناسب نیست؛ زیرا ممکن است آخرین دادهها را دراختیار نداشته باشد.
- تکثیر غیرهمزمان درمقایسهبا تکرار همزمان به پهنای باند کمتری نیاز دارد.
جدول مقایسه کلی
Synchronous Replication | Asynchronous Replication | |
فاصله | زمانیکه مکان سرورها در نزدیک یکدیگر قرار دارند، بهتر عمل میکند (عملکرد باتوجهبه فاصله کاهش مییابد). | در فواصل طولانیتری کار میکند (تا وقتی اتصال شبکه بین دیتاسنترها دردسترس باشد). |
هزینه | گرانتر | مقرونبهصرفهتر |
هدف نقطه بازیابی (RPO) | صفر | از ۱۵ دقیقه تا چند ساعت |
هدف زمان بازیابی (RTO) | کوتاه | کوتاه |
شبکه | به پهنای باند بیشتری نیازمند است و ممکن است تحتتأثیر وقفههای WAN قرار گیرد؛ زیرا انتقال دادههای تکراری را نمیتوان به بعد موکول کرد. | به پهنای باند کمتری نیاز دارد و تحتتأثیر وقفههای WAN قرار نمیگیرد؛ زیرا کپی دادهها را میتوان در سایت محلی ذخیره کرد تا زمانیکه سرویس WAN بازیابی شود. |
ازدسترفتن دادهها | صفر | احتمال ازدستدادن جدیدترین بهروزرسانیهای دادهها |
تابآوری | خرابی یک سرور میتواند سرویس را متوقف کند. | متوقفشدن سرویس ممکن است پس از خرابی دو سرویس اتفاق بیفتد. |
کارایی | نرمال (منتظر تأیید شبکه از محل ثانویه است)
کارایی فقط در کوئریهای write کاهش پیدا میکند و درعوض، در Read افزایش مییابد. |
زیاد (منتظر تأیید شبکه از محل ثانویه نیست). |
مدیریت | بسته به نوع استفاده ممکن است به سرورهای تخصصیتری نیاز داشته باشد. حداقل به ۳ سرور نیاز دارد که بهتر است به Raid مجهز باشند. | به سختافزار خاصی نیاز ندارد. منابع CPU و RAM در حد متوسط نیز کفایت میکند. |
کاربردها | بهترین راهحل برای بازیابی فوری دادهها در زمان رخدادن بلایای طبیعی. | بهترین راهحل برای ذخیره دادههای غیرحساس و بازیابی دادههایی است که احتمال دارد با نسخه اصلی اختلاف جزئی داشته باشند. |
Asynchronous Replication بهتر است یا Synchronous Replication؟
پاسخ قطعی و روشنی برای این پرسش وجود ندارد و انتخاب کاملاً به کسبوکار و اولویتهایتان بستگی دارد.
- Asynchronous Replication برای پروژههایی مناسبتر است که سرورهای آنها از یکدیگر فاصله دارند و بودجهشان محدود است و ازدستدادن جزئی دادهها نیز برایشان اهمیت ندارد.
- Synchronous Replication برای پروژههایی مناسبتر است که فاصله کمتری از سرور دارند و به ذخیرهسازی مطمئن دادهها در طولانیمدت و دراختیارداشتن فوری آنها نیازمندند. اگر ازدستدادن کوچکترین دادهها برایتان اهمیت دارد و بودجه نسبتاً بیشتری برای این عملیات در نظر گرفتهاید، Synchronous Replication بهترین گزینه برایتان است.
معرفی سایر روشهای MySQL Replication
برای انجام عملیات MySQL Replication، چندین روش وجود دارد که با کمک آنها دادههای خود را در دیتابیسهای دیگر میتوانید تکثیر کنید. علاوهبر روشهای معرفیشده پیشین، روشهای دیگری نیز هستند که کاربردهای خاص خود را دارند.
برای دنبال کردن آموزش کامل ساخت دیتابیس در phpmyadmin مقاله زیر را بخوانید
۱. استراتژی Semi Synchronous Replication (تکرار نیمههمزمان)
با استراتژی Semi Synchronous Replication تراکنشهایی که روی Master انجام میشوند، به حداقل یک نود Slave منتقل میشوند؛ اما این بهمعنای انجام Commit نیست. در این روش، Commitها در پسزمینه انجام میشوند. درمقایسهبا async، اگرچه به سرعت async نمیرسد، احتمال ازدسترفتن دادهها و تأخیر تکثیر کمتری وجود دارد.
- در این روش، سرور اصلی پس از بهروزرسانی منتظر میمانَد تا زمانیکه حداقل یکی از سرورها تغییر را ثبت و تأییدیه را به سرور اصلی ارسال کند.
- تکرار نیمههمزمان تضمین میکند که تراکنش بهدرستی کپی شده باشد؛ اما تضمین نمیکند که واقعاً Commit در Slave انجام شود.
- تکرار نیمههمزمان مطمئن میشود که Master منتظر ادامه پردازش تراکنشها در تراکنشی خاص میمانَد تا زمانیکه حداقل یکی از Slave دریافت تراکنش را تأیید کند یا به پایان زمان برسد.
- Semi Synchronous Replication با Synchronous Replication متفاوت است.
- فراموش نکنید که Semi Synchronous Replication بر عملکرد تأثیر میگذارد؛ زیرا باید منتظر بازگشت ACK واقعی از Slave باشد.
۲. استراتژی Group Replication (تکرار گروهی)
- این استراتژی تکثیر داده در MySQL وجود دارد و در MySQL Community Edition 5.7 معرفی و در MySQL 5.7.17 GA ارائه شده است.
- هرزمان که تراکنش روی نود اجرا شود، افزونه سعی میکند قبل از بازگرداندن آن به کاربر، دادهها را با سایر گروهها مطابقت دهد.
جمعبندی
MySQL Replication عملیاتی عالی برای ایجاد سیستمهای پایگاهداده قوی و مقیاسپذیر و توزیعشده است که با استفاده از روشها و استراتژیهای متفاوت پیادهسازی میشود. در روش Synchronous Replication (تکرار همزمان)، دادههای شما بهصورت آنی با سرورهای دیگر بهاشتراک گذاشته میشوند و این امر به فاصله نزدیک و پهنای باند بیشتر نیاز دارد. در روش تکثیر Asynchronous Replication (تکرار غیرهمزمان)، دادهها با فاصله چند ثانیه روی سرور دوم قرار گرفته و دراختیار سایر سرورها قرار میگیرد. این کار به زیرساختهای ضعیفتری نیاز دارد. هنگامیکه MySQL Replication بهدرستی پیکربندی شده باشد، عملکرد و کارایی بهتری درمقایسهبا پایگاههای داده مستقل ارائه خواهد داد؛ بنابراین، بهتر است از این روش هرچهسریعتر استفاده کنید.
سؤالات متداول
۱. Replication در MySQL چیست؟
به عملیات تکثیر دادهها از دیتابیس اصلی (Master) به دیتابیسهای ثانویه (Slave)، MySQL Replication گفته میشود.
۲. روش Synchronous Replication (تکرار همزمان) چیست؟
در این روش، دادههای شما بهصورت آنی با سرورهای دیگر بهاشتراک گذاشته میشوند. این امر به فاصله نزدیک و پهنای باند بیشتر نیازمند است.
۳. روش Asynchronous Replication (تکرار غیرهمزمان) چیست؟
در این روش، دادهها با تأخیر چندثانیهای و همگامسازی مداوم دراختیار سایر سرورها قرار میگیرند. این کار به زیرساختها و پهنای باند ضعیفتری نیاز دارد.
4. آیا Replication بر سرعت دیتابیس تأثیرگذار است؟
عملیات تکرار (Replication) تأثیرات بسیار کم و جزئی روی سرعت دیتابیس شما میگذارد.
- در حالت Sync، حدوداً ۱۰درصد سرعت نوشتن (Write) کم میشود.
- در حالت async، تأثیر کمی درحدود کمتر از ۱درصد دارد.