ইন্ট্রোডাকশন: আজকের এই আলোচনায় আমরা শিখব কীভাবে একটি Microservice Architecture-এ "Quiz Service" তৈরি করতে হয়। এর আগে আমরা "Question Service" তৈরি করেছিলাম। এখনকার লক্ষ্য হলো এমন একটি সিস্টেম বানানো যেখানে কুইজ সার্ভিসটি সরাসরি ইউজারের সাথে কথা বলবে এবং প্রয়োজনে ইন্টারনাল কাজের জন্য কোয়েশ্চন সার্ভিসের সাহায্য নেবে। সহজ কথায়, আমরা দুটি আলাদা সার্ভিসকে একে অপরের সাথে যোগাযোগ করানো শিখব।
প্রোজেক্ট সেটআপ এবং কনফিগারেশন
এই টপিকের ডিটেইলসে যাওয়ার আগে আপনি চাইলে নিচের ভিডিও রেফারেন্সটি দেখে নিতে পারেন যা এই পুরো প্রসেসটি হাতে-কলমে দেখিয়েছে: ভিডিও রেফারেন্স: Creating a Quiz Service | Microservice [00:00]
বিস্তারিত আলোচনা: একটি নতুন মাইক্রোসার্ভিস শুরু করার জন্য আমাদের প্রথম কাজ হলো একটি নতুন স্প্রিং বুট প্রোজেক্ট তৈরি করা। ভিডিওতে start.spring.io ব্যবহার করে প্রোজেক্ট জেনারেট করা হয়েছে।
প্রয়োজনীয় ডিপেন্ডেন্সি (Dependencies): ১. Spring Web: ওয়েব অ্যাপ্লিকেশন বা API বানানোর জন্য। ২. Spring Data JPA: ডাটাবেসের সাথে সহজে কাজ করার জন্য। ৩. PostgreSQL Driver: ডাটাবেস হিসেবে PostgreSQL ব্যবহার করার জন্য। ৪. Lombok: কোড কম লেখার জন্য (যেমন- Getter/Setter অটো জেনারেট করা)। ৫. OpenFeign ও Eureka Client: অন্য সার্ভিসের সাথে যোগাযোগ করার জন্য।
সহজ ভাষায় ব্যাখ্যা:
- Dependency (ডিপেন্ডেন্সি): এটি হলো আপনার সফটওয়্যারের জন্য কিছু তৈরি করা সরঞ্জাম বা লাইব্রেরি। যেমন- ঘর বানাতে যেমন ইট-সিমেন্ট লাগে, তেমনি কোডিং করতে এই লাইব্রেরিগুলো লাগে।
ডাটাবেস সেটআপ (PostgreSQL)
কুইজ সার্ভিসের ডাটা নিজের কাছে রাখার জন্য একটি আলাদা ডাটাবেস প্রয়োজন। ভিডিওতে দেখানো হয়েছে কীভাবে PG Admin ব্যবহার করে একটি নতুন ডাটাবেস তৈরি করতে হয় [05:59]।
ধাপগুলো:
-
quizdbনামে একটি নতুন ডাটাবেস তৈরি করা। -
application.propertiesফাইলে ডাটাবেসের কানেকশন ডিটেইলস দেওয়া।
আমার চিন্তা: মাইক্রোসার্ভিসের মূল মন্ত্র হলো "One Database per Service"। অর্থাৎ কোয়েশ্চন সার্ভিসের ডাটাবেস আলাদা থাকবে আর কুইজ সার্ভিসের ডাটাবেস আলাদা। এতে একটি সার্ভিস নষ্ট হলেও অন্যটির ডাটা সুরক্ষিত থাকে।
কোড এবং ফাইল ম্যানেজমেন্ট
যেহেতু আমরা আগে একটি মনোলিথিক (Monolithic) অ্যাপ বানিয়েছিলাম, তাই সেখান থেকে প্রয়োজনীয় কন্ট্রোলার (Controller) এবং সার্ভিস (Service) ফাইলগুলো কপি করে নতুন প্রোজেক্টে আনা হয়েছে [05:00]। তবে কিছু অপ্রয়োজনীয় ফাইল ডিলিট করে দিতে হবে যেমন- QuestionController, কারণ সেটি কোয়েশ্চন সার্ভিসের অংশ।
কোডিং স্নsnippet (application.properties):
Properties
spring.datasource.url=jdbc:postgresql://localhost:5432/quizdb
spring.datasource.username=postgres
spring.datasource.password=your_password
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
ব্যাখ্যা: এই কোডটুকু আপনার অ্যাপ্লিকেশনকে বলে দিচ্ছে যে তাকে কোথায় ডাটা জমা রাখতে হবে এবং ডাটাবেসের পাসওয়ার্ড কী।
সার্ভিস এবং কন্ট্রোলার ডিজাইন
কুইজ সার্ভিসে মূলত তিনটি প্রধান কাজ বা API থাকবে: ১. Create Quiz: নতুন একটি কুইজ তৈরি করা। ২. Get Quiz: আইডি দিয়ে কুইজের প্রশ্নগুলো দেখা। ৩. Get Score: ইউজার উত্তর জমা দিলে তার রেজাল্ট বা স্কোর বের করা।
কঠিন শব্দের সহজ অর্থ:
-
Microservice (মাইক্রোসার্ভিস): পুরো একটা বড় সফটওয়্যারকে ছোট ছোট অনেকগুলো টুকরো বা সার্ভিসে ভাগ করা। যেমন- একটা রেস্টুরেন্টে রান্নার জন্য আলাদা লোক, খাবার দেওয়ার জন্য আলাদা লোক।
-
API (এপিআই): এটি একটি মাধ্যম যার মাধ্যমে সফটওয়্যারের এক অংশ অন্য অংশের সাথে কথা বলে।
বিশ্লেষণ এবং আমার ভাবনা
মূল উদ্দেশ্য: কন্টেন্ট ক্রিয়েটর এখানে বোঝাতে চেয়েছেন যে, একটি প্রফেশনাল লেভেলের অ্যাপ্লিকেশন কখনো একটি বড় ব্লকের মতো হয় না। সেটিকে ছোট ছোট ভাগে (Microservices) ভাগ করা হয় যাতে মেনটেইন করা সহজ হয়।
বাস্তবতা এবং সম্ভাবনা: বাস্তবে যখন আমরা কুইজ অ্যাপ বানাই, তখন কুইজ সার্ভিসকে জানতে হয় কোন প্রশ্নগুলো কোয়েশ্চন সার্ভিসে আছে। এখানে RestTemplate বা Feign Client এর ব্যবহার অত্যন্ত গুরুত্বপূর্ণ। ভিডিওর শেষে ইঙ্গিত দেওয়া হয়েছে যে পরবর্তী ধাপে এই দুটি সার্ভিসের মধ্যে সরাসরি যোগাযোগ স্থাপন করা হবে [08:41]।
পরামর্শ: আপনি যদি বিগিনার হন, তবে প্রথমে ডাটাবেস কানেকশন এবং প্রপার্টিজ ফাইলগুলো ঠিকমতো সেটআপ হয়েছে কিনা তা নিশ্চিত করুন। প্রোজেক্ট রান করার সময় যদি ডাটাবেস এরর দেখায়, তবে বুঝতে হবে আপনার ইউজারনেম বা পাসওয়ার্ডে ভুল আছে।
বিকল্প হিসেবে আপনি চাইলে H2 Database ব্যবহার করতে পারেন যদি পিসিতে PostgreSQL ইনস্টল করতে সমস্যা হয়। এটি মেমোরিতে চলে এবং আলাদা কোনো সেটআপ লাগে না।
[
Creating a Quiz Service | Microservice
Telusko · 26K views
](http://www.youtube.com/watch?v=sEUDTldtaCo)

মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন
আপনার সমস্যাটি কমেন্ট করে আমাদের জানান :-d