মূলত 27 নভেম্বর, 2020-এ ObjectRocket.com/blog-এ প্রকাশিত৷
Elasticsearch® ডিফল্ট সেটিংসের সাথে আপনার ক্লাস্টার জুড়ে ডেটা ছড়িয়ে দেওয়ার ক্ষেত্রে দুর্দান্ত, কিন্তু আপনার ক্লাস্টার বাড়তে শুরু করার পরে, কার্যকারিতা বাড়ানোর জন্য আপনার ডিফল্ট সেটিংস সামঞ্জস্য করা উচিত। আসুন শার্ডিংয়ের কিছু মৌলিক বিষয়ের উপর যাই এবং কিছু সূচীকরণ এবং শার্ড সেরা অনুশীলন প্রদান করি।
ইলাস্টিক সার্চ শার্ডিংয়ের একটি ভূমিকা
ইলাস্টিকসার্চ শার্ডগুলি কীভাবে কাজ করে সে সম্পর্কে অনেক নথি রয়েছে, তবে শার্ডিংয়ের মূল ধারণাটি আপনার ডেটাকে কয়েকটি ছোট টুকরোতে বিভক্ত করছে যাতে অনুসন্ধানগুলি সমান্তরালভাবে একাধিক অংশে কাজ করতে পারে। সূচক ফাংশনগুলির ক্লাস্টারিং এবং সমান্তরালকরণের সুবিধার্থে, আপনার ইলাস্টিকসার্চ উদাহরণে প্রতিটি সূচককে সংখ্যাযুক্ত স্লাইসে স্লাইস করুন। এই টুকরা shards বলা হয়. আসুন তাদের কিছু মূল আচরণ দেখি:
- প্রতিটি শার্ড প্রতিলিপির সংখ্যার উপর নির্ভর করে প্রতিলিপি করে সূচকের জন্য সেটিং। সুতরাং, প্রতিলিপির সংখ্যার জন্য একটির সেটিং, প্রতিটি শার্ডের দুটি কপি রয়েছে:একটি প্রাথমিক শার্ড এবং একটি প্রতিলিপি শার্ড প্রাথমিক শার্ড হল মেইনশার্ড এবং
indexing/write
এর জন্য ব্যবহৃত হয় এবংsearch/read
অপারেশন, যখন রেপ্লিকা শার্ডগুলি শুধুমাত্রsearch/read
এর জন্য ব্যবহার করা হয় একটি প্রাথমিক ব্যর্থ হলে অপারেশন এবং পুনরুদ্ধারের জন্য। - প্রতিলিপি শার্ডগুলিকে অবশ্যই তাদের পিতামাতার থেকে আলাদা হোস্টে থাকতে হবে প্রাথমিক শার্ড।
- শার্ডগুলি ডিফল্টরূপে ক্লাস্টারের হোস্টের সংখ্যা জুড়ে স্বয়ংক্রিয়ভাবে ছড়িয়ে পড়ে, তবে একই শারীরিক হোস্টে একাধিক প্রাথমিক শার্ড থাকতে পারে। আপনি ইলাস্টিকসার্চ সেটিংস ব্যবহার করে এই আচরণটি পরিবর্তন করতে পারেন (পুনরায় ভারসাম্য, শার্ড বরাদ্দকরণ, এবং আরও একটি), কিন্তু সেই পদ্ধতিটি এই পোস্টের সুযোগের বাইরে৷
- প্রতিটি শার্ডকে অবশ্যই একটি হোস্টে থাকতে হবে কারণ শার্ডগুলি অবিভাজ্য৷
- আপনি সূচী তৈরির সময় একটি সূচক তৈরি করে এমন শার্ডের সংখ্যা সেট করতে পারেন, অথবা আপনি একটি গ্লোবাল ডিফল্ট ব্যবহার করতে পারেন। আপনি সূচী তৈরি করার পরে, আপনি পুনরায় সূচীকরণ ছাড়া শার্ডের সংখ্যা পরিবর্তন করতে পারবেন না।
- আপনি সূচক তৈরির সময় একটি সূচকের প্রতিলিপির সংখ্যা সেট করতে পারেন, অথবা আপনি একটি গ্লোবাল ডিফল্ট ব্যবহার করতে পারেন। আপনি সূচক তৈরি করার পরে এই নম্বরটি পরিবর্তন করতে পারেন৷
একটি ছোট উদাহরণ দেখা যাক। আমি একটি সূচী তৈরি করেছি যার একটি শার্ড গণনা তিনটি এবং একটি প্রতিরূপ সেটিং। আপনি আগের চিত্রটিতে দেখতে পাচ্ছেন, ইলাস্টিকসার্চ আপনার জন্য ছয়টি শার্ড তৈরি করে:তিনটি প্রাথমিক শার্ড (Ap, Bp, এবং Cp) এবং তিনটি রেপ্লিকা শার্ড (Ar, Br, এবং Cr)।
ইলাস্টিক সার্চ নিশ্চিত করে যে প্রতিলিপি এবং প্রাইমারিগুলি বিভিন্ন হোস্টে রয়েছে, তবে আপনি একই হোস্টের জন্য একাধিক প্রাথমিক শার্ড বরাদ্দ করতে পারেন। হোস্টের বিষয়ে, আসুন আপনি কীভাবে আপনার হোস্টদের জন্য শার্ডগুলি বরাদ্দ করেন তা নিয়ে আসি।
শার্ড অ্যালোকেশন এবং ক্লাস্টারড ইলাস্টিকসার্চ
ইলাস্টিকসার্চ ডিফল্টরূপে সমস্ত উপলব্ধ হোস্ট জুড়ে শার্ডগুলি বরাদ্দ করার চেষ্টা করে। Rackspace ObjectRocket এ, প্রতিটি ক্লাস্টারে মাস্টার নোড, ক্লায়েন্ট নোড এবং ডেটা নোড থাকে। আমাদের আর্কিটেকচারে ডেটা নোডগুলি বালতি গঠন করে যেটিতে আপনি শার্ডগুলি বরাদ্দ করতে পারেন৷
৷পূর্বের উদাহরণটি ব্যবহার করে, আসুন সেই ছয়টি শার্ড গ্রহণ করি এবং দুটি ডেটা নোড (সর্বনিম্ন) সহ ইলাস্টিকসার্চ ক্লাস্টারের জন্য একটি অবজেক্ট রকেটকে বরাদ্দ করি। নিচের চিত্রে, আপনি দেখতে পাচ্ছেন যে প্রতিটি শার্ডের জন্য, একটি ডেটা নোডে প্রাথমিক ল্যান্ড করা হয়েছে, যেখানে প্রতিলিপিটি অন্য নোডে থাকার নিশ্চয়তা রয়েছে। মনে রাখবেন যে এখানে উদাহরণগুলি শুধুমাত্র একটি সম্ভাব্য বরাদ্দ দেখায়৷ বরাদ্দ করা যাই হোক না কেন, একমাত্র সুনির্দিষ্ট জিনিস হল যে একটি প্রতিলিপি সর্বদা তার প্রাথমিক থেকে আলাদা ডেটা নোডে স্থাপন করা হয়৷
এখন, এই উদাহরণটি প্রসারিত করা যাক এবং একটি তৃতীয় ডেটা নোড যোগ করুন। লক্ষ্য করুন যে দুটি শার্ড নতুন ডেটা নোডে সরানো হয়েছে, তাই আপনার প্রতিটি নোডে দুটি শার্ড রয়েছে৷
পরিশেষে, আসুন এই ক্লাস্টারে একটি নতুন সূচী যোগ করি যার একটি শার্ড কাউন্ট দুই এবং প্রতিলিপির সংখ্যা দুটি সেট করা হয়েছে। এটি আপনাকে দুটি নতুন প্রাইমারি (Xp এবং Yp) এবং চারটি প্রতিলিপি (Xr0, Xr1, Yr0, Yr1) দেয় যা আপনি নীচের ছবিতে দেখানো হিসাবে ক্লাস্টার জুড়ে ছড়িয়ে দিতে পারেন:
এটাই।
বিপত্তি
ইলাস্টিকসার্চ আপনার জন্য সমস্ত কঠোর পরিশ্রম করে, তবে কিছু অসুবিধা এড়াতে হবে।
পিটফল #1—ম্যাসিভ ইনডেক্স এবং ম্যাসিভ শার্ডস
ইলাস্টিকসার্চে প্রশমিত করার সবচেয়ে সহজ সমস্যাগুলির মধ্যে একটি বিশাল শার্ড সহ একটি বিশাল সূচকের সমস্যা সমাধান করা। একজন ব্যবহারকারী একটি খুব পরিচালনাযোগ্য একক সূচক দিয়ে শুরু করে। যাইহোক, তাদের আবেদন বাড়ার সাথে সাথে তাদের সূচকও বৃদ্ধি পায়। এটি বিশাল শার্ডের দিকে পরিচালিত করে কারণ শার্ডের আকার সরাসরি ক্লাস্টার ডেটার পরিমাণের সাথে সম্পর্কিত।
প্রথম সমস্যাটির কারণে ক্লাস্টার ব্যবহারে দুর্বল দক্ষতা। শার্ডগুলি বাড়ার সাথে সাথে এগুলিকে অ্যাডাটা নোডে স্থাপন করা কঠিন হয়ে যায়। সেখানে একটি শার্ড সংরক্ষণ করতে ডেটা নোডের একটি বড় ব্লকের মুক্ত স্থান লাগে। এই অবস্থা অনেক অব্যবহৃত, নষ্ট স্থান সহ নোডের দিকে নিয়ে যায়। উদাহরণস্বরূপ, যদি আমার কাছে 8 জিবি ডেটা নোড থাকে, কিন্তু প্রতিটি শার্ড 6 জিবি হয়, আমি আমার প্রতিটি ডেটানোডে 2 জিবি স্ট্র্যান্ডিং করব। দ্বিতীয় সমস্যাটি হল হট স্পটিং . আপনি যদি আপনার ডেটাকে কয়েকটি শার্ডে একীভূত করেন, তাহলে জটিল প্রশ্নগুলিকে বৃহত্তর সংখ্যক নোডের মধ্যে বিভক্ত করা যাবে না এবং সমান্তরালভাবে কার্যকর করা যাবে না৷
সূচীপত্র নিয়ে কৃপণ হবেন না
স্থবির স্থান সমস্যা সমাধান করতে একাধিক সূচক ব্যবহার করুন। ক্লাস্টারে শার্ডের সংখ্যা বাড়াতে এবং ডেটা সমানভাবে ছড়িয়ে দিতে একাধিক সূচকে আপনার ডেটা ছড়িয়ে দিন। এছাড়াও, টেট্রিস গেমের মতো, যখন ইলাস্টিকসার্চ শার্ডগুলি রাখে, তখন একাধিক সূচকগুলি কিউরেট করা সহজ হয়। ইলাস্টিকসার্চের উপনাম ক্ষমতাগুলি এখনও আপনার অ্যাপে একাধিক দৃষ্টান্তকে একক সূচক হিসাবে দেখাতে পারে৷ বেশিরভাগ ইলাস্টিক স্ট্যাক ডিফল্টরূপে দৈনিক সূচী তৈরি করে, যা একটি ভাল অনুশীলন৷ তারপরে আপনি অনুসন্ধানের সুযোগ নির্দিষ্ট তারিখের সীমার মধ্যে সীমাবদ্ধ করতে উপনাম ব্যবহার করতে পারেন, পুরানো সূচীগুলিকে বয়সের সাথে সাথে সরাতে কিউরেটর ব্যবহার করতে পারেন এবং পুরানো ডেটা পুনরায় সূচীকরণ না করেই আপনার ডেটা বৃদ্ধির সাথে সাথে সূচক সেটিংস পরিবর্তন করতে পারেন৷
আপনার সূচকের আকার বাড়ার সাথে সাথে শার্ডের সংখ্যা বাড়ান
আরও ঘন ঘন সূচী যোগ করুন এবং আপনার সূচক বাড়ার সাথে সাথে শার্ডের সংখ্যা বাড়ান। আপনি শর্ডের আকারগুলি আপনার পছন্দসই স্থান অতিক্রম করতে শুরু করার পরে, আপনি প্রতিটি সূচকের জন্য আরও শার্ড ব্যবহার করতে আপনার সূচক টেমপ্লেট আপডেট করতে পারেন (বা আপনি নতুন সূচক তৈরি করতে যা ব্যবহার করেন) দ্বিতীয় তালিকায় আছে। অন্যথায়, আপনাকে শার্ড গণনা সংশোধন করতে পুনরায় সূচনা করতে হবে, যা একাধিক সূচী পরিচালনার চেয়ে বেশি কাজের প্রতিনিধিত্ব করে।
আমাদের অঙ্গুষ্ঠের নিয়ম:যদি একটি শার্ড একটি ডাটা নোডের আকারের 40% এর চেয়ে বড় হয়, তবে সেই শার্ডটি সম্ভবত খুব বড়। এই ক্ষেত্রে, আরও শার্ড সহ একটি সূচীতে পুনঃসূচীকরণ বা একটি বড় প্ল্যান আকারে (ডেটা নোড প্রতি আরও ক্ষমতা) যাওয়ার পরামর্শ দেওয়া হয়েছিল।
Pitfall #2—অত্যধিক সূচী বা শার্ড
বিপরীতটি অনেক বেশি সূচক বা শার্ড। পূর্ববর্তী বিভাগটি পড়ার পরে, আপনি কেবল বলতে পারেন, "ঠিক আছে। আমি শুধু এর সূচকে সব ডক রাখব এবং এক মিলিয়ন শার্ড তৈরি করব”। সমস্যা হল যে সূচী এবং shards ওভারহেড আছে. এটি স্টোরেজ, মেমরি রিসোর্স এবং প্রসেসিং পারফরম্যান্সে নিজেকে প্রকাশ করে।
যেহেতু ক্লাস্টারটিকে অবশ্যই সমস্ত শার্ডের অবস্থা বজায় রাখতে হবে এবং সেগুলি কোথায় অবস্থিত, প্রচুর সংখ্যক শার্ড একটি বৃহত্তর বুককিপিং অপারেশনে পরিণত হয়, যা মেমরি ব্যবহারকে প্রভাবিত করে। এছাড়াও, যেহেতু আপনাকে প্রশ্নগুলিকে আরও উপায়ে বিভক্ত করতে হবে, আপনি অনেক বেশি সময় ব্যয় করেন ইনস্ক্যাটার বা প্রশ্নের জন্য সংগ্রহ করেন। এই সমস্যাটি ক্লাস্টারের আকার, ব্যবহারের ক্ষেত্রে এবং অন্যান্য কারণের উপর অত্যন্ত নির্ভরশীল, তবে সাধারণভাবে, আমরা কয়েকটি সুপারিশের মাধ্যমে এটি প্রশমিত করতে পারি।
শার্ডগুলি 50 GB-এর বেশি হওয়া উচিত নয়
সাধারণভাবে, 25 জিবি বড় শার্ডের জন্য একটি আদর্শ মাপ, এবং 50 গিগাবাইটের জন্য রিইন্ডেক্সিং প্রয়োজন। এই বিবেচনাটি শার্ডের কার্যকারিতা এবং প্রয়োজনে সেই শার্ডটি সরানোর প্রক্রিয়ার সাথে সম্পর্কিত। পুনরায় ভারসাম্য করার সময়, ক্লাস্টারের একটি ভিন্ন নোডে শার্ডগুলি সরান৷ একটি 50 GB ডেটা স্থানান্তর খুব বেশি সময় নিতে পারে এবং পুরো প্রক্রিয়া চলাকালীন দুটি নোড বাঁধতে পারে৷
শার্ড সাইজ ডেটা নোড সাইজের 40% এর কম রাখুন
পূর্বে উল্লেখ করা হয়েছে, দ্বিতীয় শার্ড আকারের মেট্রিক যা আমাদের আগ্রহী তা হল একটি শার্ড গ্রহণ করে ডেটা নোডের ক্ষমতার শতাংশ৷ Rackspace ObjectRocket পরিষেবাতে, আমরা বিভিন্ন প্ল্যান আকার অফার করি যা ডেটা নোডগুলিতে স্টোরেজের পরিমাণের সাথে সম্পর্কিত৷ ক্লাস্টার এবং শার্ডগুলিকে আকার দেওয়ার চেষ্টা করুন যাতে বৃহত্তম শার্ডগুলি ডেটা নোডের ধারণক্ষমতার 40% এর বেশি না নেয়৷ বিভিন্ন আকারের বেশ কয়েকটি সূচক সহ একটি ক্লাস্টারে, এটি মোটামুটি কার্যকর৷ যাইহোক, খুব কম বড় সূচক সহ একটি ক্লাস্টারে, আরও বেশি আক্রমণাত্মক পরিধান করে এবং ডেটা নোডের ক্ষমতা 30% এর নিচে রাখার চেষ্টা করে।
আদর্শভাবে, নিশ্চিত করুন যে আপনি ডেটা নোডে স্ট্র্যান্ডিং ক্ষমতা করছেন না। যদি আপনার শার্ডগুলি ডাটা নোডের আকারের প্রায় 45% হয়, তাহলে সেই শার্ড রাখার জন্য আপনার মোটামুটি অর্ধেক ব্যবহারে ডেটা নোডের প্রয়োজন। এটি অনেক অব্যবহৃত অতিরিক্ত ক্ষমতা!
উপসংহার
সঠিক শার্ড এবং ইনডেক্সিং সেটিংস নির্বাচন করা কঠিন হতে পারে, তবে পরিকল্পনা করে, সামনে কিছু ভাল সিদ্ধান্ত নেওয়া এবং আপনি যেতে যেতে টিউনিং করে, আপনি আপনার ক্লাস্টারকে সুস্থ রাখতে এবং সর্বোত্তমভাবে চলতে পারেন। আমরা ব্যবসাগুলিকে সর্বদা তাদের ইলাস্টিক অনুসন্ধানের পরিমার্জন করতে সাহায্য করি৷
Rackspace DBA পরিষেবা সম্পর্কে আরও জানুন৷
৷কোনো মন্তব্য করতে বা প্রশ্ন জিজ্ঞাসা করতে প্রতিক্রিয়া ট্যাব ব্যবহার করুন। এছাড়াও আপনিসেলস চ্যাট এ ক্লিক করতে পারেন৷ এখন চ্যাট করতে এবং কথোপকথন শুরু করতে।