প্রদত্ত সার্ভিস এ (সিএমএস) যা একটি মডেলকে নিয়ন্ত্রণ করে (পণ্য, আসুন এটির একমাত্র ক্ষেত্রগুলি আইডি, শিরোনাম, মূল্য) এবং পরিষেবা বি (শিপিং) এবং সি (ইমেল) যা দেখতে হবে তা প্রদত্ত মডেলটি প্রদর্শন করতে হবে ইভেন্ট সোর্সিং পদ্ধতির সেই পরিষেবাগুলিতে প্রদত্ত মডেল তথ্যগুলিকে সিঙ্ক্রোনাইজ করার জন্য? আসুন ধরে নেওয়া যাক পণ্য ক্যাটালগ খুব কমই পরিবর্তিত হয় (তবে পরিবর্তিত হয়) এবং এমন অ্যাডমিন রয়েছে যা শিপমেন্ট এবং ইমেলের ডেটা খুব ঘন ঘন অ্যাক্সেস করতে পারে (উদাহরণস্বরূপ কার্যকারিতা: বি: display titles of products the order contained
এবং সি display content of email about shipping that is going to be sent
:)। প্রতিটি পরিষেবার নিজস্ব ডিবি রয়েছে।
সমাধান ঘ
ইভেন্টের মধ্যে পণ্য সম্পর্কিত সমস্ত প্রয়োজনীয় তথ্য প্রেরণ করুন - এর অর্থ নিম্নলিখিত কাঠামোর জন্য order_placed
:
{
order_id: [guid],
product: {
id: [guid],
title: 'Foo',
price: 1000
}
}
পরিষেবাতে বি এবং সি পণ্য সম্পর্কিত তথ্য টেবিলের product
জেএসএন বৈশিষ্ট্যে সংরক্ষণ করা হয়orders
যেমন, প্রয়োজনীয় তথ্য প্রদর্শন করতে কেবল ইভেন্ট থেকে পুনরুদ্ধার করা ডেটা ব্যবহৃত হয়
সমস্যা : অন্যান্য তথ্য বি এবং সিতে উপস্থাপন করা দরকার তার উপর নির্ভর করে ইভেন্টে ডেটার পরিমাণ বাড়তে পারে। বি এবং সি পণ্য সম্পর্কে একই তথ্য না প্রয়োজন হতে পারে, তবে ইভেন্টটি উভয়ই থাকতে হবে (যদি না আমরা ইভেন্টগুলিকে দুটিতে আলাদা করি)। প্রদত্ত ডেটা যদি প্রদত্ত ইভেন্টের মধ্যে উপস্থিত না থাকে তবে কোডটি এটি ব্যবহার করতে পারে না - আমরা যদি বি এবং সিতে বিদ্যমান অর্ডারের জন্য প্রদত্ত পণ্যটিতে রঙিন বিকল্প যুক্ত করব তবে প্রদত্ত পণ্য বর্ণহীন হবে যদি না আমরা ইভেন্টগুলি আপডেট না করি এবং তারপরে পুনরায় চালিত না করি ।
সমাধান 2
ইভেন্টের মধ্যে কেবলমাত্র পণ্য নির্দেশিকা প্রেরণ করুন - এর অর্থ নিম্নলিখিত কাঠামোর জন্য order_placed
:
{
order_id: [guid],
product_id: [guid]
}
পরিষেবাগুলিতে বি এবং সি পণ্য সম্পর্কিত তথ্য টেবিলের product_id
অ্যাট্রিবিউটে সংরক্ষণ করা হয়orders
প্রোডাক্ট তথ্য বি এবং সি পরিষেবাগুলি দ্বারা পুনরুদ্ধার করা হয় যখন A/product/[guid]
এন্ডপয়েন্টে এপিআই কল করা প্রয়োজন হয়
সমস্যা : এটি বি এবং সি এ এর উপর নির্ভর করে (সর্বদা)। যদি এ-তে পণ্যের স্কিমা পরিবর্তন হয় তবে তাদের উপর নির্ভরশীল সমস্ত পরিষেবাতে পরিবর্তনগুলি করতে হবে (হঠাৎ)
সমাধান 3
ইভেন্টের মধ্যে কেবলমাত্র পণ্য নির্দেশিকা প্রেরণ করুন - এর অর্থ অর্ডার_প্লেডের জন্য নিম্নলিখিত কাঠামো:
{
order_id: [guid],
product_id: [guid]
}
পরিষেবাগুলিতে বি এবং সি পণ্যের তথ্য products
সারণীতে সংরক্ষণ করা হয় ; এখনও আছে product_id
উপর orders
টেবিল, কিন্তু এর রেপ্লিকেশন এর products
এ, বি এবং C মধ্যে ডেটা; বি এবং সিতে এ সম্পর্কিত পণ্য সম্পর্কে বিভিন্ন তথ্য থাকতে পারে
পরিষেবাদি বি এবং সি তৈরি করা হয় এবং যখন A/product
আপডেটগুলি এন্ডপয়েন্টে কল করে (যে সমস্ত পণ্যগুলির প্রয়োজনীয় তথ্য প্রদর্শন করে) বা এ-তে সরাসরি ডিবি অ্যাক্সেস করে এবং প্রয়োজনীয় পণ্য সম্পর্কিত তথ্যের অনুলিপি করে যখন পণ্যগুলির তথ্য পরিবর্তন করা হয় তখন পণ্যের তথ্য বীজযুক্ত হয় Product সেবা।
সমস্যা : এটি বি এবং সি এ এর উপর নির্ভরশীল করে (যখন বপন করার সময়)। যদি এ-তে পণ্যের স্কিমা পরিবর্তন হয় তবে তাদের উপর নির্ভরশীল সমস্ত পরিষেবাগুলিতে (বীজ বপন করার সময়) পরিবর্তনগুলি করতে হবে
আমার বোধগম্যতা থেকে, সমাধানটি সমাধানের সাথে সঠিক পন্থাটি হবে 1 এবং কোনও নির্দিষ্ট যুক্তি অনুসারে ইভেন্টের ইতিহাস আপডেট করুন (যদি পণ্য ক্যাটালগটি পরিবর্তিত হয় না এবং আমরা প্রদর্শিত হতে রঙ যুক্ত করতে চাই, তবে বর্তমান অবস্থা পাওয়ার জন্য আমরা নিরাপদে ইতিহাস আপডেট করতে পারি প্রোডাক্টগুলির এবং ইভেন্টগুলির মধ্যে নিখোঁজ ডেটা পূরণ করুন) বা প্রদত্ত ডেটার অস্তিত্বের জন্য প্রয়োজনীয়তা সরবরাহ করুন (যদি পণ্য ক্যাটালগ পরিবর্তিত হয় এবং আমরা প্রদর্শিত হতে রঙ যুক্ত করতে চাই, তবে আমরা নিশ্চিত হতে পারি না যে পূর্ববর্তী প্রদত্ত পণ্যের সময়ে সেই সময়ে ছিল কিনা? একটি রঙ ছিল বা না - আমরা ধরে নিতে পারি যে পূর্ববর্তী ক্যাটালগের সমস্ত পণ্যই কালো ছিল এবং ইভেন্ট বা কোড আপডেট করে এটি সরবরাহ করবে)
updating event history
আমার অর্থ হ'ল ধারাবাহিক ইভেন্টের স্কিমা বজায় রাখার জন্য সমস্ত ইভেন্টের মধ্য দিয়ে যান, একটি প্রবাহ (v1) থেকে অন্য স্ট্রিমের (অনি) থেকে অনুলিপি করুন।
display image at the point when purchase was made
) বা করতে পারে না (উদ্দেশ্যটির প্রতিনিধিত্ব করে display current image as it within catalog
)
updating event history
- ঘটনা গুন ঘটনা ইতিহাসে সত্যের আপনার উৎস এবং কখনও পরিবর্তন করা উচিত কিন্তু শুধুমাত্র এগিয়ে যেতে। ইভেন্টগুলি পরিবর্তিত হলে আপনি ইভেন্টের সংস্করণ বা অনুরূপ সমাধানগুলি ব্যবহার করতে পারেন তবে সময়গুলিতে একটি নির্দিষ্ট পয়েন্ট পর্যন্ত আপনার ইভেন্টগুলি পুনরায় চালনার সময় ডেটার অবস্থা যেমন হওয়া উচিত ততক্ষণে।