Apache Storm একটি রিয়েল-টাইম ডিসট্রিবিউটেড ডেটা প্রসেসিং সিস্টেম, যা ডেটা স্ট্রিমিং এবং রিয়েল-টাইম অ্যানালিটিক্সের জন্য ব্যবহৃত হয়। Storm-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হলো এটি বড় স্কেল ডিস্ট্রিবিউটেড সিস্টেমে কাজ করতে সক্ষম, যেখানে backpressure এবং load shedding মতো টেকনিকগুলো ডেটা প্রসেসিং সিস্টেমের পারফরম্যান্স এবং স্থিতিশীলতা বজায় রাখতে সহায়ক হয়।
এই লেখায় আমরা backpressure এবং load shedding টেকনিক্স সম্পর্কে আলোচনা করব, যা Storm এর কার্যকারিতা এবং দক্ষতা নিশ্চিত করার জন্য ব্যবহৃত হয়।
Backpressure: সংজ্ঞা এবং ব্যবহারের প্রক্রিয়া
Backpressure একটি ডেটা প্রসেসিং কৌশল যা যখন সিস্টেমে অতিরিক্ত ডেটা প্রবাহিত হয় এবং সিস্টেমের ক্ষমতা অতিক্রম করে, তখন সিস্টেম নিজেই প্রবাহিত ডেটার প্রবাহকে থামিয়ে দেয় বা ধীর করে দেয়। Storm-এ, backpressure হল একটি সিস্টেমে ডেটা প্রবাহের নিয়ন্ত্রণের একটি উপায়, যাতে সিস্টেমের অতিরিক্ত লোড কমানো যায় এবং এটি স্থিতিশীলভাবে কাজ করতে পারে।
Backpressure কিভাবে কাজ করে:
- Storm-এ backpressure কার্যকরভাবে যখন বোল্ট (Bolt) বা স্পাউট (Spout) কোনও কারণে দ্রুত ডেটা প্রক্রিয়া করতে সক্ষম হয় না, তখন এটি নিজেই ডেটার প্রবাহকে ধীর করে বা ব্লক করে দেয়।
- Storm একে অপরের মধ্যে ডেটা প্রবাহকে নিয়ন্ত্রণ করতে সক্ষম, যাতে একটি সিস্টেমের অংশ ব্যর্থ না হয় এবং অন্য অংশের উপর অতিরিক্ত চাপ না আসে।
- Backpressure Storm-এর Spout এবং Bolt-এর মধ্যে যোগাযোগের মাধ্যমে কাজ করে, যেমন যখন বোল্ট ডেটা প্রক্রিয়া করতে ধীর হয়ে যায়, তখন স্পাউট নতুন ডেটা প্রেরণ বন্ধ করে দেয়।
Backpressure কিভাবে Storm টপোলজিতে কার্যকরী হয়:
Storm নিজেই backpressure হ্যান্ডেল করার জন্য কিছু বিল্ট-ইন কনফিগারেশন এবং মেকানিজম ব্যবহার করে। যখন কোনও বোল্ট বা স্পাউট কাজের মধ্যে থেমে যায় বা ধীর হয়, তখন তা অন্য অংশে ডেটার প্রবাহ ধীর বা থামিয়ে দেয়, যাতে পুরো সিস্টেমে অতিরিক্ত লোড না পড়ে।
Storm-এর backpressure কনফিগারেশন সাধারণত ডেটার প্রবাহ নিয়ন্ত্রণ করতে ব্যবহৃত হয়, যেমন:
Config conf = new Config();
conf.put(Config.TOPOLOGY_BACKPRESSURE_ENABLE, true); // Enable backpressure
এখানে, Config.TOPOLOGY_BACKPRESSURE_ENABLE কে true সেট করা হলে, Storm backpressure কার্যকর করবে এবং সিস্টেমের অতিরিক্ত চাপ কমানোর জন্য ডেটার প্রবাহ ধীর করবে।
Load Shedding: সংজ্ঞা এবং ব্যবহারের প্রক্রিয়া
Load Shedding হলো একটি কৌশল যেখানে সিস্টেমের অতিরিক্ত লোড এড়ানোর জন্য, সিস্টেম সিদ্ধান্ত নেয় কিছু ডেটা বা কাজ ফেলে দিতে (shed) বা প্রক্রিয়া না করার সিদ্ধান্ত নেয়। Storm-এ, এটি তখন ব্যবহৃত হয় যখন সিস্টেমের ধারণক্ষমতার বাইরে অতিরিক্ত ডেটা প্রবাহ আসে এবং সিস্টেমকে নির্দিষ্ট কিছু ডেটা বাদ দিয়ে কাজ করতে হতে পারে।
Load Shedding কিভাবে কাজ করে:
- Storm-এর মধ্যে load shedding তখন কার্যকর হয় যখন ডেটা প্রবাহিত হচ্ছে, কিন্তু বোল্ট বা স্পাউট যথেষ্ট দ্রুততার সাথে ডেটা প্রক্রিয়া করতে পারছে না। ফলে সিস্টেম কিছু ডেটা বাদ দেওয়ার সিদ্ধান্ত নেয়, যার ফলে অতিরিক্ত চাপ কমে যায়।
- এটি সাধারণত তখন ব্যবহৃত হয় যখন সিস্টেমে ডেটা অতিরিক্ত লোড সৃষ্টি করছে এবং কিছু তথ্য বা কাজের প্রক্রিয়া অগ্রাহ্য করা বা ফেলে দেওয়া যায়।
Load Shedding এর কৌশল:
- ডেটা ফিল্টারিং: কিছু অপ্রয়োজনীয় ডেটা বাদ দিয়ে সিস্টেম কাজ করতে পারে, যেমন অতিরিক্ত বা অপরিহার্য ডেটা বাতিল করা।
- প্রথমে গুরুত্বপূর্ণ কাজ করা: কিছু গুরুত্বপূর্ণ কাজ প্রথমে প্রক্রিয়া করা যেতে পারে এবং কম গুরুত্বপূর্ণ কাজ ফেলে দেয়া যেতে পারে।
Storm এর মধ্যে load shedding কার্যকর করার জন্য নির্দিষ্ট কাস্টম বোল্ট তৈরি করা যেতে পারে যা ডেটার নির্দিষ্ট শর্তে ফেলে দেওয়ার সিদ্ধান্ত নেয়।
public class LoadSheddingBolt extends BaseBasicBolt {
@Override
public void execute(Tuple tuple, BasicOutputCollector collector) {
// Only process the data if it's deemed important
if (shouldProcess(tuple)) {
// Process the tuple
} else {
// Skip the tuple (shed it)
}
}
private boolean shouldProcess(Tuple tuple) {
// Add logic to decide whether to process or shed the tuple
return tuple.getIntegerByField("priority") > 5;
}
}
এখানে, LoadSheddingBolt ফিল্টার করে, শুধু সেই Tuple গুলি প্রক্রিয়া করবে যেগুলি গুরুত্বপূর্ণ বা উচ্চ অগ্রাধিকারযুক্ত।
Backpressure এবং Load Shedding এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Backpressure | Load Shedding |
|---|---|---|
| কাজের উদ্দেশ্য | সিস্টেমের অতিরিক্ত লোড নিয়ন্ত্রণ করা | সিস্টেমের অতিরিক্ত কাজ বাদ দিয়ে ভারসাম্য রাখা |
| কিভাবে কাজ করে | ডেটা প্রবাহ ধীর করা বা থামানো | কিছু ডেটা বা কাজ বাদ দেওয়া (ফেলে দেওয়া) |
| প্রভাব | সিস্টেমের চাপ কমাতে পুরো ডেটা প্রবাহ ধীর করা হয় | কিছু অপ্রয়োজনীয় কাজ বা ডেটা বাদ দেওয়া হয় |
| ব্যবহারের উদাহরণ | যখন বোল্ট বা স্পাউট কাজের মধ্যে আটকে যায় বা ধীর হয় | যখন সিস্টেমে অতিরিক্ত ডেটা প্রবাহ আসে এবং কিছু বাদ দিতে হয় |
| ব্যবহার | সিস্টেমের ডেটা প্রবাহ নিয়ন্ত্রণ করার জন্য ব্যবহৃত হয় | প্রক্রিয়া না হওয়া কাজ বা ডেটাকে বাদ দিতে ব্যবহৃত হয় |
সারাংশ
Backpressure এবং Load Shedding হল Storm-এ ব্যবহৃত দুটি শক্তিশালী কৌশল যা সিস্টেমের স্থিতিশীলতা এবং পারফরম্যান্স বজায় রাখতে সাহায্য করে। Backpressure সিস্টেমের ডেটা প্রবাহ নিয়ন্ত্রণ করে এবং যখন অতিরিক্ত লোড সৃষ্টি হয়, তখন ডেটার প্রবাহ ধীর বা থামিয়ে দেয়, যাতে সিস্টেম স্থিতিশীল থাকে। অন্যদিকে, Load Shedding কিছু অপ্রয়োজনীয় ডেটা বা কাজ বাদ দেয়, যাতে সিস্টেম কার্যকরী থাকে এবং অতিরিক্ত চাপ না আসে। Storm এই কৌশলগুলি ব্যবহার করে সিস্টেমের পারফরম্যান্স এবং স্কেলেবিলিটি নিশ্চিত করতে সহায়ক হয়।
Read more