معماری میکروسرویس چیست؟
معماری میکروسرویس رویکردی برای توسعه نرمافزار است که در آن یک برنامه بزرگ به سرویسهای کوچک و مستقل تقسیم میشود.
مزایای معماری میکروسرویس
- مقیاسپذیری مستقل: هر سرویس به طور مستقل قابل مقیاسدهی است
- توسعه موازی: تیمهای مختلف میتوانند همزمان روی سرویسهای مختلف کار کنند
- انعطافپذیری تکنولوژی: امکان استفاده از تکنولوژیهای مختلف برای هر سرویس
- مقاومت در برابر خطا: خطا در یک سرویس کل سیستم را مختل نمیکند
اجزای اصلی
- API Gateway: نقطه ورود واحد برای کلیه درخواستها
- Service Discovery: مکانیسم یافتن سرویسها
- پیامرسانی: ارتباط بین سرویسها (RabbitMQ, Kafka)
- لاگگیری متمرکز
- مانیتورینگ
پیادهسازی با Node.js
// سرویس کاربران - user-service.js
const express = require("express");
const app = express();
const PORT = process.env.PORT || 3001;
app.get("/users/:id", async (req, res) => {
const userId = req.params.id;
// دریافت اطلاعات کاربر از دیتابیس
const user = await getUserFromDB(userId);
res.json(user);
});
app.listen(PORT, () => {
console.log(`User Service running on port ${PORT}`);
});
// سرویس محصولات - product-service.js
const express = require("express");
const app2 = express();
const PORT2 = process.env.PORT || 3002;
app2.get("/products/:id", async (req, res) => {
const productId = req.params.id;
// دریافت اطلاعات محصول از دیتابیس
const product = await getProductFromDB(productId);
res.json(product);
});
app2.listen(PORT2, () => {
console.log(`Product Service running on port ${PORT2}`);
});
کانتینریسازی با Docker
Docker هر میکروسرویس را در یک کانتینر مجزا اجرا میکند:
# Dockerfile برای سرویس کاربران
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3001
CMD ["npm", "start"]
# docker-compose.yml
version: "3.8"
services:
user-service:
build: ./user-service
ports:
- "3001:3001"
product-service:
build: ./product-service
ports:
- "3002:3002"
api-gateway:
build: ./api-gateway
ports:
- "8080:8080"
چالشها و راهحلها
- مدیریت داده توزیعشده: استفاده از الگوی Saga
- تراکنشهای توزیعشده: استفاده از پیامرسانی ناهمگام
- تستپذیری: تست هر سرویس به صورت مستقل