আপনার আপটাইম ড্যাশবোর্ড আপনাকে মিথ্যা বলছে। এটি বলছে আপনার সাইট অনলাইন আছে। হোমপেজ লোড হচ্ছে। SSL সার্টিফিকেট বৈধ। প্রতিটি পিক্সেল ঠিক যেখানে থাকার কথা সেখানেই রেন্ডার হচ্ছে। অথচ, আপনার স্টোরে গত ছয় ঘণ্টা ধরে একটিও আসল অর্ডার প্রসেস হয়নি, এবং প্রথম ব্যক্তি যিনি আপনাকে এটি জানাবেন তিনি হলেন আপনার ক্লায়েন্ট, যিনি অবাক হয়ে জিজ্ঞেস করছেন কেন দৈনিক বিক্রয়ের রিপোর্ট একদম স্থির হয়ে আছে।
একটি ই-কমার্স প্ল্যাটফর্মকে ব্রোশিওর সাইটের মতো বিবেচনা করার মধ্যেই মূল ত্রুটিটি রয়েছে। সাধারণ আপটাইম মনিটরিং ঠিক একটি প্রশ্নই করে: সার্ভার কি 200 OK স্ট্যাটাস রিটার্ন করেছে? একটি WooCommerce স্টোরের জন্য, এই প্রশ্নটি সম্পূর্ণ অপ্রাসঙ্গিক। সার্ভার সচল থাকতে পারে, চেকআউট পেজ দেখতে একদম নিখুঁত মনে হতে পারে, কিন্তু তবুও টাকা আসা বন্ধ হয়ে যেতে পারে। এটি একটি নীরব ব্যর্থতা (silent failure), এবং এটি একটি শোরগোলপূর্ণ সার্ভার ক্র্যাশের চেয়ে অনেক বেশি ব্যয়বহুল।
যখন "অনলাইন" থাকা মানে কিছুই না
একটি 200 রেসপন্স শুধুমাত্র এটি প্রমাণ করে যে PHP সফলভাবে কাজ শেষ করেছে এবং ব্রাউজারে HTML পাঠিয়েছে। এটি প্রমাণ করে না যে Stripe-এর JavaScript লোড হয়েছে। এটি প্রমাণ করে না যে 'place-order' বাটনটি একটি কার্যকর এন্ডপয়েন্টে (endpoint) সাবমিট হচ্ছে। এটি প্রমাণ করে না যে webhook কাজ করেছে, স্টক অ্যাডজাস্ট হয়েছে বা কনফার্মেশন ইমেলটি ট্রিগার হয়েছে। একজন ভিজিটর একটি সম্পূর্ণ লোড হওয়া চেকআউট পেজ দেখেন, কার্ড নম্বর ইনপুট দেন, 'buy' বাটনে ক্লিক করেন এবং কিছুই ঘটে না। অথবা আরও খারাপ হলো, পেমেন্ট সফলভাবে সম্পন্ন হলেও অর্ডারটি 'failed' হিসেবে রেকর্ড হয়।
আপনার মনিটরিং কৌশল যদি শুধুমাত্র হোমপেজ পিং করার মধ্যেই সীমাবদ্ধ থাকে, তবে আপনি ভুল বিষয় পর্যবেক্ষণ করছেন। আপনি হয়তো একটি থিম ক্র্যাশ লক্ষ্য করবেন যা হেডারকে অকেজো করে দিচ্ছে। কিন্তু আপনি একটি পেমেন্ট গেটওয়ে লক্ষ্য করবেন না যা টেস্ট মোডে আটকে আছে। আপনি কেবল তখনই জানতে পারবেন যখন কেউ রেভিনিউ গ্রাফ চেক করবে বা কোনো রাগান্বিত ফোন কল রিসিভ করবে।
সাইট ডাউন না হয়েও একটি স্টোর বন্ধ হয়ে যাওয়ার পাঁচটি উপায়
এখানে সেই নির্দিষ্ট ব্যর্থতাগুলো দেওয়া হলো যা একটি WooCommerce স্টোরের আপটাইম ১০০% বজায় রেখেও কনভার্সন জিরো করে দিতে পারে:
- পেমেন্ট গেটওয়ে টেস্ট মোডে আটকে যায়। একজন ডেভেলপার কোনো বাগ (bug) পুনরায় তৈরি করার জন্য Stripe বা PayPal-কে sandbox মোডে পরিবর্তন করেন, সমস্যাটি সমাধান করেন এবং পুনরায় আগের অবস্থায় ফিরিয়ে নিতে ভুলে যান। আসল গ্রাহকরা আসল কার্ড নম্বর ইনপুট দেন এবং একটি টেস্ট-মোডের দেয়ালের মুখে পড়েন। কখনও কখনও ত্রুটিটি স্পষ্ট থাকে; কখনও কখনও তা থাকে না, এবং ট্রানজ্যাকশনটি কেবল আটকে থাকে।
- একটি প্লাগইন আপডেট চেকআউট টেমপ্লেট নষ্ট করে দেয়। WooCommerce একটি আপডেট রিলিজ করে, অথবা একটি পেজ বিল্ডার কোনো পরিবর্তন আনে, এবং চেকআউট ফর্মটি আর সঠিকভাবে রেন্ডার হয় না। পেজটি লোড হয়, কিন্তু বিলিং ফিল্ডগুলো অদৃশ্য হয়ে যায়, অথবা 'place-order' বাটনে ক্লিক করলে একটি JavaScript error দেখায়। সার্ভার ঠিক আছে, কিন্তু ইউজার এক্সপেরিয়েন্স বা ব্যবহারকারীর অভিজ্ঞতা ভেঙে পড়েছে।
- গেটওয়ে ত্রুটির কারণে অর্ডারের ব্যর্থতা বেড়ে যায়। API কী (key) এক্সপায়ার হয়ে যায়। কারেন্সি বা মুদ্রার অমিল দেখা দেয়। 3D Secure-এর প্রয়োজনীয়তা পরিবর্তিত হয়। এই ত্রুটিগুলো WooCommerce অ্যাডমিন প্যানেলে 'failed orders' হিসেবে দেখা দেয়, আপনার আপটাইম লগ-এ সার্ভার এরর হিসেবে নয়। আপনি যদি ভুল স্ক্রিন পর্যবেক্ষণ করেন, তবে আপনি ধীরগতির রাজস্বের ক্ষতি (revenue leak) লক্ষ্য করতে পারবেন না।
- সার্ভার-সাইড অর্ডার পাইপলাইন আটকে যায়। গ্রাহক 'buy' বাটনে ক্লিক করার পর কোনো থার্ড-পার্টি ERP ইন্টিগ্রেশন, কাস্টম স্টক-সিঙ্ক ফাংশন, বা শিপিং-রেট ক্যালকুলেটর টাইম-আউট হয়ে যায়। অর্ডারটি অনির্দিষ্টকালের জন্য 'pending' স্ট্যাটাসে থেকে যায়। গ্রাহক পেজটি রিফ্রেশ করেন, বিভ্রান্ত হন এবং চলে যান। আপনার হোস্টিং মেট্রিক্স তবুও সবুজ দেখায়।
- কোনো স্পষ্ট কারণ ছাড়াই অর্ডার প্রবাহ বন্ধ হয়ে যায়। কোনো মারাত্মক ত্রুটি নেই। কোনো প্লাগইন কনফ্লিক্ট নেই। ক্যাশ (cache) কেবল পুরনো বা স্টেল (stale) চেকআউট JavaScript প্রদান করতে শুরু করে। একটি কনসেন্ট-ম্যানেজমেন্ট ব্যানার পেমেন্ট iframe-টিকে ব্লক করে দেয়। একটি CDN edge node একটি স্ক্রিপ্টের পুরনো ভার্সন সরবরাহ করে। সাইটটি অনলাইন আছে, কিন্তু চেকআউট কাজ করছে না।
যা আসলে গুরুত্বপূর্ণ তা মনিটর করা
এই ব্যর্থতাগুলো ধরতে হলে আপনাকে ইনফ্রাস্ট্রাকচার দেখা বন্ধ করে বিজনেস লজিক দেখা শুরু করতে হবে। একটি প্রকৃত ট্রানজ্যাকশন প্রবাহের জটিলতাকে সম্মান জানিয়ে কীভাবে একটি মনিটরিং কৌশল তৈরি করবেন তা নিচে দেওয়া হলো।
শুধুমাত্র আপটাইম নয়, বরং অর্ডার প্রবাহ মনিটর করুন। একটি পণ্য কার্টে যোগ করা যাচ্ছে কি না, চেকআউট এন্ডপয়েন্টটি সঠিক JSON রেসপন্স দিচ্ছে কি না এবং সফল পেমেন্টের পর 'thank-you' পেজটি লোড হচ্ছে কি না তা ট্র্যাক করুন। আপনি যদি এক্সটার্নাল পিং টুল ব্যবহার করেন, তবে সেগুলোকে শুধুমাত্র ডোমেইন রুট নয়, বরং ক্রিটিক্যাল পাথে (critical path) হিট করার জন্য কনফিগার করুন।
ব্যর্থ অর্ডারের সংখ্যাকে সাত দিনের বেসলাইনের সাথে তুলনা করুন। পরম সংখ্যা (absolute numbers) ব্যবহার করবেন না। কোনো প্রমোশনের পর সোমবার সকালে পাঁচটি ব্যর্থ অর্ডার স্বাভাবিক হতে পারে। কিন্তু শান্ত কোনো বুধবার বিকেলে পাঁচটি ব্যর্থ অর্ডার একটি সতর্ক সংকেত। আপনার নিজস্ব রোলিং বেসলাইন (rolling baseline) থেকে বিচ্যুতির দিকে নজর দিন, কোনো খেয়ালখুশি বা নির্দিষ্ট থ্রেশহোল্ডের দিকে নয়।
লাইভ গেটওয়েগুলো স্যান্ডবক্স মোডে আছে কিনা তা পরীক্ষা করুন। এটিকে আপনার ডেপ্লয়মেন্ট চেকলিস্ট এবং স্বয়ংক্রিয় পরীক্ষার (automated tests) অংশ হিসেবে অন্তর্ভুক্ত করুন। সক্রিয় গেটওয়ে সেটিংস পরীক্ষা করুন, অথবা পাবলিক API কীগুলো বিশ্লেষণ করে নিশ্চিত করুন যে সেগুলো প্রোডাকশন ক্রেডেনশিয়াল। একটি স্টোর কখনোই টেস্ট এনভায়রনমেন্টের সাথে যুক্ত থাকা অবস্থায় লাইভ হওয়া উচিত নয়।
প্রতিদিন সার্ভার-সাইড স্মোক টেস্ট (smoke test) চালান। মানুষের চোখে পড়ার আগেই একটি অকেজো চেকআউট শনাক্ত করার জন্য এটি সবচেয়ে কার্যকর সেফটি নেট।
প্রতিদিনের স্মোক টেস্ট তৈরি করা
একটি সঠিক স্মোক টেস্ট আপনার ডাটাবেসে বিশৃঙ্খলা সৃষ্টি না করেই একটি বাস্তবসম্মত অর্ডার তৈরি করে। প্রক্রিয়াটি এরকম: একটি লুকানো ভার্চুয়াল প্রোডাক্ট তৈরি করা, WooCommerce API-এর মাধ্যমে একটি টেস্ট অর্ডার চালানো, টোটাল বা মোট পরিমাণ সঠিকভাবে গণনা করা হয়েছে কিনা তা যাচাই করা, অর্ডারের স্ট্যাটাসগুলো পরিবর্তন করা এবং সবশেষে প্রতিটি আর্টিফ্যাক্ট (artifact) মুছে ফেলা।
বাস্তবায়নের খুঁটিনাটি বিষয়গুলো গুরুত্বপূর্ণ। আপনি যদি সতর্কতার সাথে ক্লিনআপ (cleanup) না করেন, তবে আপনার রিপোর্টগুলো ভুয়া অর্ডার এবং ফ্যান্টম প্রোডাক্টে ভরে যাবে।
টেস্ট চলাকালীন WooCommerce ইমেলগুলো বন্ধ রাখুন। আপনি একদমই চান না যে কোনো ক্রন জব (cron job) তার দৈনিক চেক চালানোর কারণে রাত ৩টায় স্টোর মালিক বা একজন অ্যাডমিন "New Order" ইমেল পান। স্ক্রিপ্ট চলাকালীন আউটগোয়িং নোটিফিকেশনগুলো ডিজেবল করে দিন, অথবা টেস্ট অর্ডার আইডি-র সাথে যুক্ত যেকোনো ইমেল ব্লক করতে একটি ফিল্টার ব্যবহার করুন।
স্ক্রিপ্ট ক্র্যাশ করলে ডেটা ক্লিনআপ করার জন্য একটি শাটডাউন ফাংশন ব্যবহার করুন। PHP আপনাকে একটি শাটডাউন ফাংশন রেজিস্টার করতে দেয় যা একটি ফেটাল এরর (fatal error) প্রসেসটি বন্ধ করে দিলেও কার্যকর হয়। যদি ট্যাক্স গণনা বা অর্ডারের স্ট্যাটাস পরিবর্তনের সময় আপনার স্মোক টেস্টটি বন্ধ হয়ে যায়, তবে সেই ক্লিনআপ রুটিনটি অবশ্যই চালু হতে হবে। অন্যথায় আপনি অনাথ (orphaned) অর্ডার এবং প্রোডাক্ট রেখে দেবেন।
অনাথ ডেটা এড়াতে তৈরির পরপরই আইডিগুলো রেকর্ড করুন। ভার্চুয়াল প্রোডাক্টটি তৈরি হওয়ার সাথে সাথে এর আইডিটি সংগ্রহ করুন। টেস্ট অর্ডারটি তৈরি হওয়ার সাথে সাথে এর আইডিটি সংগ্রহ করুন। এগুলো সাথে সাথে ভেরিয়েবলে সংরক্ষণ করুন। আপনি মাত্র কী তৈরি করেছেন তা জানতে স্ক্রিপ্টের শেষ পর্যন্ত অপেক্ষা করবেন না। যদি স্ক্রিপ্টটি মাঝপথে ব্যর্থ হয়, তবে আপনার শাটডাউন হ্যান্ডলার যাতে ঠিক কী মুছে ফেলতে হবে তা জানে, সেজন্য আপনার কাছে সেই আইডিগুলো আগে থেকেই থাকা প্রয়োজন।
এই টেস্টটি ইউজার ইন্টারফেসকে বাইপাস করে সরাসরি অ্যাপ্লিকেশন লেয়ারের সাথে যোগাযোগ করে। এটি গুরুত্বপূর্ণ। ফ্রন্ট এন্ড ক্যাশ করা, মিনিফাইড (minified) বা ডজনখানেক ব্রাউজার এক্সটেনশন দ্বারা প্রভাবিত হতে পারে। API হলো মূল সত্যের প্রতিফলন: WooCommerce কি এখনও একটি অর্ডার তৈরি, গণনা এবং পরিবর্তন করতে পারে?
সুরক্ষার দুটি স্তর
আপনার এক্সটার্নাল এবং ইন্টার্নাল উভয় ধরনের মনিটরিং প্রয়োজন, এবং প্রতিটি স্তর আপনাকে আসলে কী বলছে তা বোঝা প্রয়োজন।
এক্সটার্নাল মনিটরিং এই প্রশ্নের উত্তর দেয়, "মানুষ কি সাইটে পৌঁছাতে পারছে?" DNS সমস্যা, SSL মেয়াদ শেষ হওয়া, সার্ভার ডাউন এবং নেটওয়ার্ক পার্টিশনিং শনাক্ত করতে এটি ব্যবহার করুন। এটি অবকাঠামোগত ব্যর্থতার বিরুদ্ধে আপনার প্রথম প্রতিরক্ষা স্তর।
ইন্টার্নাল মনিটরিং এই প্রশ্নের উত্তর দেয়, "মানুষ কি কিছু কিনতে পারছে?" এটি আপনার অ্যাপ্লিকেশনের ভেতরে কাজ করে। এটি অর্ডারের ব্যর্থতার হার, গেটওয়ে মোড, চেকআউটের সময় ডাটাবেসের পারফরম্যান্স এবং আপনার প্রতিদিনের স্মোক টেস্টের ফলাফল পর্যবেক্ষণ করে। এটি বিজনেস-লজিক সংক্রান্ত ব্যর্থতাগুলো শনাক্ত করে যা কোনো এক্সটার্নাল পিং সার্ভিস (ping service) কখনোই দেখতে পাবে না।
একটি আউটেজ (outage) বা সাইট ডাউন হওয়া বিষয়টি বেশ প্রকট। সাইট ডাউন হয়ে যায়, অ্যালার্ট আসে এবং আপনি তা ঠিক করেন। গ্রাহকরা কিছুটা অসন্তুষ্ট হতে পারেন, কিন্তু তারা প্রায়ই ফিরে আসেন। কিন্তু একটি ত্রুটিপূর্ণ চেকআউট খুবই নিঃশব্দ। আপনার বিজ্ঞাপন চলতে থাকে, কাস্টমার সংগ্রহের বাজেট খরচ হতে থাকে এবং গ্রাহকরা কোনো কথা না বলেই চলে যান। অথচ আপনার আপটাইম ড্যাশবোর্ড পুরো সময় জুড়ে আশ্বস্ত করার মতো সবুজ রঙেই থাকে।
হোমপেজ দেখা বন্ধ করুন। টাকার দিকে নজর দিন।
