হে বন্ধুরা, আমি Cai Shunfeng, WhaleOps-এর একজন সিনিয়র ডেটা ইঞ্জিনিয়ার এবং Apache DolphinScheduler সম্প্রদায়ের একজন কমিটর এবং PMC সদস্য। আজ, আমি ব্যাখ্যা করব কিভাবে Apache DolphinScheduler এর Worker টাস্ক কাজ করে।
এই ব্যাখ্যা তিনটি বিভাগে বিভক্ত করা হবে:
Apache DolphinScheduler হল একটি বিতরণ করা, সহজে এক্সটেনসিবল, ভিজ্যুয়াল ওয়ার্কফ্লো শিডিউলিং ওপেন-সোর্স সিস্টেম, এন্টারপ্রাইজ-স্তরের পরিস্থিতির জন্য উপযুক্ত।
এটি নিম্নলিখিত মূল কার্যকারিতা প্রদান করে, ভিজ্যুয়াল ক্রিয়াকলাপগুলির মাধ্যমে কর্মপ্রবাহ এবং কার্যগুলির জন্য একটি সম্পূর্ণ জীবনচক্র ডেটা প্রক্রিয়াকরণ সমাধান প্রদান করে।
ব্যবহার করা সহজ
ভিজ্যুয়াল ডিএজি অপারেশনস: ব্যবহারকারীরা পৃষ্ঠায় উপাদানগুলিকে একটি DAG (নির্দেশিত অ্যাসাইক্লিক গ্রাফ) এ সাজানোর জন্য ড্র্যাগ এবং ড্রপ করতে পারে।
প্লাগইন সিস্টেম: টাস্ক প্লাগইন, ডেটা সোর্স প্লাগইন, সতর্কতা প্লাগইন, স্টোরেজ প্লাগইন, রেজিস্ট্রি সেন্টার প্লাগইন এবং ক্রোন জব প্লাগইন ইত্যাদি অন্তর্ভুক্ত করে। ব্যবহারকারীরা তাদের ব্যবসার প্রয়োজনীয়তা পূরণের জন্য প্রয়োজন অনুযায়ী প্লাগইনগুলিকে সহজেই প্রসারিত করতে পারে।
সমৃদ্ধ ব্যবহার দৃশ্যকল্প
স্ট্যাটিক কনফিগারেশন: ওয়ার্কফ্লো সময়সূচী, অনলাইন এবং অফলাইন অপারেশন, সংস্করণ পরিচালনা এবং ব্যাকফিল ফাংশন অন্তর্ভুক্ত।
রানটাইম অপারেশন: বিরতি, স্টপ, রিজিউম এবং প্যারামিটার প্রতিস্থাপনের মতো কার্যকারিতা প্রদান করে।
নির্ভরতা প্রকার: নির্ভরতা বিকল্প এবং কৌশলগুলির একটি সমৃদ্ধ সেটকে সমর্থন করে, আরও পরিস্থিতির সাথে খাপ খাইয়ে নেয়।
প্যারামিটার পাসিং: ওয়ার্কফ্লো লেভেলে স্টার্টআপ প্যারামিটার, গ্লোবাল প্যারামিটার, টাস্ক লেভেলে স্থানীয় প্যারামিটার এবং ডাইনামিক প্যারামিটার পাসিং সমর্থন করে।
উচ্চ নির্ভরযোগ্যতা
বিকেন্দ্রীভূত নকশা: সমস্ত পরিষেবা রাষ্ট্রহীন এবং সিস্টেম থ্রুপুট বাড়ানোর জন্য অনুভূমিকভাবে স্কেল করা যেতে পারে।
ওভারলোড সুরক্ষা এবং ইনস্ট্যান্স ফল্ট সহনশীলতা:
ওভারলোড সুরক্ষা: অপারেশন চলাকালীন, মাস্টার এবং কর্মী তাদের নিজস্ব CPU এবং মেমরি ব্যবহার, সেইসাথে টাস্ক ভলিউম নিরীক্ষণ করে। ওভারলোড হলে, তারা বর্তমান ওয়ার্কফ্লো/টাস্ক প্রসেসিংকে বিরতি দেয় এবং পুনরুদ্ধারের পরে আবার শুরু করে।
ইনস্ট্যান্স ফল্ট টলারেন্স: যখন মাস্টার/ওয়ার্কার নোড ব্যর্থ হয়, তখন রেজিস্ট্রি সেন্টার অফলাইনে সার্ভিস নোড সনাক্ত করে এবং ওয়ার্কফ্লো বা টাস্ক ইনস্ট্যান্সের জন্য ফল্ট টলারেন্স সম্পাদন করে, যতটা সম্ভব সিস্টেমের স্ব-পুনরুদ্ধারের ক্ষমতা নিশ্চিত করে।
এর পরে, সামগ্রিক নকশা পটভূমি পরিচয় করিয়ে দেওয়া যাক। নীচে অফিসিয়াল ওয়েবসাইটে দেওয়া ডিজাইন আর্কিটেকচার ডায়াগ্রাম।
আর্কিটেকচার ডায়াগ্রাম থেকে, আমরা দেখতে পাচ্ছি যে Apache DolphinScheduler বেশ কয়েকটি প্রধান উপাদান নিয়ে গঠিত:
API কম্পোনেন্ট: API পরিষেবা প্রাথমিকভাবে মেটাডেটা পরিচালনা করে, API পরিষেবার মাধ্যমে UI-এর সাথে ইন্টারঅ্যাক্ট করে, অথবা কর্মপ্রবাহের কাজ এবং কর্মপ্রবাহের জন্য প্রয়োজনীয় বিভিন্ন সংস্থান তৈরি করতে API ইন্টারফেসে কল করে।
মাস্টার কম্পোনেন্ট: মাস্টার হল ওয়ার্কফ্লো ইন্সট্যান্সের নিয়ামক, কমান্ড ব্যবহার করার জন্য, সেগুলিকে ওয়ার্কফ্লো ইনস্ট্যান্সে রূপান্তর করার জন্য, ডিএজি বিভক্ত করা, ক্রমানুসারে কাজগুলি জমা দেওয়া এবং কর্মীদের মধ্যে কাজগুলি বন্টন করার জন্য দায়ী।
শ্রমিক উপাদান: কর্মী নির্দিষ্ট কাজের নির্বাহক। কাজগুলি পাওয়ার পরে, এটি বিভিন্ন টাস্কের ধরন অনুসারে সেগুলিকে প্রক্রিয়া করে, মাস্টারের সাথে ইন্টারঅ্যাক্ট করে এবং টাস্ক স্ট্যাটাস রিপোর্ট করে। উল্লেখযোগ্যভাবে, কর্মী পরিষেবা ডাটাবেসের সাথে যোগাযোগ করে না; শুধুমাত্র API, মাস্টার এবং সতর্কতা পরিষেবাগুলি ডাটাবেসের সাথে যোগাযোগ করে।
সতর্কতা পরিষেবা: সতর্কতা পরিষেবা বিভিন্ন সতর্কতা প্লাগইনগুলির মাধ্যমে সতর্কতা পাঠায়। এই পরিষেবাগুলি রেজিস্ট্রি কেন্দ্রের সাথে নিবন্ধন করে, এবং মাস্টার এবং কর্মী নিয়মিতভাবে হৃদস্পন্দন এবং বর্তমান অবস্থা রিপোর্ট করে যাতে তারা স্বাভাবিকভাবে কাজগুলি গ্রহণ করতে পারে।
মাস্টার এবং কর্মীর মধ্যে মিথস্ক্রিয়া প্রক্রিয়া নিম্নরূপ:
টাস্ক জমা: মাস্টার ডিএজি বিভাজন সম্পূর্ণ করার পরে, এটি ডাটাবেসে কাজ জমা দেয় এবং বিভিন্ন বন্টন কৌশলের উপর ভিত্তি করে কাজগুলি বিতরণ করার জন্য একটি উপযুক্ত কর্মী গ্রুপ নির্বাচন করে।
টাস্ক রিসেপশন: কর্মী একটি টাস্ক পাওয়ার পরে, এটি তার শর্তের উপর ভিত্তি করে কাজটি গ্রহণ করবে কিনা তা নির্ধারণ করে। গ্রহণযোগ্যতা সফল হোক বা না হোক প্রতিক্রিয়া প্রদান করা হয়।
টাস্ক এক্সিকিউশন: কর্মী টাস্কটি প্রসেস করে, স্ট্যাটাস আপডেট করে রানিং করে এবং মাস্টারকে ফিড ব্যাক করে। মাস্টার ডাটাবেসে টাস্ক স্ট্যাটাস এবং শুরুর সময়ের তথ্য আপডেট করে।
টাস্ক সমাপ্তি: টাস্ক সম্পূর্ণ হওয়ার পরে, কর্মী মাস্টারের কাছে একটি সমাপ্তি ইভেন্টের বিজ্ঞপ্তি পাঠায় এবং মাস্টার একটি ACK নিশ্চিতকরণ ফেরত দেয়। যদি কোন ACK প্রাপ্ত না হয়, কর্মী টাস্ক ইভেন্টটি হারিয়ে না যায় তা নিশ্চিত করার জন্য পুনরায় চেষ্টা করতে থাকবে।
যখন কর্মী একটি কাজ পায়, তখন নিম্নলিখিত ক্রিয়াকলাপগুলি সঞ্চালিত হয়:
কর্মী এটি ওভারলোড কিনা তা পরীক্ষা করে; যদি তাই হয়, এটা টাস্ক প্রত্যাখ্যান. টাস্ক ডিস্ট্রিবিউশন ব্যর্থতার প্রতিক্রিয়া পাওয়ার পর, মাস্টার ডিস্ট্রিবিউশন কৌশলের উপর ভিত্তি করে টাস্ক ডিস্ট্রিবিউশনের জন্য অন্য কর্মী বেছে নিতে থাকেন।
কর্মীদের কাজের নির্দিষ্ট সম্পাদন প্রক্রিয়ায় নিম্নলিখিত পদক্ষেপগুলি অন্তর্ভুক্ত রয়েছে:
এর পরে, আমরা নির্দিষ্ট টাস্ক এক্সিকিউশন প্রক্রিয়ার বিস্তারিত জানাব।
টাস্ক এক্সিকিউশন শুরু হওয়ার আগে, একটি প্রসঙ্গ প্রথমে শুরু করা হয়। এই মুহুর্তে, টাস্ক শুরুর সময় সেট করা হয়। কাজের নির্ভুলতা নিশ্চিত করার জন্য, সময়ের প্রবাহ এড়াতে মাস্টার এবং কর্মীর মধ্যে সময় সিঙ্ক্রোনাইজ করা প্রয়োজন।
পরবর্তীকালে, টাস্ক স্ট্যাটাসটি চলমান অবস্থায় সেট করা হয় এবং কাজটি চলতে শুরু করেছে তা জানানোর জন্য মাস্টারকে ফেরত দেওয়া হয়।
যেহেতু বেশিরভাগ কাজই লিনাক্স অপারেটিং সিস্টেমে চলে, তাই ভাড়াটে এবং ফাইল প্রসেসিং প্রয়োজন:
ভাড়াটে প্রক্রিয়া করার পরে, কর্মী নির্দিষ্ট নির্বাহ ডিরেক্টরি তৈরি করে। এক্সিকিউশন ডিরেক্টরির রুট ডিরেক্টরি কনফিগারযোগ্য এবং উপযুক্ত অনুমোদনের প্রয়োজন। ডিফল্টরূপে, ডিরেক্টরি অনুমতি 755 সেট করা হয়।
টাস্ক এক্সিকিউশনের সময়, বিভিন্ন রিসোর্স ফাইলের প্রয়োজন হতে পারে, যেমন AWS S3 বা HDFS ক্লাস্টার থেকে ফাইল আনা। সিস্টেম পরবর্তী টাস্ক ব্যবহারের জন্য এই ফাইলগুলিকে কর্মীর অস্থায়ী ডিরেক্টরিতে ডাউনলোড করে।
Apache DolphinScheduler-এ, প্যারামিটার ভেরিয়েবল প্রতিস্থাপন করা যেতে পারে। প্রধান বিভাগ অন্তর্ভুক্ত:
উপরের ধাপগুলির মাধ্যমে, টাস্কের সম্পাদনের পরিবেশ এবং প্রয়োজনীয় সংস্থানগুলি প্রস্তুত, এবং কার্যটি আনুষ্ঠানিকভাবে সম্পাদন শুরু করতে পারে।
Apache DolphinScheduler-এ, বিভিন্ন ধরনের কাজ সমর্থিত, প্রতিটি বিভিন্ন পরিস্থিতিতে এবং প্রয়োজনীয়তার জন্য প্রযোজ্য। নীচে, আমরা বেশ কয়েকটি প্রধান কাজের ধরন এবং তাদের নির্দিষ্ট উপাদানগুলির সাথে পরিচয় করিয়ে দিচ্ছি।
এই উপাদানগুলি সাধারণত স্ক্রিপ্ট ফাইলগুলি চালানোর জন্য ব্যবহৃত হয়, বিভিন্ন স্ক্রিপ্টিং ভাষা এবং প্রোটোকলের জন্য উপযুক্ত:
বাণিজ্যিক সংস্করণ (WhaleScheduler) এছাড়াও JAR প্যাকেজগুলি চালানোর মাধ্যমে জাভা অ্যাপ্লিকেশন চালানো সমর্থন করে।
এই উপাদানগুলি যৌক্তিক নিয়ন্ত্রণ এবং কর্মপ্রবাহ ব্যবস্থাপনা বাস্তবায়নের জন্য ব্যবহৃত হয়:
এই উপাদানগুলি প্রধানত বড় ডেটা প্রক্রিয়াকরণ এবং বিশ্লেষণের জন্য ব্যবহৃত হয়:
এই উপাদানগুলি একটি ধারক পরিবেশে কাজ চালানোর জন্য ব্যবহৃত হয়:
ডেটা গুণমান নিশ্চিত করতে ব্যবহৃত হয়:
এই উপাদানগুলি ডেটা বিজ্ঞান এবং মেশিন লার্নিং পরিবেশের সাথে যোগাযোগ করতে ব্যবহৃত হয়:
এই উপাদানগুলি মেশিন লার্নিং কার্যগুলির পরিচালনা এবং সম্পাদনের জন্য ব্যবহৃত হয়:
সামগ্রিকভাবে, Apache DolphinScheduler তিন থেকে চার ডজন কম্পোনেন্টকে সমর্থন করে, স্ক্রিপ্ট এক্সিকিউশন, বড় ডেটা প্রসেসিং থেকে শুরু করে মেশিন লার্নিং পর্যন্ত। আরও তথ্যের জন্য, বিস্তারিত ডকুমেন্টেশন দেখতে দয়া করে অফিসিয়াল ওয়েবসাইটে যান।
Apache DolphinScheduler-এ, বিভিন্ন রানটাইম পরিবেশ এবং প্রয়োজনের জন্য টাস্কের ধরনগুলিকে একাধিক প্রক্রিয়াকরণ মোডে বিমূর্ত করা হয়।
নীচে আমরা বিস্তারিতভাবে টাস্কের ধরনগুলির বিমূর্ততা এবং সম্পাদন প্রক্রিয়ার সাথে পরিচয় করিয়ে দিই।
কর্মী হল একটি সার্ভারে নিয়োজিত একটি JVM পরিষেবা৷ কিছু স্ক্রিপ্ট উপাদানের জন্য (যেমন শেল, এবং পাইথন) এবং স্থানীয়ভাবে চালানো কাজগুলি (যেমন স্পার্ক লোকাল), তারা চালানোর জন্য একটি পৃথক প্রক্রিয়া শুরু করবে।
এই মুহুর্তে, কর্মী প্রক্রিয়া আইডি (পিআইডি) এর মাধ্যমে এই কাজের সাথে যোগাযোগ করে।
বিভিন্ন তথ্য উৎসের বিভিন্ন অভিযোজনের প্রয়োজন হতে পারে। এসকিউএল এবং সঞ্চিত পদ্ধতির কাজগুলির জন্য, আমাদের কাছে বিভিন্ন ডেটা উত্সের জন্য বিমূর্ত হ্যান্ডলিং রয়েছে, যেমন MySQL, PostgreSQL, AWS Redshift, ইত্যাদি। এই বিমূর্ততা বিভিন্ন ডাটাবেস প্রকারের নমনীয় অভিযোজন এবং সম্প্রসারণের অনুমতি দেয়।
দূরবর্তী কাজগুলি দূরবর্তী ক্লাস্টারগুলিতে সম্পাদিত কাজগুলিকে বোঝায়, যেমন AWS EMR, SeaTunnel ক্লাস্টার, Kubernetes ক্লাস্টার, ইত্যাদি৷ কর্মী স্থানীয়ভাবে এই কাজগুলি সম্পাদন করে না; পরিবর্তে, এটি তাদের রিমোট ক্লাস্টারে জমা দেয় এবং তাদের স্থিতি এবং বার্তাগুলি নিরীক্ষণ করে। এই মোডটি বিশেষত ক্লাউড পরিবেশের জন্য উপযুক্ত যেখানে স্কেলেবিলিটি প্রয়োজন।
লগ সংগ্রহ
বিভিন্ন প্লাগইন বিভিন্ন প্রক্রিয়াকরণ মোড ব্যবহার করে, এবং সেইজন্য, লগ সংগ্রহ সেই অনুযায়ী পরিবর্তিত হয়:
স্থানীয় প্রক্রিয়া: প্রক্রিয়া আউটপুট নিরীক্ষণ দ্বারা লগ রেকর্ড করা হয়.
দূরবর্তী কাজ: দূরবর্তী ক্লাস্টার (যেমন, AWS EMR) থেকে টাস্ক স্ট্যাটাস এবং আউটপুট পর্যায়ক্রমে পরীক্ষা করে এবং স্থানীয় টাস্ক লগগুলিতে রেকর্ড করে লগগুলি সংগ্রহ করা হয়।
পরামিতি পরিবর্তনশীল প্রতিস্থাপন
সিস্টেম টাস্ক লগ স্ক্যান করে যে কোন প্যারামিটার ভেরিয়েবল সনাক্ত করতে যা গতিশীলভাবে প্রতিস্থাপন করা প্রয়োজন। উদাহরণস্বরূপ, DAG-তে টাস্ক A কিছু আউটপুট প্যারামিটার তৈরি করতে পারে যা ডাউনস্ট্রিম টাস্ক বি-তে পাস করা দরকার।
এই প্রক্রিয়া চলাকালীন, সিস্টেম লগগুলি পড়ে এবং প্রয়োজন অনুসারে প্যারামিটার ভেরিয়েবলগুলিকে প্রতিস্থাপন করে।
টাস্ক আইডি পুনরুদ্ধার করা হচ্ছে
এই টাস্ক আইডিগুলি ধরে রাখা আরও ডেটা কোয়েরি এবং দূরবর্তী টাস্ক অপারেশনের জন্য অনুমতি দেয়। উদাহরণস্বরূপ, যখন একটি ওয়ার্কফ্লো বন্ধ করা হয়, তখন চলমান টাস্কটি বন্ধ করতে টাস্ক আইডি ব্যবহার করে সংশ্লিষ্ট বাতিল API কল করা যেতে পারে।
ফল্ট টলারেন্স হ্যান্ডলিং
একটি কাজ সম্পাদিত হওয়ার পরে, বেশ কয়েকটি সমাপ্তি ক্রিয়া প্রয়োজন:
টাস্ক কমপ্লিশন চেক: সিস্টেম চেক করবে যে একটি সতর্কতা পাঠানোর প্রয়োজন আছে কিনা। উদাহরণস্বরূপ, একটি এসকিউএল টাস্কের জন্য, যদি ক্যোয়ারী ফলাফল একটি সতর্কতা ট্রিগার করে, তবে সিস্টেম সতর্কতা বার্তা পাঠাতে RPC এর মাধ্যমে সতর্কতা পরিষেবার সাথে যোগাযোগ করবে।
ইভেন্ট ফিডব্যাক: কর্মী টাস্ক কমপ্লিশন ইভেন্ট (ফিনিশ ইভেন্ট) মাস্টারের কাছে ফেরত পাঠাবে। মাস্টার ডাটাবেসে টাস্ক স্ট্যাটাস আপডেট করে এবং DAG স্ট্যাটাস ট্রানজিশনের সাথে এগিয়ে যায়।
কনটেক্সট ক্লিনআপ: কর্মী মেমরি থেকে টাস্কের শুরুতে তৈরি করা টাস্ক প্রসঙ্গটি সরিয়ে ফেলবে। এটি টাস্ক এক্সিকিউশনের সময় উত্পন্ন ফাইল পাথগুলিও পরিষ্কার করবে। যদি ডিবাগ মোডে (ডেভেলপমেন্ট মোড) থাকে, তাহলে এই ফাইলগুলি পরিষ্কার করা হবে না, ব্যর্থ কাজগুলির সমস্যা সমাধানের অনুমতি দেয়।
এই পদক্ষেপগুলির মাধ্যমে, একটি টাস্ক ইনস্ট্যান্সের সম্পূর্ণ সম্পাদন প্রক্রিয়া সম্পন্ন হয়।
আপনি যদি Apache DolphinScheduler-এ আগ্রহী হন এবং ওপেন সোর্স সম্প্রদায়ে অবদান রাখতে চান, তাহলে আপনাকে আমাদের অবদান নির্দেশিকাগুলি উল্লেখ করতে স্বাগত জানাই৷
সম্প্রদায় সক্রিয় অবদানগুলিকে উৎসাহিত করে, যার মধ্যে রয়েছে কিন্তু সীমাবদ্ধ নয়:
নতুন অবদানকারীদের জন্য, আপনি সম্প্রদায়ের GitHub সমস্যাগুলিতে good first issue
হিসাবে লেবেলযুক্ত সমস্যাগুলি অনুসন্ধান করতে পারেন। এই সমস্যাগুলি সাধারণত সহজ এবং ব্যবহারকারীদের জন্য তাদের প্রথম অবদানের জন্য উপযুক্ত।
সংক্ষেপে, আমরা Apache DolphinScheduler-এর সামগ্রিক নকশা এবং শ্রমিকের কাজগুলির বিস্তারিত সম্পাদন প্রক্রিয়া সম্পর্কে শিখেছি।
আমি আশা করি এই বিষয়বস্তুটি আপনাকে আরও ভালভাবে বুঝতে এবং Apache DolphinScheduler ব্যবহার করতে সাহায্য করবে৷ আপনার যদি কোন প্রশ্ন থাকে, মন্তব্য বিভাগে আমার সাথে যোগাযোগ করতে বিনা দ্বিধায়।