কীভাবে একটি দীর্ঘ-চলমান প্রোগ্রামটিকে প্রোগ্রামগতভাবে পর্যবেক্ষণ করা যায়


11

আমি বর্তমানে যা পেয়েছি তা এই সিডো কোড দিয়ে সংক্ষিপ্ত করা যেতে পারে:

public static void Main(string[] args)
{
    var listOfObjects = Database.GetObjectsToUploadToOnlineService();
    Parallel.ForEach(Upload)
}

private static void Upload(MyUploadObject obj)
{
    //Build object (takes a few milliseconds)
    //Format to JSON (takes a few more milliseconds)
    //Upload (can take up to a max of 10 minutes)
    //Wait for a response (can take up to a max of 10 minutes)
    //Save response to our database (takes a few milliseconds)
}

এই প্রোগ্রামটি ঠিক একটি নির্ধারিত টাস্ক হিসাবে আমাদের সার্ভারে সেট আপ হয়েছে। আমরা প্রোগ্রামটির মালিক এবং এটি দিয়ে আমরা যা করতে চাই তা করতে পারি। আমার প্রশ্নটি স্বয়ংক্রিয় নিরীক্ষণ চেকগুলি তৈরি করার বিষয়ে একটি ব্লগ থেকে উদ্ভূত হয়েছে (আমার কাছে কোনও লিঙ্কটি কার্যকর নেই)।

সুতরাং এটি আমাকে ভাবতে পেরেছিল: বিশ্বে আমি কীভাবে আমার প্রোগ্রামটি সংশোধন করতে পারি যাতে আমি অন্য "পর্যবেক্ষণ" প্রোগ্রামটি চালিয়ে যেতে পারি? বা লুকানো আছে এমন একটি ডাব্লুপিএফ প্রোগ্রাম বলতে কনসোল প্রোগ্রাম হতে এই পরিবর্তন হওয়া উচিত ?

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

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

আমার মন কোনও ইভেন্টের দিকে ঝুঁকতে থাকে, তবে আমি বুঝতে পারি না যে আমি কীভাবে এমন একটি প্রোগ্রাম চালাব যা সাবস্ক্রাইব করতে এবং একটি চলমান প্রোগ্রামের সদস্যতা বাতিল করতে পারে। এটা কি সম্ভব?


আপনি কি (10 মিনিট স্থায়ী) আপলোড / প্রতিক্রিয়া ক্রিয়াকলাপের অগ্রগতি পর্যবেক্ষণ করতে চান, বা "সমান্তরাল.ফরএচ" লুপের মধ্যে কতগুলি আপলোড হয়েছে তা জানতে চান?
ডক ব্রাউন

@ ডকব্রাউন সম্পাদনা দেখুন। (শেষ দুটি অনুচ্ছেদ)
রবার্ট স্নাইডার

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

উত্তর:


7

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

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


আমি মনে করি আমি এই উত্তরটি নিয়ে যেতে পারব কারণ আমরা ইতিমধ্যে লগ 4 নেটটি ভালভাবে ব্যবহার করছি .. লগিং :) সুতরাং তার যা আছে তার সাথে এটি পুরোপুরি ফিট হবে। আমার কোনও ক্লু লগ 4 নেট এটি করতে পারে নি! আপনাকে ধন্যবাদ
রবার্ট স্নাইডার

9

আপনার মন্তব্যগুলি থেকে আমি দেখতে পাচ্ছি যে আপনার কাছে একটি ক্লায়েন্ট / সার্ভার ডাটাবেস উপলব্ধ আছে এবং আপনার আপলোডারের ইতিমধ্যে একটি সংযোগ এবং লেখার অ্যাক্সেস রয়েছে? তারপরে ডাটাবেসে একটি "মনিটরিং" বা "স্থিতি" সারণী যুক্ত করা এবং আপনার আপলোডারকে সেখানে তার অগ্রগতিটি জানাতে (আপনার উপরের তালিকাভুক্ত প্রতিটি "আকর্ষণীয়" পদক্ষেপে লগইন করা সম্ভবত সবচেয়ে সহজ হবে)

স্ট্যাটাসটি দেখতে, জিইউআই সহ একটি দ্বিতীয় প্রোগ্রাম তৈরি করুন, যা ডাটাবেসের সাথে সংযুক্ত হয় এবং স্থিতিটি প্রদর্শন করে (উদাহরণস্বরূপ, 1 মিনিটের ব্যবধানে ভোট দিয়ে)। আপনি আপনার স্থানীয় ডেস্কটপে সেই প্রোগ্রামটি চালাতে পারেন, ধরে নিয়েছেন যে সেখান থেকে ডাটাবেসের সাথে সংযোগ করা সম্ভব।

অবশ্যই, কোনও স্থিতি টেবিলকে লেখার সময় আপনার ডাটাবেস লেনদেনের সাথে হস্তক্ষেপ করা যায়, আপনি একটি পৃথক সংযোগ ব্যবহার করতে পারেন। আপনি এর জন্য এমএসকিউএম এর মতো একটি বার্তা সারি প্রক্রিয়াও ব্যবহার করতে পারেন তবে এটি আপনার সাধারণ ক্ষেত্রে বড় আকারের সমাধান হতে পারে।


+1 এটি সাধারণ রাখার জন্য সর্বোত্তম পদ্ধতির এবং খুব জটিল কিছু হওয়া উচিত নয় এমন কোনও জিনিসকে জটিল নয়।
থমাস স্ট্রিংগার

3

কেবল @ জেডিটির উত্তর তৈরি করতে, এটি করার একটি সাধারণ উপায় হ'ল একটি বার্তার কাতারে বার্তা লেখা। যখনই আপনার অ্যাপ্লিকেশনটিতে গুরুত্বপূর্ণ কিছু ঘটে তখন এটি একটি বার্তা লিখে ম্যাসেজের কাতারে পাঠাত। সাধারণত বার্তাটির ফর্ম্যাটটি এক্সএমএল বা অনুরূপ। এটা কিউ লেখক।

মনিটরিং অ্যাপ্লিকেশনটি কাতারে পড়ে (সারি পাঠক) পড়ে এবং বার্তাগুলি বাছাই করে সেগুলি সংরক্ষণ করে এবং পূর্ববর্তী বার্তাগুলি বা শর্তগুলির তুলনায় বার্তাটি বিশ্লেষণ করে প্রক্রিয়া করে। যদি কোনও শর্ত পূরণ হয়, তদারকি অ্যাপ্লিকেশনটি একটি সম্ভাব্য সমস্যার নির্দেশ করে একটি সতর্কতা বাড়িয়ে তুলবে।

এটি আপনার অ্যাপ্লিকেশনটিকে নিজেরাই পর্যবেক্ষণ করা থেকে ডেকে আনে কারণ এটি কেবল বার্তাগুলি সরিয়ে দেয়। বর্তমান বার্তাগুলির উপর ভিত্তি করে কখন ভাল বা খারাপ কিছু ঘটেছে তা নির্ধারণ করার জন্য এটি পর্যবেক্ষণ অ্যাপ্লিকেশনটির উপর নির্ভর করে। সারিগুলি ব্যবহৃত হয় কারণ তারা কোনও ক্ষতি ছাড়াই বার্তা সংরক্ষণের জন্য একটি ভাল উপায় সরবরাহ করে।

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

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