Подготовка к собеседованию по «System Design» с примерами на Python: AI, CRM и веб‑приложения
1️⃣ Что такое system design?
System design — это высокоуровневый подход к проектированию больших, масштабируемых и надёжных программных систем.
Вместо деталей кода (low‑level) вы рассматриваете:
Аспект
Описание
Почему важен на собеседовании
Метрики
Скорость (latency), пропускная способность (throughput), количество одновременных пользователей, отказоустойчивость (availability), консистентность (consistency), стоимость (cost).
Позволяют оценить, насколько правильно вы понимаете trade‑offs.
Требования
Functional (что должна делать система) и non‑functional (как должна работать).
Помогают построить «constraints map».
Контекст
Ограничения: технологии, бюджет, сроки, уровень доступности (SLA).
Обосновывают выбор конкретных решений.
Типичные цели
Обеспечить горизонтальную масштабируемость, эластичное расширение, быструю реакцию на события, простоту поддержки.
Стандартные задачи на собеседовании: «design X service».
«Почему выбрали eventual consistency?», «Какой будет cost‑increase при sharding?»
6️⃣ Mock up
Представить в виде схемы, Flow‑chart, или ASCII‑art.
«Покажите пример маршрутизации HTTP‑запроса».
7️⃣ Prepare follow‑up
Обеспечить roadmap: monitoring, CI/CD, security.
«Как будете масштабировать в случае нагрузки?», «Как собирать метрики?»
Tip: На собеседовании обычно нужно только один‑два варианта. Если время ограничено — фокусируйтесь на основных компонентах (API gateway, load balancer, DB, cache, messaging) и trade‑offs.
5️⃣ Конкретные примеры из разных областей
5.1. Instagram‑like (фото‑рекомендация + AI)
Компонент
Технология (Python)
Пример
Front‑end
React + FastAPI (REST)
SPA, медиа‑запросы к CDN.
API gateway
Nginx + FastAPI
Пост‑фильтрация, rate limiting (flask‑limiter).
Upload service
FastAPI + Celery (asynchronous) + S3
Загрузка фото, генерация thumbnails (Pillow).
Cache
Redis (LRU)
Хранилище популярных фото, Cache-Control header.
DB
PostgreSQL (relational) + TimescaleDB (temporal)
Таблицы: users, posts, likes.
Search / tags
ElasticSearch (Python elasticsearch-py)
Полнотекстовый поиск, сортировка по популярности.
Recommendation
TensorFlow Serving (Python client) + recommendation model (collaborative filtering)
recommendations = model.predict(user_id) → ответ в /v1/recommend.
Async pipeline
Kafka + confluent‑kafka
Обработка событий: post_created, like, follow.
Observability
OpenTelemetry + Jaeger, Prometheus + Grafana
Metrics: QPS, latency, error rate.
CI/CD
GitHub Actions → Docker → AWS ECS
Автоматический тест и деплой.
Пример кода – FastAPI endpoint, кэширование и авторизация
# main.py
from fastapi import FastAPI, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
import redis
import sqlite3
from typing import List
import uuid
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="auth/login")
redis_client = redis.StrictRedis(host="redis", decode_responses=True)
def get_current_user(token: str = Depends(oauth2_scheme)):
# простая проверка токена
user = redis_client.get(token)
if not user:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token")
return {"user_id": int(user.decode())}
@app.post("/posts")
def create_post(post: dict = Depends({"title": str, "content": str, "tags": List[str]}), user: dict = Depends(get_current_user)):
# генерация уникального ID
post_id = str(uuid.uuid4())
# сохранение в PostgreSQL
conn = sqlite3.connect(":memory:")
c = conn.cursor()
c.execute(
"INSERT INTO posts (id, user_id, title, content, tags, created_at) VALUES (?, ?, ?, ?, ?, datetime('now'))",
(post_id, user["user_id"], post["title"], post["content"], json.dumps(post["tags"]),)
)
conn.commit()
# кэшировать популярный пост в Redis
redis_client.setex(f"post:{post_id}", 300, json.dumps(post))
return {"id": post_id, "status": "created"}
Ключевые моменты:
OAuth2 через токен → микросервис авторизации (/auth/login).
Redis для кэша популярного поста (TTL 5 min).
SQLite в примере, но в продакшене PostgreSQL + PgBouncer (pooling).
5.2. CRM‑система (Тинкф‑банк‑style)
Компонент
Технология
Описание
User / Customer
PostgreSQL + SQLAlchemy ORM
Таблицы: customers, contacts, activities.
Activity stream
Kafka + Redis stream
Хранение событий: call, email, chat.
Search / Segmentation
ElasticSearch + scikit‑learn (clustering)
Сегментация по RFM, behaviour.
AI‑score
HuggingFace Transformers + ONNX
Предсказание churn, propensity to purchase.
Email/SMS
SendGrid / Twilio (API)
Автоматические рассылки, Celery + RabbitMQ.
API
FastAPI (REST) + GraphQL (optional)
Публичные endpoint: /customers/{id}, /segments.
Analytics
ClickHouse (columnar)
Оперативные запросы к огромным логов (post_impression).
Этого должно хватить, чтобы получить полное и гибкое понимание system design, а также быстро готовить решения на собеседовании. Если нужны более детальные примеры по конкретной части (например, кэш‑эвалюатор, конфигурация K8s, построение recommendation‑pipeline), дайте знать — я подготовлю отдельные микро‑модули. 🚀