cqrs - নৎস - দ্য মেটামরফোসিস pdf



কাফকা ব্যবহার করে একটি(সিকিউআরএস) ইভেন্টস্টোর হিসাবে। ভাল ধারণা? (4)

যদিও আমি আগে Kafka জুড়ে এসেছি, আমি সম্প্রতি বুঝতে পেরেছি যে কাফকা সম্ভবত CQRS , eventstore (এর ভিত্তিতে) ব্যবহার করা যেতে পারে।

কাফকা সমর্থন করে এমন প্রধান পয়েন্টগুলির মধ্যে একটি:

  • ঘটনা ক্যাপচার / স্টোরেজ, অবশ্যই সব এইচ।
  • পাব / সাব আর্কিটেকচার
  • ইভেন্টলগটি পুনরায় চালানোর ক্ষমতা যা সত্যিকারের পরে নতুন গ্রাহকদের সিস্টেমের সাথে নিবন্ধন করার ক্ষমতা দেয়।

অবশ্যই আমি CQRS / Event Sourcing এর মধ্যে 100% সচেতন নই তবে এটি কোনও ইভেন্টস্টোর হওয়া উচিত তা দেখতে খুব সুন্দর বলে মনে হয়। মজার জিনিস হল: আমি আসলেই কাফকা ইভেন্ট ইভেন্টের মতো ব্যবহার করা সম্পর্কে অনেক কিছুই খুঁজে পাচ্ছি না, তাই সম্ভবত আমার কিছু হারিয়ে যেতে হবে।

তাই, কাফকা থেকে কোনও অনুপস্থিতিতে এটি একটি ভাল ইভেন্টস্টোর হতে পারে? এটা কাজ করবে? এটা উত্পাদন ব্যবহার করে? অন্তর্দৃষ্টি, লিঙ্ক, ইত্যাদি আগ্রহী।

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


Answer #1

আপনি ইভেন্টের দোকান হিসাবে কাফকা ব্যবহার করতে পারেন, তবে আমি তা করার প্রস্তাব দিই না, যদিও এটি ভালো পছন্দ বলে মনে হতে পারে:

  • কাফকা অন্তত একবার প্রদানের গ্যারান্টি দেয় এবং ইভেন্ট স্টোরে অনুলিপি থাকে যা সরানো যাবে না। আপডেট: এখানে আপনি পড়তে পারেন কেন কাফকা এবং এটি অবশেষে এই আচরণটি কীভাবে অর্জন করতে হয় সে সম্পর্কে কিছু সর্বশেষ খবর: https://www.confluent.io/blog/exactly-once-semantics-are-possible-heres-how-apache-kafka-does-it/
  • অপরিবর্তনীয়তার কারণে, অ্যাপ্লিকেশনটি বিকাশের সময় ইভেন্ট স্টোরের ম্যানিপুলেশন করার কোনও উপায় নেই এবং ইভেন্টগুলি রূপান্তরিত করতে হবে (উত্সাহ দেওয়ার মতো অবশ্যই অবশ্যই পদ্ধতি আছে তবে ...)। একবার বলার অপেক্ষা রাখে না যে আপনি কখনই ইভেন্টগুলি রুপান্তরিত করতে পারবেন না, তবে এটি সঠিক অনুমান নয়, এমন পরিস্থিতি হতে পারে যেখানে আপনি মূল ব্যাকআপ করেন তবে আপনি তাদের সর্বশেষ সংস্করণগুলিতে আপগ্রেড করুন। যে ইভেন্ট চালিত আর্কিটেকচারে বৈধ প্রয়োজন।
  • কোনও স্থান সত্ত্বা / সমষ্টি এবং স্নাতকের স্ন্যাপশটগুলি ধীর এবং ধীর হয়ে উঠবে না। স্ন্যাপশট তৈরি করা দীর্ঘমেয়াদী দৃষ্টিকোণ থেকে ইভেন্ট স্টোরের জন্য বৈশিষ্ট্যযুক্ত হওয়া আবশ্যক।
  • দেওয়া কাফকা পার্টিশনগুলি বিতরণ করা হয় এবং তারা ডেটাবেসের সাথে তুলনা করা এবং ব্যাকআপ তুলনা করা কঠিন। ডাটাবেস সহজভাবে সহজ :-)

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

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

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

