Consistent hashing: server বাড়ালে সব নড়ে না কেন

সাধারণ hash-mod-N একটি server যোগ করলে প্রায় সব key নতুন জায়গায় পাঠায়। Consistent hashing অল্প অংশই নাড়ায়। Ring কীভাবে কাজ করে, দেখুন।

একটি বৃত্তের চারপাশে বসানো server

ধরুন cache key N টি server-এ ছড়াচ্ছেন server = hash(key) mod N দিয়ে। N না বদলানো পর্যন্ত ঠিক চলে। ৪টি থেকে ৫টি server করলে বেশিরভাগ key অন্য server-এ চলে যায়, cache খালি দেখায় আর database-এ চাপ পড়ে।

ধারণাটা

Consistent hashing server ও key দুটোকেই একটি বৃত্তে (hash ring) বসায়, যেমন ০ থেকে 2^32 পরিসর।

  1. প্রতিটি server-এর নাম hash করে ring-এর একটি বিন্দুতে বসান।
  2. প্রতিটি key hash করে ring-এ বসান।
  3. Key-টি তার বিন্দু থেকে ঘড়ির কাঁটার দিকে প্রথম পাওয়া server-এর।

কেন কাজে লাগে

  • Server যোগ: শুধু নিজের ও বিপরীত দিকের প্রতিবেশীর মাঝের key নেয়। গড়ে মাত্র প্রায় 1/N key নড়ে।
  • Server বাদ: শুধু তার key-গুলো ঘড়ির দিকের পরের server-এ যায়। বাকিরা অক্ষত।

Virtual node

অল্প বিন্দু থাকলে ring-এর ভাগ অসম হয়। সমাধান virtual node: প্রতিটি physical server ring-এ অনেক বিন্দুতে (যেমন ১০০ থেকে ২০০) থাকে। এতে load সমান হয়, আর শক্তিশালী server-কে বেশি virtual node দেওয়া যায়।

Ring-এ replication

কপি রাখতে প্রতিটি key ঘড়ির দিকে পরের কয়েকটি আলাদা server-এ রাখুন। Dynamo-ধাঁচের database এটি করে।

কোথায় ব্যবহার হয়

Distributed cache, sharded database, CDN, sticky routing লাগে এমন load balancer, এবং Cassandra ও DynamoDB-এর মতো সিস্টেম।

সীমাবদ্ধতা

গড়ে ভালো ভারসাম্য দেয়, কিন্তু খুব জনপ্রিয় একটি key তার server-কে তবুও ডুবাতে পারে। Hot key replicate বা ভাগ করলে সাহায্য হয়।

মূল কথা: server-এর সংখ্যা বদলায় আর সব data নতুন করে ঘাঁটা পোষায় না, এমন জায়গায় consistent hashing ব্যবহার করুন।


System Design সিরিজের 10 নম্বর পর্ব (মোট ১৫)। আগের পর্ব: Database replication: leader-follower, lag ও failover.

আরও পড়ুন

Recursion ও backtracking সহজ উদাহরণে

Recursion সমস্যার ছোট কপি সমাধান করে সমাধান করে। অনেক interview সমস্যায় ব্যবহৃত চিন্তার ধাপ ও backtracking টেমপ্লেট শিখুন।

Interview ও DSA•৩ মিনিটে পড়া