কম্পিউটার

RedisRaft পেশ করা হচ্ছে, একটি নতুন স্ট্রং-কনসিসটেন্সি ডিপ্লয়মেন্ট বিকল্প

RedisRaft (উন্নয়নাধীন) ওপেন সোর্স Redis-এর জন্য একটি নতুন মডিউল যা একটি একক ত্রুটি-সহনশীল, দৃঢ়ভাবে সামঞ্জস্যপূর্ণ ক্লাস্টার হিসাবে অনেকগুলি Redis সার্ভার পরিচালনা করা সম্ভব করে। এটির নাম অনুসারে, এটি রাফ্ট কনসেনসাস অ্যালগরিদম এবং একটি ওপেন-সোর্স সি লাইব্রেরির উপর ভিত্তি করে যা এটি প্রয়োগ করে৷

RedisRaft Redis এবং Redis ইকোসিস্টেমে কঠোর সিরিয়ালাইজেশন ডিপ্লয়মেন্ট বিকল্পের সাথে একটি নতুন শক্তিশালী-সঙ্গতি আনে। নতুন মডিউলটি Redis-এর বিদ্যমান ক্লায়েন্ট, লাইব্রেরি এবং ডেটা টাইপগুলির সাথে ক্যাশ-এর ​​বাইরের পরিস্থিতিতে উচ্চ স্তরের নির্ভরযোগ্যতা এবং ধারাবাহিকতার প্রয়োজনে Redis ব্যবহার করা সম্ভব করে তোলে৷

RedisRaft এর শুরু

RedisRaft একটি পরীক্ষামূলক "সাইড প্রজেক্ট" হিসাবে Redis 5 প্রকাশের কিছুদিন আগে শুরু হয়েছিল। Redis মডিউল API Redis 4 এ প্রবর্তন করা হয়েছিল, প্রাথমিকভাবে মডিউলগুলিকে সমর্থন করার জন্য ডিজাইন করা হয়েছে যা নতুন ডেটা প্রকার এবং কমান্ড প্রয়োগ করে। আমরা API কে কতদূর প্রসারিত করতে পারি তা অন্বেষণ করতে চেয়েছিলাম এবং রেডিসকে আরও র্যাডিকাল উপায়ে প্রসারিত করতে মডিউল ব্যবহার করতে চাই। কিন্তু আমরা কিছু দরকারী নিয়েও শেষ করতে চেয়েছিলাম - রেডিসের জন্য একটি শক্তিশালী ধারাবাহিকতা স্থাপনের বিকল্প৷

একটি RedisRaft ক্লাস্টার নির্ভরযোগ্য, সুপরিচিত ডেটা স্টোর যেমন ZooKeeper বা Etcd থেকে প্রত্যাশিত ধারাবাহিকতা এবং নির্ভরযোগ্যতার একই স্তরের অফার করে। সংক্ষেপে, RedisRaft-এ:

  • স্বীকৃত লেখাগুলি প্রতিশ্রুতিবদ্ধ এবং কখনই হারিয়ে যাওয়ার নিশ্চয়তা রয়েছে৷
  • পড়াগুলি সর্বদা সবচেয়ে আপ-টু-ডেট প্রতিশ্রুতিবদ্ধ লেখা ফিরিয়ে দেবে।

নির্ভরযোগ্য ডেটা স্টোর থেকে আশা করা যায় যে এই স্তরের ধারাবাহিকতা প্রদান করে, এই ধরনের গ্যারান্টি কর্মক্ষমতা এবং প্রাপ্যতার ক্ষেত্রে ট্রেড-অফ নিয়ে আসে। রেডিসরাফ্টে:

  • ক্লায়েন্ট অপারেশনগুলি ক্লাস্টার নোডের বার্তা আদান-প্রদানের উপর নির্ভর করে, তাই তারা নেটওয়ার্ক লেটেন্সিতে আবদ্ধ হয়ে যায়৷
  • লেখাগুলি সম্পূর্ণ করার আগে অবশ্যই ডিস্কে ফ্লাশ করতে হবে, যাতে সেগুলি ডিস্ক I/O লেটেন্সিতে আবদ্ধ হয়৷
  • ক্লাস্টারটি ততক্ষণ পর্যন্ত উপলব্ধ থাকে যতক্ষণ না বেশিরভাগ নোডগুলি উপরে থাকে, সুস্থ থাকে এবং একে অপরের সাথে যোগাযোগ করতে সক্ষম হয়৷