সম্ভাব্য সমস্যা সম্পর্কে আরও আবিষ্কার করতে eventuate.io মাইক্রোসফেস ওপেন সোর্স ফ্রেমওয়ার্ক দেখুন: http://eventuate.io/

8 ফেব্রুয়ারী ২018 তারিখ হিসাবে আপডেট করুন

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

  1. স্প্রিং ব্যবহার করবেন না - এটি দুর্দান্ত (আমি নিজে এটি ব্যবহার করি), তবে একই সময়ে ভারী এবং ধীর। এবং এটি মাইক্রোসফার প্ল্যাটফর্ম এ সব নয়। এটি "ঠিক" একটি কাঠামো যা আপনাকে বাস্তবায়ন করতে সহায়তা করে (এর পিছনে অনেক কাজ ..)। অন্যান্য কাঠামোগুলি "শুধু" লাইটওয়েট REST বা JPA বা ভিন্নভাবে ফ্রেমওয়ার্কগুলি। আমি সম্ভবত সর্বোত্তম ইন-ক্লাস ওপেন সোর্স সম্পূর্ণ মাইক্রোসফার প্ল্যাটফর্ম উপলব্ধ যা বিশুদ্ধ জাভা শিকড়গুলিতে ফিরে আসছে: https://github.com/networknt

আপনি কর্মক্ষমতা সম্পর্কে আশ্চর্য, আপনি বিদ্যমান বেঞ্চমার্ক স্যুট সঙ্গে নিজেকে তুলনা করতে পারেন। https://github.com/networknt/microservices-framework-benchmark

  1. সব সময়ে কাফকা ব্যবহার করবেন না :-)) এটি অর্ধেক তামাশা। আমার মানে কাফকা দুর্দান্ত হলেও এটি অন্য ব্রোকার কেন্দ্রিক ব্যবস্থা। আমি ভবিষ্যতে ব্রোকার কম বার্তা সিস্টেমের মধ্যে মনে হয়। আপনি অবাক হবেন তবে কাফকা সিস্টেমগুলি দ্রুততর রয়েছে :-), অবশ্যই আপনাকে নিম্ন স্তরে নেমে যেতে হবে। ক্রনিকল দেখুন।

  2. ইভেন্ট স্টোরের জন্য আমি টাইমসক্যালডিবি নামে উচ্চতর পোস্টগ্রাস্কএল এক্সটেনশনের সুপারিশ করি, যা উচ্চমানের সময়সীমার ডেটা প্রসেসিং (ঘটনাগুলি টাইমারের) -এর উপর বড় ফোকাসে মনোযোগ দেয়। অবশ্যই CQRS, ইভেন্ট সোর্সিং (রিপ্লে, ইত্যাদি বৈশিষ্ট্যগুলি) আলোর স্টোরেজ হিসাবে পোস্টগ্রেসগুলি ব্যবহার করে এমন বাক্সের আলোকে light4j ফ্রেমওয়ার্কে নির্মিত হয়।

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


Answer #2

আমি কাফকার মূল লেখকদের মধ্যে একজন। ইভেন্ট sourcing জন্য একটি লগ হিসাবে কাফকা খুব ভাল কাজ করবে। এটি ত্রুটি-সহনশীল, বিশাল তথ্য মাপের স্কেল এবং এটি বিভাজন মডেলের মধ্যে নির্মিত।

আমরা LinkedIn এ এই ফর্মের বিভিন্ন ব্যবহারের ক্ষেত্রে এটি ব্যবহার করি। উদাহরণস্বরূপ আমাদের ওপেন সোর্স স্ট্রিম প্রসেসিং সিস্টেম, অ্যাপাচি সামজা, ইভেন্ট সোর্সিংয়ের জন্য অন্তর্নির্মিত সহায়তায় আসে।

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

আমি here কাফকা ব্যবহারের এই শৈলী সম্পর্কে কিছুটা লিখেছি।


Answer #3

