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