Data Consistency & its Levels
ডিস্ট্রিবিউটেড সিস্টেমে (Distributed System) যখন ডেটা একাধিক সার্ভারে থাকে, তখন সব সার্ভারে একই সময়ে সঠিক ডেটা থাকা নিশ্চিত করাই হলো কন্সিস্টেন্সি (Consistency)।
কন্সিস্টেন্সি কি?
সহজ কথায়, একজন ইউজার ডেটা আপডেট করার পর অন্য সব ইউজার সেই আপডেটেড ডেটা দেখতে পাচ্ছে কি না, সেটিই হলো কন্সিস্টেন্সি। ডিস্ট্রিবিউটেড সিস্টেমে ডেটা রিপ্লিকেট হতে সময় লাগে, তাই বিভিন্ন লেভেলের কন্সিস্টেন্সি দেখা যায়।
কন্সিস্টেন্সি লেভেলসমূহ (Consistency Levels)
সিস্টেমের প্রয়োজন অনুযায়ী আমরা বিভিন্ন লেভেলের কন্সিস্টেন্সি ব্যবহার করি:
১. Strong Consistency (স্ট্রং কন্সিস্টেন্সি)
এটি সবচেয়ে কঠোর লেভেল। এখানে কোনো ডেটা রাইট (Write) হওয়ার সাথে সাথে সব রিড (Read) অপারেশনে নতুন ডেটা পাওয়া যাবে।
- সুবিধা: ইউজার সবসময় সঠিক তথ্য পায়।
- অসুবিধা: ল্যাটেন্সি (Latency) বেশি হয় কারণ সব সার্ভারে আপডেট না হওয়া পর্যন্ত রিকোয়েস্ট কমপ্লিট হয় না।
- উদাহরণ: ব্যাংকিং ট্রানজেকশন।
২. Eventual Consistency (ইভেনচুয়াল কন্সিস্টেন্সি)
এখানে ডেটা রাইট করার সাথে সাথে সব সার্ভারে আপডেট হয় না। তবে সিস্টেমটি গ্যারান্টি দেয় যে, যদি নতুন কোনো রাইট না হয়, তবে কিছু সময় পরে সব সার্ভার একই ডেটা দেখাবে।
- সুবিধা: সিস্টেম অনেক ফাস্ট এবং অ্যাভেইল্যাবল থাকে।
- অসুবিধা: সাময়িকভাবে কিছু ইউজার পুরানো ডেটা দেখতে পারে।
- উদাহরণ: ফেসবুকের লাইক বা কমেন্ট সংখ্যা, টুইটার ফিড।
৩. Causal Consistency (কজাল কন্সিস্টেন্সি)
যদি দুটি অপারেশন একে অপরের সাথে সম্পর্কিত হয় (Cause-Effect), তবে সেগুলোকে একটি নির্দিষ্ট অর্ডারে সব ইউজার দেখবে। কিন্তু যেগুলো সম্পর্কিত নয়, সেগুলো বিভিন্ন অর্ডারে দেখা যেতে পারে।
- উদাহরণ: একটি কমেন্টের রিপ্লাই সবসময় মূল কমেন্টের পরেই দেখা যাবে।
৪. Read-your-writes Consistency
একজন ইউজার যখন কিছু সেভ করবে, সে অন্তত নিজের করা আপডেটটি সাথে সাথেই দেখতে পাবে, যদিও অন্যান্য ইউজাররা তা দেখতে একটু দেরি করতে পারে।
সামারি টেবিল
| কন্সিস্টেন্সি লেভেল | স্পিড (Latency) | ডেটা নির্ভুলতা (Correctness) |
|---|---|---|
| Strong | স্লো (High Latency) | ১০০% সঠিক |
| Eventual | খুব ফাস্ট (Low Latency) | সাময়িক ভুল হতে পারে |
| Causal | মাঝারি | সোর্স অনুযায়ী সঠিক |
IMPORTANT
আপনি যদি এমন সিস্টেম বানান যেখানে সঠিক ডেটা থাকা বাধ্যতামূলক (যেমন: টাকা আদান-প্রদান), তবে Strong Consistency ব্যবহার করুন। আর যদি সিস্টেম ফাস্ট হওয়া বেশি জরুরি হয় (যেমন: সোশ্যাল মিডিয়া), তবে Eventual Consistency ভালো।