এই পর্বে যা শিখবেন
- Compute, storage, database, networking, IAM, নিরাপত্তা আর খরচের ধারণার প্রশ্নে শক্তিশালী উত্তর চেনা আর নিজে বলা
- পাঁচ ধাপের ছকে পরিস্থিতির প্রশ্ন সামলানো: ৯৯.৯৫% লক্ষ্যের three-tier app, region বন্ধ, database সরানো, ঈদের ১০ গুণ ভিড়
- Whiteboard-এ VPC আঁকা, আর CIDR ও availability-র হিসাব মুখে মুখে যাচাই করা
- স্তরে স্তরে troubleshooting: private server, public bucket, হঠাৎ বড় বিল, 502, ধীর সেবা
- আচরণগত প্রশ্ন, সীমিত অভিজ্ঞতা নিয়ে সৎ কথা, ক্যাপস্টোন থেকে portfolio, আর চার সপ্তাহের পরিকল্পনা
১ · Cloud ইন্টারভিউ সাধারণত কীভাবে এগোয়, আর উত্তরের পাঁচ ধাপের ছক
Cloud engineer, DevOps engineer, SRE বা backend পদের ইন্টারভিউর গঠন একেক জায়গায় একেক রকম। ভাগের নাম, সংখ্যা আর ক্রম প্রতিষ্ঠান, পদ ও দেশভেদে বদলায়। নিচের ছবিটি একটি সাধারণ ধারা, কোনো নির্দিষ্ট প্রতিষ্ঠানের প্রক্রিয়া নয়। ছোট দলে সব মিলিয়ে একটি আলাপই হতে পারে।
| ভাগ | সাধারণত যা দেখা হয় | এই পাতায় |
|---|---|---|
| পরিচিতি | আপনার কাজ, project, কেন এই পদ | অংশ ৮, ৯ |
| ধারণা | সংজ্ঞা নয়, পার্থক্য আর কখন কোনটি | অংশ ২, ৩, ৪ |
| নকশা | অস্পষ্ট চাহিদা থেকে architecture, whiteboard-এ | অংশ ৫, ৬ |
| Troubleshooting | কিছু ভেঙেছে, আপনি কীভাবে খুঁজবেন | অংশ ৭ |
| আচরণগত | ভুল, মতভেদ, চাপের সময় আপনি কী করেন | অংশ ৮ |
| আপনার প্রশ্ন | দলটি কীভাবে কাজ করে, আপনি কতটা ভেবেছেন | অংশ ৮ |
ভালো ঠিকাদারকে কেউ বললেন, “একটি বাড়ি বানিয়ে দিন।” তিনি সঙ্গে সঙ্গে ইট কিনতে যান না। আগে জিজ্ঞেস করেন: কজন থাকবেন, কত তলা, জমি কেমন, বাজেট কত। তারপর নকশা আঁকেন, ভাবেন ভূমিকম্প বা বন্যায় কী হবে, আর শেষে খরচের হিসাব দেন। Cloud-এর পরিস্থিতি প্রশ্নেও ঠিক এই ক্রম।
পাঁচ ধাপের ছক
পরিস্থিতির প্রশ্নে পাঁচ ধাপ
Clarify, Requirements, Design, Failure, Cost
- Clarify (clarifying question): ২–৩টি প্রশ্নে চাহিদা পরিষ্কার করুন। “ব্যবহারকারী কোন দেশে?”, “ডেটা দেশের বাইরে রাখা যাবে?”
- Requirements: কথাকে সংখ্যা বানান। না পেলে নিজে ধরে নিন, আর জোরে বলুন: “ধরে নিচ্ছি গড়ে ২০০ req/s.”
- Design: সবচেয়ে সরল নকশা আগে। পরে দরকার দেখালে তবেই জটিলতা।
- Failure: প্রতিটি বাক্সে আঙুল রেখে জিজ্ঞেস করুন, “এটি পড়লে কী হবে?” এই ধাপেই অভিজ্ঞতা বোঝা যায়।
- Cost: একটি মোটা হিসাব আর একটি trade-off. “এটি বাদ দিলাম, কারণ এত টাকায় এতটুকু লাভ।”
এক বাক্যে সংজ্ঞা → একটি ছোট উদাহরণ বা সংখ্যা → কী পাই, কী দিই → কখন নয়। “জোরে ভাবা” এখানেও কাজের: অনুমান মুখে বললে ইন্টারভিউয়ার ভুলটি ধরিয়ে দিতে পারেন।
সবচেয়ে চোখে পড়া ভুল: প্রশ্ন শেষ হওয়ার আগেই service-এর নাম বলা; এক provider-এর নাম মুখস্থ বলা, কিন্তু কেন তা না বলা; “সবসময়” আর “কখনো না” দিয়ে উত্তর; আর “Kubernetes দিয়ে দেব” দিয়ে সব প্রশ্নের শেষ। “এটি আমি নিশ্চিত নই, তবে এভাবে যাচাই করব” একটি ভালো উত্তর। বানিয়ে বলা নয়।
এই কোর্স provider-নিরপেক্ষ শব্দ ব্যবহার করে। ইন্টারভিউতেও আগে ধারণা বলুন, তারপর উদাহরণে নাম: “managed database, যেমন AWS RDS, Azure SQL Database বা Google Cloud SQL.” যে provider-এ আপনার অভিজ্ঞতা, তা সৎভাবে বলুন।
২ · ধারণার প্রশ্ন: compute, storage আর database
ফিরে পড়ুন: compute পর্ব ১৫, ১৭, ১৮, ১৯; storage পর্ব ২০, ২১; database পর্ব ২২, ২৩, ২৪.
Compute
প্র ০১একটি নতুন web API চালাবেন। VM, container service, PaaS আর FaaS-এর মধ্যে কীভাবে বাছবেন? (সহজ)
শক্তিশালী উত্তর: আগে বাদ, পরে বাছাই। প্রথমে শর্ত দিয়ে ছাঁকি: run time কত, GPU লাগবে কি না, OS-এ বিশেষ কিছু, state আছে কি না, দলের দক্ষতা কত। যা টিকে থাকে, তার মধ্যে সবচেয়ে হালকা বিকল্প নিই, কারণ ওপরের স্তরে আমার কাজ কম। সাধারণ API-তে PaaS বা container service দিয়ে শুরু করতাম। ট্রাফিক খুব কম আর ফাঁকে ফাঁকে হলে FaaS সস্তা হতে পারে। স্থির উঁচু load-এ VM বা container সস্তা হতে পারে।
দুর্বল উত্তর দেখতে যেমন: “Kubernetes, কারণ সবাই ব্যবহার করে।” Kubernetes একটি বিনিয়োগ, মান নির্ধারক নয়।
ফলো-আপ:
- “FaaS থেকে VM কখন সস্তা?” → Crossover = স্থির মাসিক বিল ÷ প্রতি request-এর পুরো দাম। Gateway, log আর মানুষের সময়ও ধরতে হবে।
প্র ০২Vertical আর horizontal scaling-এর পার্থক্য কী? কোনটি আগে? (সহজ)
শক্তিশালী উত্তর: Vertical scaling মানে একই machine বড় করা। Horizontal মানে machine-এর সংখ্যা বাড়ানো। Vertical সহজ, কোড বদলায় না, কিন্তু সীমা আছে, আর সাধারণত restart লাগে। Horizontal-এ সীমা অনেক দূরে, এক machine পড়লেও সেবা চলে, কিন্তু app-কে stateless হতে হয়। তাই app স্তরে horizontal, আর database-এ আগে vertical ও read replica, এটিই সাধারণ পথ।
দুর্বল উত্তর দেখতে যেমন: “Horizontal সবসময় ভালো।” Database-এ লেখা ভাগ করা অনেক কঠিন কাজ।
প্র ০৩Autoscaling কীভাবে সিদ্ধান্ত নেয়? ৬টি instance, metric-এর মান ১৫০, লক্ষ্য ৬০ হলে কতটি হবে? (মাঝারি)
শক্তিশালী উত্তর: Target tracking-এর সূত্র: desired = ⌈current × metric ÷ target⌉, তারপর min আর max-এ আটকানো। এখানে ৬ × ১৫০ ÷ ৬০ = ১৫। সমস্যা হলো CPU ১০০%-এ আটকে যায়, তাই আসল চাপ লুকায়, আর কয়েক দফা লাগে। তাই I/O-নির্ভর app-এ requests per target বা queue depth ভালো signal.
ফলো-আপ:
- “Cooldown আর warm-up?” → Cooldown দুই সিদ্ধান্তের বিরতি; warm-up নতুন instance তৈরি হওয়ার সময়।
- “হঠাৎ ভিড়ে autoscaling কেন হারে?” → Boot-এর দেরিতে অনুরোধ হারায়। জানা ভিড়ে scheduled scaling আর target-এ headroom রাখি।
প্র ০৪App ঝুলে আছে, অথচ autoscaling group instance বদলাচ্ছে না। কেন? (মাঝারি)
শক্তিশালী উত্তর: Group সম্ভবত শুধু instance-এর health check শুনছে। VM চলছে, তাই সে সুস্থ বলে ধরছে। App সাড়া দিচ্ছে কি না, তা জানে load balancer. সমাধান: group-কে load balancer-এর health check শোনানো, আর grace period ঠিক রাখা, যাতে boot-এর সময়েই instance বাদ না পড়ে।
প্র ০৫Spot বা বাতিলযোগ্য instance কোন কাজে নেবেন, কোন কাজে নয়? (মাঝারি)
শক্তিশালী উত্তর: থামলে আবার চালানো যায়, ভাগ করা যায়, আর সময়ে ছাড় আছে এমন কাজে: batch, CI, render, stateless worker. Checkpoint রাখি আর একাধিক pool ব্যবহার করি। ৭০%-এর মতো বাঁচতে পারে, তবে হার provider-ভেদে আলাদা। রাখব না stateful কাজ, ডেটার একমাত্র copy, আর থামানো যায় না এমন কাজ।
দুর্বল উত্তর দেখতে যেমন: “Database-এও spot, ৭০% বাঁচবে।” একটি reclaim-এ সেবা আর ডেটা দুটোই ঝুঁকিতে।
প্র ০৬Function-এর cold start কী? ২০০ req/s, প্রতিটি ০.৫ সেকেন্ড হলে concurrency কত? (মাঝারি)
শক্তিশালী উত্তর: Cold start হলো নতুন environment-এর init-এর দেরি। কম ট্রাফিকে এটি স্বাভাবিক। Package আর init ছোট করে, snapshot বা provisioned concurrency দিয়ে কমানো যায়। Concurrency = rate × duration = ২০০ × ০.৫ = ১০০। Database ধীর হলে duration বাড়ে, তাই concurrency-ও বাড়ে, আর সীমা আগে সেখানেই কামড়ায়।
ফলো-আপ:
- “Reserved আর provisioned concurrency?” → Reserved জায়গা ও ছাদ, আগে থেকে কিছু চালু রাখে না। Provisioned আগে init করে রাখা, যার বিল অলসেও চলে।
প্র ০৭L4 আর L7 load balancer-এর পার্থক্য কী? (সহজ)
শক্তিশালী উত্তর: L4 IP আর port দেখে দ্রুত সংযোগ ভাগ করে; HTTP পড়ে না। L7 HTTP পড়ে, তাই path বা host দেখে rule চালাতে পারে, TLS শেষ করতে পারে। ওয়েব app-এ সাধারণত L7, আর অ-HTTP বা খুব বেশি সংযোগের কাজে L4.
ফলো-আপ:
- “Target unhealthy হতে কত সময়?” → সর্বোচ্চ প্রায় U × I + T, যেমন ২ × ১০ + ৫ = ২৫ সেকেন্ড।
প্র ০৮Stateless হওয়া cloud-এ এত জরুরি কেন? Session কোথায় রাখবেন? (সহজ)
শক্তিশালী উত্তর: Stateless instance যেকোনো সময় বদলানো যায়, তাই autoscaling, rolling deploy আর AZ হারানো সহজ হয়। Session থাকবে বাইরের store-এ, যেমন Redis বা database-এ, আর ফাইল থাকবে object storage-এ। Sticky session সাময়িক সমাধান: instance পড়লে সেই session হারায়, আর ভার অসমান হয়।
Storage
প্র ০৯Block, file আর object storage-এর পার্থক্য কী? (সহজ)
শক্তিশালী উত্তর: ঠিকানা আর ভাগ করার ধরনে। Block: block নম্বর, সাধারণত এক VM-এর disk, database-এ ভালো। File: path, অনেক VM একই ফোল্ডার দেখে। Object: key, HTTP-তে পুরো জিনিস, ছবি, backup, log-এ ভালো। সন্দেহ হলে object দিয়ে শুরু করি।
ফলো-আপ:
- “Object storage-এ database নয় কেন?” → অংশবিশেষ বদলানো যায় না, latency বেশি, আর প্রতি অনুরোধে দাম লাগে।
প্র ১০Durability আর availability কি এক? (সহজ)
শক্তিশালী উত্তর: না। Durability মানে ডেটা টিকে থাকা; availability মানে এখন পাওয়া। Bucket সাময়িক বন্ধ থাকলেও ডেটা হারায় না। এগারো nine একটি নকশা-লক্ষ্য: ১ কোটি object-এ গড়ে ১০,০০০ বছরে একটি হারানো। এটি ভুল করে মোছার বিমা নয়।
প্র ১১Disk ৩,০০০ IOPS-এর, block ১৬ KB. Throughput কত? আরও বাড়াতে কী দেখবেন? (মাঝারি)
শক্তিশালী উত্তর: ৩,০০০ × ১৬ KB = ৪৮ MB/s, যদি volume-এর MB/s সীমা তার বেশি হয়। সবচেয়ে ছোট সীমাই আসল সীমা। তাই volume-এর IOPS, volume-এর MB/s, VM-এর নিজের সীমা আর queue depth, চারটিই দেখি।
প্র ১২Versioned bucket-এ DELETE করলে কী হয়? Lifecycle রেখেও বিল কমছে না কেন? (মাঝারি)
শক্তিশালী উত্তর: Version ID ছাড়া DELETE দিলে delete marker বসে, ডেটা থাকে। Version ID দিলে সেই version স্থায়ীভাবে মোছে। বিল না কমার সাধারণ কারণ: noncurrent version জমছে, অসমাপ্ত multipart পড়ে আছে, অথবা ছোট object সরানোর ফি বেশি।
প্র ১৩ক্রেতা নিজের invoice ডাউনলোড করবেন, bucket private. কীভাবে দেবেন? (মাঝারি)
শক্তিশালী উত্তর: অ্যাপ ক্রেতার অনুমতি যাচাই করে ছোট মেয়াদের presigned URL বানায়। ফাইল সরাসরি storage থেকে যায়, server-এর memory আর network বাঁচে। URL কোনো ব্যবহারকারীর সাথে বাঁধা নয়: যাঁর হাতে থাকে, তিনিই মেয়াদ পর্যন্ত কাজটি করতে পারেন। তাই মেয়াদ ছোট, আর URL log-এ লিখি না।
দুর্বল উত্তর দেখতে যেমন: “Bucket public করে দিই, URL তো কেউ জানে না।” এটি নিরাপত্তা নয়।
Database
প্র ১৪RPO আর RTO কী? Replica থাকলে কি backup লাগে? (সহজ)
শক্তিশালী উত্তর: RPO মাপে কত ডেটা হারানো চলে, পেছনের দিকে। RTO মাপে কত সময় বন্ধ থাকা চলে, সামনের দিকে। Backup লাগে: replica হার্ডওয়্যার হারানো সামলায়, কিন্তু ভুল DELETE আর ransomware-ও কপি করে। ভুল থেকে ফেরায় PITR আর পরীক্ষিত restore.
ফলো-আপ:
- “ঘণ্টায় backup, পৌঁছাতে ১০ মিনিট; সবচেয়ে খারাপ RPO?” → ৬০ + ১০ = ৭০ মিনিট।
প্র ১৫Standby আর read replica-র পার্থক্য কী? (মাঝারি)
শক্তিশালী উত্তর: Standby availability-র জন্য, সাধারণত synchronous, আর query নেয় না। Read replica read scaling-এর জন্য, সাধারণত asynchronous, তাই stale read হতে পারে। একটি অন্যটির বিকল্প নয়।
ফলো-আপ:
- “লেখার পরেই নিজের লেখা দেখাবেন কীভাবে?” → Read-your-writes: লেখার পর নিজের পড়া primary-তে, অথবা replica-র LSN মিলিয়ে পড়া।
প্র ১৬“Too many connections” error. ৪০টি instance, pool ২০, ব্যবহারযোগ্য slot ৪৮০। কী করবেন? (মাঝারি)
শক্তিশালী উত্তর: গুনি: ৪০ × ২০ = ৮০০, সীমার ওপরে। সবচেয়ে বড় নিরাপদ pool = ৪৮০ ÷ ৪০ = ১২। Surge-এর সময়ের instance-ও ধরি। তারপর database proxy ভাবি: অনেক client connection অল্প server connection-এ মেলে। সীমা বাড়ানো শেষ উপায়, কারণ প্রতিটি connection memory খায়।
দুর্বল উত্তর দেখতে যেমন: “max_connections ১০ গুণ করে দিই।” সমস্যাটি মেটে না, শুধু database-এর memory-তে সরে যায়।
প্র ১৭Failover-এর সময় app-কে কী করতে হবে? (কঠিন)
শক্তিশালী উত্তর: এক-দুই মিনিটের ফাঁক ধরে নিই। App-এর দায়: ছোট timeout, jitter-সহ backoff, DNS TTL মানা, মরা connection বাতিল, আর লেখায় idempotency key, যাতে retry-তে দুটি অর্ডার না হয়। Retry-র সীমা না থাকলে ফিরে আসা database আবার ডুবে যায় (retry storm).
ফলো-আপ:
- “Primary ফিরে এসে লেখা নিলে?” → Split-brain; তাই fencing.
প্র ১৮Relational, NoSQL আর cache-এর মধ্যে কীভাবে বাছবেন? (মাঝারি)
শক্তিশালী উত্তর: শুরু হয় query shape থেকে, জনপ্রিয়তা থেকে নয়। অনিশ্চিত join আর transaction হলে relational. জানা key দিয়ে বিপুল পড়া-লেখা হলে key-value বা document. NoSQL-এ আগে access pattern, পরে key, কারণ সীমা বসে partition-এ, মোট table-এ নয়। প্রতিটি নতুন store নতুন operational burden, তাই কম store দিয়ে শুরু করি।
ফলো-আপ:
- “মোট capacity থাকার পরও throttle কেন?” → Hot partition: ভার এক partition-এ জমেছে।
প্র ১৯Cache hit ৯০% থেকে ৭০% হলে database-এর কী হয়? (মাঝারি)
শক্তিশালী উত্তর: DB-র ভার = (১ − h) × মোট। Miss ১০% থেকে ৩০%, অর্থাৎ ভার ৩ গুণ। তাই hit ratio নয়, miss দিয়ে ভাবি। Cache পড়লে কী হবে, সেই হিসাব আগে রাখি: cold cache-এ শুরুতে সবই miss, আর cache stampede-এ একই key-এর জন্য সবাই database-এ ছোটে।
৩ · ধারণার প্রশ্ন: networking আর IAM
ফিরে পড়ুন: ভৌগোলিক কাঠামো পর্ব ০৫; networking পর্ব ২৫, ২৬, ২৭, ২৮, ২৯, ৩০; IAM পর্ব ৩১, ৩২.
Networking
প্র ২০Region আর availability zone-এর পার্থক্য কী? Multi-AZ আর multi-region কখন? (সহজ)
শক্তিশালী উত্তর: Region একটি ভৌগোলিক এলাকা; AZ তার ভেতরের বিচ্ছিন্ন অংশ। Multi-AZ এক region-এ, কাছাকাছি, তাই সাধারণত synchronous. Multi-region দূরে, সাধারণত asynchronous, তাই RPO শূন্যের বেশি হতে পারে। আগে multi-AZ, তারপর হিসাব করে অন্য region.
দুর্বল উত্তর দেখতে যেমন: “দুটিই করে দিই, বেশি নিরাপদ।” লক্ষ্য না জেনে খরচ আর জটিলতা বাড়ে, আর খারাপ deploy দুই জায়গাতেই পৌঁছাতে পারে।
প্র ২১Subnet-কে public বানায় কী? (সহজ)
শক্তিশালী উত্তর: Route table-এ internet gateway-এর route. অন্য কোনো সুইচ নেই। Instance-এর ইন্টারনেট পেতে public IP-ও লাগে। NAT-এর route থাকলে private, কোনো পথ না থাকলে isolated.
দুর্বল উত্তর দেখতে যেমন: “Subnet তৈরির সময় public টিক দিলে।” টিকটি সাধারণত শুধু auto-assign IP-র, আসল পরিচয় route.
প্র ২২Internet gateway আর NAT gateway-এর পার্থক্য কী? NAT কোথায় বসে? (মাঝারি)
শক্তিশালী উত্তর: IGW 1:1 অনুবাদ করে, দুই দিক থেকেই সংযোগ শুরু হতে পারে। NAT অনেকে-থেকে-একে অনুবাদ করে, সংযোগ শুরু হয় শুধু ভেতর থেকে। AWS-ধরনের নকশায় NAT public subnet-এ বসে, কারণ তার নিজের ইন্টারনেট পথ লাগে। প্রতি AZ-এ একটি রাখি, যাতে এক AZ পড়লে অন্যরা না আটকায়।
ফলো-আপ:
- “NAT-এর বিল কমাবেন কীভাবে?” → Flow log দেখে বড় গন্তব্য খুঁজি; একই region-এর storage-এ endpoint দিই।
প্র ২৩Security group আর network ACL-এর পার্থক্য কী? একটি IP আটকাবেন কীভাবে? (মাঝারি)
শক্তিশালী উত্তর: Security group interface-এ বসে, stateful, শুধু allow. NACL subnet-এ বসে, stateless, ছোট নম্বর আগে, allow ও deny দুটোই। AWS-ধরনে security group-এ deny নেই, তাই একটি IP আটকাতে NACL-এ ছোট নম্বরের deny বা WAF.
ফলো-আপ:
- “Inbound 443 খোলা, তবু timeout?” → NACL-এ ephemeral port-এর outbound নিয়ম আছে কি না দেখি। Route আর host firewall-ও।
- “Autoscaling-এ DB-র নিয়ম কী হবে?” → উৎস app-এর security group, IP নয়।
প্র ২৪Connection timeout আর connection refused-এর মানে কী? (সহজ)
শক্তিশালী উত্তর: Timeout মানে packet পথে হারাচ্ছে বা উত্তর ফিরছে না, প্রায়ই firewall বা route. Refused মানে server পর্যন্ত পৌঁছেছি, কিন্তু সেই port-এ কেউ শুনছে না। এই একটি শব্দ দেখেই খোঁজার দিক বদলে যায়।
প্র ২৫Route table-এ 10.1.0.0/16 আর 10.1.5.0/24 দুটোই আছে। 10.1.5.9 কোন পথে যাবে? (মাঝারি)
শক্তিশালী উত্তর: /24 দিয়ে, কারণ longest-prefix match: একাধিক route মিললে সবচেয়ে লম্বা prefix জেতে, লেখার ক্রম নয়। এজন্যই পরে endpoint যোগ করলে পুরোনো NAT route না মুছেও storage-এর traffic সরে আসে।
প্র ২৬৮টি VPC জুড়তে হবে। Peering, না transit? দুটির CIDR এক হলে? (মাঝারি)
শক্তিশালী উত্তর: Peering transitive নয়, তাই সব জোড়া লাগলে full mesh: ৮ × ৭ ÷ ২ = ২৮টি link. Transit hub-এ ৮টি attachment, তবে ঘণ্টা আর GB-র বিল আছে। অল্প VPC আর বেশি traffic হলে peering, অনেক VPC হলে hub. CIDR মিললে route ঠিক করা যায় না। সমাধান: ঠিকানা নতুন করে সাজানো, অথবা শুধু একটি service খোলার জন্য PrivateLink ধরনের পথ।
প্র ২৭DNS failover কত দ্রুত? TTL কীভাবে ঠিক করবেন? (মাঝারি)
শক্তিশালী উত্তর: সবচেয়ে খারাপ সময় I × F + TTL: check-এর ব্যবধান × ব্যর্থতার সংখ্যা + TTL. ৩০ × ৩ + ৬০ = ১৫০ সেকেন্ড, app-এর নিজের cache ছাড়া। Propagation মানে resolver-এর cache-এর মেয়াদ শেষ হওয়া। Cutover-এর অন্তত এক পুরোনো TTL আগে TTL কমাই। খুব ছোট TTL রাখলে query আর বিল বাড়ে।
প্র ২৮CDN, WAF আর load balancer-এর কাজ আলাদা কীভাবে? (সহজ)
শক্তিশালী উত্তর: CDN ব্যবহারকারীর কাছে content রাখে, origin-এর ভার কমায়। WAF অনুরোধ পড়ে ক্ষতিকর নমুনা আটকায়। Load balancer সুস্থ target-এ অনুরোধ ভাগ করে। Edge-এ যত আগে অনুরোধ শেষ হয়, তত ভালো। Origin-এর ভার = মোট × (১ − h).
ফলো-আপ:
- “নতুন WAF rule কীভাবে ছাড়বেন?” → Count mode-এ বসিয়ে log পড়া, সরু ছাড়, তারপর block আর alert.
IAM
প্র ২৯Authentication আর authorization-এর পার্থক্য কী? (সহজ)
শক্তিশালী উত্তর: Authentication: আপনি কে। Authorization: আপনি কী পারেন। HTTP-তে 401 আর 403 এই দুটির সাথে মেলে। প্রতিটি অনুরোধ principal, action, resource আর condition দিয়ে বিচার হয়, আর ডিফল্ট উত্তর deny.
প্র ৩০VM থেকে storage পড়তে হবে। Access key, না role? (সহজ)
শক্তিশালী উত্তর: Role. Instance role-এ স্থায়ী secret নেই, credential নিজে থেকে মরে, audit log-এ session আলাদা থাকে। Kubernetes-এ workload identity, CI-তে OIDC. মানুষের জন্য SSO, group আর শক্ত MFA.
দুর্বল উত্তর দেখতে যেমন: “Key-টি environment variable-এ রাখব।” এটি শুধু স্থায়ী key-র জায়গা বদলানো।
প্র ৩১একই অনুরোধে Allow আর Deny দুটোই মিলল। ফল কী? Implicit আর explicit deny-র তফাত? (মাঝারি)
শক্তিশালী উত্তর: Explicit Deny জেতে, statement-এর ক্রম যাই হোক। Implicit deny মানে কোনো Allow নেই; Allow যোগ করলে উঠে যায়। Explicit Deny কোনো Allow ওলটাতে পারে না। কার্যকর অনুমতি স্তরগুলোর ছেদ: identity, boundary, session আর guardrail.
ফলো-আপ:
- “SCP কি অনুমতি দেয়?” → না, সর্বোচ্চ সীমা টানে।
প্র ৩২Trust policy আর permission policy কী? Cross-account-এ কার Allow লাগে? (মাঝারি)
শক্তিশালী উত্তর: Trust policy বলে কে role পরতে পারবে; permission policy বলে পরে কী করতে পারবে। Cross-account-এ দুই পক্ষের Allow চাই: caller-এর identity policy আর resource বা role-এর দিকের policy. Same-account-এ সাধারণত এক পক্ষই যথেষ্ট।
ফলো-আপ:
- “External ID কী ঠেকায়?” → Confused deputy: তৃতীয় পক্ষ যেন অন্য গ্রাহকের কথায় আপনার role না পরে।
প্র ৩৩Least privilege বাস্তবে কীভাবে করবেন? দল বলছে, এতে কাজ আটকে যায়। (কঠিন)
শক্তিশালী উত্তর: Least privilege একটি চক্র: ছোট শুরু, audit log, lint, simulator, তারপর ধাপে ধাপে বাদ। Dev-এ চওড়া sandbox আর guardrail, prod-এ সরু role. ৯০ দিনের log দেখে অব্যবহৃত অনুমতি বাদ দিই, তবে বছরে একবারের কাজের কথা মালিককে জিজ্ঞেস করি, কারণ log শুধু বলে কী ঘটেছে। জরুরি প্রবেশের জন্য break-glass রাখি।
দুর্বল উত্তর দেখতে যেমন: “Access denied এলে * দিয়ে দিই, পরে সরাব।” পরে আর সরে না।
ফলো-আপ:
- “Wildcard-এর ঝুঁকি?” → Provider নতুন action আনলে
s3:Get*নিজে থেকেই বড় হয়, policy কেউ না ছুঁলেও।
৪ · ধারণার প্রশ্ন: নিরাপত্তা আর খরচ, আর খরচ-সচেতন উত্তর
ফিরে পড়ুন: shared responsibility পর্ব ০২; secret পর্ব ৩৩; নিরাপত্তা পর্ব ৩৪, ৩৫; খরচ পর্ব ০৪, ৭২, ৭৩.
নিরাপত্তা
প্র ৩৪Shared responsibility কী? IaaS-এ guest OS patch কার? (সহজ)
শক্তিশালী উত্তর: Provider সামলায় security of the cloud: হার্ডওয়্যার, hypervisor. গ্রাহক সামলান security in the cloud. IaaS-এ guest OS patch গ্রাহকের। ওপরের model-এ কাজ কমে, কিন্তু identity, ডেটা, backup আর নিজের সেটিং সব model-এ আপনার।
প্র ৩৫Bucket encrypted. তবু public হলে কি সমস্যা? (মাঝারি)
শক্তিশালী উত্তর: হ্যাঁ। অনুমতি থাকলে সেবা নিজেই ডেটা খুলে দেয়। Encryption at rest চুরি যাওয়া disk থেকে বাঁচায়, ভুল অনুমতি থেকে নয়। এনক্রিপশন অনুমতির বিকল্প নয়।
ফলো-আপ:
- “Envelope encryption কেন?” → বড় ডেটা KMS-এ না পাঠিয়ে দ্রুত encrypt করা। Data key ডেটা লক করে, KEK data key লক করে।
প্র ৩৬Database password কোথায় রাখবেন? কীভাবে বদলাবেন, downtime ছাড়া? (মাঝারি)
শক্তিশালী উত্তর: কোড, image, log বা user data-তে নয়। Secret manager-এ, আর app পড়বে নিজের পরিচয় দিয়ে। বদলাতে দুটি version একসাথে বৈধ রাখি, overlap ≥ TTL + rollout. ফাঁস হলে আগে বাতিল, তারপর তদন্ত, শেষে history.
প্র ৩৭Audit log আলাদা account-এ রাখেন কেন? CSPM আর threat detection কী? (মাঝারি)
শক্তিশালী উত্তর: হাতছাড়া হওয়া account থেকে প্রমাণ মোছা আটকাতে। সব region থেকে আলাদা, সুরক্ষিত account-এ পাঠাই। CSPM ভুল সেটিং খোঁজে; threat detection চলমান সন্দেহজনক আচরণ দেখে। Finding কারও কাছে না পৌঁছালে মূল্যহীন, তাই মালিক আর alert লাগে।
ফলো-আপ:
- “Data event কি নিজে থেকে থাকে?” → সাধারণত না, আলাদা করে চালু করতে হয়, খরচও আছে।
প্র ৩৮একটি VM আপস হয়েছে বলে সন্দেহ। প্রথম কাজ কী? (কঠিন)
শক্তিশালী উত্তর: মুছে ফেলা নয়। Traffic থেকে সরানো, network বিচ্ছিন্ন করা, credential বাতিল আর প্রমাণ রাখা। আলাদা করুন, প্রমাণ রাখুন, credential বদলান, নতুন করে বানান। পুরোনো server ফেরানো নয়, IaC আর golden image থেকে বানানো, কারণ অনুপ্রবেশের পথটিও ফিরে আসতে পারে। Incident-এ সাধারণত আগে rollback, কিন্তু নিরাপত্তার ঘটনায় প্রমাণ আগে ভাবতে হয়।
দুর্বল উত্তর দেখতে যেমন: “VM terminate করে নতুন চালাই।” প্রমাণ গেল, কীভাবে ঢুকল তা অজানা রইল।
খরচ
প্র ৩৯CapEx, OpEx আর TCO কী? Cloud কখন বেশি দামি? (সহজ)
শক্তিশালী উত্তর: CapEx আগাম সম্পদ কেনা, OpEx চলতি বিল। TCO সব সারির যোগ: বিদ্যুৎ, staff, বাড়তি ক্ষমতা, transfer, support আর অলস resource. স্থির, উঁচু, দীর্ঘ load আর সক্ষম দল থাকলে নিজের হার্ডওয়্যার সস্তা হতে পারে। ওঠানামার load-এ elasticity জেতে। Peak ২০, গড় ৫ হলে কেনা ক্ষমতার utilisation ২৫%.
প্র ৪০৪০% ছাড়ের ১ বছরের অঙ্গীকার কখন লাভজনক? (মাঝারি)
শক্তিশালী উত্তর: Break-even utilisation = ১ − ছাড় = ৬০%. সময়ের ৬০%-এর বেশি চললে লাভ। তাই অঙ্গীকার নিই baseline-এর মাপে, peak-এর মাপে নয়; ওপরের অংশ on-demand, আর থামানো যায় এমন কাজ spot. আগে rightsizing, পরে অঙ্গীকার।
ফলো-আপ:
- “Coverage ১০০% কেন ভালো নয়?” → বাড়তি অংশ (১ − ছাড়)-এর কম সময় চললে লোকসান।
প্র ৪১বিল কমাতে বলা হলো। কোন ক্রমে এগোবেন? (মাঝারি)
শক্তিশালী উত্তর: বিল = ব্যবহার × দর। আগে ব্যবহার: অলস resource মুছি, rightsize করি, dev রাতে বন্ধ রাখি। তারপর দর: commitment আর spot. CPU ও memory দুটোই দেখি, আর rollback-এর শর্ত আগে লিখি। নিরাপত্তার সারি কাটি না: backup, log, multi-AZ. শেষে unit cost দেখি, কারণ ব্যবসা বাড়লে বিল বাড়া খারাপ নয়।
দুর্বল উত্তর দেখতে যেমন: “সব VM-এ ৩ বছরের অঙ্গীকার।” অপচয়টিকেই তিন বছরের জন্য বেঁধে ফেলা।
প্র ৪২Data transfer-এর বিল কোথায় লুকিয়ে থাকে? (মাঝারি)
শক্তিশালী উত্তর: Egress, zone পার, region পার, আর NAT-এর প্রতি GB. উদাহরণ, অনুমিত দরে: ২টি NAT, ঘণ্টায় $০.০৫ করে ৭২০ ঘণ্টা = $৭২। ১২,০০০ GB × $০.০৫ = $৬০০। Bucket-এর traffic endpoint-এ নিলে processing অনেক কমে। “টাকা বাঁচাতে” এক NAT রাখলে উল্টো ফল হতে পারে, কারণ অর্ধেক traffic AZ পার হয়।
খরচ-সচেতন উত্তর কেমন হয়
নকশার উত্তরে খরচ একটি শেষের লাইন নয়, একটি সিদ্ধান্তের কারণ। তিনটি অভ্যাস গড়ে তুলুন।
| দুর্বল | খরচ-সচেতন |
|---|---|
| “Active-active করব, সবচেয়ে ভালো।” | “RTO ১ ঘণ্টা হলে pilot light মেলে। Active-active মাসে পাঁচ গুণের বেশি, এই লক্ষ্যে দরকার নেই।” |
| “দাম কম রাখব।” | “অনুমিত দরে মাসে প্রায় $১,০৬৬। প্রতি অর্ডারে কত, সেটি দেখব।” |
| “Cloud-এর দাম জানি না।” | “আসল দর মনে নেই, ধরে নিচ্ছি VM ঘণ্টায় $০.১০. Pricing পাতায় মিলিয়ে নেব।” |
- সংখ্যা ধরে নিন, স্পষ্ট বলে: ইন্টারভিউতে আসল দর মুখস্থ থাকা জরুরি নয়। অনুমান আর গণনার পথটি জরুরি।
- লাভকে খরচের সাথে জোড়া দিন: “মাসে $৫৭৬ বাড়তি দিয়ে প্রায় ২৫৬ মিনিটের downtime কমছে।”
- মালিক আর alert বলুন: Tag, budget alert, আর মাসিক review. মনে রাখবেন, budget alert খরচ থামায় না।
৫ · পরিস্থিতির প্রশ্ন: ৯৯.৯৫% three-tier app আর whiteboard-এ VPC
ফিরে পড়ুন: availability-র হিসাব পর্ব ০৫; VPC পর্ব ২৫; নকশার স্তম্ভ পর্ব ৭৪. আরও বড় ইন্টারভিউ-অনুশীলন চাইলে System Design কোর্সের mock interview দেখুন।
প্রথম প্রশ্নটি পাঁচ ধাপে পুরো হেঁটে দেখি। “আপনি বলেন” সারিটি আপনার মুখের কথা, আর “খাতায় লেখা” সারিটি whiteboard-এর।
- Clarifyকে, কোথায়, কী নিষেধ
- Requirements২১.৬ মিনিট
- Design৩ AZ, ৩ স্তর
- Failurebeta, deploy
- Costমাসে $১,০৬৬
- Follow-upএবার ঈদ
| আপনি বলেন | |
| খাতায় লেখা | |
| ফাঁদ |
- Clarify. ২–৩টি প্রশ্ন। ইন্টারভিউয়ার না দিলে নিজে ধরে নিন, যেমন একটি কাল্পনিক অনলাইন বাজার, দেশের ব্যবহারকারী, গড়ে ২০০ req/s.
- Requirements. লক্ষ্যকে মিনিটে আনুন: ০.০৫% × ৪৩,২০০ মিনিট = ২১.৬ মিনিট। RPO আর RTO আলাদা প্রশ্ন, তাই আলাদা করে বলুন। এখানে ধরে নিলাম ৫ মিনিট আর ১ ঘণ্টা।
- Design. সবচেয়ে সরল নকশা: DNS, load balancer, তিন AZ-এ ৩টি stateless instance, standby-সহ managed database. ছবি নিচে। Multi-region এখনই নয়, লক্ষ্য তা দাবি করে না।
- Failure. নিচের checker-এর ফল। Copy স্বাধীন হলে ৮.৭ মিনিট, ১%-এ correlated failure ১১.৩, ৫%-এ ঠিক সীমায় ২১.৬ মিনিট, আর লক্ষ্য হাতছাড়া। তাই copy বাড়ানোর চেয়ে canary আর ধীর rollout দরকারি।
- Cost. অনুমিত দর: app ৩ × $০.১০ × ৭২০ = $২১৬; DB ২ × $০.৫০ × ৭২০ = $৭২০; LB $২১.৬০; NAT ৩ × $০.০৫ × ৭২০ = $১০৮. মোট $১,০৬৫.৬০। এক AZ-এর নকশা $৪৮৯.৬০, পার্থক্য $৫৭৬।
- Follow-up. “ট্রাফিক ১০ গুণ হলে?” পরের অংশে সেই হিসাব। উত্তর শুরু হয় মাপ দিয়ে: কোন স্তর আগে ভরে। শেষে SLO, error budget আর burn-rate alert বলে দিন, যাতে নকশা চালু থাকার পরের দিনটিও ঢাকা পড়ে।
Checker: নকশাটি কি ৯৯.৯৫% মেটায়?
পর্ব ০৫-এর হিসাবটিই, শুধু লক্ষ্যের সাথে মেলানো। সব মান অনুমিত। beta মানে একটি copy-র ব্যর্থতার কত ভাগ সব copy-কে একসাথে ফেলে।
// Does a three-tier design meet 99.95%? All availability numbers are ASSUMED.
const MONTH_MIN = 30 * 24 * 60, TARGET = 0.9995;
const designs = { // [tier, availability of one copy, copies]
"one AZ": [["dns", 0.9999, 1], ["lb", 0.9999, 1], ["app", 0.995, 1], ["db", 0.999, 1]],
"multi-AZ": [["dns", 0.9999, 1], ["lb", 0.9999, 1], ["app", 0.995, 3], ["db", 0.999, 2]],
};
// beta = share of one copy's failures that take all copies down together
function tier(a, n, beta) {
const u = 1 - a;
return n === 1 ? a : 1 - (beta * u + ((1 - beta) * u) ** n);
}
const compose = (tiers, beta) => tiers.reduce((all, [, a, n]) => all * tier(a, n, beta), 1);
function show(label, a) {
const min = ((1 - a) * MONTH_MIN).toFixed(1);
console.log(label.padEnd(24), ((a * 100).toFixed(4) + "%").padStart(9),
(min + " min/mo").padStart(13), a >= TARGET ? " meets" : " MISSES");
}
console.log(`target ${TARGET * 100}% = ${((1 - TARGET) * MONTH_MIN).toFixed(1)} min/month budget`);
show("one AZ", compose(designs["one AZ"], 0));
for (const beta of [0, 0.01, 0.05, 0.10])
show("multi-AZ, beta " + beta.toFixed(2), compose(designs["multi-AZ"], beta));
const best = compose(designs["multi-AZ"], 0.01);
show("beta 0.01 x region 99.95", best * 0.9995);আউটপুট:
target 99.95% = 21.6 min/month budget
one AZ 99.3806% 267.6 min/mo MISSES
multi-AZ, beta 0.00 99.9799% 8.7 min/mo meets
multi-AZ, beta 0.01 99.9739% 11.3 min/mo meets
multi-AZ, beta 0.05 99.9499% 21.6 min/mo MISSES
multi-AZ, beta 0.10 99.9199% 34.6 min/mo MISSES
beta 0.01 x region 99.95 99.9239% 32.9 min/mo MISSES
এক AZ-এ ২৬৭.৬ মিনিট, লক্ষ্যের ১২ গুণের বেশি। Multi-AZ-এ ৮.৭ মিনিট, তবে beta ০.০৫-তে 21.6 min/mo দেখালেও ফল MISSES: আসল মান 99.9499%, লক্ষ্যের সামান্য নিচে। DNS আর LB একাই মাসে প্রায় ৮.৬ মিনিট খায়, কারণ হিসাবে এদের copy একটি। শেষ লাইনটি সবচেয়ে সৎ: গোটা region-এর ঘটনা ৯৯.৯৫% ধরলে এক region-এ লক্ষ্য মেলে না। অর্থাৎ উত্তরটি অনুমানের ওপর দাঁড়িয়ে। অনুমানটি মুখে বলুন, আর প্রশ্ন করুন, region-এর ঝুঁকি এই লক্ষ্যের মধ্যে ধরা হচ্ছে কি না। Provider-এর লেখা SLA-র সংখ্যা service-ভেদে আলাদা, docs-এ মিলিয়ে নিতে হয়।
প্র ৪৩একটি three-tier web app-এর নকশা দিন, লক্ষ্য ৯৯.৯৫%. এক মিনিটে সারসংক্ষেপ বলুন। (কঠিন)
শক্তিশালী উত্তর: ৯৯.৯৫% মানে মাসে ২১.৬ মিনিট। একক AZ-এ হিসাবটি মেলে না, ২৬৭.৬ মিনিট। তাই তিন AZ, সামনে load balancer আর CDN, private subnet-এ autoscaling-সহ stateless app, data subnet-এ standby-সহ managed database. Session Redis-এ, ফাইল object storage-এ। Copy স্বাধীন হলে ৮.৭ মিনিট, আর correlated failure ধরলে ১১.৩-এর মতো। তাই ধীর rollout, rollback, PITR আর multi-AZ ছাড়াও ভুল-deploy ঠেকানোর ব্যবস্থা। অনুমিত দরে মাসে প্রায় $১,০৬৬। Multi-region এই লক্ষ্যে দরকার নয়, যদি না region-ব্যর্থতাকে লক্ষ্যের মধ্যে ধরা হয়।
দুর্বল উত্তর দেখতে যেমন: “Multi-AZ দিলেই ৯৯.৯৯%.” Copy বাড়লেই availability বাড়ে না: correlated failure b × u কমে না।
ফলো-আপ:
- “Database-এর standby কেন read-এ ব্যবহার করবেন না?” → Standby সাধারণত query নেয় না। Read বাড়াতে আলাদা replica.
Whiteboard-এ VPC
“একটি VPC আঁকুন” প্রশ্নে কলম ধরার আগে তিনটি জিনিস বলুন: কতটি AZ, কতটি স্তর, আর কোন network-এর সাথে জুড়বে (অফিস, অন্য VPC, Kubernetes pod). তারপর ওপর থেকে নিচে আঁকুন।
Whiteboard-এর VPC
10.20.0.0/16, three AZs, three tiers
ঠিকানার হিসাব মুখে বলুন: /16-এ ৬৫,৫৩৬; প্রতি স্তরে একটি /18, তার ভেতরে AZ-পিছু একটি /20. AWS-ধরনের হিসাবে প্রতি subnet ৪,০৯৬ − ৫ = ৪,০৯১টি ব্যবহারযোগ্য ঠিকানা। ৪র্থ /20 নতুন AZ-এর জন্য ফাঁকা, চতুর্থ /18 নতুন স্তরের জন্য। নিচের checker এটি আর overlap যাচাই করে।
// Whiteboard VPC check: subnet plan, host fit and overlap.
const VPC = "10.20.0.0/16", TIER_P = 18, SUB_P = 20, RESERVED = 5;
const TIERS = ["public", "private", "data"], AZS = ["a", "b", "c"];
const toInt = s => s.split(".").reduce((a, o) => a * 256 + Number(o), 0);
const toIp = n => [24, 16, 8, 0].map(b => Math.floor(n / 2 ** b) % 256).join(".");
const start = toInt(VPC.split("/")[0]);
const tierSize = 2 ** (32 - TIER_P), subSize = 2 ** (32 - SUB_P);
TIERS.forEach((t, i) => {
const row = AZS.map((az, j) => `${toIp(start + i * tierSize + j * subSize)}/${SUB_P}`);
console.log(t.padEnd(8), row.join(" "));
});
console.log(`usable per subnet: ${subSize} - ${RESERVED} = ${subSize - RESERVED}`);
const used = TIERS.length * AZS.length, total = 2 ** 16 / subSize;
console.log(`used ${used} of ${total} /${SUB_P} slots, free ${total - used}`);
function fit(hosts, growthPct, reserved) {
const need = Math.ceil(hosts * (100 + growthPct) / 100) + reserved;
const prefix = 32 - Math.ceil(Math.log2(need));
return `${hosts} hosts +${growthPct}% +${reserved} = ${need} -> /${prefix} (${2 ** (32 - prefix)})`;
}
console.log([[500, 30, 5], [30, 50, 5], [2000, 50, 5]].map(a => fit(...a)).join("\n"));
const range = c => { const [b, p] = c.split("/"), s = 2 ** (32 - Number(p));
return [toInt(b), toInt(b) + s - 1]; };
const overlap = (x, y) => { const [a, b] = [range(x), range(y)];
return a[0] <= b[1] && b[0] <= a[1]; };
for (const other of ["10.20.128.0/17", "10.21.0.0/16", "192.168.10.0/24"])
console.log(VPC, "vs", other.padEnd(16), overlap(VPC, other) ? "CLASH" : "ok");আউটপুট:
public 10.20.0.0/20 10.20.16.0/20 10.20.32.0/20
private 10.20.64.0/20 10.20.80.0/20 10.20.96.0/20
data 10.20.128.0/20 10.20.144.0/20 10.20.160.0/20
usable per subnet: 4096 - 5 = 4091
used 9 of 16 /20 slots, free 7
500 hosts +30% +5 = 655 -> /22 (1024)
30 hosts +50% +5 = 50 -> /26 (64)
2000 hosts +50% +5 = 3005 -> /20 (4096)
10.20.0.0/16 vs 10.20.128.0/17 CLASH
10.20.0.0/16 vs 10.21.0.0/16 ok
10.20.0.0/16 vs 192.168.10.0/24 ok
৯টি subnet ১৬টি /20 ঘরের মধ্যে, ৭টি খালি। ৫০০ host-এ ৩০% বৃদ্ধি আর ৫টি কাটা ঠিকানা মিলে ৬৫৫, তাই /22 (১,০২৪). শেষ তিন লাইন peering-এর আগের হিসাব: 10.20.128.0/17 আমাদের VPC-র ভেতরে পড়ে, তাই CLASH, আর পুরো data স্তরের ওপরই পড়ছে। Kubernetes থাকলে pod-এর ঠিকানাও হিসাবে ধরুন (পর্ব ২৫).
প্র ৪৪Whiteboard-এ একটি production VPC আঁকুন। কী কী বলবেন? (মাঝারি)
শক্তিশালী উত্তর: অনুমান বলে শুরু: তিন AZ, তিন স্তর, অফিসের সাথে VPN, আর ভবিষ্যতে Kubernetes. CIDR বাছি এমনভাবে যাতে অফিস বা অন্য VPC-র সাথে না মেলে। Public-এ LB আর AZ-পিছু NAT, private-এ app, data-তে database, যার route-এ ইন্টারনেট নেই। Security group chain: LB-তে 443, app-এ উৎস sg-lb, DB-তে উৎস sg-app. Admin-এর জন্য session manager, inbound SSH নয়। Storage-এ endpoint, flow log চালু, পুরো জিনিস IaC-তে।
দুর্বল উত্তর দেখতে যেমন: “সব কিছু একটি public subnet-এ, firewall দিয়ে আটকে দেব।” একটি ভুল নিয়মেই database ইন্টারনেটে।
ফলো-আপ:
- “NAT কি তিনটিই লাগবে?” → খরচ বনাম AZ-স্বাধীনতা। একটি NAT-এ সেই AZ পড়লে সব private subnet-এর বাইরের পথ যায়, আর zone-পার বিলও বাড়ে।
- “Database subnet-এ NAT নেই, patch কীভাবে?” → Managed হলে provider করে। নিজের হলে ভেতরের mirror বা endpoint.
প্র ৪৫৫০০টি host-এর একটি subnet লাগবে, ৩০% বৃদ্ধি ধরে। কত বড় হবে? (মাঝারি)
শক্তিশালী উত্তর: ⌈৫০০ × ১.৩⌉ = ৬৫০, সাথে ৫টি কাটা ঠিকানা = ৬৫৫। ২⁹ = ৫১২ কম, ২¹⁰ = ১,০২৪ যথেষ্ট, তাই /22. AWS আর Azure-এ ৫টি কাটা, Google-এ ৪টি; docs-এ মিলিয়ে নিন। Pod যদি subnet থেকে ঠিকানা পায়, তবে সংখ্যাটি অনেক বড় হবে।
৬ · পরিস্থিতির প্রশ্ন: region বন্ধ, database সরানো আর ঈদের ১০ গুণ ভিড়
ফিরে পড়ুন: DR পর্ব ২৪; migration পর্ব ৭৫; capacity পর্ব ৬৮; autoscaling পর্ব ১৭; connection পর্ব ২২.
প্র ৪৬“কাল region পুরো বন্ধ হলে কী করবেন?” একটি পরিকল্পনা দিন। (কঠিন)
শক্তিশালী উত্তর: আগে লক্ষ্য জিজ্ঞেস করি, কারণ উত্তর RTO আর RPO-র ওপর দাঁড়িয়ে। সব সেবার লক্ষ্য এক নয়: অর্ডারের ডেটা আর পুরোনো report আলাদা স্তরে। ধরি RTO ১ ঘণ্টা, RPO ২ মিনিট। তাহলে pilot light: অন্য region-এ চালু database replica, app বন্ধ, IaC আর image প্রস্তুত, quota আগে থেকে বাড়ানো। চার ধাপের সিঁড়ির সবচেয়ে সস্তা যে ধাপ লক্ষ্য মেটায়, সেটিই নিই।
ঘটনার দিনে ক্রম: বাইরে থেকে চালানো health check-এ ধরা, disaster ঘোষণা, fencing, replica promote, database বড় করা, VM চালু, smoke test, তারপর DNS. প্রতি ত্রৈমাসিকে game day করি, না হলে পরিকল্পনাটি শুধু কাগজ। Failback-এর পরিকল্পনাও লিখি।
দুর্বল উত্তর দেখতে যেমন: “Active-active করে দেব, সমস্যা শেষ।” লক্ষ্য না জেনে সবচেয়ে দামি ধাপ, আর দুই region-এ একসাথে লেখার সমস্যার উত্তর নেই।
ফলো-আপ:
- “Alert ব্যবস্থা নিজেই ওই region-এ থাকলে?” → তাই monitoring নষ্ট region-এর বাইরে রাখি।
- “Region হয়তো দুই মিনিটে ফিরবে, ঘোষণা কখন?” → Runbook-এ আগে লেখা নিয়ম আর দায়িত্বপ্রাপ্ত মানুষ।
- “অন্য region-এ VM না পেলে?” → Quota অনুমতি, capacity আলাদা। এই ঝুঁকিই warm standby-র পক্ষে যুক্তি।
// Region outage: cheapest DR strategy that meets RTO and RPO. ASSUMED numbers.
const TARGET = { rtoH: 1, rpoH: 2 / 60 }; // RTO 1 hour, RPO 2 minutes
const S = [ // $/month, typical RTO and RPO in hours (from the course's model)
{ n: "backup-restore", m: 46, rto: 8, rpo: 1 },
{ n: "pilot light", m: 236, rto: 1, rpo: 0.02 },
{ n: "warm standby", m: 722, rto: 0.25, rpo: 0.01 },
{ n: "active-active", m: 1246, rto: 0.05, rpo: 0.005 },
];
const min = h => (h * 60).toFixed(1).padStart(6);
console.log("strategy $/mo RTO min RPO min verdict");
let pick = null;
for (const s of S) {
const ok = s.rto <= TARGET.rtoH && s.rpo <= TARGET.rpoH;
if (ok && !pick) pick = s;
console.log(s.n.padEnd(15), String(s.m).padStart(5), min(s.rto), " ", min(s.rpo), " ", ok ? "fits" : "misses");
}
console.log("cheapest that fits:", pick.n, "$" + pick.m);
const steps = { detect: 5, declare: 10, fence: 2, promote: 3, resize: 10,
boot: 6, smoke: 4, dns: 4 }; // minutes
const rto = Object.values(steps).reduce((a, b) => a + b, 0);
console.log(`drill RTO: ${Object.values(steps).join(" + ")} = ${rto} min, spare ${TARGET.rtoH * 60 - rto}`);
const I = 30, F = 3, TTL = 60; // health check, seconds
console.log(`DNS worst case: ${I} x ${F} + ${TTL} = ${I * F + TTL} s`);
const lagS = 8; // replica lag when the region died
console.log(`real RPO: ${lagS} s, target ${TARGET.rpoH * 3600} s`);আউটপুট:
strategy $/mo RTO min RPO min verdict
backup-restore 46 480.0 60.0 misses
pilot light 236 60.0 1.2 fits
warm standby 722 15.0 0.6 fits
active-active 1246 3.0 0.3 fits
cheapest that fits: pilot light $236
drill RTO: 5 + 10 + 2 + 3 + 10 + 6 + 4 + 4 = 44 min, spare 16
DNS worst case: 30 x 3 + 60 = 150 s
real RPO: 8 s, target 120 s
পর্ব ২৪-এর অনুমিত মডেল। লক্ষ্য মেলা সবচেয়ে সস্তা ধাপ pilot light, তবে সেখানে RTO ঠিক ৬০ মিনিট, হাতে কিছু নেই। মহড়ায় মাপা ৪৪ মিনিটে ১৬ মিনিট বাকি। তাই মডেলের সংখ্যা নয়, মহড়ার সংখ্যা বলুন। Replica-র ৮ সেকেন্ডের lag-ই সেই দিনের আসল RPO. লক্ষ্য বদলালে উত্তরও বদলায়: RTO ১৫ মিনিট হলে warm standby, মাসে $৭২২.
প্র ৪৭একটি চালু database কম downtime-এ cloud-এ সরাতে হবে। কীভাবে? (কঠিন)
শক্তিশালী উত্তর: আগে আকার, change rate আর লক্ষ্য জিজ্ঞেস করি। ক্রম: TTL আগে কমানো → snapshot দিয়ে initial load → CDC দিয়ে পরিবর্তন ধরা → মহড়া → go বা no-go → source read-only → বাকি শূন্য, সারি আর checksum মেলানো → sequence এগিয়ে নেওয়া → reverse replication → দিক বদল। এতে কোর্সের উদাহরণে লেখা-বিরতি ৩ মিনিট, আর পড়া একবারও থামেনি। ফেরার শর্ত আগে লিখি: যেমন error টানা ৫ মিনিট ২%-এর ওপরে।
দুর্বল উত্তর দেখতে যেমন: “Weekend-এ dump নিয়ে restore করব।” কয়েক ঘণ্টার downtime, আর ফেরার পথ নেই।
ফলো-আপ:
- “Sequence কেন আলাদা?” → Logical replication এটি আনে না; না এগোলে নতুন সারিতে id-সংঘর্ষ।
- “Reverse replication কেন?” → Rollback-এ cutover-এর পরের অর্ডার না হারাতে।
- “App আর DB আলাদা wave-এ সরালে?” → Chatty হলে প্রতি query-তে RTT যোগ হয়। ১২০ query × ৪১ ms-এ পাতা ৫ সেকেন্ড ছাড়ায়। তাই একই move group.
// Moving a database: copy time, catch-up time and the write pause.
const EFF = 0.8, CHANGE = 0.02; // usable share of link; share changed per day
const days = (tb, mbps) => tb * 1e12 * 8 / (mbps * 1e6 * EFF) / 86400;
function sync(tb, mbps) { // bulk copy, then catch up with changes
const rate = tb * CHANGE * 1e12 * 8 / 86400; // bits per second of change
const usable = mbps * 1e6 * EFF;
return rate >= usable ? Infinity : days(tb, mbps) / (1 - rate / usable);
}
console.log(" TB Mbps bulk_d sync_d");
for (const [tb, mbps] of [[1, 100], [10, 100], [10, 1000], [100, 100]]) {
const t = sync(tb, mbps);
console.log(String(tb).padStart(4), String(mbps).padStart(6), days(tb, mbps).toFixed(2).padStart(7),
(t === Infinity ? "never" : t.toFixed(2)).padStart(7));
}
const MONTH_MIN = 43200, pause = 3; // minutes of read-only window
for (const slo of [0.999, 0.9995, 0.9999]) {
const budget = (1 - slo) * MONTH_MIN;
console.log(`SLO ${(slo * 100).toFixed(2)}%: budget ${budget.toFixed(2)} min,`,
`${pause} min pause = ${(pause / budget * 100).toFixed(1)}%`);
}
const oldTtl = 3600, newTtl = 60; // lower the TTL at least one old TTL before
console.log(`lower TTL ${oldTtl} -> ${newTtl} at least ${oldTtl / 3600} h before cutover`);আউটপুট:
TB Mbps bulk_d sync_d
1 100 1.16 1.18
10 100 11.57 15.06
10 1000 1.16 1.18
100 100 115.74 never
SLO 99.90%: budget 43.20 min, 3 min pause = 6.9%
SLO 99.95%: budget 21.60 min, 3 min pause = 13.9%
SLO 99.99%: budget 4.32 min, 3 min pause = 69.4%
lower TTL 3600 -> 60 at least 1 h before cutover
১০ TB, ১০০ Mbps, ৮০%-এ bulk কপি ১১.৫৭ দিন, আর দিনে ২% বদল ধরলে ১৫.০৬ দিন, সূত্র T ÷ (১ − r/b). ১০০ TB-তে never: বদলের গতি link-এর চেয়ে বেশি, তাই বড় link বা transfer appliance লাগবে। শেষের সারিগুলো বলে, ৯৯.৯৫% SLO-তে ৩ মিনিটের বিরতি মাসের budget-এর ১৩.৯%, কিন্তু ৯৯.৯৯%-এ ৬৯.৪%. তাই বিরতিটি SLO-র ভাষায়ও বলুন।
এবার ঈদের আগের বাসের টিকিটের ভিড়, তবে আপনার app-এ।
- মাপ২০০ → ২,০০০
- Instance৪ → ৫১
- Quotaআগেই
- Connection১,০২০ বনাম ৪৮০
- Cache৬,০০০ → ৬০০
- মহড়াload test
- সেদিনscheduled, flag
- পরে$৩৩৮.৪০
| হিসাব | |
| সিদ্ধান্ত |
- মাপ। “১০ গুণ” কীসের? Page view, না checkout? কত ঘণ্টা? ধরে নিই ২০০ থেকে ২,০০০ req/s, ৭২ ঘণ্টা, আর সবচেয়ে জরুরি পথ checkout.
- Instance. প্রতি instance পুরো CPU-তে ১০০ req/s, লক্ষ্য ৬০%, তাই ৬০ req/s. Peak-এ ৩৪টি। এক AZ হারালেও ৩৪টি রাখতে ৩৪ × ৩ ÷ ২ = ৫১টি।
- Quota. Quota অনুমতি, capacity আলাদা। দুটোই sale-এর কয়েক সপ্তাহ আগে দেখুন, কারণ আবেদনে সময় লাগে। পরিচিত quota: VM, load balancer, NAT-এর সংযোগ, পেছনের API.
- Connection. App বাড়ালেই database ভাঙে। ব্যবহারযোগ্য slot ৪৮০, তাই pool ২০ চলবে না। Pool ৯ হলে ৪৫৯, অথবা proxy. “Autoscaling করেছি, তবু পড়ে গেল” ধরনের ঘটনার পেছনে এই ফাঁদটি প্রায়ই থাকে।
- Cache. প্রতি অনুরোধে ৩টি query হলে database-এ ৬,০০০ q/s, মাপা সীমা ১,৫০০. Cache hit ৯০%-এ ৬০০। কিন্তু ৭০%-এ ১,৮০০, সীমার ওপরে। তাই cache-ই নতুন failure point. CDN-ও ভার কমায়।
- মহড়া। Staging-এ ধাপে ধাপে load test. আসল ফল মাপা: কোন স্তর আগে ভরে, knee point কোথায়। ৪০০ অনুরোধ একসাথে চলছে, তাই downstream-এর সীমাও মাপুন।
- সেদিন। Boot-এর দেরি অনুরোধ হারায়, তাই sale-এর আগেই min বাড়ান। ভারী ফিচার kill switch দিয়ে বন্ধ করা যাক, চূড়ায় waiting room, deploy বন্ধ। On-call-এ মানুষ বাড়ান।
- পরে। Min নামান, নইলে বিল চলতেই থাকে। বাড়তি compute অনুমিত দরে $৩৩৮.৪০, যা একটি বন্ধ sale-এর তুলনায় ছোট হতে পারে; সেই হিসাব ব্যবসার সাথে করুন। Unit cost দেখুন, আর শিক্ষা লিখে রাখুন।
// 10x Eid sale: instances, AZ loss, DB connections, DB queries, cost. ASSUMED numbers.
const normal = 200, peak = normal * 10; // requests per second
const perInstance = 100, targetCpu = 0.6; // req/s at full CPU, autoscaling target
const azs = 3, pool = 20, usableSlots = 480;
const queries = 3, dbLimit = 1500; // queries per request, measured DB limit q/s
const secPerReq = 0.2, vmHour = 0.10, saleHours = 72;
const need = r => Math.ceil(r / (perInstance * targetCpu));
const surviveAz = n => Math.ceil(n * azs / (azs - 1)); // still n after one AZ is lost
const base = need(normal), run = need(peak), safe = surviveAz(run);
console.log(`instances: normal ${base}, peak ${run}, peak + one AZ lost ${safe}`);
console.log(`in flight at peak: ${peak} x ${secPerReq} s = ${peak * secPerReq}`);
for (const [n, p] of [[safe, pool], [safe, Math.floor(usableSlots / safe)]]) {
const conns = n * p;
console.log(`${n} x pool ${p} = ${conns} of ${usableSlots}`, conns <= usableSlots ? "ok" : "REJECT");
}
for (const hit of [0, 0.7, 0.9, 0.95]) {
const q = peak * queries * (1 - hit);
console.log(`cache hit ${(hit * 100).toFixed(0).padStart(2)}%: DB ${String(Math.round(q)).padStart(4)} q/s`,
q <= dbLimit ? "ok" : "OVER");
}
const extra = (safe - base) * saleHours * vmHour;
console.log(`extra compute: ${safe - base} x ${saleHours} h x $${vmHour} = $${extra.toFixed(2)}`);আউটপুট:
instances: normal 4, peak 34, peak + one AZ lost 51
in flight at peak: 2000 x 0.2 s = 400
51 x pool 20 = 1020 of 480 REJECT
51 x pool 9 = 459 of 480 ok
cache hit 0%: DB 6000 q/s OVER
cache hit 70%: DB 1800 q/s OVER
cache hit 90%: DB 600 q/s ok
cache hit 95%: DB 300 q/s ok
extra compute: 47 x 72 h x $0.1 = $338.40
স্টেপারের প্রতিটি সংখ্যা এখান থেকে। REJECT সারিটি দেখুন: app-এর স্তর ঠিক, ভাঙছে database. cache hit 70%-এ OVER: cache-এর সামান্য অবনতিতেই database ডোবে। মান বদলান: azs ২ করলে এক AZ হারানোর জন্য ৬৮টি লাগে।
প্র ৪৮ঈদের sale-এ ট্রাফিক ১০ গুণ হবে। দুই মিনিটে আপনার পরিকল্পনা বলুন। (কঠিন)
শক্তিশালী উত্তর: আগে মাপ: কোন পথ, কত ঘণ্টা। তারপর প্রতি স্তর ধরে হিসাব, কারণ autoscaling শুধু app সামলায়। App: ৪ থেকে ৩৪, আর AZ হারানো ধরলে ৫১। Quota আর capacity আগেই। Database: connection ১,০২০ হয়ে যায়, তাই pool ছোট বা proxy; read ভার cache আর CDN-এ, লেখা queue-তে যেখানে সম্ভব। Boot দেরির জন্য sale-এর আগেই scheduled scaling. ধাপে ধাপে load test. সেদিন kill switch, waiting room, deploy বন্ধ, on-call বেশি। পরে min নামানো আর unit cost.
দুর্বল উত্তর দেখতে যেমন: “Autoscaling চালু আছে, সমস্যা নেই।” Database, quota আর boot-এর দেরি তিনটিই বাদ।
ফলো-আপ:
- “Payment gateway সীমা দিলে?” → Queue আর rate limit; অর্ডার নিয়ে পরে নিশ্চিত করা, idempotency key-সহ।
- “Serverless হলে সমস্যা শেষ?” → না। Concurrency-র সীমা আর downstream আগে পড়ে।
প্র ৪৯ম্যানেজার বলছেন, “আমরা multi-cloud নেব, lock-in হবে না।” কী বলবেন? (কঠিন)
শক্তিশালী উত্তর: আগে কারণ জিজ্ঞেস করি। Multi-cloud যুক্তিসঙ্গত যদি লিখিত শর্ত, পণ্যের প্রয়োজন, acquisition থাকে, অথবা হিসাবে ক্ষতি খরচকে ছাড়ায়। নইলে খরচ বাড়ে: কোর্সের অনুমিত হিসাবে বছরে মোট খরচ multi-AZ-এ $১,৮৮,৭৬০ আর multi-cloud-এ $৪,৬৭,২৫৭, অথচ availability ৯৯.৯৮% থেকে মাত্র ৯৯.৯৮৮%. Lock-in-এর স্তর ডেটা, API আর দক্ষতা। Container, খোলা format, পাতলা adapter আর পরীক্ষিত exit plan দিয়ে কমাই; সব কিছুতে abstraction নয়।
৭ · Troubleshooting drill: স্তরে স্তরে খোঁজা
ফিরে পড়ুন: network হাতিয়ার পর্ব ১৩; পথ পর্ব ২৬; firewall পর্ব ২৭; bucket পর্ব ২১; ঘটনা পর্ব ৩৪, ৬৭; বিল পর্ব ৭২, ৭৩.
Troubleshooting প্রশ্নে ইন্টারভিউয়ার উত্তর নয়, পথ দেখতে চান। কী চালাবেন, ফল কী হলে কী বুঝবেন, আর পরে কী বাদ পড়ল। চিকিৎসকের মতো: আগে লক্ষণ, তারপর একটি করে পরীক্ষা, প্রতিটিতে অর্ধেক সম্ভাবনা বাদ। একসাথে পাঁচটি জিনিস বদলাবেন না।
| লক্ষণ | প্রথম সন্দেহ | প্রথম পরীক্ষা |
|---|---|---|
| নাম পাওয়া যাচ্ছে না | DNS | dig |
| Connection timed out | Route, firewall | Route table, security group, flow log |
| Connection refused | App, port | ss দিয়ে কে শুনছে |
| 403 বা AccessDenied | Identity | কে, কোন action, কোন resource, কোন স্তর |
| 502, 503, 504 | LB-র পেছনের target | Healthy target, app log |
| ধীর, error নেই | ভার, পেছনের dependency | Metric, trace, সাম্প্রতিক deploy |
- লক্ষণtimed out
- DNSঠিক
- OSঠিক
- Firewallঠিক
- Subnetকোন table?
- Main tableকারণ
- ঠিকassociation
- যাচাইIaC-তে
| দেখছেন | |
| সিদ্ধান্ত |
- লক্ষণ। মেসেজে IP আছে, মানে নাম পাওয়া গেছে। আর শব্দটি timed out, refused নয়। ইন্টারভিউতে আগে জিজ্ঞেস করুন: “কবে থেকে? সব server, না এটি? সম্প্রতি কী বদলেছে?”
- DNS.
digঠিকানা দিল।curl-ও timeout দিচ্ছে, তাই সমস্যা apt-এর নয়, পথের। - OS. Default route আছে, virtual router-এ যাচ্ছে। এর পরে VM-এর ভেতরের কোনো কমান্ড আর কিছু দেখাবে না। এটি মুখে বলা ভালো লক্ষণ।
- Firewall. Security group-এ outbound খোলা, NACL ডিফল্ট। ঝুঁকিহীন প্রমাণের জন্য flow log-ও দেখা যায়। মনে রাখবেন,
ACCEPTমানে পৌঁছানো নয়। - Subnet. Cloud API-তে খুঁজলেন এই subnet কোন table-এ যুক্ত। Filter কিছু ফেরাল না। অর্থাৎ association নেই, তাই subnet main table-এ।
- Main table. সেখানে শুধু local route. Default route-ই নেই। প্রথম ভাঙা জায়গা পাওয়া গেল। সম্ভবত নতুন subnet বানানোর সময় association বাদ পড়েছে।
- ঠিক। Subnet-কে rt-prv table-এ যুক্ত করুন। Main table-এ NAT route বসাবেন না, তাতে অন্য subnet-ও বদলে যাবে।
- যাচাই।
curlচলল, আর flow log-এ NAT থেকে বাইরে যাওয়ার রেকর্ড এল। পরিবর্তনটি IaC-তে লিখুন, আর এটি আবার না ঘটার ব্যবস্থা ভাবুন, যেমন subnet module-এই association. NAT থাকলে তার নিজের পথও দেখুন: সে public subnet-এ তো?
পর্ব ২৬-এর পথ-খোঁজার ছোট সংস্করণ। একটি সুস্থ অবস্থা আর তিনটি ভাঙা অবস্থা, প্রতিটিতে প্রথম ভাঙা জায়গা:
// Walk from an instance towards the internet. Return the first fault.
function trace(c) {
const hops = [c.vm.name], stop = why => ({ hops, why });
const tableOf = s => c.assoc[s] || "main"; // no link = main table
const next = s => c.tables[tableOf(s)]["0.0.0.0/0"];
hops.push(c.vm.subnet + ":" + tableOf(c.vm.subnet));
const t1 = next(c.vm.subnet);
if (!t1) return stop("NO DEFAULT ROUTE in table " + tableOf(c.vm.subnet));
if (t1 === "igw") { hops.push("igw"); return stop("OK"); }
const nat = c.nats[t1];
if (!nat) return stop("BLACKHOLE: target " + t1 + " does not exist");
hops.push(t1, nat.subnet + ":" + tableOf(nat.subnet));
if (next(nat.subnet) !== "igw") return stop("NAT IN PRIVATE SUBNET: " + nat.subnet + " has no igw route");
hops.push("igw"); return stop("OK");
}
const tables = { main: {}, "rt-pub": { "0.0.0.0/0": "igw" },
"rt-prv": { "0.0.0.0/0": "nat-a" }, "rt-old": { "0.0.0.0/0": "nat-x" } };
const base = { tables, nats: { "nat-a": { subnet: "pub-a" } },
assoc: { "pub-a": "rt-pub", "app-a": "rt-prv" }, vm: { name: "app-1", subnet: "app-a" } };
const cases = [
["healthy", base],
["wrong table", { ...base, assoc: { "pub-a": "rt-pub" } }],
["NAT deleted", { ...base, assoc: { "pub-a": "rt-pub", "app-a": "rt-old" } }],
["NAT misplaced", { ...base, nats: { "nat-a": { subnet: "app-a" } } }],
];
for (const [name, cfg] of cases) {
const r = trace(cfg);
console.log(name.padEnd(15) + r.why + "\n path: " + r.hops.join(" > "));
}আউটপুট:
healthy OK
path: app-1 > app-a:rt-prv > nat-a > pub-a:rt-pub > igw
wrong table NO DEFAULT ROUTE in table main
path: app-1 > app-a:main
NAT deleted BLACKHOLE: target nat-x does not exist
path: app-1 > app-a:rt-old
NAT misplaced NAT IN PRIVATE SUBNET: app-a has no igw route
path: app-1 > app-a:rt-prv > nat-a > app-a:rt-prv
ভাঙা তিনটিতে একই লক্ষণ, কিন্তু কারণ আলাদা, আর path-ও আলাদা। wrong table আমাদের drill. NAT deleted হলো blackhole route. NAT misplaced-এ পথ NAT পর্যন্ত গিয়ে নিজের subnet-এই ফেরে। আসল tool আরও অনেক কিছু দেখে, তবে যুক্তি একই: packet-এর পথ ধরে এগোনো।
প্র ৫০Private subnet-এর server ইন্টারনেটে যেতে পারছে না। ধাপে ধাপে কী দেখবেন? (মাঝারি)
শক্তিশালী উত্তর: Packet-এর পথ ধরে এগোই। “Timed out” না “refused”, আগে পড়ি। dig দিয়ে DNS বাদ দিই। OS-এ default route দেখি। তারপর cloud-এর দিকে: security group আর NACL, subnet কোন route table-এ যুক্ত, সেখানে 0.0.0.0/0 কোথায়, NAT চালু কি না, NAT public subnet-এ কি না, তার নিজের table-এ IGW আছে কি না, আর VPC-তে IGW যুক্ত কি না। প্রতি ধাপে একটি জিনিস বাদ দিই। শেষে flow log দিয়ে প্রমাণ, ঠিক করা, যাচাই, আর IaC-তে লেখা।
দুর্বল উত্তর দেখতে যেমন: “NAT gateway restart করব।” কারণ না জেনে বদল, আর NAT-এ এমন কোনো বোতামও সাধারণত নেই।
ফলো-আপ:
- “Storage-এ যেতেই সমস্যা?” → Endpoint-এর route, endpoint policy বা bucket policy দেখি।
Public bucket পাওয়া গেল
- নিশ্চিতদেখা, না বদলানো
- বন্ধpublic পথ
- প্রমাণlog রাখা
- পরিধিকী, কতটা
- Credentialবদল
- জানানোঠিক মানুষকে
- প্রতিরোধআর যেন না হয়
| কাজ | |
| কেন |
- নিশ্চিত। সত্যিই public কি না, কেন, আর ভেতরে কী। Scanner-এর একটি লাল দাগ মানেই ঘটনা নয়: static website-এর bucket ইচ্ছা করেই public হতে পারে। এখানে ভেতরে ক্রেতার তথ্য, তাই ঘটনা।
- বন্ধ। আগে public পথ বন্ধ। Block public access চালু করলে একই bucket-এর কোনো বৈধ public ব্যবহার থাকলে তাও বন্ধ হবে; ক্রেতার ডেটা থাকলে সেই দাম মেনে নিন।
- প্রমাণ। Bucket বা ফাইল মুছবেন না। Log অন্য সুরক্ষিত জায়গায় কপি করুন। কে কখন policy বদলেছিল, audit log বলবে।
- পরিধি। কতদিন খোলা ছিল, কোন object, কতবার পড়া হয়েছে। Data event বা access log চালু না থাকলে সৎভাবে বলুন, “পড়া হয়নি” প্রমাণ করা যাচ্ছে না।
- Credential. ফাইলে key বা password থাকলে ধরে নিন ফাঁস হয়েছে। বাতিল করুন, বদলান, আর সেই পরিচয়ের কাজ audit log-এ দেখুন।
- জানানো। নিজে সিদ্ধান্ত না নিয়ে নিরাপত্তা ও আইন বিভাগকে জানান। কাকে, কত সময়ে জানাতে হবে, তা নির্দিষ্ট আইন আর চুক্তির ওপর নির্ভর করে।
- প্রতিরোধ। Organization-স্তরে block, এক কাজে এক bucket, ভাগ করতে presigned URL আর CDN, setting বদলালেই alert. Postmortem হবে দোষারোপহীন, প্রতিটি কাজের মালিক আর তারিখসহ।
প্র ৫১একটি public bucket পেলেন, ভেতরে সম্ভবত গ্রাহকের ডেটা। আপনার প্রথম এক ঘণ্টা? (মাঝারি)
শক্তিশালী উত্তর: আগে নিশ্চিত হই, দেখে, না বদলে। তারপর public পথ বন্ধ করি। ডেটা মুছি না, log আর policy-র ইতিহাস রাখি। Access log আর audit log দেখে পরিধি বের করি। ফাইলে credential থাকলে বদলাই। নিরাপত্তা, আইন আর মালিককে জানাই। শেষে প্রতিরোধ: organization-স্তরে block, alert, presigned URL.
দুর্বল উত্তর দেখতে যেমন: “Bucket মুছে দেব।” প্রমাণ গেল, ক্ষতির পরিধি অজানা রইল, আর কোনো app ভাঙতে পারে।
ফলো-আপ:
- “Encrypted ছিল তো?” → তাতে কিছু বদলায় না; অনুমতি থাকলে সেবা খুলে দেয়।
হঠাৎ বড় বিল
বিলের প্রশ্নে “কমাব” দিয়ে শুরু নয়, “কোন সারি বদলেছে” দিয়ে শুরু। নিচের বিলটি কাল্পনিক, দর অনুমিত। Line item ধরে দুই মাস মেলানো হচ্ছে।
// Surprise bill: compare two months line by line. A fictional bill, assumed rates.
const lines = [ // service, usage type, last month $, this month $
["Compute", "web-fleet", 3600, 3720],
["Compute", "forgotten-vm", 0, 360],
["Network", "nat-data", 300, 900],
["Network", "internet-out", 300, 320],
["Logging", "app-logs", 200, 640],
["Storage", "objects", 430, 440],
];
const sum = i => lines.reduce((a, l) => a + l[i], 0);
const orders = [120000, 126000];
console.log(`total: $${sum(2)} -> $${sum(3)} (+$${sum(3) - sum(2)})`);
console.log("--- biggest changes first");
const rows = lines.map(l => ({ name: l[1], d: l[3] - l[2] })).sort((a, b) => b.d - a.d);
const up = sum(3) - sum(2);
for (const r of rows)
console.log(r.name.padEnd(14), ("+$" + r.d).padStart(6), ((r.d / up * 100).toFixed(1) + "%").padStart(7));
console.log("--- unit cost");
orders.forEach((o, i) => console.log(`month ${i + 1}: $${(sum(i + 2) / o).toFixed(4)} per order`));
console.log("--- after the fixes");
const bucketGB = 12000, natRate = 0.05; // bucket traffic moved to a storage endpoint
const saved = bucketGB * natRate + 360 + 400; // endpoint, VM deleted, debug log off
console.log(`saved $${saved}, new bill $${sum(3) - saved}`);
console.log(`new unit cost: $${((sum(3) - saved) / orders[1]).toFixed(4)} per order`);আউটপুট:
total: $4830 -> $6380 (+$1550)
--- biggest changes first
nat-data +$600 38.7%
app-logs +$440 28.4%
forgotten-vm +$360 23.2%
web-fleet +$120 7.7%
internet-out +$20 1.3%
objects +$10 0.6%
--- unit cost
month 1: $0.0403 per order
month 2: $0.0506 per order
--- after the fixes
saved $1360, new bill $5020
new unit cost: $0.0398 per order
$১,৫৫০ বাড়তি, যার ৯০%-এর বেশি তিনটি সারিতে। web-fleet-এর $১২০ চিন্তার নয়, অর্ডার ৫% বেড়েছে, সেটি বৃদ্ধির স্বাভাবিক দাম। প্রতি অর্ডারে খরচ $০.০৪০৩ থেকে $০.০৫০৬, আর সারানোর পরে $০.০৩৯৮, অর্থাৎ আগের চেয়েও ভালো। Endpoint $৬০০, ভুলে যাওয়া VM $৩৬০, debug log বন্ধে $৪০০: মোট $১,৩৬০.
প্র ৫২এ মাসের cloud বিল হঠাৎ অনেক বেশি। কী করবেন? (মাঝারি)
শক্তিশালী উত্তর: আগে নিশ্চিত হই, এটি হাতছাড়া হওয়া account নয়: অচেনা region, অচেনা identity, বড় GPU থাকলে সেটি নিরাপত্তার ঘটনা, আর key বাতিল আগে। না হলে বিল ভেঙে দেখি: service, তারপর line item, তারপর tag ধরে, দিন ধরে। কবে থেকে বাড়ল, সেদিন কী deploy হয়েছিল। তারপর মালিকের সাথে কথা। ঠিক করি, আর শেষে anomaly alert, budget alert, tag আর মাসিক review বসাই। Unit cost দেখি, কারণ ব্যবসা বাড়লেও বিল বাড়ে।
দুর্বল উত্তর দেখতে যেমন: “সবচেয়ে বড় VM বন্ধ করে দিই।” সবচেয়ে বড় সারি হয়তো একটুও বদলায়নি।
ফলো-আপ:
- “Budget alert থাকলে তো থামত?” → না। Budget alert জানায়, থামায় না। আর প্রকৃত খরচের alert দেরিতে বাজে; forecast আগে বাজে।
আরও কয়েকটি drill
প্র ৫৩ব্যবহারকারী 502, 503 আর 504 পাচ্ছেন। পার্থক্য কী, কোথায় দেখবেন? (মাঝারি)
শক্তিশালী উত্তর: 502: target ভাঙা উত্তর দিয়েছে বা সংযোগ কেটেছে; keep-alive, crash, TLS-এর অমিল দেখি। মাঝেমধ্যে 502 হলে প্রায়ই target-এর keep-alive LB-র idle timeout-এর চেয়ে ছোট। 503: পাঠানোর মতো target নেই, তাই healthy target-এর সংখ্যা। 504: target সময়ের মধ্যে উত্তর দেয়নি বা সংযোগ হয়নি; ধীর query বা firewall. 500 হলে app নিজেই error দিয়েছে।
দুর্বল উত্তর দেখতে যেমন: “Timeout ৩,৬০০ সেকেন্ড করে দেব।” আসল ধীরতা লুকায়।
প্র ৫৪App database-এ পৌঁছাতে পারছে না। Timeout আসছে। কী দেখবেন? (মাঝারি)
শক্তিশালী উত্তর: Timeout, তাই পথ। DNS ঠিকানা কোথায় দেখাচ্ছে। Security group-এ port 5432-এর উৎস app-এর group কি না। NACL, route, আর দুটি subnet একই VPC-তে বা জোড়া কি না। Flow log-এ REJECT দেখি। Refused হলে database চলছে কি না, password error হলে পৌঁছেছি, সমস্যা identity-তে।
নিচের নমুনা flow log দেখুন। নিজের তৈরি করা সহজ log, আসল format-এর সব field এখানে নেই।
#!/usr/bin/env bash
# Which rejected flows matter? A small sample flow log, built here.
set -euo pipefail
log=$(mktemp); trap 'rm -f "$log"' EXIT
cat > "$log" <<'EOF'
10.20.64.11 10.20.128.5 49152 5432 REJECT
10.20.64.11 10.20.128.5 49153 5432 REJECT
10.20.80.12 10.20.128.5 50211 5432 REJECT
10.20.64.11 10.20.128.5 49154 5432 REJECT
198.51.100.7 10.20.0.25 40001 22 REJECT
198.51.100.7 10.20.0.25 40002 3389 REJECT
10.20.0.25 10.20.64.11 51000 8080 ACCEPT
10.20.64.11 10.20.0.9 49999 443 ACCEPT
EOF
echo "--- rejected, most first"
awk '$5 == "REJECT" { print $1, "->", $2 ":" $4 }' "$log" | sort | uniq -c | sort -rn
echo "--- rejected inside the VPC only"
awk '$5 == "REJECT" && $1 ~ /^10\.20\./ { n[$4]++ } END { for (p in n) print "port", p, n[p] }' "$log"
echo "--- accepted, total"
grep -c ACCEPT "$log"আউটপুট:
--- rejected, most first
3 10.20.64.11 -> 10.20.128.5:5432
1 198.51.100.7 -> 10.20.0.25:3389
1 198.51.100.7 -> 10.20.0.25:22
1 10.20.80.12 -> 10.20.128.5:5432
--- rejected inside the VPC only
port 5432 4
--- accepted, total
2
দুই AZ-এর app (10.20.64.11, 10.20.80.12) থেকে database-এর 5432-এ মোট ৪টি REJECT. দুই AZ-ই আটকাচ্ছে, তাই সন্দেহ data স্তরের security group-এ। বাইরের 198.51.100.7-এর 22 আর 3389 সাধারণ port খোঁজা, ঠিকভাবেই আটকেছে: আসল শব্দের ভিড়ে এগুলো বাদ দিতে পারাই দক্ষতা।
প্র ৫৫Role-এ policy দেওয়া আছে, তবু AccessDenied. কীভাবে খুঁজবেন? (মাঝারি)
শক্তিশালী উত্তর: বড় অনুমতি নয়; আগে পড়ি: কে, কোন action, কোন resource, কোন স্তর। সাধারণ কারণ: resource-এর ঠিকানা ভুল (ListBucket bucket-এর ওপর, GetObject object-এর ওপর), condition মেলেনি, ভুল role পরা, guardrail বা boundary-র সীমা, cross-account-এ অন্য পক্ষের Allow নেই, অথবা KMS key-এর অনুমতি নেই। Audit log আর policy simulator দিয়ে যাচাই করি।
প্র ৫৬Deploy-এর পরে latency দ্বিগুণ, error নেই। কী করবেন? (কঠিন)
শক্তিশালী উত্তর: আগে ক্ষতি: SLO পোড়াচ্ছে কি? পোড়ালে rollback, কারণ আগে ক্ষতি থামানো, পরে কারণ। তারপর তুলনা: p50 না p99, সব route না একটি, সব AZ না একটি। Trace দিয়ে দেখি সময় কোন span-এ গেল। সাধারণ কারণ: নতুন query-তে index নেই, বাড়তি N+1, cache key বদলে cold cache, নতুন dependency, CPU limit-এ throttling. একবারে একটি তত্ত্ব।
৮ · আচরণগত প্রশ্ন আর সীমিত অভিজ্ঞতা নিয়ে সৎ কথা
“একটি সময়ের কথা বলুন যখন…” ধরনের প্রশ্নে দেখা হয়, চাপে আপনি কী করেন। উত্তরের চারটি অংশ, যাকে বলে STAR: Situation, Task, Action, Result. সবচেয়ে বড় অংশ Action, আর সেখানে “আমরা” নয়, “আমি”।
নিচের সব গল্প কাল্পনিক নমুনা, শুধু গঠন দেখানোর জন্য। সংখ্যাগুলোও বানানো। ইন্টারভিউতে শুধু নিজের সত্যিকারের ঘটনা বলুন। বানানো গল্প follow-up-এ ধরা পড়ে, আর তা অসৎও। ক্লাস project, শখের server বা ক্যাপস্টোন-এর ঘটনাও ভালো গল্প, যদি সৎভাবে বলেন কোথায় ঘটেছে।
প্র ৫৭একটি সময়ের কথা বলুন যখন আপনার ভুলে কিছু ভেঙেছিল। (কাল্পনিক নমুনা) (মাঝারি)
Situation: “আমাদের ছোট দলের staging-এ একটি security group বদলেছিলাম। Task: একজন সহকর্মীর জন্য database খোলা দরকার ছিল। Action: আমি নতুন নিয়ম যোগ করার বদলে পুরোনোটি সম্পাদনা করলাম, আর app-এর সংযোগ কেটে গেল। Alert দেখেই দলকে বললাম ভুলটি আমার, আগের নিয়ম ফিরিয়ে দিলাম। পরে নিয়মগুলো Terraform-এ আনলাম, আর ‘আগে যোগ, পরে বাদ’ চেকলিস্টে লিখলাম। Result: staging ২০ মিনিট বন্ধ ছিল, আর পরের ছয় মাসে একই ভুল আর হয়নি।”
কেন শক্তিশালী: ভুল স্বীকার, ক্ষতি থামানো, ব্যবস্থার পরিবর্তন, মাপা ফল। “আমি কখনো ভুল করিনি” বা অন্যকে দোষ দেওয়া সবচেয়ে দুর্বল উত্তর।
প্র ৫৮খরচ কমানোর একটি অভিজ্ঞতা বলুন। (কাল্পনিক নমুনা) (মাঝারি)
Situation: “একটি শখের project-এর মাসিক বিল হঠাৎ দ্বিগুণ হলো। Task: সেবা না ভেঙে কারণ বের করা। Action: আমি line item ধরে দুই মাস মেলালাম, দেখলাম NAT-এর processing বেড়েছে। Flow log-এ বড় গন্তব্য ছিল একই region-এর bucket. Endpoint দিলাম, আর একটি ভুলে যাওয়া VM মুছলাম। Result: বিল আগের জায়গায় ফিরল। Budget alert আর tag বসালাম, যা আগে ছিল না।”
লক্ষ করুন, এটি শখের project বলেই বলা হচ্ছে। ছোট কিন্তু সত্যিকারের ঘটনা বড় বানানো ঘটনার চেয়ে ভালো।
প্র ৫৯সহকর্মীর সাথে architecture নিয়ে মতভেদের কথা বলুন। (কাল্পনিক নমুনা) (মাঝারি)
Situation: “একজন সিনিয়র ছোট একটি service-এর জন্য Kubernetes চাইছিলেন, আমি container service-এর পক্ষে। Task: ঝগড়া নয়, সিদ্ধান্ত। Action: আমি দুটি পথের খরচ, দলের দক্ষতা আর operational burden এক পাতায় লিখলাম। তাঁর যুক্তি ছিল ভবিষ্যতের বৃদ্ধি, সেটিও লিখলাম। একমত হলাম, কোন সংখ্যায় পৌঁছালে আবার ভাবব। Result: সিদ্ধান্তটি ADR-এ রইল। আমার মত জিতেছে তা বড় কথা নয়, শর্তটি লেখা থাকাই লাভ।”
প্র ৬০একটি production incident-এ আপনার ভূমিকা বলুন। (কাল্পনিক নমুনা) (কঠিন)
Situation: “Deploy-এর পরে checkout-এ error বাড়ল, burn-rate alert বাজল। Task: আমি সেদিন on-call. Action: আমি ঘটনা ঘোষণা করলাম, সাম্প্রতিক বদল দেখলাম, আর কারণ না খুঁজেই আগে rollback করলাম। Status আপডেট দিতে একজনকে দায়িত্ব দিলাম। পরে দোষারোপহীন postmortem-এ দেখলাম test-এ এই ব্যবসার নিয়ম ছিল না। Result: ক্ষতি থামল কয়েক মিনিটে; একটি নতুন test আর একটি action item মালিকসহ যোগ হলো।”
অভিজ্ঞতা না থাকলে সৎভাবে ক্যাপস্টোন-এর ল্যাবের ঘটনা বলুন: ৮১১টি ব্যর্থ request, readiness সবুজ অথচ ব্যবহারকারী লাল। “এটি নিজের ল্যাবে” কথাটি আগে বলে দিন।
সীমিত cloud অভিজ্ঞতা নিয়ে কথা
প্র ৬১“আপনি কি production-এ cloud চালিয়েছেন?” না চালিয়ে থাকলে কী বলবেন? (সহজ)
শক্তিশালী উত্তর: সোজা না বলুন, তারপর যা করেছেন তা সুনির্দিষ্টভাবে। কাল্পনিক নমুনা, আপনি শুধু নিজের সত্যি কাজটুকু বলবেন: “Production-এ চালাইনি। নিজের ল্যাবে একটি app container-এ তুলেছি, local Kubernetes-এ Terraform দিয়ে deploy করেছি, burn-rate alert বসিয়ে একটি খারাপ release ধরেছি আর rollback করেছি। আসল cloud account-এ এক দিনের জন্য নকশাটি তুলেছি, budget alert রেখে, সন্ধ্যায় মুছেছি। আসল চাপে কাজ করিনি, সেটিই শিখতে চাই।”
দুর্বল উত্তর দেখতে যেমন: “হ্যাঁ, AWS-এ অনেক কাজ করেছি।” Follow-up-এর দুটি প্রশ্নেই ধরা পড়ে, আর বিশ্বাস আর ফেরে না।
শেষের কথাটি জরুরি: কোন কাজ করেছেন, কোনটি পড়েছেন, কোনটি অনুমান, তা আলাদা রাখুন।
প্র ৬২প্রশ্নের উত্তর জানেন না। কী করবেন? (সহজ)
শক্তিশালী উত্তর: “এটি আমি জানি না” বলে থামবেন না, আবার বানাবেনও না। যেমন: “এই service আমি ব্যবহার করিনি। ধারণাটি যেভাবে বুঝি, সেভাবে ভাবছি… আর আমি docs-এ এটা যাচাই করতাম।” পরে জেনে নেওয়ার ইচ্ছা দেখান।
নিজে হাতে করার নিরাপদ পথ
| পথ | কী শেখা যায় | সতর্কতা |
|---|---|---|
| Local ল্যাব | Linux VM, Docker, local Kubernetes, Terraform, Prometheus. কোনো বিল নেই। ক্যাপস্টোন এভাবেই করা। | Load balancer, IAM বা AZ-এর আসল আচরণ নেই। S3-সামঞ্জস্যপূর্ণ local storage-ও আসল নয়। |
| এই কোর্সের checker | Browser-এ IAM, route, CIDR, autoscaling-এর যুক্তি | Simulator, আসল সেবা নয় |
| Free tier | আসল console, CLI, IAM, VPC, bucket | শর্ত provider-ভেদে আলাদা, আর বদলায়। Card লাগতে পারে। NAT, load balancer, public IP, snapshot-এ বিল আসতে পারে। |
Free tier ব্যবহার করলে: আগে root-এ MFA, আলাদা identity আর budget alert; কাজ ছোট রাখুন, একবেলায় শেষ করুন; সব তৈরি করুন Terraform দিয়ে, যাতে terraform destroy করে পরদিন বিলের পাতা দেখতে পারেন। Stop মানে Delete নয়, disk আর IP-র বিল চলতে পারে। Access key কখনো git-এ নয়। Cloud ব্যবহার না করেও এই কোর্স শেষ করা যায়, আর কারও চাকরির সম্ভাবনা নিজের টাকা পোড়ানোর ওপর নির্ভর করা উচিত নয়।
ইন্টারভিউয়ারকে যা জিজ্ঞেস করতে পারেন
- On-call কীভাবে চলে? এক সপ্তাহে কতবার ডাক আসে?
- একটি পরিবর্তন production-এ যেতে কত সময় লাগে? Rollback কেমন?
- Infrastructure কতটা code-এ? Console-এ হাতে বদল হয় কি?
- শেষ বড় incident থেকে দল কী বদলেছে?
- এই পদে প্রথম ছয় মাসে ভালো কাজ দেখতে কেমন হবে?
৯ · Portfolio, certificate আর চার সপ্তাহের পরিকল্পনা
ক্যাপস্টোন থেকে portfolio
একটি বড় project ভালো করে দেখানো দশটি ছোট demo-র চেয়ে কাজের। পর্ব ৭৬-এর ক্যাপস্টোন এই কাজটিই করে। একটি পাবলিক repository বানান, যেখানে README-র প্রথম পাতাতেই এগুলো আছে:
- এক ছবিতে নকশা: commit থেকে Pod পর্যন্ত পথ, আর কোথায় চলে (local cluster, এটি সৎভাবে লিখুন)।
- SLO আর হিসাব: ৯৯.৯%, ২০ req/s-এ মাসে ৫১,৮৪০টি ব্যর্থতার অনুমতি।
- কোড: multi-stage Dockerfile, pipeline, Terraform, Prometheus rule.
latestনয়, commit SHA. - একটি incident note: ৮১১টি ব্যর্থ request-এর দোষারোপহীন postmortem. এটি সবচেয়ে আলাদা করে চোখে পড়ে।
- খরচের অনুমান: অনুমিত দরে মাসে $২৪১.৪০, প্রতি মিলিয়ন request-এ $৪.৬৬, আর “দর যাচাই করুন” লেখা।
- Readiness-এর সৎ হিসাব: ৫৯%, ৩টি blocker. তারপর সেগুলো শেষ করুন: Alertmanager, remote state, TLS.
Repository-তে secret, key বা আসল account id যাচ্ছে না, তা secret scanning দিয়ে যাচাই করুন। পাতা থেকে কপি নয়: কোডটি নিজে লিখুন, আর প্রতিটি লাইনের কারণ বলতে পারুন।
প্র ৬৩আপনার সেরা project নিয়ে পাঁচ মিনিট বলুন। (মাঝারি)
শক্তিশালী উত্তর: ছক: সমস্যা → নকশার একটি ছবি → দুটি সিদ্ধান্ত আর কারণ → একটি জিনিস যা ভেঙেছিল → কী বদলাতাম। যেমন: “Readiness সবুজ ছিল, অথচ ২৫% request ব্যর্থ। তাই burn-rate alert যোগ করলাম, যা ১ মিনিট ৪৬ সেকেন্ডে বাজল। সবচেয়ে বড় শিক্ষা: probe শুধু নিজের পথটুকু দেখে।” সব feature-এর তালিকা নয়, সিদ্ধান্তের গল্প।
দুর্বল উত্তর দেখতে যেমন: “Docker, Kubernetes, Terraform, Prometheus সব ব্যবহার করেছি।” এটি তালিকা, অভিজ্ঞতা নয়।
Vendor certificate নিয়ে নিরপেক্ষ কথা
Provider-দের entry, associate আর specialty স্তরের certificate আছে। নাম, বিষয়, দাম আর মেয়াদ বদলায়, তাই provider-এর পাতাই একমাত্র ভরসাযোগ্য উৎস। Certificate একটি প্রস্তুতির কাঠামো দেয়, আর নতুনদের জন্য জানার প্রমাণ হতে পারে। তবে এটি হাতে-কলমে অভিজ্ঞতার বিকল্প নয়, আর চাকরির নিশ্চয়তাও নয়। এই কোর্স কোনো নির্দিষ্ট certificate-এর পূর্ণ প্রস্তুতি নয়: ধারণা মিলবে, কিন্তু provider-ভেদে service-এর খুঁটিনাটি আলাদা করে পড়তে হবে।
প্র ৬৪“আপনার certificate নেই কেন?” বা “এটি থাকলেই কি আপনি প্রস্তুত?” (সহজ)
শক্তিশালী উত্তর: দুই ক্ষেত্রেই সৎ আর শান্ত থাকুন। না থাকলে: “এখনো নিইনি, হাতে-কলমে project-এ সময় দিয়েছি; এই দলের provider-এ প্রয়োজন হলে নিতে আগ্রহী।” থাকলে: “এটি আমাকে ধারণার মানচিত্র দিয়েছে। Production-এর চাপে কাজের অভিজ্ঞতা এর চেয়ে আলাদা, সেটি জানি।”
চার সপ্তাহের পরিকল্পনা
দিনে প্রায় দেড় ঘণ্টা ধরে একটি ধারণা। আপনার সময় আর পদ অনুযায়ী বদলান। এটি কোনো ফলের প্রতিশ্রুতি নয়।
| সপ্তাহ | ফিরে পড়া | এই পাতায় | শেষে যা পারবেন |
|---|---|---|---|
| ১ · ভিত্তি | পর্ব ১–৬, ১৫–২৪ | অংশ ১, ২ | পাঁচ ধাপের ছক, compute, storage, database-এর প্রশ্ন জোরে বলা; availability হিসাব |
| ২ · পথ আর পরিচয় | পর্ব ২৫–৩৫, ৭২–৭৩ | অংশ ৩, ৪ | খালি কাগজে VPC আঁকা, CIDR ভাগ, IAM-এর সিদ্ধান্ত, খরচের হিসাব |
| ৩ · পরিস্থিতি | পর্ব ২৪, ৬৭, ৬৮, ৭৪, ৭৫ | অংশ ৫, ৬, ৭ | প্রতিদিন একটি পরিস্থিতি ঘড়ি ধরে ২০ মিনিট; প্রতিটি checker-এ মান বদলে দেখা |
| ৪ · মহড়া | পর্ব ৭৬, ৮১ | অংশ ৮, ৯ | ৩টি mock, ৪টি নিজের STAR গল্প, portfolio-র README, দুর্বল বিষয়ের তালিকা |
প্রতিটি mock-এর পরে লিখুন: কোথায় আটকেছিলেন, কোন সংখ্যা ভুল বলেছিলেন, কোন অনুমান বলেননি। পরের দিনের পড়া সেই তালিকা থেকে।
১০ · AI-এর যুগে cloud ইন্টারভিউর প্রস্তুতি
AI একটি ধৈর্যশীল mock interviewer হতে পারে। তবে cloud-এর প্রশ্নে তার ভুলগুলো চেনা, আর আত্মবিশ্বাসের সাথে বলা হয়।
| AI-এর সাধারণ ভুল | কীভাবে ধরবেন |
|---|---|
Policy-তে *, firewall-এ 0.0.0.0/0, “সহজ” বলে bucket public | ন্যূনতম অনুমতিতে নামান; পর্ব ২৭ আর ৩২-এর নিয়মে মেলান |
Secret কোড বা user data-তে, latest tag, বাতিল হওয়া API version | Secret manager, SHA বা digest; docs আর --dry-run |
| অস্তিত্বহীন flag বা resource argument | terraform plan আর provider-এর ডকুমেন্টেশন |
| নকশায় খরচের কোনো উল্লেখ নেই, প্রতি স্তরে দামি সেবা | নিজে হিসাব করুন; অনুমিত দর স্পষ্ট লিখুন |
terraform destroy, kubectl delete, rm -rf সতর্কতা ছাড়া | আগে plan, throwaway পরিবেশ, diff পড়া |
| পুরোনো দর, free-tier-এর শর্ত, SLA-র সংখ্যা | Provider-এর বর্তমান পাতা |
| “অমুক প্রতিষ্ঠানের ইন্টারভিউতে এই প্রশ্ন আসে” | উপেক্ষা করুন; ধারণা আর পদ্ধতি অনুশীলন করুন |
| চকচকে, বানানো সংখ্যায় ভরা STAR গল্প | শুধু নিজের সত্যিকারের ঘটনা, AI শুধু গোছাতে সাহায্য করবে |
AI-কে mock interviewer বানাতে চাইলে নিয়ম স্পষ্ট দিন: একবারে একটি প্রশ্ন, আর আপনার উত্তরের পরেই মূল্যায়ন। প্রম্পটে আসল account id, key, IP বা আগের অফিসের তথ্য দেবেন না।
AI-এর দেওয়া উত্তর মুখস্থ করার আগে — চেকলিস্ট
নিজেকে যাচাই করুন
ইন্টারভিউর ধাঁচের ছোট প্রশ্ন। ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন। সব দাম অনুমিত।
ক্রমপরিস্থিতির প্রশ্নের উত্তরের ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)
- ❓ অস্পষ্ট চাহিদা পরিষ্কার করা
- 🔢 লক্ষ্য সংখ্যায় লেখা
- 🧱 সবচেয়ে সরল নকশা আঁকা
- 💥 কী ভাঙলে কী হবে, তা দেখা
- 💰 খরচ হিসাব আর trade-off বলা
(সহজ) একটি subnet-কে সাধারণ নকশায় “public” বলা হয় কোন কারণে?
- Subnet-এর নামে public লেখা
- তার ভেতরের VM-এর security group-এ 443 খোলা
- তার route table-এ internet gateway-র route আছে
- তার ভেতরে NAT gateway বসানো
(সহজ) AWS-ধরনের হিসাবে, যেখানে প্রতি subnet-এ ৫টি ঠিকানা কাটা যায়, একটি /24 subnet-এ কতটি ব্যবহারযোগ্য ঠিকানা?
- ২৫১
- ২৫৪
- ২৫৬
- ২৪৮
(সহজ) Private server থেকে curl-এ “Connection refused” এল। এর সবচেয়ে সম্ভাব্য মানে কী?
- Route table-এ এই গন্তব্যের পথ নেই
- Security group packet ফেলে দিচ্ছে
- DNS নামটি খুঁজে পাওয়া যায়নি
- সেই port-এ কোনো process শুনছে না
(মাঝারি) তিনটি অংশ series-এ, প্রতিটির availability ৯৯.৯%. সবগুলো লাগে। মোট availability কত?
- ৯৯.৯%
- ৯৯.৭০০৩%
- ৯৯.৯৯৯৯৯৯৯%
- ৯৯.৩%
(মাঝারি) স্বাধীনভাবে ব্যর্থ হয় এমন দুটি copy, প্রতিটির availability ৯৯%, আর একটি চললেই সেবা চলে। Availability কত?
- ৯৯%
- ৯৮.০১%
- ৯৯.৯৯%
- ১০০%
(মাঝারি) ৩০ দিনের মাসে ৯৯.৯৫% লক্ষ্যে সর্বোচ্চ কত মিনিট বন্ধ থাকা চলে?
- ৪৩.২ মিনিট
- ৪.৩২ মিনিট
- ৫ মিনিট
- ২১.৬ মিনিট
(মাঝারি) একটি নতুন subnet-এর সব server ইন্টারনেটে যেতে timeout পাচ্ছে। Cloud API বলছে, subnet-এর কোনো route table association নেই, আর main table-এ শুধু local route. সবচেয়ে ভালো সমাধান কোনটি?
- Subnet-কে NAT route-ওয়ালা private table-এ যুক্ত করা
- Main table-এ internet gateway-র route দেওয়া
- প্রতিটি server-এ public IP দেওয়া
- Security group-এ outbound
0.0.0.0/0বারবার যোগ করা
(মাঝারি) একটি request-এ identity policy-র Allow মিলল, আর একটি guardrail-এর explicit Deny-ও মিলল। Deny statement-টি লেখা আগে। ফল কী হবে, আর Deny পরে লেখা থাকলে?
- Allow জিতবে, কারণ সেটি identity-তে
- দুই ক্ষেত্রেই Deny জিতবে
- যেটি আগে লেখা, সেটি জিতবে
- Implicit deny হবে
(মাঝারি) ঘণ্টায় একবার backup হয়, আর তা অন্য জায়গায় পৌঁছাতে ১০ মিনিট লাগে। সবচেয়ে খারাপ RPO কত?
- ৬০ মিনিট
- ৪০ মিনিট
- ৭০ মিনিট
- ১০ মিনিট
(কঠিন) লক্ষ্য RTO ১ ঘণ্টা, RPO ২ মিনিট। অনুমিত মাসিক খরচ ও সাধারণ মান: backup-restore $৪৬ (RTO ৮ ঘণ্টা, RPO ১ ঘণ্টা), pilot light $২৩৬ (১ ঘণ্টা, ১.২ মিনিট), warm standby $৭২২ (১৫ মিনিট, ০.৬ মিনিট), active-active $১,২৪৬ (৩ মিনিট, ০.৩ মিনিট). কোনটি নেবেন?
- Pilot light
- Backup-restore
- Warm standby
- Active-active
(মাঝারি) ৪০% ছাড়ের ১ বছরের অঙ্গীকার। একটি VM বছরের কত ভাগ সময় চললে অঙ্গীকার আর on-demand-এর খরচ সমান হয়?
- ৪০%
- ৬০%
- ৭০%
- ১০০%
(মাঝারি) অনুমিত দর: NAT ঘণ্টায় $০.০৫, প্রতি GB processing $০.০৫। ২টি NAT, ৭২০ ঘণ্টা, ১২,০০০ GB. Egress বাদে মাসিক NAT খরচ কত?
- $৩৬
- $৬০০
- $৭২
- $৬৭২
(কঠিন) ৪০টি instance, প্রতিটিতে connection pool ২০, database-এ ব্যবহারযোগ্য slot ৪৮০। সবচেয়ে বড় নিরাপদ pool কত?
- ২০
- ২৪
- ১২
- ৪৮
(মাঝারি) প্রতি সেকেন্ডে ৬,০০০ read, cache hit ৯০%, তাই database-এ ৬০০ q/s. Hit ৭০%-এ নামলে database-এ কত q/s?
- ৬০০
- ৭৮০
- ৪,২০০
- ১,৮০০
(কঠিন) Peak-এ ৩৪টি instance লাগে, আর AZ তিনটিতে সমান ভাগ। এক AZ পুরো হারালেও ৩৪টি চালু রাখতে মোট কতটি রাখবেন?
- ৫১
- ৩৫
- ৪৫
- ৬৮
(সহজ) একটি private bucket রাখার কথা, কিন্তু সেটি public পাওয়া গেছে, ভেতরে ক্রেতার ডেটা। সত্যিই public কি না নিশ্চিত হওয়ার পরে প্রথম কাজ কী?
- Bucket-টি পুরো মুছে ফেলা
- ডেটা না মুছে public পথ বন্ধ করা
- সব ফাইলে encryption চালু করা
- বসে postmortem লিখে ফেলা
(মাঝারি) DNS record-এর TTL এখন 3600 সেকেন্ড। Cutover-এর জন্য TTL 60 করবেন। কখন?
- Cutover-এর মুহূর্তে
- Cutover-এর ১ মিনিট আগে
- Cutover-এর অন্তত ১ ঘণ্টা আগে
- Cutover-এর পরে
(মাঝারি) ১০ TB ডেটা, ১০০ Mbps link, ৮০% কার্যকারিতা, দশমিক একক। শুধু bulk কপিতে প্রায় কত দিন?
- ১.৪৫ দিন
- ১১.৫৭ দিন
- ৯.২৬ দিন
- ১১৫.৭ দিন
(সহজ) ইন্টারভিউয়ার জিজ্ঞেস করলেন, “Production-এ Kubernetes চালিয়েছেন?” আপনি শুধু নিজের ল্যাবে চালিয়েছেন। সবচেয়ে ভালো উত্তর কোনটি?
- “Production-এ নয়। নিজের ল্যাবে deploy আর rollback করেছি।”
- “হ্যাঁ, অনেক cluster নিজে হাতে চালিয়েছি।”
- “না, চালাইনি।” বলে সেখানেই থেমে যাওয়া
- “Kubernetes আমার দরকারই পড়েনি, ওটি বাজে জিনিস।”
(মাঝারি) বিল কমাতে কোন ক্রমটি সাধারণত সবচেয়ে যুক্তিসঙ্গত?
- আগে ৩ বছরের অঙ্গীকার, তারপর rightsizing
- Backup আর log বন্ধ করা দিয়ে শুরু
- শুধু সবচেয়ে বড় VM ছোট করা
- আগে অপচয় কমানো, তারপর commitment
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব শব্দ এখানে একসাথে:
মনে রাখুন
- পাঁচ ধাপ: Clarify, Requirements, Design, Failure, Cost. অনুমান মুখে বলুন, সংখ্যা ধরে নিন, সবচেয়ে সরল নকশা আগে।
- Availability: ৯৯.৯৫% মানে মাসে ২১.৬ মিনিট। Copy স্বাধীন হলে ৮.৭ মিনিট, কিন্তু correlated failure-এ ফল বদলায়; তাই rollout আর rollback-ও নকশার অংশ।
- স্তর ধরে হিসাব: ১০ গুণ ভিড়ে app ৪ থেকে ৫১, connection ১,০২০ বনাম ৪৮০, cache ৯০%-এ ৬,০০০ থেকে ৬০০ q/s. Autoscaling একা যথেষ্ট নয়।
- Troubleshooting: কী বদলেছে, তারপর লক্ষণ, তারপর স্তরে স্তরে। Timeout মানে পথ, refused মানে port, 403 মানে identity. Bucket-এ আগে দরজা বন্ধ, প্রমাণ রেখে। বিলে সারি ধরে তুলনা।
- সততা: কাজ, পড়া আর অনুমান আলাদা রাখুন। ল্যাবকে ল্যাব বলুন, ছোট সত্যিকারের গল্প বলুন, certificate-কে কাঠামো ভাবুন, নিশ্চয়তা নয়।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ৮১ · DevOps ইন্টারভিউ — Linux, Docker, Kubernetes, Terraform, CI/CD আর troubleshootingপরবর্তী পর্বহাতের কাজের প্রশ্ন, এই পাতার পরিপূরক।
- পর্ব ৭৯ · লিখিত ও মৌখিক (ভাইভা) প্রশ্নপাশের অনুশীলনসংজ্ঞা, তুলনা আর ব্যাখ্যা।
- পর্ব ৭৬ · ক্যাপস্টোনপ্রজেক্টPortfolio আর আচরণগত গল্পের সবচেয়ে ভালো উৎস।
- ক্লাউড কম্পিউটিং ও DevOps · কোর্স হোম৮১টি পর্বপুরো কোর্সের রোডম্যাপ, দুর্বল মডিউলগুলো আবার দেখুন।
- System Design · ধারণাভিত্তিক ইন্টারভিউ প্রশ্নপাশের কোর্সCache, database, queue আর consistency-র trade-off.
- System Design · Mock interviewপাশের কোর্সবড় নকশার পুরো মহড়া।
- Computer Networks · Subnettingপাশের কোর্সCIDR-এর তত্ত্ব, আরও গভীরে।