ইনফ্রাস্ট্রাকচার ও স্কেলিংপরীক্ষার আগেই প্রস্তুত: Web Node Scale ও নিরাপদে বদলানো — NovaCommerce ২
দুটি application pool capacity বাড়িয়েছে। আসল কাজ ছিল নতুন node-এর readiness, পুরোনোটির drain এবং একই service version ঠিক রাখা।
Private origin আর blue/green switch-ই সব নয়। বাস্তব capacity, compatible data change, worker handover ও পরীক্ষিত recovery path মিলিয়ে deploy পরিকল্পনা করুন।
লেখক
Anichur Rahaman

09:44-এ engineer-কে বলা হলো 10:00-এর ticket sale-এর আগে email-এর typo fix deploy করতে। একই সময়ে login attempt বেড়েছে। দৃশ্যটি শিক্ষামূলক, বাস্তব field report নয়। হাতে 16 মিনিট, কিন্তু ছোট diff বা দুইটি green server icon নিরাপদ release-এর প্রমাণ নয়।
প্রশ্ন শুধু কত দ্রুত version switch হবে নয়। পুরোনো-নতুন component পাশাপাশি থাকলে customer কি সঠিক transaction শেষ করতে পারবেন, আর কাজ হারানো বা পুনরাবৃত্তি ছাড়া recover করা যাবে? Cosmetic fix peak-এর পরে করাই কখনো দায়িত্বশীল সিদ্ধান্ত।
Engineering for High Volume-এর শেষ, part 5 । আগের লেখা: web capacity · queue ও worker · data tier · observability।
OWASP Top10:2025-এ broken access control, security misconfiguration ও software supply-chain failure আছে। এটি risk-awareness reference; সম্পূর্ণ assessment বা firewall দিয়ে সব ঠিক হওয়ার প্রমাণ নয়। নতুন layer কেনার আগে customer, admin, background connection ও outbound integration-এর route আঁকুন।
Public web traffic-এ উপযুক্ত edge protection দিন; origin-এর listener ও IPv6-সহ বিকল্প address সীমিত করুন। Intended edge-to-origin route authenticate ও hostname validate করুন। Provider-wide IP allowlist আপনার account চিহ্নিত করে না। যেমন Cloudflare global origin-pull certificate সব account-এ shared। নিজের account/hostname-এর binding আরও নির্দিষ্ট configuration চায়।
Database/cache শুধু authorised workload থেকে, administration controlled access ও strong identity দিয়ে। Private address নিজে permission নয়। Sibling app আলাদা করুন: একই service alias অন্য container-এ resolve হলে routing/data exposure হতে পারে—এখানে বাস্তব ঘটনার দাবি নয়। Health check/observability-রও সীমিত access লাগে; “worker-এ কোনো inbound নেই” সার্বজনীন নিয়ম নয়।
OWASP-এর বর্তমান TLS guidance TLS 1.3 এবং প্রয়োজনীয় compatibility-তে নিরাপদ TLS 1.2 সমর্থন করে; deprecated protocol বন্ধ। প্রাসঙ্গিক প্রতিটি hop-এ certificate ও peer identity যাচাই করুন। Private subnet মানেই plaintext নিরাপদ ধরে নেবেন না। Same-host exception থাকলে actual threat model-এ লিখুন। Encryption access control-এর বিকল্প নয়।
CDN eligible public content cache ও configured attack protection দেয়; সব flood শুষে নেবে বা checkout cache নিরাপদ করবে না। Personalised/authenticated/cart/checkout/session-setting response shared cache থেকে বাইরে রাখুন, যদি না সুনির্দিষ্ট safe design separation প্রমাণ করে। এক visitor অন্যের session/account data পান কি না test করুন।
Bot challenge/rate limit-এ বাস্তব journey, accessibility, shared-IP customer ও বৈধ API/webhook ধরুন। কয়েক address-এর login burst তদন্তের signal, scalper-এর প্রমাণ নয়। Account/action limit-ও লাগবে; edge compromised account সারায় না। Secret image/log থেকে বাইরে, build/deploy credential সীমিত, supported dependency patch ও আলাদা protected backup restore test রাখুন।
Controlled pipeline-এ versioned artifact build, staging-এ test, তারপর সেটিই promote করুন; serving node-এ আলাদা build নয়। Source revision, dependency/build input, approval, config version ও release reference রাখুন। Secret আলাদা রাখুন। Environment difference দেখুন: একই code মানেই staging ও production এক নয়।
Docker digest দিয়ে image identity ব্যাখ্যা করে। Intended registry digest ও platform pin করুন। Multi-platform index ও platform image-এর digest আলাদা; প্রতিটি local image ID একই ধরনের identifier নয়। Trusted build/provenance ও verification-ও চাই—digest ক্ষতিকর image-ও নিখুঁতভাবে চিহ্নিত করে। Recovery window অনুযায়ী আগের compatible artifact/assets রাখুন।
Expand-and-contract: compatible shape যোগ, নিরাপদ migration, ব্যবহার switch, পরে পুরোনো shape অপসারণ। phone থেকে contact_phone হলে rehearsed migration-এ নতুন field যোগ করুন। সব live writer, worker ও integration compatible dual-write না করা পর্যন্ত তার ওপর নির্ভর নয়। Rolling deploy-এর মধ্যে old-only writer কিছুক্ষণ চলবে।
Bounded restartable batch, stable progress ও concurrency-safe update দিয়ে backfill করুন। পুরোনো snapshot দিয়ে নতুন customer edit overwrite নয়। Null handling-সহ পুরোনো-নতুন actual value reconcile করুন; শুধু row count বা non-empty field যথেষ্ট নয়। Lock, WAL, replica lag, disk ও business latency দেখুন; measured limit ছাড়ালে pause।
PostgreSQL 18 ALTER TABLE documentation rewrite ও locking আলাদা করে। দ্রুত add-column-এও lock লাগতে বা transaction-এর পেছনে wait হতে পারে। Nullable মানে lock-free নয়। Exact statement/workload rehearse, উপযুক্ত lock/statement timeout ও stop/recovery plan রাখুন।
উদাহরণ:2,400,000 row÷5,000=480 batch। প্রতিটি assumed 2 second হলে 960 second বা 16 মিনিট processing। Wait, throttling, retry ও verification বাদ; এটি completion forecast বা user impact নেই—এমন প্রমাণ নয়। Convergence প্রমাণের পরে read switch। পুরোনো web/worker/job/API dependency ও প্রতিশ্রুত rollback window শেষ হলে পরের approved window-এ contract।
দুই node redundancy দেয় তখনই, যখন একটি সরানোর পরও প্রয়োজনীয় কাজ চলে। উদাহরণে peak 900 request/second, একই tested mix-এ এক node 550 সামলায়। দুইটির একটি drain করলে 350 request/second ঘাটতি। Green দুই node মানেই rollout নিরাপদ নয়। তিনটি থাকলে একটি বাদে 1,100 হতে পারে; dependency bottleneck ও safety headroom তবু test করতে হবে।
Kubernetes rolling-update guidance availability/surge control দেখায়; যেকোনো platform-এ সমতুল্য স্পষ্ট সিদ্ধান্ত লাগে। Capacity থাকলে candidate চালু, readiness ও representative business behaviour যাচাই, সরানোর node-এ নতুন কাজ বন্ধ ও bounded in-flight কাজ শেষ হতে দিন। Health endpoint pass করেও checkout broken হতে পারে। Readiness, graceful termination ও load-balancer propagation আলাদা check।
Proxy retry দিয়ে সব interruption আড়াল নয়। NGINX non-idempotent request-এর বিশেষ আচরণ নথিভুক্ত করেছে। Application/provider contract duplicate আটকাতে না পারলে ambiguous payment retry একই effect করতে পারে। Operation identity রাখুন, unknown query ও bounded recovery করুন। Long request, WebSocket ও browser asset/version compatibility ধরুন। Public traffic পাওয়ার আগেও candidate shared data/downstream-এ প্রভাব ফেলতে পারে।
Worker বদলাতে পুরো queue খালি করা সাধারণত জরুরি নয়। পুরোনো process নতুন job নেওয়া বন্ধ করবে, tested grace-এ চলমান কাজ শেষ করবে, compatible replacement supervision-এ চালু হবে। Supported version window-এ queued payload ও handler compatible রাখুন। Database rollback পাঠানো email বা কাটা payment ফেরত নেয় না।
Laravel 13 queue documentation graceful restart, supervision ও timeout/retry সম্পর্ক বোঝায়। আপনার configuration-এ restart/pause signal চলে কি না দেখুন; interruption polling বন্ধও থাকতে পারে। Shutdown-এর সময় দিন; execution timeout প্রযোজ্য retry/visibility boundary থেকে margin-সহ কম রাখুন। Duplicate delivery মাথায় রেখে job effect লিখুন। Force-kill করে কাজ হয়নি ধরে নেবেন না।
Version switch-এর আগে scheduler ownership বা shared lock সমন্বয় করুন। Laravel scheduling documentation shared-cache নির্ভর single-server/overlap control ব্যাখ্যা করে। Scheduler “সবার শেষে” চালু করাই duplicate ঠেকায় না; এক process-ও exactly-once effect নয়। Missed run, stale lock, long-running/sub-minute task দেখুন; প্রয়োজনমতো operation-level deduplication।
Blue/green-এ active ও candidate পাশাপাশি; acceptance-এর পর route বদলায়। Switch-এ config validation, readiness, propagation ও drain আছে; সবার জন্য one-second rollback নয়। খোলা browser-এর পুরোনো asset রাখুন; দুই version shared session/cache/API contract ব্যবহার করতে পারে কি না নিশ্চিত করুন।
Switch-এর আগে failure decision লিখুন: business/error/latency/queue-age কোন signal-এ promotion বন্ধ, কে সিদ্ধান্ত দেবেন, কোন version compatible এবং data/external effect কীভাবে সামলাবেন। Measured observation window রাখুন। 20% canary বা পাঁচ মিনিট soak সর্বত্র যথেষ্ট নয়; low-volume গুরুত্বপূর্ণ journey ওই সময়ে নাও ঘটতে পারে।
Destructive schema পুরোনো binary অচল করতে পারে। Code revert completed refund, সব backfill বা dropped data ফিরিয়ে দেয় না। পরিস্থিতি অনুযায়ী rehearsed forward repair, compatibility rollback বা data recovery বেছে নিন। Fresh dump মানে recoverable business প্রমাণ নয়; দেখুন recovery-testing guide। Production DB restore পরের বৈধ transaction হারাতে পারে, reconciliation লাগে।

