একটি "বার্তা পাসিং" সিস্টেমের দক্ষতা বনাম একটি "ইভেন্ট ভিত্তিক" সিস্টেম


27

আমার প্রশ্নটি কিছুটা অশিক্ষিত দৃষ্টিকোণ থেকে আসছে।

" ইভেন্ট ভিত্তিক " সিস্টেম বনাম " বার্তা পাসিং " সিস্টেমের আপেক্ষিক গুণাবলী কী ।

কেন একজন একে অপরকে বেছে নেবে? তাদের শক্তি এবং দুর্বলতা কি কি?

আমি কেবল "তত্ত্বে" নয়, "অনুশীলনে "ও জানতে চাই।

সম্পাদনা করুন:

নির্দিষ্ট সমস্যা :

আমি প্লাগ-সক্ষম উপাদানগুলির সিস্টেমটি তৈরি করতে চাই যা ক্ষুদ্রতর পরিসেবা হিসাবে আচরণ করে (প্রতিটি কিছু ছোট কাজ সম্পাদন করে এবং কিছু তথ্য সরবরাহ করে)।

পরিষেবাগুলি করতে পারে:

  • স্তরযুক্ত হোন যাতে একটি পরিষেবার আউটপুট অন্যগুলির ইনপুটগুলির হিসাবে কাজ করতে পারে
  • পূর্ববর্তী বাক্যে বর্ণিত নির্দিষ্ট ইনপুট-আউটপুট সম্পর্ক ব্যতিরেকে একটি পরিষেবা অন্যের দ্বারা অন্তর্ভুক্ত থাকতে পারে যাতে নিয়ন্ত্রণের স্তরক্রম থাকে

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

এটি যথেষ্ট না হলে আমি আরও বিশদ সরবরাহ করতে পারি।

আরও কিছু কিছু দেখার পরে। এটি এবং এটি সম্ভবত আমার পরিস্থিতি আরও ভালভাবে বর্ণনা করে।

দেখে মনে হচ্ছে এটি আমার পরিস্থিতির জন্য উপযুক্ত হতে পারে: http://akka.io/


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

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

1
যেমনটি টেলাস্টিন মন্তব্য করেছেন - "বার্তা পাঠানো" এবং "ইভেন্ট ভিত্তিক" পারস্পরিক একচেটিয়া নয়।
ওদে

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

উত্তর:


17

আমার অভিজ্ঞতায় কেবলমাত্র নির্দিষ্ট পার্থক্যটি হ'ল বেশিরভাগ বার্তা পাসিং সিস্টেমে, বার্তা প্রেরক সচেতন (এবং প্রায়শই ঘোষণা করেন) বার্তাটি প্রাপক কে।

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

স্পষ্টতই থ্রেডিংয়ের ঘটনা রয়েছে যা টেলাস্টিন সি # এর ইভেন্টগুলির বাস্তবায়নের সাথে উল্লেখ করেছেন, তবে আপনি এখনও নিজের পাব / সাব মডেল তৈরি করতে পারেন যা বিভিন্ন থ্রেডে কার্যকর করে।


21

এটি আপেল এবং কমলা:

ইভেন্ট চালিত সিস্টেম বার্তা হিসাবে প্রেরিত ইভেন্টগুলিতে প্রতিক্রিয়া জানাতে পারে ( ইভেন্টগুলি উত্থাপিত হওয়ার সাথে সাথে এই প্রসঙ্গে থাকা বার্তাগুলি অপরিবর্তনীয় অ-ভাগ করা ডেটা বোঝানো হয় )। এটি একটি নিখুঁত স্থাপত্য নকশা।

একটি বার্তা পাসিং সিস্টেম ম্যাসেজগুলি তৈরি করে এবং পাস করে এমন ইভেন্টগুলির দ্বারা চালিত হতে পারে । এটি খাঁটি বাস্তবায়নের নকশা।

দুটো পারস্পরিক একচেটিয়া নয়।

উদাহরণ: আপনি যে কোনও ভাষায় ইভেন্ট চালিত নকশা প্রয়োগ করতে পারেন যা এরলংয়ের মতো একটি বার্তা উত্তীর্ণ পরিবেশও হতে পারে ।


11

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

যেহেতু অনেক লোক ইতিমধ্যে "বার্তা পাসিং" এবং "ইভেন্ট ভিত্তিক" অস্পষ্টতা এড়ানোর পক্ষে যথেষ্ট ভাল শর্ত নয়।

"ইভেন্ট ভিত্তিক" সিস্টেম বনাম "বার্তা পাসিং" সিস্টেমের আপেক্ষিক গুণাবলী কী।

বার্তা পাসিং

আমি অনুমান করেই শুরু করতে যাচ্ছি যে আপনি যখন "বার্তা প্রেরণ" সিস্টেমটি বলবেন, আপনি এমন একটি সিস্টেমের বিষয়ে কথা বলছেন যা একটি অবজেক্ট একটি নির্দিষ্ট অন্যান্য বস্তুর জন্য একটি বার্তা ব্যয় করে। যখন আমি এই দৃষ্টান্তের উপর ভিত্তি করে একটি সিস্টেমের কথা ভাবি, আমি আরও সাধারণত এমন একটি সিস্টেমের কথা ভাবি যেখানে কোনও জিনিস যা সনাক্ত করে এমন একটি অবজেক্ট জানে যে কোন কিছুর বিষয়ে বলা দরকার needs (আমি এটি কীভাবে জানি তা নির্দিষ্ট করে দিচ্ছি না, এটি কেবল এটি জানে))

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

