সরাসরি প্রধান সামগ্রীতে চলে যান

মাইক্রোসার্ভিস প্রজেক্টের কুইজ এবং কোশ্চেন সার্ভিস সম্পন্ন করা

ইন্ট্রোডাকশন: এই ভিডিওতে দেখানো হয়েছে কীভাবে একটি মাইক্রোসার্ভিস আর্কিটেকচারে কুইজ সার্ভিস (Quiz Service) এবং কোশ্চেন সার্ভিস (Question Service) একে অপরের সাথে যোগাযোগ করে একটি পূর্ণাঙ্গ সিস্টেম তৈরি করে। আমরা এখানে মূলত দুটি গুরুত্বপূর্ণ কাজ সম্পন্ন করব: কুইজের প্রশ্নগুলো নিয়ে আসা এবং কুইজ শেষে প্রাপ্ত নম্বর (Score) গণনা করা।


১. কুইজের প্রশ্নগুলো খুঁজে বের করা (Get Quiz Questions)

ভিডিও রেফারেন্স: [01:00]

আমরা যখন কোনো কুইজ খেলতে চাই, তখন আমাদের কাছে শুধু কুইজের আইডি থাকে। কিন্তু সেই কুইজের ভেতরে কী কী প্রশ্ন আছে, সেটা থাকে 'কোশ্চেন সার্ভিস'-এর কাছে। এখানে কুইজ সার্ভিস একটি ইন্টারফেসের মাধ্যমে কোশ্চেন সার্ভিসকে অনুরোধ পাঠায়।

সহজ ব্যাখ্যা: মনে করুন, আপনি একটা রেস্টুরেন্টে গিয়ে মেনু কার্ড চাইলেন। ওয়েটার (Quiz Service) নিজে রান্না জানে না, সে রান্নাঘর থেকে (Question Service) মেনু বা খাবার নিয়ে এসে আপনাকে দেয়। এখানেও কুইজ সার্ভিস শুধু আইডিগুলো পাঠায় আর কোশ্চেন সার্ভিস আসল প্রশ্নগুলো ফেরত দেয়।

সহজ করে বোঝা (Difficult Words):

  • Wrapper (র‍্যাপার): এটি একটি বিশেষ বক্সের মতো যা ডেটাকে গুছিয়ে রাখে। এখানে প্রশ্নের সাথে যেন উত্তর চলে না যায়, তাই শুধু প্রশ্ন দেখানোর জন্য 'Question Wrapper' ব্যবহার করা হয়েছে।

  • Proxy (প্রক্সি): একজনের হয়ে অন্যজন কাজ করে দেওয়া। এখানে QuizInterface কোশ্চেন সার্ভিসের হয়ে কাজ করছে।


২. কুইজের স্কোর বা রেজাল্ট বের করা (Calculate Score)

ভিডিও রেফারেন্স: [06:17]

ইউজার যখন কুইজ শেষ করে সাবমিট করে, তখন তার উত্তরগুলো সঠিক কি না তা চেক করার দায়িত্বও কোশ্চেন সার্ভিসের। কুইজ সার্ভিস ইউজারের উত্তরগুলো কোশ্চেন সার্ভিসে পাঠিয়ে দেয় এবং সেখান থেকে প্রাপ্ত নম্বরটি নিয়ে ইউজারকে দেখায়।

কোডিং উদাহরণ: নিচে কুইজ সার্ভিসের একটি মেথড দেখানো হলো যা কোশ্চেন সার্ভিসকে কল করে স্কোর নিয়ে আসে।

Java

// কুইজ সাবমিট করার জন্য মেথড
@PostMapping("submit/{id}")
public ResponseEntity<Integer> getScore(@PathVariable Integer id, @RequestBody List<Response> responses) {
    // এখানে কুইজ ইন্টারফেস ব্যবহার করে কোশ্চেন সার্ভিস থেকে রেজাল্ট আনা হচ্ছে
    return quizInterface.getScore(responses);
} 

কোড ব্যাখ্যা:

  • @PostMapping: এটি সার্ভারে ডেটা পাঠানোর জন্য ব্যবহৃত হয়।

  • @RequestBody: ইউজার যে উত্তরগুলো (Responses) দিয়েছে, সেগুলো এই লিস্টের মাধ্যমে গ্রহণ করা হয়।

  • quizInterface.getScore: এই লাইনটি মূলত অন্য একটি সার্ভিসকে (কোশ্চেন সার্ভিস) বলছে যে, "ভাই, এই উত্তরগুলো একটু চেক করে আমাকে রেজাল্টটা দাও।"


৩. সার্ভিস দুটির মধ্যে যোগাযোগ পরীক্ষা (Testing with Postman)

ভিডিও রেফারেন্স: [08:04]

সব কোড শেষ করার পর ভিডিওতে 'Postman' টুল ব্যবহার করে পরীক্ষা করা হয়েছে। দেখা গেছে যে, কুইজ সার্ভিস (যা পোর্ট ৮০৯০-এ চলছে) কোশ্চেন সার্ভিসের (পোর্ট ৮০৮০) সাহায্য নিয়ে সফলভাবে ডাটা আদান-প্রদান করছে।

সহজ করে বোঝা (Difficult Word):

  • Postman (পোস্টম্যান): এটি একটি সফটওয়্যার যা দিয়ে আমরা চেক করি আমাদের তৈরি করা এপিআই (API) ঠিকমতো কাজ করছে কি না।

