13.7
SQS বনাম SNS বনাম Kinesis, আর Amazon MQ
পাশাপাশি রেখে কোনটা নেবে তার গাইড, আর কখন standard protocol-এর broker-ই ঠিক উত্তর।
18 মিনিট পড়া + Animation
টিপস: ডটেড-আন্ডারলাইন করা যেকোনো শব্দে ট্যাপ বা Hover করলে তার অর্থ দেখবে।
এই লেসন শেষে তুমি পারবে
- SQS, SNS আর Kinesis Data Streams পাশাপাশি রেখে তুলনা করতে: push নাকি pull, পড়ার পর message-এর কী হয়, data কতদিন থাকে, ক্রম, duplicate, কয়জন consumer, কে কীভাবে scale করে, আর replay।
- কোনো scenario-র keyword দেখে ঠিক service (বা কয়েকটার জোড়া) বেছে নিতে: SQS FIFO, SNS + SQS fan-out, Kinesis + Data Firehose সহ, আর কখন উত্তর আসলে EventBridge বা Amazon MSK।
- Event-driven AWS-এর “মূল তিনজন” Lambda, SNS আর SQS কীভাবে একসাথে কাজ করে, dead-letter queue আর fan-out pattern সহ বুঝিয়ে বলতে।
- Amazon MQ কী, কোন কোন open protocol বোঝে (JMS, NMS, AMQP, STOMP, MQTT, OpenWire, WebSocket), আর কেন পুরোনো application নতুন করে না লিখে সরানোর বেলায় এটাই উত্তর, কিন্তু নতুন cloud-native app-এর বেলায় না, তা ব্যাখ্যা করতে।
- Amazon MQ-কে highly available করে সাজাতে: দুটো AZ জুড়ে shared EFS storage সহ ActiveMQ active/standby, তিন node-এর RabbitMQ cluster, আর server-এ চলা একটা broker-এর সীমাবদ্ধতা।
#পুরো chapter এক পাতায়
এই লেসন দিয়ে decoupling chapter শেষ হচ্ছে। Lesson 13.1-এ তিনটা model-এর পরিচয় হয়েছিল; 13.2 থেকে 13.6 পর্যন্ত প্রতিটা service গভীরে দেখেছ। এখানে ওদের পাশাপাশি দাঁড় করাব, যাতে পরীক্ষার প্রশ্নে বা design review-তে কয়েক সেকেন্ডে বেছে নিতে পারো, আর কেন বেছেছ সেটা যুক্তি দিয়ে বলতে পারো।
তিনটা model একবার মনে করিয়ে দিই (lesson 13.1):
- Queue (SQS): producer কাজ রেখে যায়; প্রতিটা message নেয় একজন consumer, কাজটা করে, তারপর delete করে।
- Publish/subscribe (SNS): publisher একটা message পাঠায়; প্রত্যেক subscriber নিজের একটা copy পায়, সাথে সাথে push হয়ে।
- Stream (Kinesis Data Streams): producer একটা log-এর শেষে record জুড়ে দেয়; অনেক consumer একই record পড়ে, প্রত্যেকে নিজের জায়গা থেকে, যতক্ষণ retention-এর সময় আছে।
Note-এ প্রতিটা service এক লাইনে বলা আছে:
- Amazon SQS application-কে decouple করে। Consumer-রা queue থেকে message টেনে নেয় (pull), আর একজন consumer সফলভাবে process করলে message চিরতরে delete হয়ে যায়। Worker tier দিয়ে কাজ করাতে এটা ব্যবহার করো (video processing, email পাঠানো)।
- Amazon SNS pub/sub model-এ কাজ করে, data সবার কাছে push করে দেয়। Standard topic কিছুই store করে না: পাঠানো হলেই message-এর গল্প শেষ। একটা event ঘটলে একসাথে অনেক service বা user-কে জানাতে হলে ব্যবহার করো (fan-out)।
- Amazon Kinesis বিশাল পরিমাণ streaming data সামলায়। পড়ার পরও data delete হয় না (retention আছে), আর একাধিক consumer একই data বারবার পড়তে পারে। Big data নিয়ে কাজ করলে, আর একই stream থেকে real-time-এ নানা রকম analytics চালাতে হলে এটা।
একটা order event: queue-তে, topic-এ নাকি stream-এ
ঢাকার একটা food-delivery app একটা “order placed” event তৈরি করে। একই event SQS-এ, SNS-এ আর Kinesis Data Streams-এ গেলে কী হয়, আর কোনো consumer অনুপস্থিত থাকলে কে কী করে, পাশাপাশি দেখো।
পরিস্থিতি
Queue: consumer-রা টেনে নেয়, তাদের একজন message-টা process করে, তারপর delete করে।
Order service event-টা queue-তে পাঠিয়ে নিজের কাজে চলে যায়। কে process করবে, কখন করবে, তা সে জানেও না, তার মাথাব্যথাও না: এটাই decoupling।
#SQS বনাম SNS বনাম Kinesis পাশাপাশি
| SQS | SNS | Kinesis Data Streams | |
|---|---|---|---|
| Model | Queue (point to point) | Pub/sub topic | Stream (ক্রম মেনে চলা একটা log) |
| Data consumer-এর কাছে কীভাবে যায় | Consumer টেনে নেয় (ReceiveMessage, long polling) | SNS প্রত্যেক subscriber-কে push করে | Standard consumer টেনে নেয় (প্রতি shard-এ 2 MB/s, সবার মধ্যে ভাগ); enhanced fan-out consumer-কে data push করা হয় (প্রতি shard-এ প্রত্যেক consumer-এর জন্য 2 MB/s) |
| Consumer পড়ার পর | Visibility timeout ধরে লুকানো, তারপর consumer নিজে delete করে | পরে পড়ার কিছু নেই: প্রত্যেক subscriber আগেই copy পেয়ে গেছে | Retention শেষ না হওয়া পর্যন্ত record থেকে যায় |
| Data কতদিন থাকে | Default ৪ দিন, ১ মিনিট থেকে ১৪ দিন | Standard topic: persist হয় না (retry-র পরও পৌঁছাতে না পারলে হারায়) | Default ২৪ ঘণ্টা, সর্বোচ্চ ৩৬৫ দিন |
| Consumer | যত খুশি worker, কিন্তু প্রতিযোগিতা করে: প্রতিটা message একজনের কাছে | প্রতি standard topic-এ সর্বোচ্চ ১,২৫,০০,০০০ subscription, প্রত্যেকে একটা copy | অনেক consumer, প্রত্যেকে সবকিছু পড়ে; প্রতি stream-এ সর্বোচ্চ ২০টা enhanced fan-out consumer |
| ক্রম | শুধু FIFO queue-তে (message group ধরে) | শুধু FIFO topic-এ (message group ধরে) | প্রতি shard-এ (একই partition key-র record) |
| Duplicate | Standard: at least once। FIFO: ৫ মিনিটের window-তে deduplication | Standard: at least once। FIFO: deduplication | At least once: duplicate সামলাতে হবে consumer-কে |
| Capacity নিয়ে ভাবনা | নেই: standard queue-র throughput প্রায় সীমাহীন | নেই: প্রতি Region-এ publish-এর একটা soft quota | Provisioned mode-এ shard (প্রতি shard-এ ঢোকার পথে 1 MB/s বা ১,০০০ record/s), নয়তো নিজে নিজে scale করা on-demand mode |
| Replay | নেই (DLQ থেকে redrive মানে replay না) | নেই, শুধু archiving চালু থাকা FIFO topic ছাড়া | আছে, retention-এর ভেতরের যেকোনো জায়গা থেকে |
| বাড়তি সুবিধা | প্রতি message-এ ১৫ মিনিট পর্যন্ত delay, DLQ, visibility timeout | Filter policy, অনেক রকম protocol (SQS, Lambda, Firehose, HTTP/S, email, SMS, mobile push) | Lambda, KCL app, Data Firehose, Managed Service for Apache Flink-এর মতো consumer |
| Message size | সর্বোচ্চ 1 MiB (Extended Client Library দিয়ে S3-এর মাধ্যমে 2 GB) | Default 256 KiB, topic-এর setting দিয়ে 1 MiB পর্যন্ত | প্রতি record-এ সর্বোচ্চ 10 MiB |
| কীসের জন্য | Worker tier, buffer, হঠাৎ ভিড় সামলানো | Notification, fan-out | Real-time big data, analytics আর ETL |
Table-টা কীভাবে পড়বে:
- Push নাকি pull ঠিক করে দেয় কাকে তৈরি থাকতে হবে। SNS-এ subscriber-কে ঠিক তখনই পাওয়া যেতে হবে যখন SNS ডাকে; SQS আর standard Kinesis consumer-এ consumer নিজে তৈরি হলে চায়, তাই ধীর বা বন্ধ consumer শুধু কাজ জমায়।
- পড়ার পর কী হয়, এটাই সবচেয়ে গভীর পার্থক্য। Queue হলো করণীয় কাজের তালিকা: হয়ে গেলে কাটা পড়ে। Topic হলো ঘোষণা: পরে খুঁজে দেখার কিছু নেই। Stream হলো recording: পড়লে কিছুই বদলায় না, আর যে কেউ পিছিয়ে যেতে পারে।
- Capacity-র কারণে, সম্ভব হলে SQS আর SNS-ই ভালো: মাপজোখের কিছু নেই। Kinesis-এ তোমাকে provisioned shard বা on-demand mode বেছে নিতে হয় (lesson 13.5)।
- ক্রম-এর দাম সব জায়গাতেই throughput: FIFO queue আর topic-এর message group-এর সীমা আছে (lesson 13.3), আর Kinesis ক্রম রাখে শুধু একটা shard-এর ভেতরে।
#ভুল ধারণা: “SNS কোনো data store করে না”
#Data Firehose আর Amazon MQ কোথায় বসে
ওপরের table-টা পরীক্ষার চিরচেনা ত্রিভুজ। এই chapter-এর বাকি দুটো service দুটো ফাঁক পূরণ করে:
| Service | Model | Data রাখে? | Replay? | Scaling | কখন বেছে নেবে |
|---|---|---|---|---|---|
| SQS | Queue, pull | ১৪ দিন পর্যন্ত, delete না হওয়া পর্যন্ত | না | নিজে নিজে | প্রতি message-এ একজন worker, buffer |
| SNS | Pub/sub, push | না (standard) | না (শুধু FIFO archive) | নিজে নিজে | একসাথে অনেককে জানানো, fan-out |
| Kinesis Data Streams | Stream, pull বা push (enhanced fan-out) | ২৪ ঘণ্টা থেকে ৩৬৫ দিন | হ্যাঁ | Shard বা on-demand | অনেক পাঠক, real-time analytics, replay |
| Data Firehose | Delivery-র পাইপ, buffer করে তারপর লেখে | না (destination বন্ধ থাকলে অল্প সময়ের retry ছাড়া) | না | নিজে নিজে | কোনো code ছাড়া streaming data S3, Redshift, OpenSearch, Splunk, HTTP endpoint-এ তোলা |
| Amazon MQ | Queue আর topic দুটো নিয়েই broker | হ্যাঁ, consume না হওয়া পর্যন্ত | না | Broker-এর মাপ তুমি ঠিক করো | JMS, AMQP, STOMP, MQTT, OpenWire ব্যবহার করা চালু app |
Firehose আছে lesson 13.6-এ; এর পরীক্ষার কৌশল হলো “প্রায় real time, code লাগে না, কোনো destination-এ তোলা”। Amazon MQ-এর জন্য নিচে আলাদা একটা অংশ আছে।
#বেছে নেওয়া: একটা সিদ্ধান্তের গাইড
এটা কি এমন চালু application, যেটা standard কোনো messaging protocol-এ কথা বলে?
App যদি ActiveMQ বা RabbitMQ-এর মতো broker-এর সাথে JMS, NMS, AMQP, STOMP, MQTT বা OpenWire ব্যবহার করে, আর messaging code নতুন করে না লিখে AWS-এ সরাতে হয়: Amazon MQ। না হলে পরের ধাপে যাও।
প্রতিটা message একজন worker সামলাবে, নাকি সবাইকে দেখতে হবে?
প্রতি message-এ একজন worker (job, task, process করার order): queue, SQS। Customer ধরে ক্রম বা ঠিক একবার process হওয়া জরুরি হলে: SQS FIFO। সবাইকে প্রতিটা message দেখতে হলে পরের ধাপে যাও।
প্রত্যেক receiver-কে এখনই পেতে হবে, আর পরে কেউ পড়তে না পারলেও চলবে?
মানুষ আর endpoint-কে notification (email, SMS, mobile push, HTTP webhook): SNS। Receiver যদি এমন system হয়, যেটা বন্ধ থাকার সময়েও একটা message হারাতে পারবে না: SNS + SQS fan-out, প্রতিটা receiver-এর জন্য একটা queue।
কয়েকজন consumer-এর কি একই data নিজের গতিতে লাগবে, বা replay?
বিশাল পরিমাণ event (clickstream, log, IoT reading, transaction), যেগুলো কয়েকটা স্বাধীন app পড়বে, real-time analytics, বা কোনো bug-এর পরে আবার process করা: Kinesis Data Streams। Stream-টা শুধু storage-এ তুলে দিতে হলে, কোনো code না লিখে: Data Firehose (সরাসরি, বা একটা Kinesis data stream থেকে পড়ে)।
Event কি আসছে AWS service বা SaaS app থেকে, rule দিয়ে route হবে?
“কোনো EC2 instance-এর অবস্থা বদলালে…”, “কেউ এই API call করলে…”, partner SaaS-এর event, content দেখে অনেক target-এ rule, নির্দিষ্ট সময়ের event: Amazon EventBridge (chapter 19, lesson 19.5)। আর team যদি আগে থেকেই Apache Kafka চালায়, তাহলে managed উত্তর হলো Amazon Managed Streaming for Apache Kafka (lesson 17.7)।
#Keyword-এর মানচিত্র
| প্রশ্নে লেখা থাকে… | উত্তর |
|---|---|
| decouple application tiers, asynchronous processing, worker tier | SQS |
| buffer requests, tolerate traffic spikes, database-কে রক্ষা করা | SQS |
| queue-র দৈর্ঘ্য দেখে worker scale করা (backlog per instance) | SQS + Auto Scaling group |
| message ক্রম মেনে, exactly once, কোনো duplicate না | SQS FIFO (fan-out-এর জন্য SNS FIFO + SQS FIFO) |
| send notifications to thousands of users or endpoints simultaneously, email/SMS, push notification | SNS |
| one event triggers multiple independent workflows concurrently without data loss | SNS + একাধিক SQS queue (fan-out) |
| কোনো subscriber শুধু কিছু message চায় | SNS filter policy |
| একটা S3 event কয়েকজন consumer-এর কাছে যেতে হবে | S3 → SNS → SQS queue (বা EventBridge) |
| multiple consumers read the same stream of IoT data at their own pace | Kinesis Data Streams |
| replay data, real-time big data, real-time custom analytics dashboard | Kinesis Data Streams |
| বিশাল পরিমাণে key ধরে ক্রম (user ধরে, device ধরে) | Kinesis Data Streams (partition key) |
| archive clickstream to S3, Redshift বা OpenSearch-এ load, code ছাড়া, প্রায় real time, Parquet | Data Firehose |
| migrating existing / legacy applications, JMS / AMQP / MQTT-এর মতো standard protocol, without rewriting code | Amazon MQ |
| cloud-native নতুন application | SQS / SNS, Amazon MQ না |
| troubleshoot failed messages, poison pill, prevent infinite processing loops | Dead-letter queue (redrive policy) |
| AWS API call বা service event-এ rule দিয়ে সাড়া দেওয়া | EventBridge |
কারণ পড়ার আগে বাস্তব কিছু scenario-তে নিজে চেষ্টা করো:
কোন messaging service মানায়?
একটা scenario বেছে নাও, আন্দাজ করো, তারপর কারণটা পড়ো। Keyword-গুলো খেয়াল করো: একজন worker নাকি সবাই, push নাকি pull, ক্রম, replay, code ছাড়া, পুরোনো protocol।
১. একটা scenario বেছে নাও(প্রথমবারেই ঠিক: 0/10)
ঢাকার একটা online school lecture video upload করে। প্রতিটা video-কে একদল EC2 worker তিনটা resolution-এ convert করবে। প্রতিটা কাজ করবে একজন worker, আর কাজ জমলে বহরটা বড় হওয়া উচিত।
২. তোমার উত্তর
#মিলিয়ে বানানো pattern
বাস্তবের বেশিরভাগ system এই service-গুলোর একাধিক একসাথে ব্যবহার করে। নিচের চারটা pattern architecture-এ আর পরীক্ষার উত্তরে বারবার ফিরে আসে।
#SNS + SQS fan-out
একটা SNS topic-এ একবার publish করো, প্রতিটা consumer-এর জন্য একটা SQS queue subscribe করাও। SNS প্রতিটা queue-কে নিজের একটা copy দেয়; তারপর প্রতিটা queue তার consumer-কে দেয় buffer, retry, DLQ আর নিজের গতি। নতুন consumer মানে নতুন একটা queue, producer-এ কোনো বদল নেই। প্রতিটা queue-র access policy-তে topic-কে পাঠানোর অনুমতি দিতে হয়; অন্য account আর অন্য Region-এর subscription-ও চলে; subscription-এ filter policy দিলে ওই queue শুধু কিছু message পায়; আর SNS FIFO + SQS FIFO fan-out-এর পরেও ক্রম ধরে রাখে। এগুলো সব lesson 13.4-এ।
#SNS হয়ে S3 event
একটা S3 event notification (lesson 10.7) SQS, SNS বা Lambda-কে target করতে পারে, কিন্তু একটা prefix-এ একটা event type-এর গন্তব্য একটাই। একটা upload থেকে যখন কয়েকটা স্বাধীন কাজ শুরু করতে হয় (thumbnail, virus scan, indexing), তখন গন্তব্য হয় একটা SNS topic, যেটা কয়েকটা queue-তে ছড়িয়ে দেয়। বিকল্প হলো S3 event EventBridge-এ পাঠানো, যেটা অনেক target-এ route করতে পারে।
#Kinesis Data Streams + Data Firehose
একটা Kinesis data stream বিশাল পরিমাণ event একবার নেয়। Real-time consumer (Lambda, KCL দিয়ে বানানো একটা app, Managed Service for Apache Flink) এক সেকেন্ডের মধ্যে পড়ে dashboard আর alert-এর জন্য, আর Data Firehose একই stream পড়ে batch ধরে S3, Redshift বা OpenSearch-এ তুলে দেয়। Stream দেয় replay আর অনেক পাঠক; Firehose দেয় code ছাড়া storage (lesson 13.6)।
#Database-এর সামনে SQS
হঠাৎ ভিড়ের সময় queue ধাক্কাটা শুষে নেয়, আর worker (বা Lambda) লেখে database যতটা নিতে পারে সেই গতিতে। Producer দ্রুত থাকে, কিছু হারায় না, আর database কখনো traffic-এর দেয়াল দেখে না (lesson 13.1)।
মিলিয়ে বানানো pattern: fan-out, stream আর Firehose, S3 event
বাস্তবের system service-গুলো মিলিয়ে ব্যবহার করে। SNS copy করে, SQS জমিয়ে রাখে, Kinesis আবার পড়া যায় এমন log রাখে, Firehose সেটা storage-এ তুলে দেয়।
পরিস্থিতি
একবার publish; প্রতিটা queue পায় নিজের copy, চলে নিজের গতিতে।
Order service topic-এ একটা “order placed” message publish করে। কতগুলো team এটা চায়, তা সে জানে না।
#মূল তিনজন: Lambda, SNS আর SQS
Note এই তিনটাকে বলে AWS-এর event-driven architecture-এর ভিত্তি:
- SQS একটা message queue, যেটা application-কে decouple করে। এটা pull-ভিত্তিক: consumer (একটা EC2 worker, বা Lambda) queue থেকে message টেনে নেয়।
- SNS হলো pub/sub, আর push-ভিত্তিক: কোনো message publish হলেই প্রত্যেক subscriber (email, SMS, SQS, Lambda…) সাথে সাথে পেয়ে যায়।
- Lambda হলো serverless compute: কোনো event ঘটলে (যেমন SQS-এ নতুন message, বা SNS থেকে notification) সে নিজে থেকেই তোমার code চালায়।
পরীক্ষা যে সংশোধনটা পছন্দ করে: SQS Lambda-কে push করে না। Lambda service একটা event source mapping চালায়, যেটা queue poll করে (long polling দিয়ে), তোমার function-কে একটা batch দেয়, আর function সফল হলে message-গুলো delete করে। SNS-এর বেলায় উল্টো: SNS নিজেই function-টা invoke করে। Lambda আর event source mapping-এর বিস্তারিত chapter 15-এ (lesson 15.1)।
#এক অনুচ্ছেদে dead-letter queue
SQS, SNS বা Lambda যখন একটা message বারবার process করতে ব্যর্থ হয় (সর্বোচ্চ retry ফুরিয়ে যায়), তখন message-টাকে একটা আলাদা queue-তে সরিয়ে দেওয়া হয়, যাতে সেটা হারিয়ে না যায় আর বাকিদের আটকে না রাখে: এটাই dead-letter queue (DLQ)। পরে developer-রা এটা দেখে debug করে। SQS-এ এটা সেট করতে হয় মূল queue-র redrive policy দিয়ে, যেখানে DLQ-এর নাম আর maxReceiveCount থাকে; একটা message delete না হয়ে ততবার receive হলেই SQS সেটা সরিয়ে দেয়। FIFO queue-র DLQ-ও FIFO হতে হবে, DLQ থাকতে হবে একই account আর Region-এ, আর এর retention মূল queue-র চেয়ে লম্বা রাখা উচিত। সমস্যা ঠিক করার পর message-গুলো আবার মূল queue-তে redrive করা যায়। SNS-এর বেলায় DLQ হলো প্রতিটা subscription-এ জুড়ে দেওয়া একটা SQS queue। বিস্তারিত আর retention-এর ফাঁদটা আছে lesson 13.2-এ।
#এক অনুচ্ছেদে fan-out pattern
একটা SNS topic, তাতে কয়েকটা SQS queue subscribe করা। Topic-এ একটা message publish হলে সেটা একসাথে সব queue-তে ছড়িয়ে পড়ে, ফলে একই message দিয়ে সমান্তরালে একদম আলাদা কাজ করানো যায়: এক queue-র worker order-টা database-এ save করে, আরেকটার worker email পাঠায়। পরীক্ষার বাক্য: “a single event needs to trigger multiple independent workflows concurrently without data loss” → SNS + একাধিক SQS।
মূল তিনজন: SQS টানে, SNS ঠেলে দেয়, Lambda code চালায়
ঢাকার একটা bKash-ধরনের payment service: payment event যায় SQS-এ process হতে, আর SNS-এ alert হতে। কে টানে, কে ঠেলে দেয়, আর একটা poison message শেষে কোথায় যায়, দেখো।
পরিস্থিতি
Lambda push-এর জন্য বসে থাকে না: Lambda service নিজেই তোমার হয়ে queue poll করে।
Payment API প্রতিটা payment queue-তে পাঠিয়ে সাথে সাথে customer-কে উত্তর দেয়। ধীর কাজগুলো (ledger, receipt) পরে হয়: asynchronous।
#Amazon MQ
#SQS আর SNS থাকতে broker কেন
SQS আর SNS হলো cloud-native service, যাদের আছে AWS-এর নিজস্ব API: এদের ডাকতে হয় HTTPS-এ, AWS SDK বা CLI দিয়ে। বাকি industry যে open messaging protocol কয়েক দশক ধরে ব্যবহার করে আসছে, সেগুলো এরা বোঝে না।
অনেক company এখনো নিজেদের অফিসে এমন application চালায়, যেগুলো Apache ActiveMQ, RabbitMQ বা IBM MQ-এর মতো একটা message broker-এর সাথে standard protocol আর API দিয়ে কথা বলে: JMS, NMS, AMQP, STOMP, MQTT, OpenWire, WebSocket। এমন application-কে SQS বা SNS-এ নিতে হলে প্রতিটা send আর receive নতুন করে লিখতে হবে, acknowledgement, transaction, topic আর selector কীভাবে চলে তা বদলাতে হবে, তারপর সব আবার test করতে হবে।
Amazon MQ হলো Apache ActiveMQ আর RabbitMQ-এর জন্য একটা managed message broker service। Broker চালানোর ঝামেলা (provisioning, patch, backup, failover) AWS নেয়, আর সে ঠিক ওই protocol-গুলোই বোঝে, তাই application নিজের code রেখে দেয়, বদলায় শুধু connection string। এর থাকার পুরো কারণ এটাই: note-এর ভাষায়, “SQS/SNS-এর জন্য নতুন করে লেখার সময় বা বাজেট নেই”।
#Open protocol-গুলো
| Protocol বা API | এটা কী | সাধারণত কারা ব্যবহার করে | Amazon MQ for ActiveMQ-এর endpoint |
|---|---|---|---|
| JMS | Java-র standard messaging API (queue, topic, transaction)। Wire protocol না: নিচে ActiveMQ client সাধারণত OpenWire-এ কথা বলে | Enterprise Java app, Spring, Java EE server | OpenWire দিয়ে |
| NMS | JMS-এর .NET সংস্করণ | C# আর .NET app | OpenWire দিয়ে |
| OpenWire | ActiveMQ-এর নিজস্ব wire protocol | Java, .NET, C++-এর ActiveMQ client | ssl://…:61617 |
| AMQP | Broker-এর জন্য open standard wire protocol (ActiveMQ-এ 1.0; RabbitMQ-এর মূল protocol 0-9-1) | যেকোনো ভাষা | amqp+ssl://…:5671 |
| STOMP | সহজ একটা text protocol | Python, Ruby, PHP, JavaScript script | stomp+ssl://…:61614 |
| MQTT | Device-এর জন্য হালকা pub/sub protocol | IoT device, sensor | mqtt+ssl://…:8883 |
| WSS (WebSocket Secure) | TLS-এর ওপর WebSocket, সাধারণত ভেতরে STOMP বা MQTT | Browser, web dashboard | wss://…:61619 |
সব endpoint-ই TLS ব্যবহার করে। Amazon MQ for RabbitMQ বোঝে AMQP 0-9-1 (port 5671), আর ২০২৫-এর নভেম্বর থেকে Amazon MQ-তে RabbitMQ 4.2 native AMQP 1.0-ও যোগ করেছে; সাথে আছে RabbitMQ-এর web console। (পাশের কথা: RabbitMQ 4.2 চলে Graviton-এর mq.m7g instance-এ, আর replicated queue বলতে শুধু quorum queue; পরীক্ষা version নিয়ে মাথা ঘামায় না।)
#দুটো engine
| Amazon MQ for ActiveMQ | Amazon MQ for RabbitMQ | |
|---|---|---|
| Engine | ActiveMQ Classic (default 5.18) | RabbitMQ 3.13 বা 4.2 |
| Protocol | JMS/OpenWire, NMS, AMQP 1.0, STOMP, MQTT, WebSocket | AMQP 0-9-1, AMQP 1.0 (4.2) |
| High availability | দুটো AZ-এ active/standby জোড়া, shared EFS storage সহ; বা network of brokers | তিনটা AZ-এ NLB-এর পেছনে তিন node-এর cluster, প্রতিটা node-এর নিজের EBS volume |
| সাধারণত কোথা থেকে আসে | Java/JMS-ভিত্তিক system, নানা protocol মেশানো জায়গা, MQTT দিয়ে IoT | আগে থেকেই RabbitMQ-এর জন্য লেখা app |
দুটো engine-ই একই broker-এ queue (point to point, SQS-এর মতো) আর topic বা exchange (publish/subscribe, SNS-এর মতো) দেয়। প্রচলিত broker সবসময় এভাবেই কাজ করেছে, আর এজন্যই একটা Amazon MQ broker পুরোনো setup-এর দুটো অংশেরই জায়গা নিতে পারে।
একটা পুরোনো app AWS-এ যাচ্ছে: Amazon MQ, নাকি SQS-এর জন্য নতুন করে লেখা?
একটা garments রপ্তানিকারকের Java order system অফিসের ActiveMQ broker-এর সাথে JMS দিয়ে কথা বলে। Team এটাকে EC2-তে সরাচ্ছে, কিন্তু messaging code নতুন করে লেখার সময় নেই।
পরিস্থিতি
একই protocol, একই code: শুধু broker-এর address বদলায়।
একমাত্র বদল connection string-এ: পুরোনো broker-এর address-এর জায়গায় বসে Amazon MQ-এর endpoint, failover list হিসেবে লেখা।
#এটা server-এ চলে
Amazon MQ managed, কিন্তু serverless না:
- তুমি একটা broker instance type বেছে নাও (যেমন test-এর জন্য
mq.t3.micro,mq.m5.largeআর তার চেয়ে বড়, বা Graviton-এরmq.m7gপরিবার) আর একটা deployment mode। টাকা দিতে হয় প্রতি broker-ঘণ্টা আর প্রতি GB-মাস storage ধরে, message চলুক বা না চলুক। - একটা broker-এর সীমা বাঁধা: বড় instance type-এ ActiveMQ প্রতি wire-level protocol-এ ২,০০০ connection নেয় (micro-তে ৩০০), mq.m5 broker-এ storage 200 GB, আর default-এ প্রতি Region-এ ২০০টা broker।
- বেশি load সামলাতে বড় instance type-এ যেতে হয় (reboot দিয়ে বসে, active/standby-তে যেটা একটা ছোট্ট failover), বা একটা network of brokers বানাতে হয়। SQS আর SNS যেভাবে “scale” করে, এটা সেভাবে করে না, slide-এ এটা সরাসরিই বলা।
- Broker থাকে তোমার VPC-র subnet-এ, security group সহ। এটা private হতে পারে (অফিস থেকে VPN বা Direct Connect দিয়ে পৌঁছানো), বা public-ও করা যায়। Message at rest encrypt হয় KMS দিয়ে আর in transit TLS দিয়ে; ActiveMQ-এর user-রা username আর password দিয়ে, বা LDAP দিয়ে authenticate করে।
#High availability
Slide-এ ActiveMQ-এর ছবিটা এরকম: একটা AZ-এ একটা active broker, একই Region-এর আরেকটা AZ-এ একটা standby broker, দুজনেই storage হিসেবে Amazon EFS-এর সাথে যুক্ত, আর client একটা থেকে আরেকটায় failover করে।
- Single-instance (ActiveMQ বা RabbitMQ): একটা AZ-এ একটা broker, storage EBS-এ (ActiveMQ-এ চাইলে EFS)। সস্তা, development-এর জন্য ঠিক আছে; AZ বা broker বিকল হলে AWS ঠিক না করা পর্যন্ত broker পাওয়া যায় না।
- Active/standby (ActiveMQ): দুটো AZ-এ দুটো broker একটা redundant জোড়া হিসেবে, একটাই message store শেয়ার করে Amazon EFS-এ, যেটা data একাধিক AZ জুড়ে redundant রাখে। Active থাকে একটাই। সেটা বিকল হলে, বা সাপ্তাহিক maintenance window-তে, Amazon MQ standby-কে active করে, সে একই store খোলে, তাই persist হওয়া message হারায় না; reboot-এর failover-এ লাগে মাত্র কয়েক সেকেন্ড। প্রতিটা protocol-এর দুটো endpoint (
-1আর-2), আর client-কে দুটো দিয়েই failover transport ব্যবহার করতে হয়, যেমনfailover:(ssl://b-…-1.mq…:61617,ssl://b-…-2.mq…:61617)। - Cluster (RabbitMQ): একটা Network Load Balancer-এর পেছনে তিনটা AZ-এ তিনটা node, user, queue আর state শেয়ার করে; message node-গুলোর মধ্যে replicate হয়। Maintenance হয় একবারে একটা node ধরে, আর client-কে নিজে নিজে আবার connect করতে জানতে হয়।
- Network of brokers (ActiveMQ): কয়েকটা broker (প্রতিটা single বা active/standby) একসাথে জোড়া, scale-এর জন্য বা আলাদা জায়গার জন্য।
Amazon MQ high availability: shared EFS storage সহ active/standby
দুটো Availability Zone-এ একজোড়া ActiveMQ broker। Active থাকে একটাই; দুজনেই Amazon EFS-এর একই message store ব্যবহার করে। একটা failure, একটা maintenance reboot আর single-instance-এর ঘটনা দেখো।
পরিস্থিতি
একটা active broker, একটা standby, একটা shared store।
Client দুটো endpoint (-1 আর -2) দিয়ে failover transport ব্যবহার করে। যেটা active, সেটায় connect করে; standby কোনো connection নেয় না।
#Amazon MQ বনাম SQS আর SNS
| SQS / SNS | Amazon MQ | |
|---|---|---|
| API আর protocol | HTTPS-এ AWS-এর নিজস্ব API (SDK, CLI) | Open standard: JMS, NMS, AMQP, STOMP, MQTT, OpenWire, WebSocket |
| Infrastructure | Serverless, মাপজোখের কিছু নেই | তোমার বেছে নেওয়া broker instance, তোমার VPC-তে |
| Scaling | নিজে নিজে, প্রায় সীমাহীন | Instance type-এর সীমায় বাঁধা; বড় করো বা broker যোগ করো |
| Availability | একাধিক AZ জুড়ে আগে থেকেই | তুমি বেছে নাও: single instance, active/standby, বা cluster |
| Queue আর topic | আলাদা service (SQS queue, SNS topic) | একই broker-এ দুটোই |
| খরচের ধরন | প্রতি request (আর প্রতি delivery) ধরে | প্রতি broker-ঘণ্টা আর storage ধরে |
| সুবিধা | DLQ, FIFO, filter policy, Lambda আর S3-এর সাথে integration | Broker-এর সুবিধা: transaction, message selector, নির্দিষ্ট সময়ে delivery, JMS-এর নিয়মকানুন |
| কীসের জন্য সেরা | নতুন, cloud-native application | চালু application নতুন করে না লিখে সরানো |
#কোথায় গোলমাল হয়
| লক্ষণ | সম্ভাব্য কারণ | সমাধান |
|---|---|---|
| দ্বিতীয় একটা team একই SQS queue-তে consumer বানাল, এখন প্রত্যেক team কিছু কিছু order দেখছে | Queue প্রতিটা message দেয় একজন consumer-কে | Fan-out: প্রতিটা team-এর জন্য একটা queue সহ SNS topic, বা replay লাগলে Kinesis stream |
| দুই ঘণ্টার বিভ্রাটে একটা webhook subscriber notification হারাল | SNS standard topic জমা রাখে না; retry ফুরিয়ে গেছে | ওই subscriber-এর সামনে একটা SQS queue বসাও, নিদেনপক্ষে একটা subscription DLQ |
| একটা bug-এর পর analytics গত সপ্তাহের event আবার process করতে চায়, কিন্তু সেগুলো এসেছিল SQS দিয়ে | Process হওয়া SQS message delete হয়ে যায়; replay নেই | যে data-র replay লাগতে পারে, তার জন্য Kinesis Data Streams (৩৬৫ দিন পর্যন্ত retention), বা Firehose দিয়ে S3-এ archive |
Kinesis producer পাচ্ছে ProvisionedThroughputExceededException | কোনো shard 1 MB/s বা ১,০০০ record/s ছাড়িয়েছে, প্রায়ই একটা hot partition key | ভালো partition key, আরও shard, বা on-demand mode (lesson 13.5) |
| একই stream-এর দুটো analytics app ধীর, read-এ throttle হচ্ছে | Standard consumer প্রতি shard-এর 2 MB/s ভাগাভাগি করে | Enhanced fan-out প্রত্যেক consumer-কে প্রতি shard-এ নিজের 2 MB/s দেয় |
| একটা message বারবার ফিরে আসছে, দিনের পর দিন একটা worker আটকে রাখছে | Poison message, অথচ redrive policy নেই | maxReceiveCount সহ DLQ; DLQ-এর গভীরতায় alarm |
| একটা FIFO workload সেকেন্ডে ৩০০ message-এ আটকে গেছে | Batch নেই, high throughput mode নেই, বা একটাই message group | ১০টা পর্যন্ত batch, high throughput চালু, message group ছড়িয়ে দাও |
| AWS-এ সরানো একটা পুরোনো app SQS-এ connect করতে পারছে না | SQS-এর কোনো AMQP/OpenWire/STOMP endpoint নেই | Amazon MQ, নয়তো AWS SDK-এর জন্য নতুন করে লেখো |
| প্রতিটা Amazon MQ maintenance window-তে client ভেঙে পড়ে | Client একটা endpoint ব্যবহার করে, failover transport না | দুটো endpoint দিয়ে failover transport, সাথে আবার connect করার logic |
| ভিড়ের সময় Amazon MQ broker producer-দের ধীর করে দেয় | Broker-এর memory বা storage ভরা; flow control চালু হয়েছে | বড় instance type, আরও consumer, ছোট queue, বা network of brokers |
| Amazon MQ failover-এর পর কিছু order দুবার process হলো | Deliver হয়েছে কিন্তু acknowledge হয়নি এমন message আবার আসে | Idempotent consumer (process হওয়া ID জমা রাখো) |
| একটা single-instance broker তার AZ-এর সাথে বন্ধ হয়ে গেল | Single-instance mode-এ standby নেই | Production-এ active/standby (ActiveMQ) বা cluster (RabbitMQ) |
#System design-এ messaging
- নতুন service-এ প্রথম পছন্দ SQS আর SNS: capacity নিয়ে ভাবনা নেই, যত ব্যবহার তত খরচ, আর integration-গুলো (Lambda, S3 event, ASG scaling, lesson 9.4-এর Beanstalk worker environment) আগে থেকেই আছে।
- প্রতি consumer-এ একটা queue, প্রতি event type-এ একটা topic। Domain event (“order placed”, “payment received”) SNS topic-এ publish করো, আর প্রতিটা consuming service-কে দাও নিজের SQS queue, নিজের DLQ সহ। তাহলে service-গুলো আলাদাভাবে deploy, scale আর নষ্টও হতে পারে।
- Data-র জন্য Kinesis, কাজের জন্য SQS। যে event কয়েকটা team বিশ্লেষণ করে, বা যেটা আবার চালাতে হতে পারে, সেটা যাবে stream-এ; যে কাজ একবারই করতে হবে, সেটা queue-তে। অনেক system-এ দুটোই থাকে, একই producer থেকে।
- Data lake-এর জন্য stream-এর শেষে Firehose, আর real-time ফলের জন্য Managed Service for Apache Flink বা Lambda (chapter 17)।
- সেতু হিসেবে Amazon MQ। Migration-এর deadline ধরতে পুরোনো app-কে Amazon MQ-তে তুলে বসাও, তারপর নতুন consumer বানাও SQS/SNS-এ, আর পুরোনো app অবসরে গেলে broker-টাও বন্ধ করো। AWS-এর migration pattern chapter 23-এ (server migration)।
- সব জায়গায় idempotency। Standard SQS, SNS, Kinesis আর broker-এর failover, সবাই একটা message একাধিকবার দিতে পারে; consumer-কে এমন হতে হবে যাতে দুবার চললেও ক্ষতি না হয়।
- জমা কাজের দিকে চোখ রাখো। Queue-র জন্য
ApproximateNumberOfMessagesVisible, stream-এর জন্যGetRecords.IteratorAgeMilliseconds, আর প্রতিটা queue-র DLQ-এর গভীরতা: customer টের পাওয়ার আগেই এগুলো বলে দেয় কোনো consumer পিছিয়ে পড়ছে (CloudWatch, chapter 19)। - পুরো account জুড়ে event: উৎস যখন AWS নিজেই (instance-এর অবস্থা বদল, CloudTrail-এ লেখা কোনো API call) বা কোনো SaaS partner, তখন EventBridge; event-processing-এর architecture-গুলো একসাথে আছে lesson 24.1-এ।
#নিজে করে দেখো
একই “order placed” event প্রতিটা service দিয়ে। Account 111122223333, Region ap-southeast-1; output ছোট করে দেখানো।
# 1. SQS: send, receive, delete (একজন consumer নিয়ে যায়)
aws sqs create-queue --queue-name orders-example
# "QueueUrl": "https://sqs.ap-southeast-1.amazonaws.com/111122223333/orders-example"
Q=https://sqs.ap-southeast-1.amazonaws.com/111122223333/orders-example
aws sqs send-message --queue-url $Q --message-body '{"orderId":"A-1001","area":"Dhanmondi"}'
aws sqs receive-message --queue-url $Q --wait-time-seconds 20 --max-number-of-messages 10
# "Messages": [{ "MessageId": "5fea7756-…", "ReceiptHandle": "AQEB…", "Body": "{\"orderId\":\"A-1001\",…}" }]
aws sqs delete-message --queue-url $Q --receipt-handle "AQEB…"
aws sqs receive-message --queue-url $Q --wait-time-seconds 5 # কিছুই নেই: চলে গেছে
# 2. SNS: একবার publish, প্রত্যেক subscriber একটা copy পায় (ওপরের queue-তে fan-out)
aws sns create-topic --name order-events-example
# "TopicArn": "arn:aws:sns:ap-southeast-1:111122223333:order-events-example"
aws sns subscribe --topic-arn arn:aws:sns:ap-southeast-1:111122223333:order-events-example \
--protocol sqs --notification-endpoint arn:aws:sqs:ap-southeast-1:111122223333:orders-example
aws sns subscribe --topic-arn arn:aws:sns:ap-southeast-1:111122223333:order-events-example \
--protocol email --notification-endpoint ops@example.com
aws sns publish --topic-arn arn:aws:sns:ap-southeast-1:111122223333:order-events-example \
--message '{"orderId":"A-1002"}'
# "MessageId": "a1b2c3d4-…" (queue-র access policy-তে এই topic-কে পাঠানোর অনুমতি লাগবে)
# 3. Kinesis: একটা record রাখো, দুবার পড়ো, একটা সময় থেকে replay
aws kinesis create-stream --stream-name order-stream-example --stream-mode-details StreamMode=ON_DEMAND
aws kinesis put-record --stream-name order-stream-example --partition-key Dhanmondi \
--data '{"orderId":"A-1003"}' --cli-binary-format raw-in-base64-out
# "ShardId": "shardId-000000000002", "SequenceNumber": "49654…"
IT=$(aws kinesis get-shard-iterator --stream-name order-stream-example --shard-id shardId-000000000002 \
--shard-iterator-type AT_TIMESTAMP --timestamp 2026-10-26T09:00:00Z --query ShardIterator --output text)
aws kinesis get-records --shard-iterator $IT # record এখনো আছে, যতবার খুশি
# 4. Amazon MQ: দুটো subnet-এ (দুটো AZ) একটা ActiveMQ active/standby broker, EFS storage
aws mq create-broker --broker-name orders-mq-example --engine-type ACTIVEMQ --engine-version 5.18 \
--deployment-mode ACTIVE_STANDBY_MULTI_AZ --host-instance-type mq.m5.large --storage-type EFS \
--no-publicly-accessible --auto-minor-version-upgrade \
--subnet-ids subnet-0aaa1111example subnet-0bbb2222example --security-groups sg-0ccc3333example \
--users Username=orders-admin,Password='use-a-long-secret-here',ConsoleAccess=true
# "BrokerId": "b-1234abcd-56ef-78ab-90cd-1234567890ab"
aws mq describe-broker --broker-id b-1234abcd-56ef-78ab-90cd-1234567890ab \
--query 'BrokerInstances[].Endpoints'
# [ ["ssl://b-1234abcd-…-1.mq.ap-southeast-1.amazonaws.com:61617",
# "amqp+ssl://b-1234abcd-…-1.mq.ap-southeast-1.amazonaws.com:5671",
# "stomp+ssl://b-1234abcd-…-1.mq.ap-southeast-1.amazonaws.com:61614",
# "mqtt+ssl://b-1234abcd-…-1.mq.ap-southeast-1.amazonaws.com:8883",
# "wss://b-1234abcd-…-1.mq.ap-southeast-1.amazonaws.com:61619"],
# ["ssl://b-1234abcd-…-2.mq.ap-southeast-1.amazonaws.com:61617", … ] ]
aws mq reboot-broker --broker-id b-1234abcd-56ef-78ab-90cd-1234567890ab # client-এর failover দেখো
# 5. পরিষ্কার করো (broker অলস থাকলেও প্রতি ঘণ্টায় টাকা কাটে)
aws mq delete-broker --broker-id b-1234abcd-56ef-78ab-90cd-1234567890ab
aws kinesis delete-stream --stream-name order-stream-example
aws sns delete-topic --topic-arn arn:aws:sns:ap-southeast-1:111122223333:order-events-example
aws sqs delete-queue --queue-url $Q
পুরোনো app শুধু তার broker URL বদলে দুটো ssl:// endpoint-এর failover রূপ বসায়। ধাপ ৪-এর পার্থক্যটা খেয়াল করো: তোমাকে instance type, দুটো subnet আর একটা deployment mode বেছে নিতে হলো, যেগুলোর কোনোটাই SQS বা SNS কখনো জানতে চায়নি।
#সারসংক্ষেপ
মূল কথা
- SQS = queue, pull, প্রতি message-এ একজন consumer, process হলে delete, থাকে ১৪ দিন পর্যন্ত, capacity নিয়ে ভাবনা নেই, ক্রম শুধু FIFO-তে, প্রতি message-এ delay। Worker tier আর buffer।
- SNS = pub/sub, প্রতি topic-এ ১,২৫,০০,০০০ subscription পর্যন্ত push, standard topic কিছুই রাখে না (retry, subscription DLQ, FIFO archive আর replay হলো ব্যতিক্রম), ১,০০,০০০ topic পর্যন্ত, capacity নিয়ে ভাবনা নেই, ক্রমের জন্য FIFO topic। Notification আর fan-out।
- Kinesis Data Streams = stream, standard consumer টেনে নেয় (প্রতি shard-এ 2 MB/s ভাগাভাগি), enhanced fan-out push করে (প্রতি shard-এ প্রত্যেক consumer-এর 2 MB/s), record থেকে যায় ২৪ ঘণ্টা থেকে ৩৬৫ দিন, replay, ক্রম প্রতি shard-এ, provisioned বা on-demand। Real-time big data, analytics, ETL।
- Data Firehose stream-কে S3, Redshift, OpenSearch আর আরও জায়গায় তোলে, প্রায় real time, code ছাড়া, replay নেই। EventBridge AWS আর SaaS-এর event rule দিয়ে route করে (lesson 19.5); Amazon MSK হলো managed Kafka (lesson 17.7)।
- Pattern: SNS + SQS fan-out (একটা event, অনেক স্বাধীন workflow, কিছু হারায় না), S3 → SNS → SQS, Kinesis + Firehose, database-এর সামনে SQS।
- মূল তিনজন: SQS টানে, SNS ঠেলে দেয়, Lambda code চালায় (event source mapping দিয়ে Lambda SQS poll করে)। Poison message-এর জন্য redrive policy দিয়ে DLQ।
- Amazon MQ = managed ActiveMQ / RabbitMQ broker, বোঝে JMS, NMS, AMQP, STOMP, MQTT, OpenWire, WSS: চালু app নতুন করে না লিখে সরানোর উত্তর, নতুন cloud-native app-এর না। এতে queue আর topic দুটোই আছে, চলে broker instance-এ, SQS/SNS-এর মতো scale করে না।
- Amazon MQ HA: ActiveMQ-এ দুটো AZ-এ shared EFS storage সহ active/standby, সাথে failover transport; RabbitMQ-এ তিনটা AZ জুড়ে তিন node-এর cluster; single-instance-এ failover নেই।
আগে নিজে উত্তর দাও, তারপর ব্যাখ্যাটা পড়ো। ঠিক হলেও পড়ো, কারণ ভুল Option-গুলো কেন ভুল, সেটাও ওখানে আছে।
নিজেকে যাচাই করোপ্রশ্ন
কোন service-এ consumer message টেনে নেয়, আর একজন consumer process করার পর message delete হয়ে যায়?
নিজেকে যাচাই করোপ্রশ্ন
একটা SNS standard topic এমন একটা HTTPS subscriber-কে পাঠাতে চেষ্টা করছে, যেটা কয়েক ঘণ্টা বন্ধ। কোনো dead-letter queue সেট করা নেই। ওই subscriber-এর copy-র কী হয়?
নিজেকে যাচাই করোপ্রশ্ন
একটা Kinesis data stream-এর default আর সর্বোচ্চ retention কত?
নিজেকে যাচাই করোপ্রশ্ন
ক্রম নিয়ে কোন কথাটা ঠিক?
নিজেকে যাচাই করোপ্রশ্ন
কোন দুটো Kinesis Data Streams-এর বৈশিষ্ট্য?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
Amazon MQ কোন কোন message broker engine manage করে?
নিজেকে যাচাই করোপ্রশ্ন
একটা company-র অফিসে চলা Java application একটা ActiveMQ broker-এর সাথে JMS দিয়ে message আদান-প্রদান করে। দুই মাসের মধ্যে AWS-এ যেতে হবে, আর developer-দের messaging code বদলানোর সময় নেই। Architect কোনটা বেছে নেবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা startup AWS-এ নতুন, cloud-native একটা order service বানাচ্ছে। Team RabbitMQ চেনে বলে এক engineer job queue-র জন্য Amazon MQ-এর কথা বলল। Traffic অনিশ্চিত, আর team কোনো infrastructure সামলাতে চায় না। Architect কী পরামর্শ দেবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা online school upload হওয়া lecture video একদল EC2 instance-এ তিনটা resolution-এ convert করে। প্রতিটা video process করবে ঠিক একটা instance, আর কাজ জমলে বহরটা বড় হওয়া উচিত। কোন design সবচেয়ে মানানসই?
নিজেকে যাচাই করোপ্রশ্ন
একটা telecom-কে একসাথে ২০ লাখ subscriber-কে SMS আর app push notification দিয়ে ঈদের শুভেচ্ছা পাঠাতে হবে। কোন service এর জন্য বানানো?
নিজেকে যাচাই করোপ্রশ্ন
একটা order হলে চারটা স্বাধীন service (kitchen, rider assignment, SMS, analytics) প্রত্যেককে সেটা process করতে হয়। যে কেউ কিছুক্ষণ বন্ধ থাকতে পারে, আর একটা order-ও হারানো চলবে না। Architect কী ব্যবহার করবে?
নিজেকে যাচাই করোপ্রশ্ন
চা-বাগান জুড়ে মাটির sensor কয়েক সেকেন্ড পরপর reading পাঠায়। একটা সেচ controller, একটা সাপ্তাহিক ফলন model আর একটা গবেষক team, প্রত্যেককে নিজের গতিতে একই reading পড়তে হবে, আর model মাঝে মাঝে পুরোনো data আবার process করে। কোনটা সবচেয়ে মানানসই?
নিজেকে যাচাই করোপ্রশ্ন
একটা score app প্রতিটা clickstream event Amazon S3-এ Parquet file হিসেবে, তারিখ ধরে ভাগ করে রাখতে চায়, কোনো server বা consumer code ছাড়া। এক-দুই মিনিট দেরি হলে সমস্যা নেই। কোনটা ব্যবহার করবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা product team-এর লাগবে custom, real-time analytics dashboard, যেটা প্রতিটা event-এর এক সেকেন্ডের মধ্যে হালনাগাদ হবে, আর আরেকটা team-কে পরে একই event আবার process করতে পারতে হবে। Ingestion-এর জন্য সবচেয়ে ভালো service কোনটা?
নিজেকে যাচাই করোপ্রশ্ন
একটা mobile wallet-কে প্রত্যেক customer-এর transaction ঠিক যে ক্রমে ঘটেছে সেই ক্রমে বসাতে হবে, আর আবার পাঠানো request কখনো দুবার বসানো যাবে না। আলাদা customer-এর transaction সমান্তরালে চলতে পারে। কোনটা মানায়?
নিজেকে যাচাই করোপ্রশ্ন
Amazon MQ নিয়ে কোন দুটো কথা ঠিক?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
Amazon MQ for ActiveMQ কীভাবে high availability দেয়?
নিজেকে যাচাই করোপ্রশ্ন
Amazon MQ for RabbitMQ-এর একটা highly available deployment দেখতে কেমন?
নিজেকে যাচাই করোপ্রশ্ন
Amazon MQ active/standby broker-এ সরার পর একটা app প্রতিটা সাপ্তাহিক maintenance window-তে connection হারায়, আর restart না করা পর্যন্ত ঠিক হয় না। এর connection URL-এ আছে শুধু -1 endpoint। সমাধান কী?
নিজেকে যাচাই করোপ্রশ্ন
একটা Amazon MQ failover-এর পর কয়েকটা order দুবার process হলো। সবচেয়ে সম্ভাব্য কারণ কী?
নিজেকে যাচাই করোপ্রশ্ন
একটা provisioned Kinesis data stream-কে সেকেন্ডে ৪,০০০ record-এ 6 MB/s write নিতে হবে, আর দুটো standard (ভাগাভাগি করা) consumer প্রত্যেকে পুরো stream পড়ে। সর্বনিম্ন কয়টা shard লাগবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা SNS topic-এ মিনিটে ২,০০০টা order message আসে, আর চারটা SQS queue subscribe করা, কোনো filter policy ছাড়া। ঘণ্টায় মোট কয়টা message queue-গুলোতে পৌঁছায়?
নিজেকে যাচাই করোপ্রশ্ন
একটা SQS FIFO queue ইতিমধ্যে প্রতি call-এ ১০টা message batch করে, কিন্তু সেকেন্ডে প্রায় ৩,০০০ message-এ আটকে যায়। অনেক customer মিলিয়ে workload-এর দরকার সেকেন্ডে ১৫,০০০ message। Team কী করবে?
নিজেকে যাচাই করোপ্রশ্ন
Amazon SNS নিয়ে কোন কথাটা সত্য না?
নিজেকে যাচাই করোপ্রশ্ন
Note বলে SNS কোনো data store করে না। কোন দুটো কথা এটার সঠিক খুঁটিনাটি?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
কোন দুটো পরিস্থিতিতে SQS-এর চেয়ে Kinesis Data Streams ভালো?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
Extended Client Library ছাড়া একটা Amazon SQS message-এর এখনকার সর্বোচ্চ size কত?
নিজেকে যাচাই করোপ্রশ্ন
একটা S3 prefix-এ upload হওয়া ছবি থেকে একটা thumbnail job আর একটা virus scan শুরু হবে, প্রত্যেকটা আলাদাভাবে, retry সহ। একই prefix-এ একই event type-এর জন্য S3 event configuration দুটো গন্তব্য দিতে দেয় না। সবচেয়ে ভালো design কোনটা?
নিজেকে যাচাই করোপ্রশ্ন
একটা Lambda function একটা SQS queue-র message process করে। Message-গুলো function পর্যন্ত কীভাবে পৌঁছায়?
নিজেকে যাচাই করোপ্রশ্ন
একটা ত্রুটিপূর্ণ message প্রত্যেক consumer-কে fail করায়, তাই বারবার queue-তে ফিরে আসে আর পুরো system ধীর করে দেয়। Architect কী configure করবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা SNS standard topic-এ সরাসরি subscribe করা এক partner-এর webhook দুই ঘণ্টা বন্ধ ছিল, আর ওই সময়ের প্রতিটা notification হারিয়েছে। Partner-কে আর কখনো একটাও হারানো চলবে না। সবচেয়ে নির্ভরযোগ্য সমাধান কী?
নিজেকে যাচাই করোপ্রশ্ন
পরীক্ষার প্রশ্নে কোন দুটো বাক্য Amazon MQ-এর দিকে ইশারা করে?
বেছে নাও ২