24/7 চালানো দরকার এমন কোনও প্রোগ্রামে ব্যতিক্রম হ্যান্ডলিং


14

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

যেহেতু 24/7 চালানো দরকার এমন কোনও প্রোগ্রামে কীভাবে ব্যতিক্রমগুলি সঠিকভাবে পরিচালনা করতে পারি তার জন্য আমার খুব ভাল সাড়া পাওয়া যায়নি, এখন আমি এখানে আছি। "সমালোচনামূলক" প্রোগ্রামগুলি / পরিষেবাগুলিতে যেগুলি চব্বিশ ঘন্টা চলতে হবে তার ব্যতিক্রম পরিচালনার বিষয়ে আমি কোনও তথ্য / পরামর্শ সন্ধান করতে পারি নি (এবং এই ক্ষেত্রে আমি বিশ্বাস করি যে পরিষেবাটি যদি এক মিনিটের জন্য বন্ধ থাকে তবে এটি ঠিক হতে পারে) বা দুটি, তাই সমালোচনাও নয়)। আমি বুঝতে পারি এটি প্রোগ্রামের সঠিক প্রকৃতির উপর নির্ভর করে। একটি অনলাইন গেমের জন্য লগ স্ক্যানারের তুলনায় যে প্রোগ্রামটি প্রাণঘাতী সমস্যার কারণ হতে পারে তার প্রয়োজনীয়তা একেবারেই আলাদা।

দুটি উদাহরণ:

1: ব্রিটিশ রেলওয়ের গ্রাহকদের জন্য একটি টাইপ-ফরোয়ার্ড পরিষেবা, যখন তারা রেল স্টেশনগুলির জন্য অনলাইনে অনুসন্ধান করেন তখন ব্যবহৃত হয়।

2: ট্র্যাক, ট্রেন ইত্যাদিতে বিভিন্ন সেন্সর থেকে প্রাপ্ত রিয়েলটাইম তথ্যের উপর ভিত্তি করে উপরের রেলপথের জন্য স্বয়ংক্রিয়ভাবে রেলপথের স্যুইচগুলি নিয়ন্ত্রণ করে এমন একটি প্রোগ্রাম

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


2
একটি বাস্তব-সময় অ্যাপ্লিকেশন (sic!) এ ব্যতিক্রম হ্যান্ডলিংয়ের সময় অনাবন্ধিক স্ট্যাক একটি ট্রেন ধ্বংস করতে পারে।
হরিণ হান্টার

4
@ ডিয়ারহান্টার ব্যতিক্রম ব্যতীত কোডিংয়ের একই ফলাফল থাকতে পারে।
BЈовић

9
ঠিক আছে, তাই আপনি catch Exception। এর অর্থ এই নয় যে আপনার প্রোগ্রামটি কাজ করে , এর অর্থ হ'ল ব্যর্থতা প্রয়োগের রাজ্যটিকে দূষিত হতে দেয় যখন এটি চালিয়ে যেতে থাকে, এটি একটি আরও বিপজ্জনক জায়গা। একটি ক্রাশ হওয়া প্রোগ্রামটি বিপর্যয়কর হতে পারে তবে এমন একটি প্রোগ্রাম যা একটি অবৈধ অবস্থায় রয়েছে তবে এখনও ক্রিয়া সম্পাদন করা সক্রিয়ভাবে বিপর্যয়কর হতে পারে ।
ফোশি

1
যদি অ্যাপ্লিকেশনটি 24/7 চালানোর প্রয়োজন হয় তবে কোথাও একটি অসীম লুপ রয়েছে এবং এই অসীম লুপটি এমন কোনও কাঠামোর চারপাশে আরও ভালভাবে আবৃত ছিল যা সমস্ত হাতছাড়া ব্যতিক্রমগুলি ধরে ফেলে। যদি এটি না হয়, ইতিমধ্যে বিদ্যমান ক্যাচ-অল হ্যান্ডলারের মূল এবং বাইরের বাইরে কাবুমের কাছে একটি নিয়ন্ত্রণহীন ব্যতিক্রম ঘেঁটে যাবে! 24/7 অ্যাপ্লিকেশনটি সমাপ্ত হয়।
ডেভিড হামেন

উত্তর:


7

কিছু ভাষার বৈশিষ্ট্য পছন্দ করে

  • আবর্জনা সংগ্রহ
  • ব্যতিক্রম সিস্টেম
  • অলস মূল্যায়ন

একটি রিয়েল-টাইম সিস্টেমে সাধারণত দরকারী হয় না। এই বৈশিষ্ট্যগুলি ছাড়াই সম্ভবত একটি ভাষা বেছে নেওয়া উচিত এবং সর্বাধিক মেমরির ব্যবহার, বা সর্বাধিক প্রতিক্রিয়া সময়ের মতো নির্দিষ্ট বৈশিষ্ট্য প্রমাণ করার চেষ্টা করা উচিত।


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

এর সংক্ষিপ্তসার হিসাবে: একটি শক্তিশালী প্রোগ্রামে, বিভিন্ন অংশ একে অপরের থেকে বিচ্ছিন্ন হয়ে থাকে এবং পুনরায় আরম্ভ বা স্বাধীনভাবে ছোট করা যায়।

সুতরাং মূলত আমাদের এর সমান কোডের একটি অংশের প্রয়োজন:

while (true) {
  try {
    DoWork();
  }
  catch (Exception e) {
    log(e);
  }
}

এছাড়াও লুপটি শেষ করার একটি উপায়। এই জাতীয় লুপটি তখন প্রতিটি শ্রমিকের থ্রেডকে চালিত করে।


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

