ডিস্ট্রিবিউটেড স্টোরেজ সিস্টেমের জন্য ইরেজার কোডিং হল একটি মূল ডেটা সুরক্ষা পদ্ধতি। এই ব্লগ পোস্টটি ব্যাখ্যা করে যে কীভাবে ইরেজার কোডিং ডেটা সুরক্ষার জন্য এন্টারপ্রাইজের প্রয়োজনীয়তাগুলিকে সন্তুষ্ট করে এবং কীভাবে এটি MinIO-তে প্রয়োগ করা হয়।
যে কোনো এন্টারপ্রাইজ পরিবেশে ডেটা সুরক্ষা অপরিহার্য কারণ হার্ডওয়্যার ব্যর্থতা, বিশেষ করে ড্রাইভ ব্যর্থতা, সাধারণ।
ঐতিহ্যগতভাবে, হার্ডওয়্যার ফল্ট সহনশীলতা প্রদানের জন্য বিভিন্ন ধরনের RAID প্রযুক্তি বা মিররিং/প্রতিলিপি ব্যবহার করা হতো। মিররিং এবং প্রতিলিপি ডেটার এক বা একাধিক সম্পূর্ণ অপ্রয়োজনীয় কপির উপর নির্ভর করে - এটি স্টোরেজ ব্যবহার করার একটি ব্যয়বহুল উপায়। আরও জটিল প্রযুক্তি যেমন RAID5 এবং RAID6 স্টোরেজ ওভারহেড হ্রাস করার সময় একই ত্রুটি সহনশীলতা প্রদান করে। RAID একটি একক নোডে ডেটা সুরক্ষার জন্য একটি ভাল সমাধান, কিন্তু ব্যর্থ ড্রাইভগুলিকে অনলাইনে ফিরিয়ে আনতে প্রয়োজনীয় পুনঃনির্মাণ ক্রিয়াকলাপগুলি সময় সাপেক্ষের কারণে স্কেল করতে ব্যর্থ হয়।
অনেক ডিস্ট্রিবিউটেড সিস্টেম ডাটা সুরক্ষার জন্য 3-ওয়ে রেপ্লিকেশন ব্যবহার করে, যেখানে আসল ডাটা সম্পূর্ণ 3টি ভিন্ন ড্রাইভে লেখা থাকে এবং যেকোন একটি ড্রাইভ মূল ডাটা মেরামত বা পড়তে সক্ষম হয়। স্টোরেজ ব্যবহারের ক্ষেত্রে প্রতিলিপিটি কেবল অদক্ষ নয়, এটি ব্যর্থতা থেকে পুনরুদ্ধার করার সময় এটি কার্যকরীভাবেও অদক্ষ। যখন একটি ড্রাইভ ব্যর্থ হয়, তখন সিস্টেমটি শুধুমাত্র পঠনযোগ্য মোডে নিজেকে স্থাপন করবে যখন এটি ব্যর্থ ড্রাইভটি প্রতিস্থাপন করতে একটি নতুন ড্রাইভে একটি অক্ষত ড্রাইভ সম্পূর্ণরূপে অনুলিপি করবে।
ডিস্ট্রিবিউটেড স্টোরেজের জন্য ডেটা সুরক্ষায় ইরেজার কোডিং প্রয়োগ করা হয় কারণ এটি স্থিতিস্থাপক এবং দক্ষ। এটি ডেটা ফাইলগুলিকে ডেটা এবং প্যারিটি ব্লকে বিভক্ত করে এবং এটিকে এনকোড করে যাতে প্রাথমিক ডেটা পুনরুদ্ধার করা যায় এমনকি যদি এনকোড করা ডেটার অংশ উপলব্ধ না হয়। অনুভূমিকভাবে স্কেলযোগ্য বিতরণ স্টোরেজ সিস্টেমগুলি একাধিক ড্রাইভ এবং নোড জুড়ে এনকোড করা ডেটা সংরক্ষণ করে ডেটা সুরক্ষা প্রদান করতে ইরেজার কোডিংয়ের উপর নির্ভর করে। যদি একটি ড্রাইভ বা নোড ব্যর্থ হয় বা ডেটা দূষিত হয়ে যায়, তবে মূল ডেটা অন্যান্য ড্রাইভ এবং নোডগুলিতে সংরক্ষিত ব্লকগুলি থেকে পুনর্গঠন করা যেতে পারে।
ইরেজির কোডিং নোড এবং ড্রাইভ জুড়ে ডেটা স্ট্রিপ করে অনেক ভালো দক্ষতার সাথে অন্যান্য প্রযুক্তির মতো একই সংখ্যক ড্রাইভ ব্যর্থতা সহ্য করতে সক্ষম। অনেকগুলি বিভিন্ন ইরেজার কোডিং অ্যালগরিদম রয়েছে এবং রিড-সলোমনের মতো সর্বোচ্চ দূরত্ব বিভাজ্য (MDS) কোডগুলি সর্বাধিক স্টোরেজ দক্ষতা অর্জন করে।
অবজেক্ট স্টোরেজে, সুরক্ষিত করা ডেটার ইউনিট হল একটি অবজেক্ট। একটি বস্তু n ড্রাইভে সংরক্ষণ করা যেতে পারে। যদি k সম্ভাব্য ব্যর্থতা নির্দেশ করে, তাহলে k < n, এবং MDS কোডগুলির সাথে সিস্টেমটি n - k ড্রাইভ ব্যর্থতা সহ্য করার গ্যারান্টি দিতে পারে, যার অর্থ k ড্রাইভ যেকোনো বস্তু অ্যাক্সেস করার জন্য যথেষ্ট।
M বাইট আকারের একটি বস্তু বিবেচনা করে, প্রতিটি কোডেড বস্তুর আকার M/k (মেটাডেটার আকার উপেক্ষা করে)। উপরে দেখানো এন-ওয়ে রেপ্লিকেশনের তুলনায়, n = 5 এবং k = 3 এর জন্য ইরেজার কোডিং কনফিগার করা হয়েছে, একটি বিতরণ করা স্টোরেজ সিস্টেম 2 ড্রাইভের ক্ষতি সহ্য করতে পারে, যখন স্টোরেজ দক্ষতা 80% উন্নত করে। উদাহরণস্বরূপ, 10 পিবি ডেটার প্রতিলিপির জন্য 30 পিবি-র বেশি স্টোরেজের প্রয়োজন হবে, যেখানে অবজেক্ট স্টোরেজের জন্য ইরেজার কোডিং ব্যবহার করে একই ডেটা সুরক্ষিতভাবে সংরক্ষণ করতে এবং সুরক্ষিত করতে 15-20 পিবি প্রয়োজন হবে। ইরেজার কোডিং প্যারিটি ব্লকের ডেটার বিভিন্ন অনুপাতের জন্য কনফিগার করা যেতে পারে, ফলে স্টোরেজ দক্ষতার একটি পরিসর পাওয়া যায়। MinIO আপনার পরিবেশে প্রয়োজনীয়তা নির্ধারণে সহায়তা করার জন্য একটি সহায়ক ইরেজার কোড ক্যালকুলেটর বজায় রাখে।
MinIO প্রতি-অবজেক্ট, ইনলাইন ইরেজার কোডিং ( রেফারেন্সের জন্য অফিসিয়াল MinIO ডকুমেন্টেশন) দিয়ে ডেটা রক্ষা করে যা সম্ভব সর্বোচ্চ পারফরম্যান্স প্রদানের জন্য সমাবেশ কোডে লেখা হয়। MinIO দ্রুত ইরেজার কোডিংয়ের জন্য একাধিক নোড জুড়ে হোস্ট সিপিইউ সংস্থানগুলি সম্পূর্ণরূপে লিভারেজ করতে Intel AVX512 নির্দেশাবলী ব্যবহার করে। একটি স্ট্যান্ডার্ড CPU, দ্রুত NVMe ড্রাইভ এবং একটি 100 Gbps নেটওয়ার্ক সমর্থন করে ইরেজার কোডেড বস্তুর কাছাকাছি তারের গতিতে লেখা।
MinIO রিড-সলোমন কোড ব্যবহার করে বস্তুকে ডেটা এবং প্যারিটি ব্লকে স্ট্রাইপ করতে যা যেকোনো পছন্দসই রিডানডেন্সি লেভেলে কনফিগার করা যেতে পারে। এর মানে হল 8 প্যারিটি কনফিগারেশন সহ একটি 16 ড্রাইভ সেটআপে, একটি অবজেক্ট 8টি ডেটা এবং 8টি প্যারিটি ব্লক হিসাবে স্ট্রাইপ করা হয়। এমনকি যদি আপনি 7% পর্যন্ত (n/2)-1) ড্রাইভ হারান, এটি প্যারিটি বা ডেটা যাই হোক না কেন, আপনি এখনও অবশিষ্ট ড্রাইভগুলি থেকে নির্ভরযোগ্যভাবে ডেটা পুনর্গঠন করতে পারেন। MinIO এর বাস্তবায়ন নিশ্চিত করে যে একাধিক ডিভাইস হারিয়ে গেলে বা অনুপলব্ধ থাকলেও অবজেক্টগুলি পড়া বা নতুন অবজেক্ট লেখা যাবে।
MinIO ইরেজার সেটের আকারের উপর ভিত্তি করে অবজেক্টগুলিকে ডেটা এবং প্যারিটি ব্লকে বিভক্ত করে, তারপরে এলোমেলোভাবে এবং অভিন্নভাবে ডেটা এবং প্যারিটি ব্লকগুলিকে একটি সেটে ড্রাইভ জুড়ে বিতরণ করে যাতে প্রতিটি ড্রাইভে প্রতি অবজেক্টে একটির বেশি ব্লক থাকে না। যদিও একটি ড্রাইভে একাধিক অবজেক্টের জন্য ডেটা এবং প্যারিটি ব্লক উভয়ই থাকতে পারে, একটি একক অবজেক্টের প্রতি ড্রাইভে একটির বেশি ব্লক থাকে না, যতক্ষণ না সিস্টেমে পর্যাপ্ত সংখ্যক ড্রাইভ থাকে। সংস্করণযুক্ত অবজেক্টের জন্য, MinIO ডেটা এবং প্যারিটি স্টোরেজের জন্য একই ড্রাইভ নির্বাচন করে যখন যেকোন একটি ড্রাইভে শূন্য ওভারল্যাপ বজায় রাখে।
নীচের সারণীটি MinIO-তে মুছে ফেলার কোডিং-এর উদাহরণ প্রদান করে যাতে কনফিগারযোগ্য ডেটা এবং প্যারিটি বিকল্প এবং সাথে থাকা স্টোরেজ ব্যবহার অনুপাত।
মোট ড্রাইভ (n) | ডেটা ড্রাইভ (d) | প্যারিটি ড্রাইভ (p) | স্টোরেজ ব্যবহারের অনুপাত |
---|---|---|---|
16 | 8 | 8 | 2.00 |
16 | 9 | 7 | 1.79 |
16 | 10 | 6 | 1.60 |
16 | 11 | 5 | 1.45 |
16 | 12 | 4 | 1.34 |
16 | 13 | 3 | 1.23 |
16 | 14 | 2 | 1.14 |
MinIO এর পিছনের লেআউটটি আসলে বেশ সহজ। প্রতিটি বস্তু যে আসে একটি ইরেজার সেট বরাদ্দ করা হয়. একটি ইরেজার সেট মূলত ড্রাইভের একটি সেট, এবং একটি ক্লাস্টারে এক বা একাধিক ইরেজার সেট থাকে, যা মোট ডিস্কের পরিমাণ দ্বারা নির্ধারিত হয়।
আসুন MinIO-তে ব্যবহৃত বিন্যাস এবং বিন্যাস বোঝার জন্য একটি সাধারণ উদাহরণ দেখি।
এটি লক্ষ করা গুরুত্বপূর্ণ যে বিন্যাসটি প্যারিটি ড্রাইভের সাথে ডেটার অনুপাত সম্পর্কে - আমাদের কাছে একটি একক ড্রাইভ সহ চারটি নোড আছে বা প্রতিটি 100টি ড্রাইভ সহ চারটি নোড আছে কিনা (MinIO ঘন ঘন JBOD কনফিগারেশনে মোতায়েন করা হয়)।
আমরা আমাদের চারটি নোডকে 100টি ড্রাইভের সাথে কনফিগার করতে পারি যাতে ডিফল্ট 16 এর একটি ইরেজার সেট সাইজ ব্যবহার করা যায়। এটি যৌক্তিক বিন্যাস, এবং এটি ইরেজার কোডিং গণনার সংজ্ঞার অংশ। প্রতি 16টি ড্রাইভ হল একটি ইরেজার সেট যা 8টি ডেটা এবং 8টি প্যারিটি ড্রাইভ দ্বারা গঠিত। এই ক্ষেত্রে, ইরেজার সেটটি 400টি ফিজিক্যাল ড্রাইভের উপর ভিত্তি করে, ডেটা এবং প্যারিটি ড্রাইভে সমানভাবে বিভক্ত এবং 175টি ড্রাইভ পর্যন্ত ক্ষতি সহ্য করতে পারে।
MinIO এর XL মেটাডেটা, বস্তুর সাথে পারমাণবিকভাবে লেখা, সেই বস্তুর সাথে সম্পর্কিত সমস্ত তথ্য রয়েছে। MinIO এর মধ্যে অন্য কোন মেটাডেটা নেই। অন্তর্নিহিততাগুলি নাটকীয় - সবকিছুই বস্তুর সাথে স্বয়ংসম্পূর্ণ, সবকিছুকে সরল এবং স্ব-বর্ণনায় রেখে। XL মেটাডেটা ইরেজার কোড অ্যালগরিদম নির্দেশ করে, উদাহরণস্বরূপ দুটি প্যারিটি সহ দুটি ডেটা, ব্লকের আকার এবং চেকসাম। ডেটার সাথে চেকসাম লেখা থাকার ফলে স্ট্রিমিং ডেটা সমর্থন করার সময় MinIO-কে মেমরি অপ্টিমাইজ করা যায়, মেমরিতে স্ট্রিমিং ডেটা ধারণ করে এমন সিস্টেমগুলির উপর একটি স্পষ্ট সুবিধা প্রদান করে, তারপর এটিকে ডিস্কে লিখুন এবং অবশেষে একটি CRC-32 চেকসাম তৈরি করুন।
যখন একটি বড় বস্তু, যেমন. 10 MB-এর বেশি, MinIO-তে লেখা হয়, S3 API এটিকে একটি মাল্টিপার্ট আপলোডে ভেঙে দেয়। এটি আপলোড করার সময় অংশের আকার ক্লায়েন্ট দ্বারা নির্ধারিত হয়। S3-এর প্রতিটি অংশ কমপক্ষে 5 MB (শেষ অংশ ব্যতীত) এবং 5 GB-এর বেশি হতে হবে। S3 স্পেসিফিকেশনের উপর ভিত্তি করে একটি বস্তুর 10,000 পর্যন্ত অংশ থাকতে পারে। একটি বস্তু কল্পনা করুন যেটি 320 এমবি। যদি এই বস্তুটিকে 64টি অংশে বিভক্ত করা হয়, MinIO অংশগুলিকে part.1, part.2,...up part.64 হিসেবে ড্রাইভে লিখবে। অংশগুলি মোটামুটি সমান আকারের, উদাহরণস্বরূপ, মাল্টিপার্ট হিসাবে আপলোড করা 320 MB অবজেক্টটি 64 5 MB অংশে বিভক্ত হবে৷
আপলোড করা প্রতিটি অংশ স্ট্রাইপ জুড়ে ইরেজার কোডেড। Part.1 হল অবজেক্টের প্রথম অংশ যা আপলোড করা হয়েছে এবং সমস্ত অংশ ড্রাইভ জুড়ে অনুভূমিকভাবে স্ট্রিপ করা হয়েছে। প্রতিটি অংশ তার ডেটা ব্লক, প্যারিটি ব্লক এবং XL মেটাডেটা নিয়ে গঠিত। MinIO রোটেট রাইট করে তাই সিস্টেম সবসময় একই ড্রাইভে ডেটা এবং একই ড্রাইভে প্যারিটি লিখবে না। প্রতিটি বস্তু স্বাধীনভাবে ঘোরানো হয়, যা ক্লাস্টারের সমস্ত ড্রাইভের অভিন্ন এবং দক্ষ ব্যবহারের অনুমতি দেয়, পাশাপাশি ডেটা সুরক্ষাও বাড়ায়।
একটি বস্তু পুনরুদ্ধার করতে, MinIO বস্তুটি কোথায় সংরক্ষিত হয়েছে তা নির্ধারণ করতে একটি হ্যাশ গণনা করে, হ্যাশ পড়ে এবং প্রয়োজনীয় ইরেজার সেট এবং ড্রাইভ অ্যাক্সেস করে। যখন অবজেক্টটি পড়া হয়, তখন এক্সএল মেটাডেটাতে বর্ণিত ডেটা এবং প্যারিটি ব্লক থাকে। MinIO-তে ডিফল্ট ইরেজার সেট হল 12 ডেটা এবং 4 প্যারিটি, যার মানে যতক্ষণ MinIO যেকোনো 12 ড্রাইভ পড়তে পারে ততক্ষণ অবজেক্টটি পরিবেশন করা যেতে পারে।
ডিস্ট্রিবিউটেড সিস্টেমে ডেটা সুরক্ষার জন্য ব্যবহৃত অন্যান্য প্রযুক্তির তুলনায় ইরেজির কোডিংয়ের বেশ কয়েকটি মূল সুবিধা রয়েছে।
RAID-এর তুলনায় অবজেক্ট স্টোরেজের জন্য ইরেজার কোডিং ভালোভাবে উপযোগী হওয়ার বিভিন্ন কারণ রয়েছে। একাধিক ড্রাইভ এবং নোড ব্যর্থ হলে MinIO ইরেজার কোডিং বস্তুগুলিকে ডেটা ক্ষতির বিরুদ্ধে রক্ষা করে না, MinIO বস্তুর স্তরে সুরক্ষা এবং নিরাময় করে। একবারে একটি বস্তু নিরাময় করার ক্ষমতা হল RAID এর তুলনায় একটি নাটকীয় সুবিধা যা ভলিউম স্তরে নিরাময় করে। একটি দূষিত বস্তু MinIO-তে সেকেন্ড বনাম RAID-তে ঘন্টার মধ্যে পুনরুদ্ধার করা যেতে পারে। যদি একটি ড্রাইভ খারাপ হয়ে যায় এবং প্রতিস্থাপন করা হয়, MinIO নতুন ড্রাইভটিকে চিনতে পারে, এটিকে ইরেজার সেটে যোগ করে এবং তারপর সমস্ত ড্রাইভ জুড়ে বস্তু যাচাই করে। আরও গুরুত্বপূর্ণ, পড়া এবং লেখা একে অপরকে প্রভাবিত করে না, স্কেলে কর্মক্ষমতা সক্ষম করে। পেটাবাইট স্টোরেজ জুড়ে শত শত বিলিয়ন অবজেক্ট সহ সেখানে MinIO স্থাপনা রয়েছে।
MinIO-তে ইরেজার কোড প্রয়োগের ফলে ডেটাসেন্টারে কর্মক্ষম দক্ষতা উন্নত হয়। প্রতিলিপির বিপরীতে, ড্রাইভ এবং নোড জুড়ে কোনও দীর্ঘ পুনঃনির্মাণ বা পুনরায় সিঙ্ক্রোনাইজ করা ডেটা নেই। এটি তুচ্ছ মনে হতে পারে, কিন্তু বস্তুগুলিকে সরানো/কপি করা খুব ব্যয়বহুল হতে পারে, এবং একটি 16TB ড্রাইভ ব্যর্থ হয়ে ডেটাসেন্টার নেটওয়ার্ক জুড়ে অন্য ড্রাইভে অনুলিপি করা স্টোরেজ সিস্টেম এবং নেটওয়ার্কের উপর একটি বিশাল ট্যাক্স চাপিয়ে দেয়।
যদি এই ব্লগ পোস্টটি আপনার কৌতূহল জাগিয়ে তোলে, তাহলে আমাদের কাছে একটি দীর্ঘ ইরেজার কোডিং প্রাইমার উপলব্ধ রয়েছে৷ MinIO ডাউনলোড করুন এবং আজই ইরেজার কোডিং দিয়ে ডেটা সুরক্ষিত করা শুরু করুন।
এছাড়াও এখানে প্রকাশিত.