রেডিসের উপর কীভাবে কোনও বার্তার সারিটি প্রয়োগ করা যায়?


29

কেন রেখার জন্য রেডিস?

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

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

আমরা কি BRPOPLPUSH ব্যবহার করতে পারি?

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

এটি নিশ্চিত করে

  • কাজ ঠিক একজন ভোক্তার হাতে পৌঁছে দেওয়া হয়
  • কাজ একটি অগ্রগতি কাতারে বাতাস আপ, তাই এটি কোনও গ্রাহক যদি ব্ল্যাকহোল করতে পারে না

অপূর্ণতা

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

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

উত্তর:


5

আপনি যদি নোড.জেজে কোনও বার্তার কাতারের জন্য রেডিস ব্যবহার করতে চান এবং সেটির জন্য কোনও মডিউল ব্যবহার করতে আপনার আপত্তি নেই তবে আপনি আরএসএমকিউ চেষ্টা করতে পারেন - নোডের জন্য রেডিস সিম্পল মেসেজ কাতারে । এই প্রশ্নটি জিজ্ঞাসা করার সময় এটি উপলব্ধ ছিল না তবে আজ এটি একটি কার্যকর বিকল্প।

আপনি যদি নিজের প্রশ্নে বলেছেন যেভাবে আপনি যদি নিজেকে ক্যু বাস্তবায়িত করতে চান তবে আপনি আরএসএমকিউ এর উত্সটি পড়তে চাইতে পারেন কারণ এটি কোডের মাত্র 20 স্ক্রিন যা আপনাকে জিজ্ঞাসা করছে ঠিক তাই করে।

দেখুন:


আমি পরে এটি সত্যই ত্রুটিযুক্ত বা ভাঙা বা কিছু না শিখলে আমি এটি গ্রহণ করব।
djechlin

22

আমি এ পর্যন্ত কিছু অসুবিধা নিয়ে চলেছি আমি এখানে ডকুমেন্ট করতে চাই।

আপনি কিভাবে পুনরায় সংযোগ যুক্তি পরিচালনা করবেন?

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

তদ্ব্যতীত, শ্রবণ অপারেশন যথাসম্ভব সহজ হওয়া উচিত আদর্শভাবে এটির এই বৈশিষ্ট্যগুলি থাকা উচিত:

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

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

তবে এই সমাধানটি বেশ তুচ্ছ নয়:

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

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


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

9
গত আগস্ট থেকে আপনি কতটা দূরে এসেছেন তা সম্পর্কে আমি আগ্রহী ious আপনি কি আপনার সন্তুষ্টির জন্য আপনার সমস্যার সমাধান করতে পেরেছিলেন? এগুলি কীভাবে সমাধান করলেন?
হারুনএম

3
এএএ: ঠিক যেমন @ অ্যারোনএম আপনি কীভাবে অগ্রগতি করেছেন তা শুনতে আমি পছন্দ করব।
বিজোরল

একমত। কিভাবে এই অগ্রগতি হয়েছে? আমি স্ট্যাক থেকে রাবিট এমকিউ অপসারণ করার ধারণা পছন্দ করি এবং যাইহোক সেখানে থাকা রেডিস ব্যবহার করি। আমার ইস্যুটি কীভাবে আরএসএমকিউ (নোড লিব) ব্যবহার করে কোনও গ্রাহক নিবন্ধন করবেন।
ra9r

@ ইরাগ্লস্টোরফার সেখানে দু'বছর ধরে কাজ করেননি: পি গবেষণা এবং পোস্ট করতে নির্দ্বিধায় ...
জেচলিন

0

সুতরাং রেডিসের উপরে রেবিট এমকিউ ব্যবহার করা বাছাই করার সবচেয়ে বড় কারণ হ'ল ব্যর্থতার পরিস্থিতি এবং ক্লাস্টারিং।

এই নিবন্ধটি এটি সর্বোত্তমভাবে ব্যাখ্যা করে, তাই আমি কেবল লিঙ্কটি সরবরাহ করব:

https://aphyr.com/posts/283-jepsen-redis

রেডিস সেন্টিনেল এবং আরও সাম্প্রতিক সময়ে রেডিস ক্লাস্টারিং বেশ কয়েকটি বেসিক ব্যর্থতার পরিস্থিতি পরিচালনা করতে সক্ষম নয় যা এটি একটি সারিটির জন্য খারাপ পছন্দ করে।

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

খরগোশের জন্য পোস্টটি এখানে:

https://aphyr.com/posts/315-jepsen-rabbitmq

আপনি যখন সিএপি থিয়োরামের দিকে নজর রাখেন (ধারাবাহিকতা, উপলব্ধতা এবং পার্টিশন হ্যান্ডলিং) আপনি কেবল 2 এর মধ্যে 3 টি বেছে নিতে পারেন We t বিশ্বের শেষ। বার্তা হারাতে না করতে, বার্তা হারাতে না পারার জন্য আমরা পার্টিশন হ্যান্ডলিংয়ের জন্য অগ্রাহ্য করি। উত্সটি ইউইউডি পরিচালনা করে বলে নকলগুলি পরিচালনা করা যায়।

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