এই সিরিজের আমাদের পূর্ববর্তী নিবন্ধটি প্রতিষ্ঠিত করেছে যে যদি আপনার ব্যাকগ্রাউন্ড জব প্রক্রিয়াকরণের জন্য একটি সিস্টেমের প্রয়োজন হয় তবে সলিড কিউ একটি চমৎকার পছন্দ। এটি বাহ্যিক নির্ভরতা হ্রাস করে — রেডিসের প্রয়োজন নেই! - আপনার ডাটাবেসে সমস্ত কাজ সংরক্ষণ করে। তা সত্ত্বেও, এটি অবিশ্বাস্যভাবে পারফরম্যান্স।
কিন্তু উৎপাদন-প্রস্তুত ব্যাকগ্রাউন্ড জব সিস্টেমের জন্য শুধুমাত্র কর্মক্ষম হওয়াই যথেষ্ট নয়। রেল ডেভেলপাররা বছরের পর বছর ধরে অনেক আশা করতে এসেছেন। আমরা শুধু ব্যাকগ্রাউন্ডে চালানোর জন্য চাকরি সারিবদ্ধ করতে চাই না। আমরা কাজের সময়সূচী করতে চাই, তাদের একটি পুনরাবৃত্ত সময়সূচীতে চালাতে চাই, এবং আমরা এমনকি কতগুলি কাজ একসাথে চলতে পারে তা সীমিত করতে চাই। আমরা আরো বৈশিষ্ট্য চাই!
আশ্চর্যজনকভাবে, সলিড কিউ বাক্সের বাইরে সেই সমস্ত বৈশিষ্ট্য সরবরাহ করে। চলুন সলিড কিউতে আরও গভীরে ঢুকি এবং শিখি কিভাবে এটা সম্ভব!
রুবি অন রেলের জন্য সলিড কিউ সহ কাজের সময় নির্ধারণ
প্রথমত, এটি একটি ছোট রিক্যাপের জন্য সময়। সলিড কিউ আপনার ডাটাবেস ব্যবহার করে — এবং শুধুমাত্র আপনার ডাটাবেস — কাজের ডেটা সঞ্চয় করতে। এটি যা কিছু করে তা একটি ডাটাবেস টেবিল বা অন্য দ্বারা সমর্থিত। কাজের সময়সূচী - অর্থাৎ, ভবিষ্যতে কিছু নির্দিষ্ট সময়ে চালানোর জন্য কাজগুলি মনোনীত করা - আলাদা নয়। যেকোনো নির্ধারিত কাজ solid_queue_scheduled_executions-এ সংরক্ষণ করা হয় .
এই টেবিলটি প্রায় solid_queue_ready_executions-এর মত টেবিল শুধুমাত্র পার্থক্য হল scheduled_at যোগ করা কলাম, যা আমাদের বলে কখন একটি নির্ধারিত কাজ সম্পাদন করা হবে। আসুন আমরা একটি কাজের সময় নির্ধারণ করলে কী হয় তা দেখে নিশ্চিত করা যাক৷
সেখানে কোন চমক নেই। সলিড কিউ solid_queue_scheduled_executions-এ একটি নতুন সারি যোগ করে টেবিল, যা আমরা আশা করব এমন ডেটা রয়েছে। কিন্তু বিদ্যমান রেকর্ড থেকে আমরা কীভাবে সঠিক সময়ে চাকরি চালাতে যাব?
আমাদের এমন একটি প্রক্রিয়া দরকার যা ক্রমাগত solid_queue_scheduled_executions পোল করে টেবিল এই প্রক্রিয়াটিকে ডিসপ্যাচার বলা হয় এবং এটি নির্ধারিত কাজগুলি সময়মতো সম্পাদনের জন্য দায়ী। এটি শুরু হয় যখন সলিড কিউ শুরু হয় — কোনো অতিরিক্ত কনফিগারেশনের প্রয়োজন নেই। যাইহোক, যদি প্রয়োজন হয় তবে আপনি একটি নির্দিষ্ট কনফিগারেশনের সাথে সলিড কিউ চালিয়ে শুধুমাত্র প্রেরক প্রক্রিয়া শুরু করতে পারেন।
আপনি যদি ভাবছেন যে ডিসপ্যাচার প্রক্রিয়াটি কীভাবে তত্ত্বাবধান করা হয়, সেটি যথাযথভাবে নামের Supervisor এর দায়িত্ব। . এটি সলিড সারির মধ্যে যেকোন চলমান প্রক্রিয়ার ট্র্যাক রাখে, যার মধ্যে কর্মী প্রসেস এবং ডিসপ্যাচার রয়েছে৷
সুতরাং, প্রেরক আসলে কিভাবে কাজ করে? এটি একটি poll সংজ্ঞায়িত করে নির্ধারিত কাজের জন্য ক্রমাগত চেক করার জন্য একটি লুপের মধ্যে বলা পদ্ধতি। পোলিং কোডটি বিভিন্ন শ্রেণী এবং মডিউল জুড়ে বিস্তৃত, কিন্তু একটি ভারী সরলীকৃত আকারে, এটি এইরকম দেখায়:
'প্রস্তুত' নির্ধারিত মৃত্যুদন্ড পুনরুদ্ধার করার প্রশ্নটি সহজবোধ্য৷
৷
সুতরাং, scheduled_at এর সাথে যেকোনও নির্ধারিত কাজ অতীতে পাঠানোর জন্য প্রস্তুত. যেমনটি আমরা এই সিরিজের প্রথম অংশে কভার করেছি, যখন সলিড কিউ একটি কাজ প্রেরণ করে, এটি একটি ReadyExecution তৈরি করে সংশ্লিষ্ট ScheduledExecution রেকর্ড করে এবং ধ্বংস করে রেকর্ড ReadyExecution রেকর্ড তারপর নিয়মিত কর্মী প্রক্রিয়া দ্বারা বাছাই করা হয়, এবং সংশ্লিষ্ট কাজ চলে।
এই পর্যন্ত, তাই ভাল. নির্ধারিত কাজ সত্যিই জটিল নয়! আসুন আরও জটিল কিছু দেখি:পুনরাবৃত্তিমূলক কাজ।
পুনরাবৃত্ত কাজ
পুনরাবৃত্তিমূলক কাজগুলি ব্যাকগ্রাউন্ড জব প্রসেসরগুলির জন্য একটি বারবার অনুরোধ করা বৈশিষ্ট্য। সহজ কথায়, এগুলি হল ব্যাকগ্রাউন্ড জব যা একটি পুনরাবৃত্ত সময়সূচীতে চালানো উচিত। এগুলি ক্রোন কাজের অনুরূপ যেখানে আপনি একটি সময়সূচী সংজ্ঞায়িত করেন (যেমন প্রতি পাঁচ মিনিটে, প্রতিদিন দুপুরে, এবং তাই) কখন কাজ করা উচিত।
সলিড কিউতে, আপনি config/recurring.yml ব্যবহার করে আপনার পুনরাবৃত্ত কাজগুলি কনফিগার করেন ফাইল উদাহরণস্বরূপ, যদি আমরা একটি CleanupData চালাতে চাই প্রতিদিন দুপুরে চাকরি, আমরা এভাবেই করতাম।
সলিড কিউ সিডিউল এক্সপ্রেশন পার্স করার জন্য Fugit ব্যবহার করে, এই কারণেই 'প্রতিদিন দুপুরে'র মতো মানুষের-পাঠযোগ্য সময়সূচী অনুমোদিত। নির্ধারিত কাজগুলি ব্যবহার করার সময়, আপনি চালানোর জন্য কাজের ক্লাস এবং যে কোনও কাজের আর্গুমেন্ট নির্ধারণ করুন। চমৎকার SolidQueue পুনরাবৃত্ত কাজ ReadMe আরও বিশদ প্রদান করে। এটি কীভাবে কাজ করে তা শিখতে আমরা এখানে এসেছি, তাই আসুন আমরা হুডের নীচে তাকাই৷
পুনরাবৃত্তিমূলক কাজগুলিকে RecurringTask দ্বারা উপস্থাপন করা হয় মডেল, যা একটি সংশ্লিষ্ট solid_queue_recurring_tasks দ্বারা সমর্থিত টেবিল এর কলামগুলি কনফিগারেশন ফাইলে উপলব্ধ ক্ষেত্রগুলির সাথে মিলে যায়৷
আপনি যখন SolidQueue শুরু করেন, আপনার পুনরাবৃত্ত টাস্ক কনফিগারেশন ফাইল অনুযায়ী পুনরাবৃত্ত টাস্ক রেকর্ড তৈরি করা হয়। সঠিক সময়ে চাকরি তৈরি করার জন্য, আমাদের আবার একটি নতুন প্রক্রিয়ার প্রয়োজন — এই সময় শিডিউলার বলা হয়। সময়সূচী হল প্রেরণকারীর ভাই, যা আমরা ইতিমধ্যেই জানি। এটি প্রায় একইভাবে কাজ করে:সলিড কিউ শুরু হলে একটি নতুন প্রক্রিয়া তৈরি হয় এবং এই প্রক্রিয়াটি একটি অন্তহীন লুপ চালায়। শিডিউলার এবং ডিসপ্যাচারের মধ্যে পার্থক্য হল সেই লুপের মধ্যে যা ঘটে। যেখানে প্রেরণকারী solid_queue_scheduled_executions প্রশ্ন করে টেবিল, সময়সূচী প্রশ্ন solid_queue_recurring_tasks - এবং সঠিক সময়ে কাজের সময়সূচী। তাহলে, সঠিক সময় কী এবং কখন সঠিক কাজের সময়সূচী নির্ধারণ করতে হবে তা কীভাবে শিডিউলার জানেন?
এই প্রশ্নের উত্তর দেওয়ার জন্য, আমাদের বাস্তবায়ন ঘনিষ্ঠভাবে পরীক্ষা করতে হবে। শিডিউলার ক্লাস একটি নতুন RecurringSchedule তৈরি করে বস্তু যা একটি schedule সংজ্ঞায়িত করে পদ্ধতি প্রতিটি নির্ধারিত কাজের জন্য সেই পদ্ধতিটি বারবার বলা হয়। এখানে একটি সরলীকৃত সংস্করণ রয়েছে:
আসুন এই কোডটি খুলে ফেলি। সলিড কিউ Concurrent::ScheduledTask ব্যবহার করে (সমসাময়িক-রুবি লাইব্রেরি থেকে) একটি নতুন থ্রেড তৈরি করতে। সেই থ্রেডটি পুনরাবৃত্তিমূলক টাস্কের সময়সূচী দ্বারা নির্দিষ্ট সময়ে চালানোর জন্য নির্ধারিত হয়। যখন সেই থ্রেডটি চলে, এটি পরবর্তী পুনরাবৃত্ত কাজটি শিডিউল করার জন্য প্রথমে পুনরাবৃত্তিমূলকভাবে আরেকটি থ্রেড তৈরি করে। তারপর, এটি 'বর্তমান' নির্ধারিত কাজের সারিবদ্ধ করে।
আসুন জিনিসগুলির উপর একটি হ্যান্ডেল পেতে একটি সাধারণ পুনরাবৃত্ত কাজের উদাহরণ দেখি৷
যদি আমরা 8:30 এ সলিড কিউ শুরু করি, তাহলে সময়সূচী পদ্ধতির মধ্যে ভেরিয়েবলগুলিকে নিম্নলিখিত মানগুলি বরাদ্দ করা হয়। কথায় কথায় নয়, মনে রেখো। আমরা এখানে ব্যাপকভাবে সরলীকরণ করছি।
সুতরাং, আমাদের ব্যাকগ্রাউন্ড থ্রেড এখন থেকে ত্রিশ মিনিট চালানোর জন্য নির্ধারিত হয়েছে, যা 9:00। যখন সেই সময়টি ঘুরে যায়, তখন পটভূমির থ্রেডটি কার্যকর করা হয়। এটি thread_task.enqueue(at: 9:00) চালায় — তাই CleanupData এর একটি উদাহরণ মৃত্যুদন্ড কার্যকর করার জন্য সারিবদ্ধ। এটি thread_schedule.schedule এর মাধ্যমেও নিজেকে বারবার কল করে . কারণ এখন 9:00, এই আহ্বানের ভেরিয়েবলগুলি পরিবর্তিত হয়েছে৷
সুতরাং, ব্যাকগ্রাউন্ড থ্রেডটি আবার 10:00 এ চালানোর জন্য নির্ধারিত হয়েছে এবং চক্রটি চলতে থাকে। আপনি হয়তো ভাবছেন যে যদি শিডিউলিং থ্রেডটি মেরে ফেলা হয়, উদাহরণস্বরূপ একটি পুনরায় স্থাপনা বা সিস্টেম ক্র্যাশের সময় কি হবে। যে আপনার সময়সূচী বিপর্যস্ত না? সৌভাগ্যক্রমে, উত্তর নেই। ক্রোন সময়সূচী স্থির। 'Every Hour'-এর মত একটি অভিব্যক্তি সর্বদা 10:00, 11:00, 12:00, ইত্যাদিতে সমাধান করে, তা নির্বিশেষে যখন সলিড কিউ শুরু হয়। সময়সূচী থ্রেডে কোনো বাধা এটি পরিবর্তন করে না।
এখানে কিছু অন্যান্য বাস্তবায়ন বিবরণ সচেতন হতে হবে. প্রথমত, একটি পুনরাবৃত্ত কার্য সম্পাদন করার আগে পরবর্তী ঘটনার সময় নির্ধারণের এই প্যাটার্নটি গুডজব দ্বারা অনুপ্রাণিত। দ্বিতীয়, RecurringTask.enqueue একটি নতুন Job তৈরি করে না এবং ReadyExecution আপনি আশা করতে পারেন হিসাবে রেকর্ড. পরিবর্তে, এটি আরও একটি রেকর্ড তৈরি করে, যথা RecurringExecution .
এই রেকর্ডটি শুধুমাত্র একাধিকবার পুনরাবৃত্তিমূলক কাজগুলি সম্পাদন এড়াতে। এটির task_key-এ একটি সূচক রয়েছে এবং run_at যে উদ্দেশ্য পরিবেশন অনন্য সীমাবদ্ধতা সঙ্গে. একটি RecurringTask পূর্বে RecurringExecution না থাকলেই কেবল সারিবদ্ধ একই সময়ে এবং একই কাজের জন্য।
মনোযোগী পাঠকরা লক্ষ্য করবেন যে এই কোড স্নিপেটটি সলিড সারিতে একটি সীমাবদ্ধতা নির্দেশ করে। অর্থাৎ, আপনি যদি আপনার ক্রন-স্টাইলের কাজগুলি চালানোর জন্য ব্যাকএন্ড হিসাবে সলিড কিউ ব্যবহার না করেন — হ্যাঁ, আপনি তা করতে পারেন — সলিড কিউ গ্যারান্টি দিতে পারে না যে পুনরাবৃত্ত কাজগুলি শুধুমাত্র একবার সারিবদ্ধ হবে। আপনি যদি এমন পরিস্থিতিতে নিজেকে খুঁজে পান তবে আপনার সে সম্পর্কে সচেতন হওয়া উচিত।
আপনি হয়তো ভাবছেন যে শিডিউলার প্রক্রিয়াটি মারা গেলে বা নিহত হলে কি হবে — উদাহরণস্বরূপ, একটি স্থাপনার সময়। যেহেতু পুনরাবৃত্তিগুলি একটি থ্রেড দ্বারা পরিচালিত হয়, তাই কি থ্রেড বিরতির সময়সূচীকে হত্যা করা হবে না? সৌভাগ্যবশত, এর উত্তর হল না।
সঙ্গতি নিয়ন্ত্রণ
চলুন সলিড কিউ-এর একটি চূড়ান্ত বৈশিষ্ট্য দেখি, যথা কনকারেন্সি কন্ট্রোল। কখনও কখনও, আপনি একটি নির্দিষ্ট ধরণের কতগুলি কাজ একসাথে চলতে পারে তা সীমিত করতে চান। আপনি limits_concurrency দিয়ে সলিড কিউ ব্যবহার করে তা করতে পারেন .
এখানে, আমরা সলিডকিউকে MyJob-এর সর্বাধিক একটি ইন্সট্যান্স চালাতে বলছি। প্রতিটি ব্যবহারকারীর জন্য। আসুন আরো বিস্তারিতভাবে কনফিগারেশন পরীক্ষা করা যাক।
to:আপনি একসাথে যতগুলো চাকরি করতে চান।key:কোন কাজ একসঙ্গে সীমিত করা উচিত মনোনীত করার জন্য একটি প্রয়োজনীয় যুক্তি। আমাদের উদাহরণে, একই ইউজার আইডি সহ কাজগুলি একক সমসাময়িক সম্পাদনে সীমাবদ্ধ। আপনিkeyহিসাবে যেকোনো কাজের আর্গুমেন্ট ব্যবহার করতে পারেন , কিন্তু স্ট্রিং বা চিহ্নের মতো ধ্রুবকগুলিও অনুমোদিত৷
৷ duration:সর্বোচ্চ সময় যার জন্য সলিড কিউ একটি কাজের সারিবদ্ধ হওয়ার পরে একত্রিত হওয়ার গ্যারান্টি দিতে পারে। যদি আপনার কাজগুলি তার থেকে বেশি সময় ধরে চলে, তাহলে সঙ্গতি নিয়ন্ত্রণগুলি প্রযোজ্য হবে না এবং চাকরিগুলি ওভারল্যাপ হতে পারে৷ কেন আমরা পরে জানব!group:আপনি এই বিকল্পটি ব্যবহার করতে পারেন বিভিন্ন চাকরির ক্লাস জুড়ে একযোগে সীমিত করতে।
আপনি যদি আরও জানতে চান, তাহলে আমি আপনাকে কনকারেন্সি কন্ট্রোল ডকুমেন্টেশনে উল্লেখ করব। কনকারেন্সি কন্ট্রোল সহজে সলিড কিউ এর সবচেয়ে পরিশীলিত বৈশিষ্ট্য। যদি নির্ধারিত কাজগুলি ইতিমধ্যেই আপনার মাথা ঘোরাতে না পারে, তাহলে এই বৈশিষ্ট্যটি কীভাবে কাজ করে তা অবশ্যই শিখবে।
বেসিক দিয়ে শুরু করা যাক। অন্যান্য সলিড কিউ বৈশিষ্ট্যগুলির মতো, সমগত নিয়ন্ত্রণগুলি বিভিন্ন মডেল এবং তাদের সংশ্লিষ্ট ডাটাবেস টেবিল দ্বারা সমর্থিত। যে দুটি সম্পর্কে আপনাকে বিশেষভাবে সচেতন হতে হবে তা হল Semaphore এবং BlockedExecution .
চলুন দেখি Semaphore প্রথম নাম অনুসারে, এটি গণনা সেমাফোর প্যাটার্নের একটি বাস্তবায়ন। যখনই সলিড কিউ limits_concurrency দিয়ে একটি কাজের সারিবদ্ধ করে , এটি প্রথমে একটি কনকারেন্সি কী এর উপর ভিত্তি করে একটি সেমাফোর লক অর্জন করার চেষ্টা করে। এই কনকারেন্সি কী limits_concurrency-এ পাস করা আর্গুমেন্টের উপর ভিত্তি করে , যেমন কাজের শ্রেণী, কী, এবং গোষ্ঠীর নাম — যদি থাকে তাহলে। সেমাফোর পাওয়া গেলে, চাকরি সারিবদ্ধ। যদি এটি না হয়, একটি BlockedExecution পরিবর্তে রেকর্ড তৈরি করা হয়৷
সেমাফোরের একটি value আছে একাধিক সমসাময়িক কাজ সমর্থন করতে. আপনি এটিকে সেমাফোরের অবশিষ্ট ক্ষমতা হিসাবে ভাবতে পারেন। একটি সেমাফোর অর্জন করা মানে সেই মান হ্রাস করা, এবং এটি ছেড়ে দেওয়া মানে এটি বৃদ্ধি করা। একটি সেমাফোরের মান শূন্য হলে অনুপলব্ধ বলে বিবেচিত হয়। একটি সাধারণ কাজের জন্য লকিং মেকানিজম কীভাবে কাজ করে তার একটি উদাহরণ দেখা যাক৷
আসুন দেখি কি হয় যদি আমরা এই কাজটি পর পর একাধিকবার সারিবদ্ধ করার চেষ্টা করি।
-
MyJobএর প্রথম উদাহরণ সারিবদ্ধ করা হয়। এখনও কোন সেমাফোর নেই, তাই একটি তৈরি করা হয়েছে। এর প্রাথমিক মান হলlimit - 1. যেহেতু আপনার সীমা তিন, সেমাফোরের প্রাথমিক মান হল দুই। -
MyJobএর দ্বিতীয় দৃষ্টান্ত সারিবদ্ধ করা হয়। সলিড কিউ সেই কাজের জন্য একটি লক অর্জন করার চেষ্টা করে। কাজটি সারিবদ্ধ করা যেতে পারে কারণ মান দুটি, যা শূন্যের চেয়ে বেশি। সেমাফোরের মান একটিতে হ্রাস পেয়েছে। - আমাদের কাজের তৃতীয় উদাহরণ সারিবদ্ধ। আমরা আগের মত একই পদ্ধতি পুনরাবৃত্তি করি। সেমাফোরের মান এখন শূন্য।
-
MyJobএর চতুর্থ উদাহরণ সারিবদ্ধ করা হয়। সেমাফোর অর্জন ব্যর্থ হয় কারণ এর মান এখন শূন্য। একটিBlockedExecutionকাজের জন্য রেকর্ড তৈরি করা হয়। - আমাদের কাজের প্রথম উদাহরণ শেষ। যখন এটি সমাপ্ত হয়, এটি সেমাফোর রিলিজ করে, তাই সেমাফোর মান আবার এক হয়৷
- সমাপ্ত হলে, প্রথম কাজের উদাহরণটি যেকোন অবরুদ্ধ কাজ ছেড়ে দেওয়ার জন্য একটি পদ্ধতিকেও কল করে৷
-
MyJobএর চতুর্থ উদাহরণ মুক্তি পায় এবং আবার একটি লক অর্জন করার চেষ্টা করে। সেমাফোর মান এক, তাই লকটি অর্জন করা যেতে পারে এবং অবরুদ্ধ কাজ সারিবদ্ধ করা যেতে পারে। সেমাফোর মান এখন শূন্য৷
একটি কাজ শেষ হলে সেমাফোর রিলিজ করার কোডটি সোজা।
আরও একটি বিশদ রয়েছে যা আমরা এখনও স্পর্শ করিনি৷ কেন সেমাফোরের মেয়াদ শেষ হওয়ার তারিখ থাকে এবং কেন limits_concurrency ব্যবহার করার সময় আমাদের একটি সময়কাল সেট করতে হবে ?
আসুন বিবেচনা করা যাক যখন একটি কাজ তার সেমাফোর প্রকাশ না করে ক্র্যাশ হয়ে যায় - উদাহরণস্বরূপ, যখন সেই কাজটি প্রক্রিয়াকরণকারী একজন কর্মী মারা যায়। যতক্ষণ না আমরা সেমাফোর পরিষ্কার করার জন্য কিছু প্রক্রিয়া যোগ করি, সেই কাজের দ্বারা রাখা লকটি চিরতরে বজায় থাকবে। সবচেয়ে খারাপ ক্ষেত্রে, এটি অন্যান্য কাজগুলিকে প্রক্রিয়া করা থেকে চিরতরে ব্লক করবে৷
৷
সেমাফোরের একটি মেয়াদ থাকে যা সেই পরিস্থিতি এড়াতে কাজের সংজ্ঞায় প্রদত্ত সময়কালের সাথে মিলে যায়। যদি একটি সেমাফোরের মেয়াদ শেষ হয়ে যায় - যদি কোন কাজ সারিবদ্ধ না থাকে তবে এটি ঘটে - সেমাফোর ধ্বংস হয়ে যাবে। এর জন্য দায়ী প্রক্রিয়াটি আমরা ইতিমধ্যেই জানি — এটি আমাদের বন্ধু, প্রেরক . এটি ConcurrencyMaintenance তাৎক্ষণিক করে ক্লাস, যা দুটি জিনিস করে:
- প্রথম, এটি যেকোন মেয়াদোত্তীর্ণ সেমাফোরকে সরিয়ে দেয়।
- দ্বিতীয়, এটি কোন অবরুদ্ধ কাজ আছে কিনা তা পরীক্ষা করবে এবং সেগুলি ছেড়ে দেবে।
একের পর এক চাকরি প্রকাশ করা হয়, তাই সঙ্গতি সীমা এখনও ধরে থাকবে। যাইহোক, বিবেচনা করুন, যদি আপনার কাজ প্রদত্ত সময়ের চেয়ে বেশি চলে তাহলে কি হবে। সেই ক্ষেত্রে, সেমাফোর পরিষ্কার করা হবে, যদিও কাজটি এখনও চলবে। যদি অন্য কাজ সারিবদ্ধ করা হয়, সেই কাজগুলি ওভারল্যাপ হবে৷
অ্যাপসিগন্যাল দিয়ে রেলের জন্য সলিড কিউ মনিটরিং
যেমন আমরা প্রতিষ্ঠিত করেছি, সলিড কিউ অনেক কিছু করতে পারে। যাইহোক, এই সমস্ত চলমান অংশগুলির সাথে, পর্যবেক্ষণ গুরুত্বপূর্ণ হয়ে ওঠে। সৌভাগ্যবশত, AppSignal কাজ সম্পাদনের সময়, থ্রুপুট এবং ব্যর্থতার হারের জন্য তৈরি ড্যাশবোর্ড সহ সলিড সারির জন্য অন্তর্নির্মিত সমর্থন প্রদান করে। শুধু আপনার Rails অ্যাপ্লিকেশনে AppSignal ইনস্টল করুন, এবং আপনি যেতে ভাল।
AppSignal স্বয়ংক্রিয়ভাবে আপনার সলিড সারির ব্যবহার শনাক্ত করবে এবং একটি সক্রিয় কাজের ড্যাশবোর্ড তৈরি করবে যাতে গুরুত্বপূর্ণ মেট্রিক্সের জন্য গ্রাফ রয়েছে, যেমন ত্রুটির হার এবং থ্রুপুট৷

