প্রমোনো উইনাটা
দ্বারাআপনি কি কখনও একটি একক প্রক্রিয়া পরিচালনা করার চেষ্টা করে সমস্যায় পড়েছেন যা সত্যিই বিশাল বা ভারী? যদি তাই হয়, আমি আপনাকে কীভাবে এটি আরও ভালভাবে পরিচালনা করতে পারি তা বের করতে সাহায্য করতে পারি৷
এই নিবন্ধে আমি ভাগ করব কিভাবে আমি বর্তমানে একটি একক বার্তা পরিচালনা করছি যা একটি একক প্রক্রিয়ায় প্রক্রিয়া করার জন্য খুব বড়। আমি এটিকে বিভিন্ন খণ্ডে বিভক্ত করেছি, যার ফলে পৃথক প্রক্রিয়া হয়।
আমি খুব বেশি প্রযুক্তিগত বিশদে যাব না, তবে আরও স্থাপত্য প্রক্রিয়ায় যাব।
আমি ক্যাশিং ব্যবহার এবং পাবসাব সম্পর্কে কিছু বিট নিয়ে আলোচনা করব, তবে আমি বাস্তবায়নের বিশদ বিবরণে যাব না। পরিবর্তে, আমি নিজেই প্যাটার্নে ফোকাস করব।
সমস্যা
_এর দ্বারা ফটো [আনস্প্ল্যাশ](https://unsplash.com/@dsmacinnes?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit">ড্যানিয়েল ম্যাকইনেস / আমি খুব ভালো ডায়াগ্রাম মেকার নই, কিন্তু এটার পয়েন্টটা পাওয়া উচিত
এটিকে শব্দ দিয়ে সহজ করার জন্য, দুটি পৃথক পরিষেবা কল্পনা করুন, পরিষেবা A এবং পরিষেবা B, এর মাঝখানে একটি পাবসাব পরিষেবা রয়েছে৷
আপনি যদি নিশ্চিত না হন যে একটি পাবসাব পরিষেবা কী, তবে এটিকে একটি ব্রোকার হিসাবে কল্পনা করুন যা একটি পরিষেবার বার্তা অন্য পরিষেবাতে পৌঁছাতে সহায়তা করে৷
পরিষেবা A তারপর একটি বার্তা প্রকাশ করবে এবং পাবসাবের মাধ্যমে, পরিষেবা B তারপর এটি প্রক্রিয়া করবে৷ এটি প্রক্রিয়াটি শেষ করার পরে, এটি বার্তাটি প্রক্রিয়া করা হয়েছে তা চিহ্নিত করতে অন্য একটি প্রক্রিয়া করবে৷
যথেষ্ট সহজ তাই না?
এটা ঠিক যে কিছু ক্ষেত্রে যখন বার্তাটি খুব বড় হয়, তখন পাবসাব পরিষেবার সীমাবদ্ধতার কারণে এটি সফলভাবে বার্তাটি প্রকাশ করবে না।
ঠিক আছে, আমি যে সমস্যার সম্মুখীন হয়েছি তার একটি সংক্ষিপ্ত বিবরণ এটি আপনাকে দেবে। তাহলে আমি কিভাবে এই সমস্যাটি ঠিক করেছি? পরবর্তী বিভাগে, আমি আপনাকে আমার সমাধান দিয়ে চালাব।
আমার প্রথম পদ্ধতি
_ফটো বাই [Unsplash](https://unsplash.com/@dose?utm_source=ghost&utm-ditm_medaut=&itm_medium> মিডিয়া / আমার আপডেট করা সিস্টেম/প্রক্রিয়া
আপনি ডায়াগ্রাম থেকে দেখতে পাচ্ছেন, বার্তাটি কয়েকটি ছোট বার্তায় বিভক্ত হয়ে গেছে। এটি কীভাবে বিভক্ত হয় এবং বার্তার কোন অংশটি বিভক্ত করা প্রয়োজন তা প্রতিটি ক্ষেত্রে এবং প্রবাহের জন্য আলাদা হতে পারে।
আমার ক্ষেত্রে, যদিও, আমার বার্তায় আসলে আইটেমগুলির একটি তালিকা রয়েছে যাতে আমি একে প্রতিটি আইটেম দ্বারা বিভক্ত করতে পারি।
ধরা যাক যে আমার 10টি আইটেম আছে। পূর্বে, এটি একটি বার্তায় সমস্ত 10 টি আইটেম প্রকাশ করবে। কিন্তু এখন বার্তাটি বিভক্ত করার পরে, এটি সেই বার্তাটিকে 10টি বার্তায় পরিণত করবে৷
৷এর ফলে একটি একক প্রক্রিয়া একসাথে একাধিক প্রক্রিয়ায় পরিণত হয়। একটি একক প্রকাশ 10টি প্রকাশনায় পরিণত হবে যা সেই একক প্রক্রিয়াটিকে 10টি প্রক্রিয়ায় পরিণত করবে৷
আপনি যখন এটিকে সেইভাবে দেখেন তখন এটি আদর্শ নাও হতে পারে, কিন্তু এটিই সেরা সমাধান যা আমি নিয়ে এসেছি এবং এটি নিশ্চিতভাবে কাজ করে৷
তাহলে কি শুধুই এটাকে বিভক্ত করা হচ্ছে?
সত্যিই না - সেই চূড়ান্ত অংশটি মনে রাখবেন যেখানে এটি প্রক্রিয়াটিকে সমাপ্ত হিসাবে চিহ্নিত করে?
যদি তাই হয়, আপনি ভাবতে পারেন কেন সেই অংশটি আমার নতুন চিত্র থেকে অনুপস্থিত।
চিন্তা করবেন না - আমি এটি সম্পর্কে ভুলে গেছি তা নয়। আমি ইচ্ছাকৃতভাবে পরবর্তী অংশের জন্য এটি ছেড়ে দিয়েছি।
জিনিসটি হল, আপনি যখন বার্তাটি বিভক্ত করেন এবং এটিকে কয়েকটি প্রক্রিয়ায় ভেঙে দেন, তখন আপনার সিস্টেমটি পুরো প্রক্রিয়াটি আসলে শেষ হয়েছে কিনা তা নাও জানতে পারে। এটি আরেকটি প্রধান সমস্যা যা আমাদের মোকাবেলা করতে হবে, এবং কৃতজ্ঞতাবশত আমি এটির জন্যও একটি সমাধান খুঁজে বের করতে পেরেছি।
ফিনিশিং প্রসেস কিভাবে পরিচালনা করবেন
_এর দ্বারা ফটো [আনস্প্ল্যাশ](https://unsplash.com/@tumbao1949?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit">জেমস ওয়েনসকোট / আমাদের প্রক্রিয়া চিহ্নিত করতে Redis যোগ করা হচ্ছে
প্রক্রিয়াটি ঠিক আগের মতোই দেখায়, তবে মাঝখানে রেডিস যোগ করার সাথে। এই ক্ষেত্রে আপনার কাছে একটি বৈধ প্রাথমিক গণনা আছে তা নিশ্চিত করতে হবে৷
৷আমার ক্ষেত্রে, যেহেতু আমি একটি তালিকা প্রকাশ করছি, তাই আমি সহজেই আমার প্রাথমিক কাউন্টার হিসাবে আমার তালিকার দৈর্ঘ্য রাখতে পারি। এবং কাউন্টারের জন্য, প্রতিবার একটি প্রক্রিয়া শেষ হলে আমি এটিকে একটি করে কমাতে পারি। তারপর আমি আমার রেডিস কাউন্টারে উল্লেখ করে আমার সমস্ত প্রক্রিয়া শেষ করেছি কিনা তা জানতে সক্ষম হব। যদি এটি 0 এ পৌঁছে যায়, তাহলে এর মানে হল যে আমি নিরাপদে চিহ্নিত করতে পারি যে আমার সমস্ত প্রক্রিয়া সম্পন্ন হয়েছে৷
র্যাপিং আপ
সমস্ত কিছুর সংক্ষিপ্তসারে, আমি বার্তাটিকে কয়েকটি বার্তায় বিভক্ত করেছি যা বিভিন্ন প্রক্রিয়ায় একসাথে প্রক্রিয়া করা হবে। বার্তা প্রক্রিয়া পরিচালনা করতে, আমি রেডিস ক্যাশিং ব্যবহার করি।
আমি উপরে যে সমাধানটি বর্ণনা করেছি তা প্রতিবারই একটি সিলভার বুলেট হবে না যখন আপনার একটি খুব বড় বার্তা প্রক্রিয়াকরণে সমস্যা হয়। আপনার বার্তা স্ট্রিম করার মত অন্যান্য উপায় আছে, কিন্তু এটি অন্য দিনের জন্য একটি গল্প হবে।
শেষ পর্যন্ত আমার নিবন্ধ পড়ার জন্য ধন্যবাদ! আমি আন্তরিকভাবে আশা করি যে আপনি আমার নিবন্ধটি উপভোগ করেছেন এবং আকর্ষণীয় পেয়েছেন এবং সবচেয়ে গুরুত্বপূর্ণভাবে, এটি দরকারী ছিল।
বিনামূল্যে কোড শিখুন. freeCodeCamp-এর ওপেন সোর্স পাঠ্যক্রম 40,000-এরও বেশি লোককে ডেভেলপার হিসেবে চাকরি পেতে সাহায্য করেছে। শুরু করুন