আপনি যদি কোনও ব্যাঙ্কিং অ্যাপ্লিকেশন লিখছেন তবে একজন আশা করবেন যে আপনি সত্যিই আপনি জানতে চান আপনি আপনার লেনদেন কার কাছে পাঠাচ্ছেন এবং কারা আসছে।

ইভেন্ট ভিত্তিক

আমি বিশ্বাস করি যে অন্য সিস্টেমটি আপনি যখন "ইভেন্ট ভিত্তিক" সিস্টেমটি বলার বিষয়ে ভাবছেন তখন এমন কোনও বিষয় যেখানে কোনও (যদি কেউ) এর প্রতিক্রিয়া জানবে না জেনে কোনও বস্তু একটি "ইভেন্ট" উত্থাপন করে।

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

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

আমি এটি ব্যবহার করেছিলাম এমন একটি সিস্টেম হ'ল অ্যাপ্লিকেশনটি আসলে গতিসম্পন্ন কনফিগার করা মডিউলগুলি (প্লাগইনগুলি) যা রান সময় লোড হয়েছিল of যখন কোনও মডিউল লোড করা হত, এটি তার যত্ন নেওয়া ইভেন্টগুলির জন্য নিবন্ধভুক্ত করবে। ফলাফলটি এমন একটি সিস্টেম ছিল যাতে কার্যকারিতা বাড়ানো খুব সহজ ছিল।

উদাহরণস্বরূপ, চলুন শর্তটি একটি উত্থাপিত ইভেন্ট EA বলা যাক যা সাধারণত প্রতিক্রিয়া RA এর কারণ করে। প্রতিক্রিয়া আরএর কারণ হিসাবে তৈরি হওয়া অবজেক্টটি কেবল ইভেন্ট ইএ প্রাপ্তির জন্য নিবন্ধভুক্ত হয়েছিল এবং এটি পৌঁছে যাওয়ার পরে এটিতে অভিনয় করেছিল। এখন, ধরা যাক আমরা EA তে একটি নতুন প্রতিক্রিয়া যুক্ত করতে চাই, যার নাম র‍্যাপার্স called এটি করার জন্য, আমরা কেবলমাত্র একটি নতুন অবজেক্ট যুক্ত করি যা ইএর জন্য সন্ধান করে এবং প্রতিক্রিয়া উত্পন্ন করে তুলবে A_1

এখানে কয়েকটি উদাহরণ দেওয়া হয়েছে (আপনার পরিভাষা ব্যবহার করে):

  • "বার্তা উত্তীর্ণ" : আপনার বস আপনাকে আপনার সময় পত্রক পূরণ করতে বলে।
  • "ইভেন্ট চালিত" : বিভাগ সচিব প্রত্যেককে একটি ইমেল প্রেরণ করে তাদের স্মরণ করিয়ে দেয় যে তাদের সময় পত্রিকা আজই নির্ধারিত due

4
এটি আমাকে স্মরণ করিয়ে দেয় ... মাস শেষ, তাই আমি আমার সময় পত্রটি ভালভাবে পূরণ করতে পারি।
ডেভ নায়

2

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

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

অন্যদিকে ইভেন্ট বার্তাগুলি প্রেরকের / প্রাপকের মধ্যে কোনও আচরণগত মিলন নেই কারণ প্রেরকের কোনও ধারণা নেই যে প্রাপক এই বার্তাটির সাথে কী করবে। এমনকি কেউ এটি ইভেন্টে সদস্যতা পেয়েছে কিনা তাও জানে না ।

আরও কিছু পটভূমির জন্য আপনি এখানে আমার পরিষেবা বাস সাইটটি অনুগ্রহ করে স্বাগত জানাই: http://www.servicebus.co.za


1

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


0

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

বার্তা প্রেরণের ক্ষেত্রে প্রেরককে অবশ্যই প্রাপক নির্দিষ্ট করতে হবে, তবে অন্য কোনও ক্ষেত্রে আপনি কেবল একটি মেলবক্সে একটি বার্তা পোস্ট করতে পারেন এবং যে কেউ এই মেলবক্সে বার্তা শুনতে পারেন, তাই তারা কতটা দৃly়তার সাথে মিলিত হয়েছে তাতে কিছুটা নমনীয়তা রয়েছে। অবশ্যই, আপনার একটি মেলবক্স থাকতে পারে যেখানে চুক্তিটি "এই ইভেন্টটি হওয়ার সাথে সাথে আমি এই মেলবক্সে একটি বার্তা পোস্ট করব will "

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

উইন্ডোজ জিইউআই প্রোগ্রামিং ইত্যাদির মতো ঘটনাগুলি ব্যতীত আমি ব্যক্তিগতভাবে ইভেন্টগুলিকে ছাড়িয়ে যাওয়া বার্তাটি বেছে নেব except


কেবলমাত্র, আমি আমার সি ++ ইভেন্ট সিস্টেমে চক্রের সমস্যাটি (আপনার বই রাখার দুঃস্বপ্ন) সমাধান করেছি দুর্বল_পিটার সংরক্ষণ করে এবং যখনই ইভেন্টটি ডাকা হবে শ্রোতাদের সেট থেকে কোনও এক্সপায়ার্ড () পয়েন্টার পরিষ্কার করে। ইভেন্ট অবজেক্টটি প্রাপক বস্তুর মালিক নয় এবং এই পয়েন্টার শব্দার্থকগুলি এটি পরিষ্কার করে দেয়।
রবিনসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.