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

মাইক্রোসার্ভিস প্রজেক্টে কুয়িজ সার্ভিস তৈরি (পার্ট ২)

ইন্ট্রোডাকশন (Introduction): আজকের এই ব্লগে আমরা শিখবো কীভাবে একটি মাইক্রোসার্ভিস আর্কিটেকচারে 'Question Service' তৈরি করতে হয়। এটি মূলত একটি কুইজ অ্যাপ্লিকেশনের অংশ যেখানে আমরা দেখবো কীভাবে কুয়িজের জন্য প্রশ্ন জেনারেট করা হয়, আইডি দিয়ে প্রশ্ন খুঁজে বের করা হয় এবং ব্যবহারকারীর উত্তরের ভিত্তিতে স্কোর গণনা করা হয়। সহজ কথায়, এটি আপনার অ্যাপের সেই অংশ যা সব প্রশ্নের হিসাব-নিকাশ রাখবে।


পার্ট ১: কুইজ জেনারেট করা (Generating Quiz Questions)

রেফারেন্স: [00:40] - [05:18]

এখানে আমাদের মূল লক্ষ্য হলো যখন কুইজ সার্ভিস বলবে "আমার ৫টি জাভা প্রশ্ন লাগবে", তখন এই সার্ভিসটি ডেটাবেস থেকে ৫টি র‍্যান্ডম প্রশ্নের আইডি খুঁজে বের করে দিবে।

আমার চিন্তা ও বিশ্লেষণ: আগে আমরা পুরো প্রশ্নের অবজেক্ট পাঠাতাম, কিন্তু মাইক্রোসার্ভিসে ডেটা আদান-প্রদান কমানোর জন্য আমরা শুধু প্রশ্নের ID পাঠাচ্ছি। এতে নেটওয়ার্কের ওপর চাপ কম পড়ে।

কোড উদাহরণ:

Java

@GetMapping("generate")
public ResponseEntity<List<Integer>> getQuestionsForQuiz(
        @RequestParam String categoryName, 
        @RequestParam Integer numQuestions) {
    return questionService.getQuestionsForQuiz(categoryName, numQuestions);
} 
  • ব্যাখ্যা: এই কোডটি একটি GET রিকোয়েস্ট নেয় যেখানে ক্যাটাগরি এবং কয়টি প্রশ্ন লাগবে তা বলে দেওয়া হয়। এটি প্রশ্নের আইডিগুলোর একটি লিস্ট (List of Integers) রিটার্ন করে।

সহজ ভাষায় কঠিন শব্দ:

  • ResponseEntity: এটি স্প্রিং বুটের একটি ক্লাস যা দিয়ে আমরা আমাদের রেজাল্টের সাথে HTTP স্ট্যাটাস (যেমন: OK বা Not Found) পাঠাতে পারি।

  • RequestParam: ইউআরএল (URL) থেকে কোনো মান (যেমন ক্যাটাগরি নাম) পড়ার পদ্ধতি।


পার্ট ২: আইডি থেকে প্রশ্ন পাওয়া (Fetching Questions by ID)

রেফারেন্স: [05:25] - [10:45]

একবার যখন আইডিগুলো পাওয়া যায়, তখন কুইজ সার্ভিস সেই আইডিগুলো পাঠিয়ে আমাদের কাছে মূল প্রশ্নগুলো (অপশনসহ কিন্তু উত্তর ছাড়া) চাইবে।

ডিজাইন কনসেপ্ট (Wrapper): আমরা সরাসরি Question অবজেক্ট পাঠাবো না, কারণ তাতে সঠিক উত্তর (Answer) থাকে। আমরা চাই না ইউজার ব্রাউজারের 'Inspect Element' করে উত্তর দেখে ফেলুক। তাই আমরা QuestionWrapper ব্যবহার করি।

কোড উদাহরণ:

Java

for (Integer id : questionIds) {
    Question question = questionDao.findById(id).get();
    QuestionWrapper wrapper = new QuestionWrapper();
    wrapper.setId(question.getId());
    wrapper.setQuestionTitle(question.getQuestionTitle());
    wrapper.setOption1(question.getOption1());
    // এভাবে ৪টি অপশন সেট করা হয়...
    wrappers.add(wrapper);
} 
  • ব্যাখ্যা: এই লুপটি প্রতিটি আইডি দিয়ে ডেটাবেস থেকে প্রশ্ন খুঁজে বের করে এবং শুধু প্রয়োজনীয় তথ্যগুলো (আইডি, টাইটেল, অপশন) একটি নতুন লিস্টে রাখে।

পার্ট ৩: স্কোর গণনা (Calculating Score)

রেফারেন্স: [10:52] - [14:15]

ইউজার যখন কুইজ শেষ করে সাবমিট করবে, তখন তাদের দেওয়া উত্তরগুলো চেক করে আমাদের স্কোর বলতে হবে।

কিভাবে কাজ করে: কুইজ সার্ভিস থেকে একটি লিস্ট আসে যেখানে প্রতিটি প্রশ্নের আইডি এবং ইউজারের দেওয়া উত্তর থাকে। আমরা ডেটাবেস থেকে ওই আইডির সঠিক উত্তর বের করে দুইটা মিলিয়ে দেখি।

কোড উদাহরণ:

Java

int right = 0;
for (Response response : responses) {
    Question question = questionDao.findById(response.getId()).get();
    if (response.getResponse().equals(question.getRightAnswer())) {
        right++;
    }
}
return new ResponseEntity<>(right, HttpStatus.OK); 
  • ব্যাখ্যা: এখানে আমরা প্রতিটি ইউজারের উত্তরের সাথে ডেটাবেসের উত্তরের তুলনা করছি। যদি মিলে যায় তবে right ভেরিয়েবলের মান ১ বাড়িয়ে দিচ্ছি। শেষে মোট সঠিক উত্তরের সংখ্যা ফেরত পাঠাচ্ছি।

