গ্রাহক / প্রযোজক এবং পর্যবেক্ষক / পর্যবেক্ষনের মধ্যে পার্থক্য


15

আমি একটি অ্যাপ্লিকেশন ডিজাইনে কাজ করছি যা তিনটি অংশ নিয়ে গঠিত:

  • একটি একক থ্রেড যা কিছু নির্দিষ্ট ঘটনার জন্য নজর রাখে (ফাইল তৈরি, বাহ্যিক অনুরোধ ইত্যাদি)
  • এন কর্মীদের থ্রেডগুলি যা এই ইভেন্টগুলিতে প্রক্রিয়া করে তাদের প্রতিক্রিয়া জানায় (প্রতিটি কর্মী একক ইভেন্ট প্রসেস করে এবং গ্রাস করে এবং প্রসেসিং পরিবর্তনশীল সময় নিতে পারে)
  • এমন একটি নিয়ামক যা এই থ্রেডগুলি পরিচালনা করে এবং ত্রুটি পরিচালনা করে (থ্রেডগুলি পুনরায় চালু করা, ফলাফলগুলি লগ করা)

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

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

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

উভয় পদ্ধতির শেষ ফলাফলগুলি সমান, তবে তাদের প্রত্যেকেরই সামান্য পার্থক্য রয়েছে:

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

সারি কৌশলটি প্রসারিত করা সহজ বলে মনে হচ্ছে, উদাহরণস্বরূপ একের পরিবর্তে একাধিক প্রযোজক যুক্ত করা সহজসাধ্য এবং কোনও পরিবর্তনের প্রয়োজন হয় না। ক্ষতিটি হ'ল সমস্ত থ্রেড অনির্দিষ্টকালের জন্য চলবে, এমনকি কোনও কাজ না করেও এবং ত্রুটি / ফলাফল হ্যান্ডলিং প্রথম সমাধানের মতো মার্জিত দেখাচ্ছে না।

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

উত্তর:


10

আপনি আপনার নিজের প্রশ্নের উত্তর দিতে বেশ কাছাকাছি। :)

পর্যবেক্ষণযোগ্য / পর্যবেক্ষক প্যাটার্নে (ফ্লিপটি নোট করুন), তিনটি বিষয় মনে রাখা উচিত:

  1. সাধারণত, পরিবর্তনের বিজ্ঞপ্তি অর্থাত্ 'পে-লোড' পর্যবেক্ষণযোগ্য।
  2. পর্যবেক্ষণযোগ্য বিদ্যমান
  3. পর্যবেক্ষকদের অবশ্যই বিদ্যমান পর্যবেক্ষণযোগ্যদের সাথে পরিচিত হতে হবে (অন্যথায় তাদের পর্যবেক্ষণ করার মতো কিছুই নেই)।

এই বিষয়গুলিকে একত্রিত করে, যা বোঝানো হয়েছে তা পর্যবেক্ষকরা জানেন যে এটির প্রবাহ উপাদানগুলি, অর্থাত্ পর্যবেক্ষকরা কী। উপাত্ত প্রবাহ নিরীক্ষণযোগ্য থেকে পর্যবেক্ষণ করা হয় - পর্যবেক্ষকরা যা পর্যবেক্ষণ করছেন কেবল তার দ্বারা 'লাইভ অ্যান্ড ডাই' থাকে।

প্রযোজক / গ্রাহক প্যাটার্নে আপনি একটি খুব আলাদা ইন্টারঅ্যাকশন পাবেন:

  1. সাধারণত, পে-লোড উত্পাদকের উত্পাদন করার জন্য এটি স্বাধীনভাবে বিদ্যমান।
  2. প্রযোজকরা জানেন না কীভাবে বা কখন গ্রাহকরা সক্রিয় আছেন।
  3. ভোক্তাদের পে-লোডের নির্মাতাকে জানার দরকার নেই।

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

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

এগুলি আপনার আবেদনের সাথে ফিট করার জন্য:

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

অতএব, আপনার প্রশ্নের সরাসরি উত্তর দেওয়ার জন্য: আপনি যদি নিজের দেখার থ্রেড এবং আপনার নিয়ামকের মধ্যে কিছুটা পৃথকীকরণ বজায় রাখতে চান যাতে আপনি সেগুলি স্বাধীনভাবে পরিচালনা করতে পারেন তবে আপনার প্রযোজক / গ্রাহক প্যাটার্নের দিকে ঝুঁকতে হবে।


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

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