আপনি যদি কখনও এমন কাজগুলি দেখেন যেগুলি খারাপ আচরণ করছে - কারণ সেগুলি ধীরে চলছে বা অনেকগুলি ত্রুটি রয়েছে - সমস্যাটি কার্যকরভাবে সমাধান করার জন্য তাদের একটি স্ট্যাটাস এবং অ্যাসাইনি বরাদ্দ করুন৷

স্পষ্টতই, কোন সমস্যা আছে কিনা তা বের করার জন্য আপনাকে সারাদিন ড্যাশবোর্ডের দিকে তাকাতে হবে না। AppSignal সতর্কতা আপনার পিছনে আছে. শুধু কাজের মেট্রিক্সের জন্য একটি নতুন সতর্কতা তৈরি করুন, যেমন ব্যর্থতার হার এবং কাজের সময়কাল, এবং আপনি সম্পূর্ণ প্রস্তুত৷

ঝামেলা ছাড়াই আপনার আবেদনে শক্তিশালী কাজের প্রক্রিয়াকরণ যোগ করার জন্য সলিড কিউ আশ্চর্যজনক। অ্যাপসিগন্যাল যখন নিরীক্ষণের কথা আসে তখন একই কাজ করে!
র্যাপিং আপ
আমরা আমাদের সলিড কিউ এর উন্নত বৈশিষ্ট্যগুলির অন্বেষণে অনেক জায়গা কভার করেছি। নির্ধারিত কাজ থেকে জটিল নির্ভরতা চেইন পর্যন্ত, প্রতিটি বৈশিষ্ট্য শক্ত ভিত্তির উপর তৈরি করে যা আমরা প্রথম অংশে আলোচনা করেছি। যেমনটি আমরা দেখেছি, চাকরি প্রক্রিয়াকরণ ব্যাকএন্ড তৈরি করা সহজ নয়। কিন্তু সলিড কিউ সোর্স কোড এবং এর কার্যকারিতার গভীরে ডুব দিয়ে, আমরা জড়িত চ্যালেঞ্জগুলির জন্য একটি বোঝাপড়া এবং কিছুটা উপলব্ধি অর্জন করেছি৷
যাই হোক না কেন, চমৎকার ডাটাবেস ডিজাইন এবং প্রক্রিয়া সমন্বয়ের কারণে সলিড কিউ রেল ইকোসিস্টেমের একটি চমৎকার সংযোজন। এটি তার মূল প্রতিশ্রুতি বজায় রাখার সময় আপনার প্রয়োজনীয় সরঞ্জামগুলি সরবরাহ করে:বাহ্যিক নির্ভরতা ছাড়াই সরলতা এবং নির্ভরযোগ্যতা৷
শুভ কোডিং!