আমার বিশ্লেষণ এবং ভবিষ্যৎ চিন্তা (Analysis & Thinking)

মূল উদ্দেশ্য: কন্টেন্ট ক্রিয়েটর এখানে বোঝাতে চেয়েছেন যে, মাইক্রোসার্ভিস মানেই হলো কাজ ভাগ করে দেওয়া। কুইজ সার্ভিস শুধু কুইজ ম্যানেজ করে, আর প্রশ্নের সব হিসাব রাখে কোশ্চেন সার্ভিস। এতে একটি সার্ভিস নষ্ট হলেও অন্যটি কাজ করতে পারে।

বাস্তবতা ও পরামর্শ: বর্তমানে বড় বড় কোম্পানি (যেমন- Netflix, Amazon) এই পদ্ধতি ব্যবহার করে। ভিডিওতে দুটি সার্ভিসের সরাসরি যোগাযোগ দেখানো হয়েছে, তবে ভবিষ্যতে যখন অনেক ইউজার হবে, তখন Load Balancing (লোড ব্যালেন্সিং) প্রয়োজন হবে।

উন্নত বিকল্প: ১. সরাসরি কল না করে আমরা RabbitMQ বা Kafka-এর মতো মেসেজ ব্রোকার ব্যবহার করতে পারি, যা সিস্টেমকে আরও শক্তিশালী করবে। ২. ভিডিওতে পোর্টের নাম সরাসরি ব্যবহার করা হয়েছে, এর বদলে Eureka Discovery Server ব্যবহার করলে পোর্ট মুখস্থ রাখার দরকার হবে না।

ভিডিওর শেষে লোড ব্যালেন্সিং নিয়ে ইঙ্গিত দেওয়া হয়েছে, যা পরবর্তী ধাপ হিসেবে অত্যন্ত গুরুত্বপূর্ণ। [09:51]

ইউটিউব ভিডিও লিঙ্ক: https://www.youtube.com/watch?v=MxLdjBdhWws

[

Completing the 2 Microservices

Telusko · 28K views

](http://www.youtube.com/watch?v=MxLdjBdhWws)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

জাভা ফিডব্যাক এবং স্ট্রাকচার্ড কনকারেন্সি: বিবর্তনের গল্প

Introduction এই ভিডিওর নির্দিষ্ট অংশে জাভা ল্যাঙ্গুয়েজ আর্কিটেক্ট ব্রায়ান গোয়েটজ (Brian Goetz) আলোচনা করেছেন কীভাবে জাভার নতুন ফিচারগুলো তৈরি হয় এবং এতে সাধারণ ডেভেলপারদের মতামতের গুরুত্ব কতটুকু। বিশেষ করে Structured Concurrency -এর মতো জটিল ফিচারগুলো কেন বারবার 'Preview' অবস্থায় থাকে এবং কীভাবে কমিউনিটির ফিডব্যাক সেই ফিচারগুলোকে আরও নিখুঁত করতে সাহায্য করে, তা এখানে সহজভাবে বোঝানো হয়েছে। ১. ভালো ফিডব্যাক আসলে কী? ভিডিও রেফারেন্স: [ 34:53 ] ব্রায়ান গোয়েটজ বলছেন যে, জাভা টিম যখন কোনো নতুন ফিচারের খসড়া (Draft) বা প্রস্তাব (JEP) প্রকাশ করে, তখন তারা এমন কিছু জানতে চায় যা তারা নিজেরা আগে ভাবেনি। বিস্তারিত: একজন ডেভেলপার হিসেবে আমরা যখন কোনো নতুন ফিচার দেখি, আমাদের প্রথম প্রতিক্রিয়া হয় সেটার Syntax বা লেখার ধরন নিয়ে। কিন্তু ব্রায়ানের মতে, "এই লেখাটা কেন এমন হলো?" বা "এটা কোটলিন বা স্কালা-র মতো কেন নয়?"—এই ধরনের ফিডব্যাক খুব একটা কাজে আসে না। আসল দামী ফিডব্যাক হলো সেইটা, যা নতুন কোনো বাস্তব সমস্যা (Edge Case) তুলে ধরে। আমার চিন্তা: আপনি যদি কেবল দ...

Microservice Error Handling

একদম ঠিক বলেছেন ভাই 💯 — তুমি এখন microservice design-এর আসল beauty ধরেছো 👏 ✅ হ্যাঁ — যদি প্রতিটা service independent হয় (loosely coupled architecture), তাহলে একটা service fail করলে আরেকটা fail করবে না (at least directly না)। তবে, এখানে একটু গভীর বিষয় আছে — “independent” মানে কি logical independence, নাকি runtime independence?” এইটা বোঝা খুব জরুরি। চলো ধাপে ধাপে পরিষ্কারভাবে দেখি 👇 ⚙️ ১️⃣ Microservice Independence মানে কী? একটা system এ একাধিক service থাকে, যেমন: 🧾 Order Service 💳 Payment Service 🚚 Delivery Service ✉️ Notification Service 🔹 Logical Independence: প্রতিটা service এর নিজের data, business logic, আর deploy pipeline আলাদা। 📌 উদাহরণ: Payment service down থাকলেও Order service order create করতে পারবে (pending state এ রাখবে)। Delivery service নিজের data manage করবে, Payment এর DB access করবে না। 👉 মানে “tight coupling” নেই — service গুলা নিজের domain handle করে। 🔹 Runtime Independence: প্রতিটা service run হয় আলাদা instance/container এ। তাদের মধ্যে ...