MySQL replication হল এক বা একাধিক সার্ভারের মধ্যে ডেটা সিঙ্ক্রোনাইজেশন প্রযুক্তি, যেখানে একটি Master সার্ভার থেকে Slave সার্ভারে ডেটা কপি বা রেপ্লিকেট করা হয়। MySQL-এর রেপ্লিকেশন দুটি প্রধান মোডে কাজ করে: Asynchronous Replication এবং Semi-Synchronous Replication। প্রতিটি মোডের নিজস্ব সুবিধা এবং ট্রেড-অফ আছে, এবং সেগুলি সিস্টেমের পারফরম্যান্স এবং ডেটা সুরক্ষার দৃষ্টিকোণ থেকে আলাদা।
এখানে Asynchronous এবং Semi-Synchronous Replication এর মধ্যে পার্থক্য এবং প্রতিটির সুবিধা এবং অসুবিধা আলোচনা করা হয়েছে।
1. Asynchronous Replication
Asynchronous Replication হল MySQL এর ঐতিহ্যগত রেপ্লিকেশন মোড। এই মোডে, Master সার্ভার সমস্ত ট্রানজেকশন সম্পন্ন করার পরে তাদের binary logs তৈরি করে এবং Slave সার্ভারগুলো সেই binary logs সংগ্রহ করে এবং এগুলি প্রয়োগ করে।
কিভাবে কাজ করে:
- Master সার্ভার তার ডেটা আপডেট করার পর, পরিবর্তনগুলি binary log-এ লেখে।
- Slave সার্ভার Master এর binary log ফাইলগুলি পুল করে এবং তার ডেটাবেসে ওই পরিবর্তনগুলি প্রয়োগ করে।
- Master সার্ভার তার কাজ শেষ করার পর অন্য কোন সার্ভারের অপেক্ষা না করে পরবর্তী কাজ শুরু করতে পারে।
ফিচারস:
- No wait for acknowledgment: Master সার্ভার তার ট্রানজেকশন Slave সার্ভারকে প্রেরণ করার পর Slave থেকে কোন ধরনের acknowledgment (যেমন, confirmation) প্রত্যাশা করে না।
- Slave lag possible: Slave সার্ভার ডেটা প্রাপ্তির জন্য দেরি করতে পারে, অর্থাৎ Slave ডেটাবেস কখনও কখনও Master সার্ভারের পিছিয়ে থাকতে পারে।
সুবিধা:
- Performance: Asynchronous Replication খুব দ্রুত, কারণ Master সার্ভার দ্রুত কাজ শেষ করে এবং তার কাজের অপেক্ষা না করে পরবর্তী কাজ শুরু করতে পারে।
- Low Overhead: এই মোডে সার্ভারগুলোর মধ্যে কোন কঠোর সময় সীমা বা synchronous acknowledgment নেই, যা সিস্টেমের জন্য কম লোড তৈরি করে।
অসুবিধা:
- Data inconsistency: যদি Master সার্ভার বন্ধ হয়ে যায় বা ক্র্যাশ করে, তবে Slave সার্ভারের ডেটা Master এর ডেটা থেকে পিছিয়ে থাকতে পারে, কারণ Slave সার্ভার প্রাপ্ত তথ্যের অপেক্ষা করে না।
- Risk of data loss: কোনো কারণে Master সার্ভারের পরিবর্তনগুলি Slave সার্ভারে পৌঁছানোর আগে সার্ভার বন্ধ হয়ে গেলে, সেই পরিবর্তন হারিয়ে যেতে পারে।
2. Semi-Synchronous Replication
Semi-Synchronous Replication হল MySQL এর উন্নত সংস্করণ যা Asynchronous Replication এবং Synchronous Replication এর মধ্যে একটি ব্যালান্স প্রদান করে। এই মোডে, Master সার্ভার শুধুমাত্র তখনই ট্রানজেকশন কমপ্লিট করবে যখন Slave সার্ভারগুলি ট্রানজেকশনের binary log গ্রহণ করবে, তবে তারা ডেটা প্রয়োগ করতে বাধ্য নয়।
কিভাবে কাজ করে:
- Master সার্ভার তার binary log তৈরি করার পর, এটি Slave সার্ভারে পাঠায়।
- Master সার্ভার তখন তার ট্রানজেকশন Slave সার্ভারের acknowledgment (confirmation) পাওয়ার জন্য অপেক্ষা করবে।
- Slave সার্ভার ট্রানজেকশন গ্রহণ করে এবং Master সার্ভারকে ACK প্রেরণ করে, তবে Slave সার্ভারের জন্য ডেটা প্রয়োগ (apply) বাধ্যতামূলক নয়।
ফিচারস:
- Master waits for Slave acknowledgment: Master সার্ভার তার ট্রানজেকশন Slave সার্ভারের acknowledgment পাওয়ার আগে ট্রানজেকশনকে সম্পন্ন করবে না।
- Less lag than asynchronous: Slave সার্ভারের lag বা পিছিয়ে থাকার সম্ভাবনা কম থাকে।
- Slave not forced to apply: Slave সার্ভার শুধুমাত্র ট্রানজেকশন গ্রহণ করে, তবে তার apply বা ডেটা প্রয়োগ বাধ্যতামূলক নয়।
সুবিধা:
- Data consistency: Slave সার্ভারের সঙ্গে সিঙ্ক্রোনাইজেশন ভাল থাকে, তাই ডেটা হারানোর সম্ভাবনা কম থাকে।
- Better than asynchronous: Semi-Synchronous রেপ্লিকেশন asynchronous এর তুলনায় সিঙ্ক্রোনাইজেশনে কিছুটা উন্নত।
- Lower risk of data loss: যদি Master সার্ভার বন্ধ হয়, তবে কম ডেটা হারানোর সম্ভাবনা থাকে, কারণ Slave সার্ভার ট্রানজেকশন গ্রহণ করেছে এবং সিঙ্ক্রোনাইজেশন হয়েছে।
অসুবিধা:
- Performance impact: Master সার্ভারের Slave থেকে acknowledgment পাওয়ার জন্য অপেক্ষা করতে হয়, যা Asynchronous Replication এর তুলনায় কিছুটা ধীর হতে পারে।
- Slave lag: যদিও এটি Asynchronous Replication এর চেয়ে ভালো, তবে Slave সার্ভারের কিছু lag থাকতে পারে, যদিও তা কম হয়।
৩. Synchronous Replication (Synchronous Replica)
এটি আরো একটি ভিন্নধর্মী রেপ্লিকেশন কনফিগারেশন, যেখানে Master সার্ভার তার ট্রানজেকশন তখনই সম্পন্ন করবে, যখন Slave সার্ভার ট্রানজেকশনের সব ডেটা apply করবে এবং acknowledge করবে। তবে, MySQL এ এটি native ভাবে সমর্থিত নয় এবং অধিকাংশ রেপ্লিকেশন কনফিগারেশন Semi-Synchronous Replication হিসেবে থাকে।
Asynchronous vs Semi-Synchronous Replication
| Feature | Asynchronous Replication | Semi-Synchronous Replication |
|---|---|---|
| Master Completion Time | Very fast — Master doesn't wait for acknowledgment | Slower — Master waits for acknowledgment from Slave |
| Data Consistency | Possible inconsistency between Master and Slave | Better consistency than Asynchronous Replication |
| Risk of Data Loss | High — Possible data loss if Master crashes before Slave catches up | Low — Data loss risk is lower as Master waits for Slave acknowledgment |
| Performance | High performance (no waiting for acknowledgment) | Slight performance overhead due to waiting for Slave acknowledgment |
| Replication Latency | High — Slave may lag behind Master | Lower latency than Asynchronous Replication |
| Use Case | High-performance systems where data consistency isn't the highest priority | Systems requiring a balance between performance and data consistency |
কোনটি ব্যবহার করবেন?
- Asynchronous Replication: যদি আপনার সিস্টেমে ডেটার পড়ার (read) কাজ দ্রুত হওয়া গুরুত্বপূর্ণ হয় এবং ডেটা হারানো কম প্রভাব ফেলবে, তবে Asynchronous Replication একটি ভালো পছন্দ হতে পারে।
- Semi-Synchronous Replication: যদি আপনি ডেটার লিখা (write) এবং পড়ার (read) পারফরম্যান্সে ভাল ব্যালান্স চান এবং ডেটা সিঙ্ক্রোনাইজেশন বা কনসিস্টেন্সি প্রাধান্য দেয়, তবে Semi-Synchronous Replication ভাল অপশন।
সারাংশ
Asynchronous Replication এবং Semi-Synchronous Replication উভয়ই MySQL-এর ডেটাবেস সিঙ্ক্রোনাইজেশনের জন্য ব্যবহৃত হয়, তবে তাদের মধ্যে পার্থক্য হলো Asynchronous রেপ্লিকেশন দ্রুত কিন্তু কম সঠিক এবং Semi-Synchronous রেপ্লিকেশন ডেটা সঠিকতা নিশ্চিত করে কিন্তু কিছুটা ধীর হতে পারে। আপনার সিস্টেমের প্রয়োজন অনুসারে সঠিক রেপ্লিকেশন কনফিগারেশন নির্বাচন করা উচিত, যাতে পারফরম্যান্স এবং ডেটা সিকিউরিটি উভয়ের সঠিক ব্যালান্স বজায় থাকে।
Read more