কিভাবে RedisRaft কাজ করে

একবার RedisRaft মডিউল Redis-এ লোড হয়ে গেলে, এটি ক্লাস্টার নোড, রাফ্ট লগের প্রতিলিপি বা স্ন্যাপশট, অধ্যবসায় ইত্যাদির মধ্যে যোগাযোগের দায়িত্ব নেয়। রেডিস কোর এটি সম্পর্কে অবগত রয়ে গেছে এবং যতদূর এটি উদ্বিগ্ন, এটি কোনও ক্লাস্টারিং, স্থিরতা বা প্রতিলিপি ছাড়াই একটি স্বতন্ত্র সার্ভার হিসাবে কাজ করছে৷

একটি তিন-নোড রেডিসরাফ্ট ক্লাস্টার সেট আপ করা তিনটি রেডিস সার্ভার শুরু করার মতোই সহজ, যেমনটি এখানে দেখানো হয়েছে:

redis-server --loadmodule /path/to/redisraft.so

এইভাবে প্রথম সার্ভারের সাথে সংযোগ করে রাফ্ট ক্লাস্টার তৈরি করতে হয়:

10.0.0.1:6379> RAFT.CLUSTER INIT
OK 989645460313dd2ddb051f033c791222

তারপর আপনি অন্য দুটি সার্ভারের সাথে সংযোগ করুন এবং তাদের ক্লাস্টারে যোগদান করুন:

10.0.0.2:6379> RAFT.CLUSTER JOIN 10.0.0.1:6379
OK
10.0.0.3:6379> RAFT.CLUSTER JOIN 10.0.0.1:6379
OK

ক্লাস্টার অ্যাক্সেস করা

RedisRaft সেট আপ হয়ে গেলে, আমরা আমাদের ক্লাস্টারে ডেটা লিখতে পারি:

10.0.0.1:6379> INCR counter:1
(integer) 1

একটি উত্তর প্রাপ্তি দেখায় যে আমাদের লেখার প্রতিলিপি করা হয়েছে অন্তত বেশিরভাগ ক্লাস্টার নোড (আমাদের ক্ষেত্রে 2টি নোড), এবং তাদের অবিরাম স্টোরেজের জন্য প্রতিশ্রুতিবদ্ধ।

রাফ্ট একটি শক্তিশালী-লিডার ধারণার উপর ভিত্তি করে, যার মানে সমস্ত ক্লায়েন্ট অপারেশন লিডার নোডে যেতে হবে এবং এটি থেকে শুরু করা উচিত। এই ক্ষেত্রে, আমাদের ক্লায়েন্ট প্রকৃতপক্ষে নেতার সাথে সংযুক্ত ছিল, কিন্তু ক্লাস্টার নেতৃত্ব গতিশীল এবং ক্লায়েন্টরা অগত্যা জানেন না যে নেতা কে।

অনুসারী (নন-লিডার) নোডে একই ক্রিয়াকলাপের চেষ্টা করা এই প্রতিক্রিয়া তৈরি করে:

10.0.0.3:6379> INCR counter:1
(error) MOVED 10.0.0.1:6379

তাই একজন ক্লায়েন্ট হিসাবে, আমরা এখন এই ত্রুটিটি ধরতে পারি, নির্দিষ্ট করা লিডার নোডের সাথে একটি সংযোগ পুনরায় স্থাপন করতে পারি এবং আমাদের কমান্ড পুনরায় চেষ্টা করতে পারি।

কিন্তু যদি আমরা আমাদের বিদ্যমান অ্যাপ্লিকেশনটি সংশোধন করতে না চাই? ভাগ্যক্রমে, RedisRaft আমাদের জন্য স্বয়ংক্রিয়ভাবে এটি পরিচালনা করার জন্য কনফিগার করা যেতে পারে। অনুসরণকারী প্রক্সি মোড সক্ষম করে৷ , আমাদের কাছে ক্লাস্টার নোডগুলি স্বয়ংক্রিয়ভাবে নেতার কাছে আমাদের অনুরোধ ফরোয়ার্ড করতে পারে এবং এটি উপলব্ধ হলে উত্তর প্রদান করতে পারি:

