আপনি কীভাবে একটি ক্লাস্টারকে একবারে কোনও কাজ চালাতে পারবেন?


13

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

কেস ব্যবহার করুন: আপনার এমন একটি টাস্ক রয়েছে যা চালানো ব্যয়বহুল যা প্রতি X ঘন্টার মধ্যে একবার চালানো উচিত। এই কাজটি উদাহরণস্বরূপ একাধিক রেকর্ডের মাধ্যমে পুনরাবৃত্তি করতে পারে এবং তাদের স্থিতি আপডেট করে।

  • সবচেয়ে খারাপ পরিস্থিতি হ'ল চাকরি চালানো আপনার ডেটাটিকে দু'বার অকার্যকর করে দেয়।
  • সর্বোত্তম ক্ষেত্রে পরিস্থিতি হ'ল চাকরিটি আপনার সমস্ত সার্ভারে সংস্থান ব্যবহার করে util

প্রয়োজনীয়তার সংক্ষিপ্তসার:

  1. নোডের একটি নিচে থাকলেও কাজটি এখনও চালাতে হবে।
  2. কাজটি শিডিউল অনুযায়ী একবার চালাতে হবে।
  3. যদি একাধিক কাজ একই সময়ে বা ওভারল্যাপিং সময়ে নির্ধারিত হয় যে চলমান কাজের সংখ্যা সার্ভারগুলির মধ্যে সমানভাবে বিতরণ করা হয়।
  4. মেশিনগুলির অবশ্যই একই কোড বেস থাকতে হবে এবং এনটিপির মাধ্যমে সিঙ্ক্রোনাইজ করা উচিত।
  5. কনফিগারেশন নোড এবং নোডের মধ্যে, পরিবেশের ভেরিয়েবলের দ্বারা পৃথক হতে পারে।
  6. কাজটি সময়মতো বা নির্ধারিত সময়ের একটি নির্দিষ্ট ব্যবধানের মধ্যে শুরু করতে হয়। (উদাহরণস্বরূপ 5 মিনিট বলুন)

সম্ভাব্য সমাধান

  • একটি নোডকে মাস্টার নোড হিসাবে সেট করুন, এটি উপরে 1 টি লঙ্ঘন করায় এটি কাজ করে না।
  • একটি অনুরোধ করুন যে লোড ব্যালান্সার ভারসাম্য বজায় রেখে কাজটি সরিয়ে দেয়। দুর্ভাগ্যক্রমে এর পার্শ্ব প্রতিক্রিয়া রয়েছে যে আপনার যদি একই সাথে একাধিক কাজ চলমান থাকে তবে সেগুলি সমস্ত একই মেশিন দ্বারা চালিত হতে পারে।

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

অবশ্যই এটি জ্ঞাত সেরা সমাধান সহ একটি সমাধান সমস্যা।


সম্পর্কিত প্রশ্ন। /programming/5949038/schedule-job-executes-twice-on-cluster

উপরে বর্ণিত 5 টি প্রয়োজনীয়তা অনুসারে সমাধানটি অপর্যাপ্ত হওয়ায় এটি কোনও সদৃশ নয়। সর্বাধিক উত্সাহিত দ্রবণটি একটি রেসের সমস্যাতে ভুগছে এবং দ্বিতীয় সমাধানটি প্রয়োজনীয়তা 3 লঙ্ঘন করে

উত্তর:


16

আপনার কি শেয়ারড ডাটাবেস আছে? আমি অতীতে সালিস হিসাবে একটি ডাটাবেস ব্যবহার করে এটি করেছি।

মূলত, প্রতিটি "কাজ" ডাটাবেসে একটি সারি হিসাবে প্রতিনিধিত্ব করা হয়। আপনি যখন কাজটি চালাতে চান তার সাথে ডাটাবেসে একটি সারি যুক্ত করে আপনি কোনও কাজের সময়সূচী করেন যা প্রতিটি সার্ভার করে:

