0%
در حال بارگذاری...

جستجو در سایت

درس ۳ سطح پیشرفته: Microservices، Docker، Kubernetes، CI/CD و استقرار حرفه‌ای در پایتون

پایتون | Python پیشرفته

سلام مهندس بک‌اند تمام‌عیار! به درس سوم سطح پیشرفته رسیدی – جایی که دیگه فقط یه برنامه‌نویس نیستی، یه **مهندس سیستم‌های مقیاس‌پذیر** هستی. توی این درس قراره یاد بگیری چطور یه برنامه بزرگ رو به ده‌ها سرویس کوچیک (Microservices پایتون) بشکنی، هر کدوم رو توی Docker کانتینر کنی، با Kubernetes ارکستراسیون کنی، با GitHub Actions یه CI/CD Pipeline حرفه‌ای بسازی و در نهایت روی سرور واقعی (یا Cloud) استقرار بدی. وقتی این درس تموم بشه، رزومه‌ات یه خط جدید اضافه می‌کنه: «توسعه و استقرار Microservices با Python + Docker + Kubernetes + CI/CD» – خطی که هر شرکت بزرگ ایرانی و خارجی رو عاشق تو می‌کنه. آماده‌ای بریم توی دنیای واقعی DevOps؟ بزن بریم!

Microservices چیه و چرا باید ازش استفاده کنی؟

به جای یه برنامه غول‌پیکر (Monolith)، همه چیز رو به سرویس‌های کوچیک و مستقل می‌شکنی:

  • User Service → مدیریت کاربران
  • Order Service → سفارش‌ها
  • Payment Service → پرداخت
  • Notification Service → ایمیل و SMS

هر سرویس تیم خودش، دیتابیس خودش، استقرار خودش و حتی زبان خودش رو می‌تونه داشته باشه!

ساخت ۴ Microservice واقعی با FastAPI

# user_service/main.py
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI(title="User Service")

class User(BaseModel):
    id: int
    name: str
    email: str

fake_db = {1: User(id=1, name="علی", email="ali@example.com")}

@app.get("/users/{user_id}")
async def get_user(user_id: int):
    return fake_db.get(user_id)

@app.post("/users/")
async def create_user(user: User):
    fake_db[user.id] = user
    return {"status": "created", "user_id": user.id}
# order_service/main.py
from fastapi import FastAPI
import httpx

app = FastAPI(title="Order Service")

@app.post("/orders/")
async def create_order(user_id: int, product: str):
    # فراخوانی User Service
    async with httpx.AsyncClient() as client:
        response = await client.get(f"http://user-service:8000/users/{user_id}")
        if response.status_code != 200:
            return {"error": "User not found"}
    
    return {"user_id": user_id, "product": product, "status": "created"}

Docker – کانتینر کردن هر سرویس

# Dockerfile برای هر سرویس
FROM python:3.11-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
# docker-compose.yml – همه سرویس‌ها با هم
version: "3.9"
services:
  user-service:
    build: ./user_service
    ports:
      - "8001:8000"
    environment:
      - DATABASE_URL=postgresql://user:pass@db/user_db

  order-service:
    build: ./order_service
    ports:
      - "8002:8000"
    depends_on:
      - user-service

  notification-service:
    build: ./notification_service
    ports:
      - "8003:8000"

  db:
    image: postgres:15
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: user_db

Kubernetes – ارکستراسیون حرفه‌ای

# k8s/user-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: user-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: user-service
  template:
    metadata:
      labels:
        app: user-service
    spec:
      containers:
      - name: user-service
        image: your-registry/user-service:latest
        ports:
        - containerPort: 8000
        env:
        - name: DATABASE_URL
          valueFrom:
            secretKeyRef:
              name: db-secret
              key: url

CI/CD Pipeline با GitHub Actions

# .github/workflows/ci-cd.yml
name: CI/CD Pipeline

on:
  push:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - run: pip install pytest
      - run: pytest

  build-and-push:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - name: Build and push user-service
        uses: docker/build-push-action@v5
        with:
          context: ./user_service
          push: true
          tags: yourname/user-service:latest

  deploy:
    needs: build-and-push
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Deploy to Kubernetes
        uses: azure/k8s-deploy@v4
        with:
          manifests: k8s/
          kubeconfig: ${{ secrets.KUBECONFIG }}

۱۰ تمرین حرفه‌ای برای تبدیل شدن به DevOps Engineer

  1. ۴ Microservice کامل با ارتباط async
  2. Docker Compose با Redis + PostgreSQL + Nginx
  3. Kubernetes Deployment + Service + Ingress
  4. GitHub Actions با تست، بیلد و دیپلوی خودکار
  5. Monitoring با Prometheus + Grafana
  6. Logging مرکزی با ELK Stack
  7. Circuit Breaker با Resilience4j یا PyBreaker
  8. API Gateway با Kong یا Traefik
  9. Service Mesh با Istio (اختیاری)
  10. استقرار روی Hetzner / DigitalOcean / ArvanCloud

پروژه نهایی درس: فروشگاه آنلاین کامل با Microservices

  • User Service (FastAPI + PostgreSQL)
  • Product Service
  • Order Service
  • Payment Service (با درگاه زرین‌پال)
  • Notification Service (ایمیل + SMS)
  • API Gateway + Auth Service (JWT)
  • Docker + Docker Compose
  • Kubernetes manifests
  • GitHub Actions CI/CD
  • Monitoring + Logging

جمع‌بندی و قدم بعدی

تبریک می‌گم مهندس DevOps! تو الان رسماً می‌تونی یه سیستم مقیاس‌پذیر با میلیون‌ها کاربر بسازی و روی ابر واقعی مستقر کنی. درس بعدی قراره درباره **GraphQL، WebSocket پیشرفته، Server-Sent Events و Real-time Dashboard** باشه – جایی که فرانت‌کارها عاشق تو می‌شن! پروژه فروشگاه رو توی GitHub آپلود کن، لینک بده و با افتخار بگو: «من Microservices + Docker + Kubernetes + CI/CD بلدم!»

ارسال نظر جدید

گزارش دیدگاه