ইভেন্ট-চালিত মাইক্রোসার্চিস আর্কিটেকচারে পরিবর্তনগুলি পরিচালনা করা


9

আমি একটি গবেষণা-প্রকল্প করছি যেখানে আমি ইভেন্ট-চালিত মাইক্রোসার্চিস আর্কিটেকচারের পরিবর্তনগুলি পরিচালনা করার বিকল্পগুলি নিয়ে গবেষণা করছি।

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

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

সেক্ষেত্রে আর্কিটেকচারের বিভিন্ন পরিষেবাদির এই ইভেন্টগুলির বিষয়বস্তু (বৈশিষ্ট্য ইত্যাদি) সম্পর্কে "চুক্তি" থাকা দরকার। সুতরাং পরিষেবাদির এই ইভেন্টগুলির "স্বচ্ছলভাবে মিলিত নির্ভরতা" রয়েছে

আমার প্রশ্ন: আমরা কীভাবে এই ইভেন্টগুলির পরিবর্তনগুলি পরিচালনা করতে পারি?

সুতরাং, যাক, পরিষেবা এ অ্যাপ্লিকেশনটিতে নতুন ব্যবহারকারীদের নিবন্ধন করে। সুতরাং এটি একটি "" ব্যবহারকারী নিবন্ধিত "ইভেন্ট প্রেরণ করে Service পরিষেবা বি সেই ইভেন্টটি তুলে নিয়ে এটি প্রক্রিয়া করে But "ব্যবহারকারী নিবন্ধিত" ইভেন্টে যুক্ত করা হয়েছে।

আমরা কীভাবে এটি নিশ্চিত করতে পারি যে পরিষেবা বি পুনরায় পরিকল্পনা ছাড়াই অতিরিক্ত ইভেন্টের সাথে একই ইভেন্টটিকে পিকআপ করতে পারে?

এবং এই সমস্যাটির কাছে যাওয়ার আরও কী কী উপায় আছে তবে এই ইভেন্টগুলির সংস্করণ করা যাবে?


আপনার বার্তাগুলি কোন ফর্ম্যাট, বা এটি এমন কোনও ডিজাইন যা আপনি ডিজাইন করতে পারেন? কিছু বার্তা বিন্যাস optionচ্ছিক বৈশিষ্ট্যগুলির জন্য অনুমতি দেয়। পাঠকের বাস্তবায়নের উপর নির্ভর করে আপনি সমস্ত পাঠককে আপডেট করার প্রয়োজন ছাড়াই alচ্ছিক বৈশিষ্ট্যগুলি যুক্ত করতে পারেন।
থমাসের মালিক

আমি আমার বার্তাগুলির জন্য ব্যবহার করার জন্য একটি ফর্ম্যাট বেছে নিতে মুক্ত। আমি মনে করি JSON ব্যবহার করা সবচেয়ে ভাল উপায়। এই গুরুত্বপূর্ণ যে এই বিভিন্ন পরিষেবাগুলি বিভিন্ন ভাষায় নির্মিত। এটি XML বা JSON এর মতো সাধারণ ফর্ম্যাট কেন প্রয়োজনীয় ts
সিজেন্স

উত্তর:


1

ইভেন্টগুলি কী পরিবর্তিত হয়েছে সে সম্পর্কে নয়। তারা যখন কিছু পরিবর্তিত হয়েছে তখন're

আমি পরিবর্তিত সামগ্রীগুলি থেকে পুরোপুরি ডিউপলড একটি ইভেন্ট সিস্টেম তৈরি করতে পারি। এইভাবে আমি কোনও ইভেন্ট থেকে যা শিখি তা হ'ল কোনও বিষয় আপডেট হয়েছে updated যদি আমি এমনকি যদি যত্ন করি যে অবজেক্টটি আপডেট হয়েছে তবে আমি কী জানি যে কীভাবে কীভাবে সেই অবজেক্টের সাথে কথা বলতে হবে তা জিজ্ঞাসা করতে গিয়ে কী পরিবর্তন হয়েছে তা জিজ্ঞাসা করব।

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

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

এই বিড়ালটির ত্বকের অন্যান্য অনেকগুলি উপায় তবে আমি এক্ষেত্রে ঠিক কাজটি করেছি।


এটি কি নাটকীয়ভাবে পরিষেবাগুলির মধ্যে ট্র্যাফিক বৃদ্ধি করবে? প্রশ্নের উদাহরণটি ব্যবহার করে একটি UserRegisteredইভেন্ট, যদি এমন কোনও ইভেন্ট থাকে যা ব্যবহারকারীর সম্পর্কে তথ্য না রাখে তবে বাসে 1 টি প্রকাশিত বার্তা এবং তারপরে interested আগ্রহী পরিষেবাদির সংখ্যা the ব্যবহারকারীর পরিষেবা বা প্রকাশিত বার্তাগুলির জন্য অনুরোধ থাকবে বাসে তারপরে, বিভিন্ন মাপের interested আগ্রহী পরিষেবাদির সংখ্যা} বার্তা থাকবে। যদিও আমি মনে করি এটি সম্ভবত কাগজে একটি ক্লিনার ডিজাইন, যদি পারফরম্যান্সটি উদ্বেগজনক হয় তবে এটি কোনও অ-তুচ্ছ সিস্টেমে বিশেষত একটি নেটওয়ার্কের মধ্যে ভেঙে যায়।
থমাসের মালিক

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

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

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

1

এনএসওয়ারবুসের মতো ফ্রেমওয়ার্কগুলি পলিমারফিক ম্যাসেজ প্রেরণের সাথে ইভেন্টের সংস্করণ ব্যবহার করে এটি পরিচালনা করে।

উদাহরণস্বরূপ, পরিষেবাদি A এর সংস্করণ 1 আইউসাররেজিস্টার্ড_ভি 1 হিসাবে একটি ইভেন্ট প্রকাশ করতে পারে। যখন সার্ভিস একটি সংস্করণ 1.1 এর অতিরিক্ত ক্ষেত্র অন্তর্ভুক্ত করা দরকার তখন এটি ইন্টারফেস IUserRegmitted_v1_1 ঘোষণা করতে পারে, যা IUserRegmitted_v1 থেকে উত্তরাধিকারী হওয়ার পাশাপাশি কিছু অতিরিক্ত ক্ষেত্র ঘোষণা করবে।

সার্ভিস এ যখন কোনও আইউসার-রেজিস্টার্ড_ভ1_1 ইভেন্ট প্রকাশ করে, এনএসওয়ারবুস সমস্ত শেষ পয়েন্টগুলিতে বার্তা প্রেরণ করবে যা আইইউসরআরজিস্টার্ড_ভি 1 বা আইইউসাররেজিস্টার্ড_ভ1_1 হ্যান্ডেল করে।


0

বর্ধিত উন্নতি

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

রক কঠিন

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

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

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


-1

@ ক্যান্ডিওড অ্যারেঞ্জ এক্সএমএল এর মতো এক্সটেনসিবল ডেটা ফর্ম্যাট সম্পর্কিত তার নিজের উত্তরের মন্তব্যে একটি বৈধ পয়েন্ট দেয়।

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

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

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


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