SELECT TOP 1 *
FROM jobs
WHERE state = 'NotRun'
ORDER BY run_time ASC

এইভাবে, তারা সকলেই পরবর্তী কাজটি নির্ধারিত কাজটি বেছে নেবে । তারা সবাই ঘুমায় যাতে জাগ্রত হয় যখন কাজটি আসলে চালানোর কথা। তারপরে, তারা সকলেই এটি করে:

UPDATE jobs
SET state = 'Running'
WHERE job_id = :id
  AND state = 'NotRun'

:idউপরের পদক্ষেপে আপনি যে কাজের পরিচয় পেয়েছেন তা কোথায় । আপডেটটি পারমাণবিক হওয়ার কারণে, কেবলমাত্র একটি সার্ভারই ​​সারিটি আপডেট করবে, আপনি সাইনটি আসলে আপডেট করেছেন এমন সার্ভার কিনা তা নির্ধারণ করতে আপনি ডাটাবেসের "সারিগুলির আপডেটের সংখ্যা" স্ট্যাটাস কোডটি পরীক্ষা করতে পারেন এবং তাই আপনি সার্ভার কিনা যে কাজ চালাতে হবে।

আপনি যদি "জিত" না হন এবং আপনি কাজটি চালাচ্ছেন না, ততক্ষণে কেবল পদক্ষেপ 1 এ ফিরে যান। যদি আপনি "জয়" করেন তবে অন্য থ্রেডে চালিত হওয়ার জন্য কাজের সময়সূচি নির্ধারণ করুন, তারপরে ১ ম পদক্ষেপে ফিরে যাওয়ার আগে কয়েক সেকেন্ড অপেক্ষা করুন That এইভাবে, এইবারে যে চাকরিটি পেলেন না এমন সার্ভারগুলি চাকরিটি বেছে নেওয়ার সম্ভাবনা বেশি যে অবিলম্বে চালানোর জন্য নির্ধারিত।


1
আপনি এখানে কোন বিচ্ছিন্নতা স্তরটি ব্যবহার করছেন? প্রতিশ্রুতিবদ্ধ বা সিরিয়ালাইজ পড়া?
ম্যাভেরিক রিজ

2

বেশ কয়েকটি অ্যাপ সার্ভারের "ক্লাস্টার ওয়াইড সিঙ্গলটন পরিষেবাদি" এর বৈশিষ্ট্য রয়েছে।

উদাহরণস্বরূপ ওয়েবলগিকের একটি সিঙ্গেলন পরিষেবা বৈশিষ্ট্য রয়েছে যা ওয়েব অ্যাডমিন কনসোলের মাধ্যমে কনফিগার করা থাকে।

আপনাকে এমন একটি ক্লাস লিখতে হবে যা ওয়েবলগিক.ক্লসটার.সিংলেটন.সিংলটনস সার্ভার কার্যকর করে এবং এডমিন কনসোলে পরিষেবাটি ঘোষণার জন্য এটি ব্যবহার করে। ক্লাস্টার ক্লাসটি ইনস্ট্যান্ট করার এবং পরিষেবাটি কখন চালু হবে বা বন্ধ হবে তা আপনাকে অবহিত করার যত্ন নেয়। সিঙ্গলটন সার্ভিস ইন্টারফেসে একটি অ্যাক্টিভেট () এবং একটি নিষ্ক্রিয় () পদ্ধতি রয়েছে।

ওয়েব্লোগিক কলগুলি অ্যাক্টিভেট () যখন ক্লাস্টারের কোনও নোডে পরিষেবাটি প্রথম উপস্থিত করে। যদি নির্বাচিত নোডটি নীচে চলে যায় তবে অ্যাডমিন সার্ভারটি পরিষেবাটিকে একটি ভিন্ন সার্ভারে "সরিয়ে দেয়", সেখানে অ্যাক্টিভেট () কল করে।

http://docs.oracle.com/cd/E12839_01/apirefs.1111/e13952/taskhelp/clusters/ConfigureSingletonService.html

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.