10.0.0.3:6379> RAFT.CONFIG SET follower-proxy yes
OK
10.0.0.3:6379> INCR counter:1
(integer) 2

এটি অবশ্যই অনেক সহজ, কিন্তু লেটেন্সি এবং নেটওয়ার্ক লোডকে প্রভাবিত করে কারণ নন-লিডার নোডকে আঘাত করলে একটি অতিরিক্ত নেটওয়ার্ক হপ তৈরি হয়।

ক্লাস্টার পরিবর্তন

আমাদের ক্লাস্টার সেট আপ করার সময়, আমরা আসলে তিনটি স্বতন্ত্র অপারেশন সম্পাদন করেছি:

  1. একক নোডে ক্লাস্টার তৈরি করেছে৷
  2. দ্বিতীয় নোড যোগ করা হয়েছে৷
  3. তৃতীয় নোড যোগ করা হয়েছে৷

RedisRaft ক্লাস্টার কনফিগারেশন স্ট্যাটিক নয়, এবং ক্লাস্টার তৈরি হওয়ার পরে এবং এটি সক্রিয় থাকাকালীন অতিরিক্ত নোডগুলি যোগ করা বা অপসারণ করা সম্ভব।

উদাহরণস্বরূপ, আমাদের তৃতীয় নোড প্রতিস্থাপন করতে হবে। প্রথমত, আমরা একটি নতুন নোডে যোগ দিই যা এটি প্রতিস্থাপন করতে চলেছে। মনে রাখবেন যে ট্রানজিশনের সময় ক্লাস্টার এবং আমাদের মূল্যবান ডেটাকে অবনমিত রিডানডেন্সি অবস্থায় না রেখে আমরা "সরান-তারপর-যোগ" এর পরিবর্তে "সংযোজন-এর পরে-সরিয়ে ফেলি":

10.0.0.4:6379> RAFT.CLUSTER JOIN 10.0.0.1:6379
OK

এর পরে, আমরা আমাদের তৃতীয় নোডে এলোমেলোভাবে বরাদ্দ করা আইডিটি সন্ধান করি:

redis-cli -h 10.0.0.1 --raw RAFT.INFO | grep 10.0.0.3
node2:id=1739451728,state=connected,voting=yes,addr=10.0.0.3,port=6379,
last_conn_secs=3537,conn_errors=0,conn_oks=1

এবং তারপরে আমরা এটি সরিয়ে ফেলি:

10.0.0.1:6379> RAFT.NODE REMOVE 1739451728
OK

RedisRaft রিলিজ স্ট্যাটাস

RedisRaft ডেভেলপমেন্ট কাজের অংশ হিসেবে, আমরা Kyle Kingsbury (a.k.a Aphyr) এর সাথে জেপসেন ব্যবহার করে রেডিসরাফ্ট বিশ্লেষণ ও পরীক্ষা করার জন্য সহযোগিতা করছি, যা বিতরণ করা সিস্টেমের নিরাপত্তা এবং সঠিকতা পরীক্ষা করার জন্য একটি সুপরিচিত কাঠামো। এই সহযোগিতার ফলে এখন পর্যন্ত এই প্রকাশিত বিশ্লেষণ হয়েছে।

যদিও এখনও বিকাশাধীন, রেডিসরাফ্টের বেশিরভাগ মৌলিক কার্যকারিতা রয়েছে। আমরা বর্তমানে একটি প্রথম পূর্বরূপ সংস্করণের দিকে কাজ করছি, যা কয়েক মাসের মধ্যে উপলব্ধ হবে বলে আশা করা হচ্ছে। সাধারণত উপলব্ধ হলে, RedisRaft একটি দ্বৈত লাইসেন্সের অধীনে মুক্তি পাবে, হয় GNU AGPLv3 বা Redis উত্স উপলব্ধ লাইসেন্স (RSAL)৷


  1. রেডিস লঞ্চপ্যাড পেশ করা হচ্ছে

  2. ব্রেডক্রাম্বস প্রবর্তন করা হচ্ছে

  3. সুন্দর ফেইলওভার বিকল্প ব্যবহার করে কাউচবেস সার্ভারের রোলিং আপগ্রেড

  4. আমার নতুন লিনাক্স টেস্ট ল্যাপটপ পেশ করছি:Lenovo G50