ইভেন্ট সোর্সিংয়ে কোনও প্রক্রিয়া পরিচালককে কীভাবে বাস্তবায়ন করা যায়


14

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

বাস্তবায়নটি দেখানোর জন্য এখানে কয়েকটি সিডো কোড রয়েছে

Basket { BasketId; OrderLines; Address; }

// basket events
BasketCreated { BasketId; }
ItemAdded { BasketId; ProductId; Quantity }
AddItemSucceeded { BasketId; ProductId; Quantity }
AddItemRevoked { BasketId; ProductId; Quantity }
ItemRemoved { BasketId; ProductId; Quantity }
CheckedOut { BasketId; Address }

Product { ProductId; Name; Price; }

// product events
ProductReserved { ProductId; Quantity }
ProductReservationFailed { ProductId; Quantity }
ProductReservationCancelled { ProductId; Quantity; }

কমান্ডগুলি অতীত কাল নয় বরং অত্যাবশ্যকীয় নামটি ব্যবহার করে ইভেন্টগুলির সাথে বেশ মিল।

এই মুহূর্তে স্বতন্ত্রভাবে ঠিক এই কাজ। আমি একটি কমান্ড জারি করি AddItemএবং এটি সামগ্রীতে একটি ItemAddedইভেন্ট তৈরি Basketকরে যা এটি 'বাস্কেটবলের' অবস্থার সাথে কী করা দরকার তা করে। একইভাবে, পণ্যের জন্য কমান্ড এবং ইভেন্টগুলি ঠিক কাজ করে।

আমি এখন এটিকে এমন একটি প্রক্রিয়ার সাথে সংযুক্ত করতে চাই যা এরকম কিছু হবে (কমান্ড এবং ঘটনার ক্ষেত্রে):

প্রক্রিয়া পরিচালক নিম্নলিখিত কাজ করবে:

on BasketCreated: CreateShoppingProcess
on ItemAdded: ReserveProduct
on ProductReserved: SucceedAddingItem // does nothing, but needs to be there so that the basket knows it can check out
on ProductReservationFailed: RevokeAddItem
on RemoveItem: CancelProductReservation
on Checkout: CreateOrder // create an order and so on...

আমি যে প্রশ্নগুলির নির্দিষ্ট উত্তর পেতে পারি না সেগুলি হ'ল:

  1. আমার কি প্রক্রিয়া পরিচালককে জেদ করা দরকার? মনে হচ্ছে আমি করি, তবে আমি নিশ্চিত নই
  2. যদি আমি এটি করি, আমার প্রক্রিয়া পরিচালকের জন্য ইভেন্টগুলি সংরক্ষণ করা দরকার। তবে এটি যে ইভেন্টগুলি শুনছে তা সামগ্রিকভাবে আবদ্ধ tied আমি কি তাদের প্রসেস আইডি যুক্ত করব? আমার কি কেবল প্রক্রিয়া পরিচালকের জন্য আলাদা ইভেন্ট আছে? এটি কীভাবে করবেন এবং যতটা সম্ভব ডিআরওয়াই রাখুন
  3. কীভাবে আমি জানব যে ProductReservedইভেন্টগুলি কী ঝুড়ির জন্য রয়েছে? সেগুলিও কী রাখা ঠিক আছে BasketId, বা সেই তথ্য ফাঁস?
  4. আমি কীভাবে ইভেন্টগুলির মধ্যে একটি সম্পর্ক রাখতে পারি, কীভাবে ItemAddedকোন ProductReservedইভেন্টটি তৈরি করেছিল তা আমি কীভাবে জানব ? আমি কি সাথে যেতে পারি EventId? এটি অদ্ভুত বলে মনে হচ্ছে ...
  5. আমি Basketকি সাধারণ সামগ্রিকের পরিবর্তে প্রক্রিয়া পরিচালক হিসাবে প্রয়োগ করব ?

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

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


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

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

উত্তর:


14

রিনাত আবদুলিন ব্যবসায়ের প্রক্রিয়াটিকে বিকশিত করার বিষয়ে কী লিখেছিলেন তা পর্যালোচনা করুন । বিশেষত, দ্রুত পরিবর্তিত পরিবেশে একটি ব্যবসায়িক প্রক্রিয়া বিকাশের জন্য তার সুপারিশটি লক্ষ্য করুন - একটি প্রক্রিয়া পরিচালক একজন "পর্দায় তাকিয়ে থাকা মানুষের" জন্য একটি স্বয়ংক্রিয় প্রতিস্থাপন "কেবল"।

প্রসেস ম্যানেজারের আমার নিজের মানসিক মডেলটি হ'ল এটি একটি ইভেন্টের উত্সাহিত প্রজেকশন যা আপনি মুলতুবি কমান্ডগুলির তালিকার জন্য জিজ্ঞাসা করতে পারেন।