হ্যাঁ, আপনি একটি ইভেন্ট দোকান হিসাবে কাফকা ব্যবহার করতে পারেন। এটি বেশ ভাল কাজ করে, বিশেষ করে কাফকা স্ট্রিমের প্রবর্তনের সাথে, যা আপনার ইভেন্টগুলিতে প্রক্রিয়া করার জন্য কাফকা-নেটিভ উপায় সরবরাহ করে যা আপনি প্রশ্ন করতে পারেন

সংক্রান্ত:

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

এই চতুর হতে পারে। আমি এখানে বিস্তারিতভাবে ঢেকেছি: https://.com/a/48482974/741970


Answer #4

আমি এই QA ফিরে আসছে। এবং আমি বিদ্যমান উত্তর যথেষ্ট nuanced খুঁজে পাইনি, তাই আমি এই এক যোগ করছি।

টি এল; ডিআর। হ্যাঁ বা না, আপনার ইভেন্ট ব্যবহার sourcing উপর নির্ভর করে।

দুটি প্রাথমিক ধরনের ইভেন্ট সোর্স সিস্টেম যা আমি সচেতন।

ডাউনস্ট্রিম ইভেন্ট প্রসেসর = হ্যাঁ

এই ধরনের পদ্ধতিতে, ঘটনাগুলি বাস্তব জগতে ঘটে এবং ঘটনা হিসাবে রেকর্ড করা হয়। পণ্য প্লেট ট্র্যাক রাখতে একটি গুদাম সিস্টেম যেমন। মূলত কোন দ্বন্দ্বপূর্ণ ঘটনা আছে। সবকিছু ইতিমধ্যে ঘটেছে, এমনকি যদি এটি ভুল ছিল। (আইএ প্যালেট 1২3456 ট্রাক এটিকে রাখে, কিন্তু ট্রাকের জন্য নির্ধারিত হয়।) তারপর পরে ঘটনাগুলি রিপোর্টিং পদ্ধতিগুলির মাধ্যমে ব্যতিক্রমগুলির জন্য চেক করা হয়। কাফকা এই ধরণের ডাউন-স্ট্রিম, ইভেন্ট প্রক্রিয়াকরণ অ্যাপ্লিকেশনের জন্য উপযুক্ত।

এই প্রেক্ষাপটে, এটা বোঝা যায় কেন কাফকা লোকেরা ইভেন্ট উত্স সমাধান হিসাবে এটি সমর্থন করছে। এটি ইতিমধ্যে এটি ব্যবহার করা হয় কিভাবে বেশ অনুরূপ, উদাহরণস্বরূপ, স্ট্রিম ক্লিক করুন। তবে, ইভেন্ট সোর্সিং (স্ট্রিম প্রসেসিংয়ের বিরোধিতা) শব্দটি ব্যবহার করে লোকেরা সম্ভবত দ্বিতীয় ব্যবহারের কথা উল্লেখ করছে ...

সত্যের অ্যাপ্লিকেশন নিয়ন্ত্রিত উৎস = না

অ্যাপ্লিকেশন এই ধরনের ব্যবসায়িক যুক্তি মাধ্যমে পাস ব্যবহারকারী অনুরোধের ফলে তার নিজস্ব ঘটনা ঘোষণা। কাফকা এই ক্ষেত্রে দুটি প্রধান কারণে ভাল কাজ করে না।

সত্তা বিচ্ছিন্নতা অভাব

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

দ্বন্দ্ব সনাক্তকরণ অভাব

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

আরো তথ্য

প্রতি মন্তব্য আপডেট করুন

মন্তব্য মুছে ফেলা হয়েছে, কিন্তু প্রশ্নটি এমন কিছু ছিল: লোকেরা তখন ইভেন্ট স্টোরেজের জন্য কী ব্যবহার করে?

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

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

আমার বর্তমান প্রকল্প একটি মাল্টি ভাড়াটে দৃশ্যকল্প, এবং আমি Postgres শীর্ষে আমার নিজের ঘূর্ণিত। Citus মত কিছু স্কেলবিলিটির জন্য উপযুক্ত, tentant + বিভাজন দ্বারা বিভাজন।

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