অনেকগুলি ব্যতিক্রম ধরা অন্য সমস্যাটি হ'ল এই ধরনের সতর্কতা অবলম্বন করার পরেও সমস্ত ব্যতিক্রম পুনরায় চালু করে ঠিক করা যায় না। অন্যথায়-স্মৃতি থেকে দূরে যাওয়ার মতো শক্ত সমস্যা পুনরায় চালু করে পরিচালনা করা যেতে পারে। একটি পুনরায় চালু করা আপনাকে যখন কোনও শারীরিক কেবল সরিয়ে ফেলা হয় তখন ইন্টারনেট সংযোগ ফিরে পেতে সহায়তা করবে না।


1
হ্যাঁ, তবে "শারীরিক কেবলটি টেনে আনা হয়েছিল" এর মতো পরিস্থিতি হ'ল যখন আপনি কেবল ব্যতিক্রমটি লগটি পূরণ করতে চান যতক্ষণ না কেউ তারের পিছনে প্রবেশ না করে, তারপরে অ্যাপ্লিকেশনটির আরও ম্যানুয়াল পুনরায় চালু করে জিনিসগুলি আবার কাজ শুরু করে।
মার্ক হার্ট

2

আপনার প্রশ্নের উত্তর দেওয়ার জন্য, একটি ব্যতিক্রমগুলি কী এবং তারা কীভাবে কাজ করে তা বুঝতে হবে।

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

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

আপনার নির্দিষ্ট ক্ষেত্রে:

  1. যদি কোয়েরিটি কার্যকর করা যায় না (উদাহরণস্বরূপ, ভুল শহরের নাম), তবে ত্রুটিটি ব্যবহারকারীকে জানান, এবং এটি সংশোধন করতে বলুন।
  2. আপনি যদি কোনও সমালোচক সেন্সর থেকে তথ্য না পান তবে অপারেটরকে সমস্যাটি সমাধানের জন্য জিজ্ঞাসা না করে চালিয়ে যাওয়ার কোনও বুদ্ধি নেই।

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


1

আমি এখনও অবধি বেস ব্যতিক্রম ধরা পড়ে ছাড়া কিছুই দেখতে পেলাম।

মনে হচ্ছে এখানে কোনও সমস্যা আছে, যতটা ব্যতিক্রম যথাযথভাবে মোকাবেলা করা হচ্ছে না। উপযুক্ত স্থানে ব্যতিক্রমগুলি ধরা এবং যথাযথ ব্যবস্থা নেওয়া (ব্যতিক্রমের ধরণের উপর নির্ভর করে) পরিষেবাটি আরও নির্ভরযোগ্য ফ্যাশনে চলমান রাখবে।

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

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

সুতরাং, আমি যেমন প্রশ্নটি বুঝতে পারি, আমি প্রস্তাব দিই যে প্রথম নজরে আপনি বেস-ব্যতিক্রম-টাইপ হ্যান্ডলারগুলি সরিয়ে না দেওয়ার চেয়ে আরও নির্দিষ্ট ব্যতিক্রম হ্যান্ডলিং যুক্ত করার চেয়ে ভাল হবে।


0

2 পয়েন্টের সাথে: সি # ব্যবহার করবেন না। এটা একটা রিয়েলটাইম ভাষা নয় এবং আপনি হবে যদি আপনি এই ধরনের হিসাবে এটি ব্যবহার করার চেষ্টা আঘাত পেতে।

পয়েন্ট 1 এর জন্য: আপনি ভুল পথে যেতে পারেন: এটি ক্রাশ হতে দিন, তারপরে পুনরায় আরম্ভ করুন


আমার সি # ব্যবহার এবং দক্ষতা পয়েন্ট 2 (রিয়েল-টাইম ট্র্যাক স্যুইচিং) এর আশেপাশে নয়। আমি কৌতূহল যে কেন সি # এই জাতীয় কাজের জন্য এতটা অনুপযুক্ত?
মাইকেল ও'নিল

1
বেশিরভাগ ক্ষেত্রে: আবর্জনা সংগ্রাহক সময় সাশ্রয়ী, অবিশ্বাস্যর সাথে প্রোগ্রাম আচরণ করে। এছাড়াও, রানটাইমটি খুব জটিল, এবং এই প্রসঙ্গে আপনার সাধারণ জিনিসগুলির প্রয়োজন রয়েছে, সেগুলি আরও অনুমানযোগ্য
মিনিবিল ২

0

ঘোষণাপত্র: এগুলি শুধুমাত্র চিন্তা, আমার অভিজ্ঞতা নেই।

আমি অনুমান করব যে একটি প্রোগ্রাম, দ্বিতীয় উদাহরণের প্রয়োজনীয়তাগুলি সন্তুষ্ট করে অত্যন্ত মডুলার হওয়া উচিত । ফলস্বরূপ, মডিউল সিস্টেমকে অস্থিতিশীল না করে পুনরায় চালু করতে সক্ষম হবে।

উদাহরণস্বরূপ, কোনও বস্তু, অভ্যন্তরীণ অবস্থার জন্য দৃ fail়তা ব্যর্থ করে, এটি ধ্বংস করা এবং পুনরায় তৈরি করতে সক্ষম হওয়া উচিত, এটি সমস্ত গ্রাহক এবং সরবরাহকারী এই প্রক্রিয়াটিতে অবহিত করে। আরও দৃ concrete়ভাবে, যদি প্রোগ্রামটি রেললাইনগুলির স্যুইচগুলি নিয়ন্ত্রণ করে এবং সিদ্ধান্ত লুপটিতে দৃ an়তা ব্যর্থ করে, তবে এটি জরুরি অবস্থা মডিউল চালাতে পারে, যা সমস্ত জড়িত ট্রেনগুলি থামিয়ে দেয় এবং মূল সিদ্ধান্ত মডিউলটি পুনরায় আরম্ভ করার জন্য অপেক্ষা করে।

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

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

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