আমার কি প্রক্রিয়া পরিচালককে জেদ করা দরকার? মনে হচ্ছে আমি করি, তবে আমি নিশ্চিত নই

এটি একটি পঠিত মডেল। প্রতিটি সময় আপনার প্রয়োজনের ইতিহাস থেকে প্রক্রিয়া পরিচালককে পুনর্নির্মাণ করতে পারেন; অথবা আপনি এটি আপডেট করে এমন স্ন্যাপশটের মতো আচরণ করতে পারেন।

যদি আমি এটি করি, আমার প্রক্রিয়া পরিচালকের জন্য ইভেন্টগুলি সংরক্ষণ করা দরকার।

না - প্রক্রিয়া পরিচালক একটি পরিচালক । এটি নিজের উপকারী কিছু করে না; পরিবর্তে এটি সমষ্টিগুলিকে কাজ করতে বলে (যেমন, রেকর্ডের বইটিতে পরিবর্তন আনুন)।

প্রোডাক্ট সংরক্ষিত ইভেন্টগুলি কোন ঝুড়ির জন্য রয়েছে তা আমি কীভাবে জানতে পারি? এগুলি সম্পর্কেও কি একটি বাস্কেটবল আইড রাখা ঠিক আছে, বা সেই তথ্য ফাঁস করার বিষয়টি?

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

আমি কীভাবে ইভেন্টগুলির মধ্যে একটি সম্পর্ক রাখব, কীভাবে আমি জানব যে কোন আইটেম অ্যাডেড কোন পণ্য রক্ষিত ইভেন্ট তৈরি করেছে?

বার্তা মেটা ডেটা রয়েছে - বিশেষ করে, আপনি একটি causationIdentifier অন্তর্ভুক্ত করতে পারে (তাই আপনাকে শনাক্ত করতে পারে, যা উত্পাদিত কোন ইভেন্ট কমান্ডের) এবং একটি correlationIdentifier , সাধারণত কথোপকথন ট্র্যাক করতে।

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

আমি কি সাধারণ সামগ্রিকের পরিবর্তে প্রক্রিয়া পরিচালক হিসাবে বাস্কেটকে বাস্তবায়ন করব?

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

পরিচালকদের সমষ্টি পুনরুদ্ধার করা উচিত?

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

(আমি বলুন "সত্যিই" কারণ সমষ্টিগত অস্পষ্টভাবে যথেষ্ট এটি সম্পূর্ণ ভুল দাবি করতে পর্যবেক্ষিত ঘটনা সেই তালিকাটি নয় সংজ্ঞায়িত করা হয় হয় একটি "সমষ্টিগত" পার্থক্য বাস্তবায়ন চেয়ে বেশি শব্দার্থিক আছে -। আমরা লোড প্রক্রিয়া রাষ্ট্র এবং তারপর কি বার্তা সিদ্ধান্ত নেন ডোমেন রাষ্ট্রের জন্য দায়ী সিস্টেমের অংশগুলিতে প্রেরণ করুন hand এখানে কিছুটা হাত জোড় চলছে)

সুতরাং প্রধানমন্ত্রীর পক্ষে অন্য এক ধরণের রাজ্য পরিচালনার প্রয়োজন নেই কারণ এটি কেবল স্টাফ লাইভ করার জন্যই দায়ী এবং পুনর্নির্মাণের সময় কখনও নয়?

একেবারেই নয় - রাষ্ট্র পরিচালন কোনও করণীয় নয়, এটি-এর-র রক্ষক ট্র্যাকার। এমন পরিস্থিতিতে যেখানে প্রক্রিয়া ব্যবস্থার কোনও সংকেত নির্গত হয় না, আপনি এটিকে বিশ্বের সাথে জড় সংযোগ দিন। অন্য কথায়, dispatch(command)একটি অপ্স নেই।


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

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

1
আমি @ ইভানপিন্টারের প্রথম মন্তব্যের একটি উত্তর পছন্দ করব; পরিচালকদের সমষ্টি পুনরুদ্ধার করা উচিত? এটি প্রক্রিয়াজাত ইভেন্টগুলির উপর ভিত্তি করে তাদের নিজস্ব তৈরি করা উচিত? সেক্ষেত্রে এটি ইভেন্ট হ্যান্ডলারদের পার্শ্ব-প্রতিক্রিয়া মুক্ত হওয়া দরকার, তাই না?
জেফ

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

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

2

আপনি যা সন্ধান করছেন তাতে একটি "সাগা" নামে একটি প্যাটার্ন রয়েছে যা মূলত একটি প্রক্রিয়া পরিচালক।

সাগা দীর্ঘ দীর্ঘ চলমান প্রক্রিয়াগুলির জন্যও উপযুক্ত, কারণ এটি সম্পর্কযুক্ত কমান্ডগুলির মধ্যে রাষ্ট্র বজায় রাখতে পারে।

এখানে সাগাস সম্পর্কে একটি দুর্দান্ত নিবন্ধ

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