স্মুথ রিস্টার্টের নীতি
স্মুথ রিস্টার্ট কি?
স্মুথ রিস্টার্ট সাধারণ রিস্টার্টের থেকে ভিন্ন, স্মুথ রিস্টার্ট এমন একটি প্রক্রিয়া যা ব্যবহারকারীদের উপর প্রভাব ফেলবেনা এবং সেবা আবার চালু করবে (সাধারণত ছোট সংযোগের ব্যবসা) যাতে পুনরায় PHP প্রোগ্রাম লোড করা যায় এবং ব্যবসায়িক কোড আপডেট সম্পন্ন হয়।
স্মুথ রিস্টার্ট সাধারণত ব্যবসার আপডেট বা সংস্করণের সময় ব্যবহৃত হয়, এটি কোডের প্রকাশের কারণে সেবা পুনরায় চালু করতে অস্থায়ী সেবা অপ্রাপ্যতার প্রভাব এড়াতে সক্ষম।
দ্রষ্টব্য
Windows সিস্টেম reload সমর্থন করে না।দ্রষ্টব্য
দীর্ঘ সংযোগ (যেমন websocket) ব্যবসায়, প্রক্রিয়ার স্মুথ রিস্টার্টের সময় সংযোগ বিচ্ছিন্ন হবে। সমাধান হল gatewayWorker এর মতো আর্কিটেকচার ব্যবহার করা, একটি গ্রুপ প্রক্রিয়া বিশেষভাবে সংযোগ বজায় রাখার জন্য এবং এই গ্রুপের প্রক্রিয়ার reloadable গুণকে false হিসেবে সেট করা। ব্যবসায়িক লজিক আলাদা একটি গ্রুপ ওয়ার্কার প্রক্রিয়া চালু করে, গেটওয়ে এবং ওয়ার্কার প্রক্রিয়া tcp যোগাযোগের মাধ্যমে একে অপরকে ডাকে। যখন ব্যবসা পরিবর্তনের প্রয়োজন হয়, শুধুমাত্র ওয়ার্কার প্রক্রিয়া পুনরায় চালু করুন।
সীমাবদ্ধতা
দ্রষ্টব্য: শুধুমাত্র on{...} কলব্যাকের মধ্যে লোড করা ফাইলগুলি স্মুথ রিস্টার্টের পর স্বয়ংক্রিয়ভাবে আপডেট হবে, স্টার্ট আপ স্ক্রিপ্টে সরাসরি লোড করা ফাইল কিংবা লেখা কোডে reload কাজ করবে না।
নীচের কোড reload করার পর আপডেট হবে না
$worker = new Worker('http://0.0.0.0:1234');
$worker->onMessage = function($connection, $request) {
$connection->send('hi'); // লেখা কোড হট আপডেট সমর্থন করে না
};
$worker = new Worker('http://0.0.0.0:1234');
require_once __DIR__ . '/your/path/MessageHandler.php'; // স্টার্ট আপ স্ক্রিপ্টে সরাসরি লোড করা ফাইল হট আপডেট সমর্থন করে না
$messageHandler = new MessageHandler();
$worker->onMessage = [$messageHandler, 'onMessage']; // ধরুন MessageHandler ক্লাসে একটি onMessage পদ্ধতি রয়েছে
নীচের কোড reload করার পর স্বয়ংক্রিয়ভাবে আপডেট হবে
$worker = new Worker('http://0.0.0.0:1234');
$worker->onWorkerStart = function($worker) { // onWorkerStart হল প্রক্রিয়া চালুর পর সম্পাদিত কলব্যাক
require_once __DIR__ . '/your/path/MessageHandler.php'; // প্রক্রিয়া চালুর পর লোড করা ফাইল হট আপডেট সমর্থন করে
$messageHandler = new MessageHandler();
$worker->onMessage = [$messageHandler, 'onMessage'];
};
MessageHandler.php পরিবর্তিত হলে php start.php reload চালান, MessageHandler.php আবার মেমরিতে লোড হবে যা ব্যবসায়িক লজিক আপডেট করতে সহায়তা করে।
টিপ
উপরের কোডটি প্রদর্শনের সুবিধার জন্যrequire_onceবাক্যাংশ ব্যবহার করেছে, যদি আপনার প্রকল্প psr4 স্বয়ংক্রিয় লোড সমর্থন করে তবেrequire_onceবাক্যাংশ কল করার প্রয়োজন নেই।
স্মুথ রিস্টার্টের নীতি
Workerman প্রধান প্রক্রিয়া এবং সাব-প্রক্রিয়ায় বিভক্ত, প্রধান প্রক্রিয়া সাব-প্রক্রিয়াগুলি পর্যবেক্ষণ করার জন্য দায়ী, সাব-প্রক্রিয়া ক্লায়েন্টের সংযোগ গ্রহণ এবং conexin থেকে প্রদত্ত অনুরোধের তথ্য প্রাপ্তি করে, সেগুলি প্রক্রিয়া করে এবং ক্লায়েন্টের কাছে তথ্য ফেরত দেয়। যখন ব্যবসায়িক কোড আপডেট হয়, আমরা কোনওকিছু আপডেট করতে শুধু সাব-প্রক্রিয়া আপডেট করলেই কোড আপডেট পাওয়া যায়।
যখন Workerman প্রধান প্রক্রিয়া স্মুথ রিস্টার্ট সিগন্যাল গ্রহণ করে, প্রধান প্রক্রিয়া একটি সাব-প্রক্রিয়াকে নিরাপদ প্রস্থান (সংশ্লিষ্ট প্রক্রিয়াকে বৈধভাবে বিদায় জানানো যাক) সিগন্যাল পাঠায়, যখন এই প্রক্রিয়া বের হয়ে যায়, প্রধান প্রক্রিয়া একটি নতুন সাব-প্রক্রিয়া পুনরায় তৈরি করে (এই সাব-প্রক্রীয়ার মাধ্যমে নতুন PHP কোড লোড হয়), তারপর প্রধান প্রক্রিয়া অন্য একটি পুরোনো প্রক্রিয়াকে停止 করার আদেশ পাঠায়, এভাবে এক একটি প্রক্রিয়া করে রিস্টার্ট হবে, যতক্ষণ না সব পুরনো প্রক্রিয়া সম্পূর্ণরূপে প্রতিস্থাপিত না হয়।
আমরা দেখতে পাচ্ছি স্মুথ রিস্টার্ট বাস্তবিকভাবে পুরনো ব্যবসার প্রক্রিয়াগুলিকে এককভাবে বের করা ও পরে নতুন প্রক্রিয়া তৈরি করার মাধ্যমে সম্পন্ন হয়। যে কারণে স্মুথ রিস্টার্টের সময় গ্রাহকদের প্রভাবিত না করার জন্য, প্রক্রিয়ার মধ্যে ব্যবহারকারীদের সম্পর্কিত স্থিতি তথ্য সংরক্ষণ করা উচিত নয়, অর্থাৎ ব্যবসার প্রক্রিয়া কি না তা অ-স্থিতিশীল হতে হবে, যাতে প্রক্রিয়া বের হওয়ার ফলে তথ্যের ক্ষতি না হয়।