Microservices ডিজাইন: একটি সংক্ষিপ্ত পরিচিতি
Microservices Architecture হল একটি সফটওয়্যার আর্কিটেকচার স্টাইল যেখানে একটি বৃহৎ অ্যাপ্লিকেশনকে ছোট, স্বতন্ত্র এবং স্বাধীনভাবে পরিচালনাযোগ্য সার্ভিসে ভাগ করা হয়। প্রতিটি মাইক্রোসার্ভিস এককভাবে ডেপ্লয় করা যায়, এবং সাধারণত একটি নির্দিষ্ট কাজ বা ফিচার সংক্রান্ত ফাংশনালিটি পরিচালনা করে। মাইক্রোসার্ভিস অ্যাপ্লিকেশনের প্রতিটি সার্ভিসের নিজস্ব ডেটাবেস থাকতে পারে, যা সার্ভিসের স্বায়ত্তশাসন নিশ্চিত করে।
TypeORM এর সাথে Microservices ডিজাইন করা হলে, আপনি ডেটাবেস ম্যানেজমেন্ট এবং ডেটা অ্যাক্সেসের জন্য TypeORM ব্যবহার করতে পারবেন, যা ডেটাবেস অপারেশনকে আরও সহজ এবং কার্যকরী করে তোলে।
TypeORM মাইক্রোসার্ভিস আর্কিটেকচারে ব্যবহারের জন্য আদর্শ, কারণ এটি TypeScript এবং JavaScript এর সাথে খুব ভালোভাবে কাজ করে, এবং ডেটাবেসের সাথে যোগাযোগ করার জন্য সহজ API প্রদান করে।
TypeORM এবং Microservices: একটি একত্রিত ডিজাইন
TypeORM ব্যবহার করে Microservices ডিজাইন করতে হলে, কয়েকটি মূল পদ্ধতি এবং স্টেপ অনুসরণ করা যেতে পারে:
- প্রতিটি মাইক্রোসার্ভিসের নিজস্ব ডেটাবেস: প্রতিটি মাইক্রোসার্ভিসে পৃথক ডেটাবেস ব্যবহার করা উচিত। এর ফলে, প্রতিটি সার্ভিস স্বতন্ত্রভাবে কাজ করতে পারে এবং সার্ভিসের মধ্যে যেকোনো সমস্যা একে অপরকে প্রভাবিত করবে না।
- Service Communication: মাইক্রোসার্ভিসগুলো একে অপরের সাথে যোগাযোগের জন্য সাধারণত HTTP (REST), gRPC, অথবা Message Brokers (যেমন RabbitMQ বা Kafka) ব্যবহার করে।
- TypeORM Setup: TypeORM প্রতিটি মাইক্রোসার্ভিসে ডেটাবেস পরিচালনা করতে ব্যবহৃত হবে, যার মধ্যে Entity, Repository এবং QueryBuilder ব্যবহার করা হবে।
Step-by-Step Microservices ডিজাইন TypeORM সহ
১. Microservice সৃষ্টির জন্য প্রকল্প তৈরি
প্রথমে, আপনি একটি নতুন Node.js অ্যাপ্লিকেশন তৈরি করবেন যেটিতে TypeORM ইন্টিগ্রেট করা থাকবে। প্রতিটি মাইক্রোসার্ভিসের জন্য একটি আলাদা প্রকল্প তৈরি করা উচিত, এবং প্রতিটি প্রকল্পে আলাদা ডেটাবেস কনফিগারেশন থাকবে।
npm init দিয়ে একটি নতুন প্রকল্প তৈরি করুন:
mkdir microservice-1
cd microservice-1
npm init -y
npm install typeorm reflect-metadata mysql2 express
২. TypeORM কনফিগারেশন সেটআপ
প্রথমে TypeORM কনফিগারেশন তৈরি করুন যা ডেটাবেস সংযোগ স্থাপন করবে।
import { createConnection } from "typeorm";
import { User } from "./entities/User";
createConnection({
type: "mysql",
host: "localhost",
port: 3306,
username: "root",
password: "password",
database: "microservice_db",
entities: [User],
synchronize: true, // true হলে ডেটাবেসের schema স্বয়ংক্রিয়ভাবে সিঙ্ক হবে
}).then(() => {
console.log("Connected to the database.");
}).catch(error => console.log(error));
৩. Entities এবং Repository তৈরি
Microservices ডিজাইন করার সময়, প্রতিটি সার্ভিসের জন্য একটি নির্দিষ্ট ডেটাবেস Entity তৈরি করা হয়। User Entity তৈরি করা হবে যেটি Microservice এর জন্য কাজ করবে।
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
email: string;
}
এটি একটি সাধারণ User Entity যা ডেটাবেসের User টেবিলের প্রতিনিধিত্ব করে।
৪. Express সার্ভিস তৈরি
এখন Express.js ব্যবহার করে একটি API তৈরি করুন যা TypeORM দিয়ে তৈরি করা Entity এর সাথে যোগাযোগ করবে।
import express from "express";
import { getRepository } from "typeorm";
import { User } from "./entities/User";
const app = express();
const port = 3000;
app.use(express.json());
// Create a new user
app.post("/users", async (req, res) => {
const userRepository = getRepository(User);
const user = new User();
user.name = req.body.name;
user.email = req.body.email;
await userRepository.save(user);
res.status(201).send(user);
});
// Get all users
app.get("/users", async (req, res) => {
const userRepository = getRepository(User);
const users = await userRepository.find();
res.status(200).json(users);
});
app.listen(port, () => {
console.log(`Microservice running at http://localhost:${port}`);
});
এটি একটি মাইক্রোসার্ভিস যা POST /users এবং GET /users এন্ডপয়েন্টের মাধ্যমে User Entity এর সাথে যোগাযোগ করে।
৫. Service Communication: Microservice গুলির মধ্যে যোগাযোগ
একাধিক মাইক্রোসার্ভিস একে অপরের সাথে যোগাযোগ করতে পারে। উদাহরণস্বরূপ, যদি একটি User Service এবং একটি Order Service থাকে, তবে Order Service কে User Service থেকে ডেটা নিতে হবে। আপনি HTTP (REST API) অথবা Message Broker (যেমন RabbitMQ বা Kafka) ব্যবহার করে একে অপরের সাথে যোগাযোগ করতে পারেন।
এখানে একটি HTTP রিকোয়েস্টের উদাহরণ:
import axios from 'axios';
// User Service থেকে ডেটা রিট্রিভ করা
const getUserDetails = async (userId: number) => {
const response = await axios.get(`http://localhost:3000/users/${userId}`);
return response.data;
};
এখানে, Order Service এর মাধ্যমে User Service কে HTTP রিকোয়েস্ট পাঠানো হচ্ছে এবং User এর ডেটা নেয়া হচ্ছে।
৬. API Gateway (Optional)
মাইক্রোসার্ভিসে API Gateway ব্যবহার করলে একাধিক মাইক্রোসার্ভিসের এন্ডপয়েন্টগুলো এক জায়গায় কেন্দ্রীভূত করা যায়। এটি রাউটিং এবং রিকোয়েস্ট হ্যান্ডলিং আরও সহজ করে।
import express from 'express';
import axios from 'axios';
const app = express();
const port = 4000;
// Forwarding request to the User Service
app.get("/users/:id", async (req, res) => {
const { id } = req.params;
const user = await axios.get(`http://localhost:3000/users/${id}`);
res.send(user.data);
});
app.listen(port, () => {
console.log(`API Gateway running at http://localhost:${port}`);
});
এখানে, API Gateway রিকোয়েস্টটি User Service তে ফরওয়ার্ড করছে।
Microservices এর মধ্যে TypeORM ব্যবহারের সুবিধা
- ডেটাবেস সম্পর্কের স্বতন্ত্রতা: প্রতিটি মাইক্রোসার্ভিসের নিজস্ব ডেটাবেস থাকতে পারে, যার মাধ্যমে ডেটা ম্যানিপুলেশন সহজ হয় এবং সিস্টেমের নির্ভরতা কমে যায়।
- ডিস্ট্রিবিউটেড ডেটাবেস: প্রতিটি মাইক্রোসার্ভিস তার নিজস্ব ডেটাবেস ব্যবহার করে, তাই ডেটা একে অপরের সাথে মিশে না যায় এবং স্বতন্ত্রভাবে পরিচালনা করা যায়।
- স্কেলেবিলিটি: মাইক্রোসার্ভিসগুলি একে অপর থেকে স্বাধীনভাবে স্কেল করা যেতে পারে এবং TypeORM এর মাধ্যমে ডেটাবেস পরিচালনা সহজ হয়।
- ডাটাবেস নির্ভরতা কমানো: ডেটাবেসের ব্যবস্থাপনা এবং কনফিগারেশন আলাদা করে রাখলে, মাইক্রোসার্ভিসের নির্ভরতা কমে যায় এবং এটি বেশি স্কেলযোগ্য হয়।
সারাংশ
TypeORM এবং Microservices Architecture একত্রে ব্যবহার করলে আপনি একটি স্কেলেবল এবং মডুলার অ্যাপ্লিকেশন ডিজাইন করতে পারবেন। TypeORM মাইক্রোসার্ভিসে ডেটাবেসের ম্যানেজমেন্ট সহজ করে তোলে, এবং REST API বা Message Broker ব্যবহার করে মাইক্রোসার্ভিসগুলো একে অপরের সাথে যোগাযোগ করতে পারে। TypeORM-এর সাথে মাইক্রোসার্ভিস ডিজাইন একটি কার্যকরী এবং শক্তিশালী আর্কিটেকচার তৈরি করার জন্য উপযুক্ত।
Read more