Table evidence checklist, guarantee নয়। Authorised representative end-to-end test-এ payment/email/shipment নিরাপদ রাখুন। শুধু HTTP status নয়, business outcome মিলান। Named operator/escalation রাখুন। Exposure test শুধু অনুমোদিত infrastructure-এ। Evidence-এ secret redact করুন; release ticket-এ copy নয়।
09:44-এ compatibility/capacity/recovery evidence অসম্পূর্ণ হলে typo fix অপেক্ষা করতে পারে। সত্যিকারের urgent security fix-এ explicit risk decision ও rehearsed পথ চাই; automatic freeze exemption নয়। Layer ও deployment technique সিদ্ধান্তকে testable করে। “Zero downtime” নির্দিষ্ট scope-এ মাপার লক্ষ্য, দুই server বা colour switch-এর উপহার নয়।
| Gate | যে evidence রাখবেন | Pause করার কারণ |
|---|---|---|
| Exposure | ঠিক hostname/edge accepted; unauthorised route denied | Alternate origin/data/admin route exposed |
| Artifact/config | Trusted tested digest/platform ও reviewed config | Unknown build, secret leak বা unsafe difference |
| Schema/data | সব writer compatible; value reconciled | Lock, drift, destructive change বা backfill বাকি |
| Capacity | Drain/failure state intended mix-এ tested | বাকি capacity/dependency সামলায় না |
| Worker/scheduler | Compatible job, graceful handover, ownership/lock | Unknown effect, duplicate/missed recurring work |
| Recovery/acceptance | Named decider, business check, compatible recovery | Recoverable state বা effect reconciliation নেই |
পর্যালোচনা 5 নভেম্বর 2026 । Anichur Rahaman StoreConsole-এর নির্মাতা। দৃশ্য, rate ও timing শিক্ষামূলক, benchmark বা audited production topology-র দাবি নয়।
লেখকের পরিচয়
Anichur Rahaman
পড়া চালিয়ে যান