বিশ্লেষণ ও শেষ কথা (Analysis & Conclusion)

ক্রিয়েটরের মূল উদ্দেশ্য: টেলুসকো (Telusko) এখানে দেখাতে চেয়েছেন কীভাবে একটি মনোলিথিক (সব কোড এক জায়গায়) অ্যাপকে ভেঙে মাইক্রোসার্ভিসে রূপান্তর করতে হয়। ডেটা আদান-প্রদান সহজ করার জন্য অবজেক্টের বদলে আইডি ব্যবহার করা এবং সিকিউরিটির জন্য র‍্যাপার (Wrapper) ব্যবহার করা এখানে মূল কৌশল।

বাস্তব প্রেক্ষাপট ও পরামর্শ: বাস্তব জীবনে যখন হাজার হাজার ইউজার একসাথে কুইজ দিবে, তখন এই কোডটি আরও উন্নত করা যায়: ১. Caching: একই ক্যাটাগরির প্রশ্নের আইডি বারবার ডেটাবেস থেকে না খুঁজে ক্যাশে (যেমন Redis) রাখা যেতে পারে। ২. Batch Processing: স্কোর গণনার সময় একেকটি প্রশ্নের জন্য বারবার ডেটাবেসে না গিয়ে একবারে সব প্রশ্নের উত্তর নিয়ে আসা (Select IN clause) আরও দ্রুত কাজ করবে।

বিকল্প ব্যবস্থা: আপনি যদি জাভা ব্যবহার না করতে চান, তবে পাইথনের FastAPI বা Node.js দিয়েও একইভাবে এই সার্ভিসটি বানাতে পারেন। মাইক্রোসার্ভিসের মূল কনসেপ্ট সব ল্যাঙ্গুয়েজেই একই থাকে।

পুরো বিষয়টি বুঝতে পারলে আপনি এখন সহজেই একটি ডাইনামিক এবং সিকিউর কুইজ সার্ভিস ডিজাইন করতে পারবেন!

[

Creating a Question Service Part-2 | Microservice

Telusko · 32K views

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

মন্তব্যসমূহ

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

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

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

তারাবিহ সমগ্র - প্রথম আলো

রামাদান ২০২৪ উপলক্ষে প্রথম আলোর নিয়মিত আয়োজন - খতমে তারাবিহ'র সূরা গুলো নিয়ে সংক্ষিপ্ত আলোচনা'র লিংক  নিচে দেওয়া হলো।  লিংকে ক্লিক করলেই আপনাকে আলোচনা তে নিয়ে যাবে। তারাবিহ: ১ | একটি খুন ও গাভি নিয়ে বনি ইসরাইলের বাড়াবাড়ি তারাবিহ: ২ | নারীর মর্যাদা ও অধিকার এবং অলৌকিক তিন ঘটনা তারাবিহ: ৩ | যে ১৪ নারীকে বিয়ে করা হারাম তারাবিতে: ১২ | মহানবী (সা.)–এর আকাশভ্রমণ এবং আসহাবে কাহাফের কাহিনি

রেডমি নোট ৯ এর বিস্তারিত | Redmi Note 9 in Bangla

৩০ এপ্রিল, ২০২০ এ শাওমির ঘোষনা আসে এই ফোনটি নিয়ে। কিন্তু ফোনটি মার্কেটে আসে মে মাসের শেষের দিকে৷ করোনার কারনে ফোনটি বাংলাদেশে আসতে আরো সময় নেয়। বর্তমানে বাংলাদেশে আন অফিশিয়াল ভাবে ফোনটি পাওয়া যাচ্ছে৷ বাংলাদেশে অফিশিয়াল ভাবে এখনো ফোনটি আসার তথ্য নেয়৷ চলুন ফোনটি নিয়ে বিস্তারিত আলোচনা করা যাক। শাওমি নোট সিরিজের ফোন বের করে এদের রেডমি নামে সাব ব্যান্ড৷ এদের কাজ হল এই নোট সিরিজ নিয়ে কাজ করা৷ প্রতিবছর নোট সিরিজের ১/২ টা ফোন বাজারে আসে। সাথে সেই ফোন গুলার বিভিন্ন ভার্সন (যেমন - র‍্যাম ও রমের ভিত্তিতে) বাজারে আসে। এই বছরও তারা রেডমি সিরিজের নোট ৯ বাজারে আনে। এই বছর হয়তো এই সিরিজের আরো ফোন বাজারে আসবে। ডিস্পলেঃ ফোনটির ডিসপ্লে সাইজ ৬.৫৩ ইঞ্চি। এতে আইপিএস এলসিডি ডিসপ্লে ব্যবহার করা হয়েছে। এই ফোনের ডিসপ্লে প্রটেকশন হিসেবে আছে গরিলা গ্লাস ফাইভ। স্ক্রিন আর ফোনের বডির অনুপাত প্রায় ৮৩.৫%। এই ফোনের ডিসপ্লে ফুলএইচডি মানে ১০৮০পি। এই ডিস্পলের দৈর্ঘ্য ১৯.৫ একক এবং প্রস্থ হল ৯ একক। এত বড় ফোনের কারনে এই ফোনের পিপি আই ডেনসিটি ৩৯৫। যা একটু কম। প্লাটফর্মঃ এই ফোনের অপারেটিং সিস্টেম এন্ড্রয়েড ১০ এবং এর...