Полный гайд Senior Backend Developer
Универсальный материал — язык не важен. После прохождения: PHP → Python → Go.
ОГЛАВЛЕНИЕ
- Что такое Senior — модель компетенций
- Computer Science фундамент
- Структуры данных и алгоритмы
- Операционные системы и Linux глубоко
- Сети и протоколы
- Базы данных (реляционные)
- NoSQL, кэши, поисковые движки
- Архитектура приложений
- Архитектурные стили и паттерны
- Distributed Systems
- Микросервисы
- Message brokers и event-driven
- API: REST, GraphQL, gRPC
- Безопасность (AppSec) глубоко
- Криптография
- SDLC и Secure SDLC (SSDLC)
- DevOps, CI/CD, IaC
- Контейнеризация и оркестрация
- Облака
- Observability: логи, метрики, трейсы
- Тестирование
- Performance, profiling, optimization
- Soft skills и работа Senior
- План изучения (роадмап на 12 месяцев)
- Литература
1. ЧТО ТАКОЕ SENIOR — МОДЕЛЬ КОМПЕТЕНЦИЙ
Senior — это не "много лет опыта". Это уровень самостоятельности и влияния.
Шкала уровней (industry-standard)
- Junior: выполняет задачи под руководством, нужен ревью каждого PR.
- Middle: самостоятельно решает поставленные задачи, может декомпозировать. Ревью на архитектурном уровне.
- Senior: ставит задачи себе и другим. Принимает архитектурные решения. Отвечает за результат компонента/подсистемы. Ментор.
- Staff/Principal: влияет на несколько команд, технические стратегии всей компании.
- Architect: проектирует системы в целом, не пишет код ежедневно.
Что должен УМЕТЬ Senior (не "знать", а делать)
- Декомпозировать требование бизнеса до уровня задач разработчикам.
- Проектировать компонент: API, схема данных, инварианты, отказоустойчивость.
- Оценивать сроки, риски, технический долг — реалистично.
- Читать чужой код быстро. Видеть в нём проблемы и потенциал.
- Делать code review — конструктивно, не за стиль, а за дизайн.
- Дебажить прод — логи, метрики, дампы, профайлинг.
- Объяснять технические решения нетехническим людям.
- Говорить "нет" — обосновывая риски, а не из лени.
- Менторить — растить middle до senior.
- Балансировать скорость/качество/долг.
Что должен ЗНАТЬ Senior
- Фундамент CS (структуры данных, сложности, ОС, сети).
- Несколько парадигм программирования (ООП, функциональная, процедурная).
- Минимум 2 языка глубоко + ещё 2-3 на уровне читать.
- БД: SQL, индексы, транзакции, репликация, шардирование.
- Архитектурные паттерны: monolith, modular monolith, SOA, microservices, event-driven.
- DDD (Domain-Driven Design) — хотя бы тактические паттерны.
- Concurrency и parallelism.
- Распределённые системы: CAP, consensus, eventual consistency.
- Безопасность: OWASP, threat modeling, криптография на уровне применения.
- DevOps: CI/CD, Docker, Kubernetes хотя бы концептуально.
- Observability: structured logging, metrics, distributed tracing.
2. COMPUTER SCIENCE ФУНДАМЕНТ
2.1 Системы счисления и битовые операции
- Двоичная, восьмеричная, шестнадцатеричная.
- Big-endian vs Little-endian.
- AND, OR, XOR, NOT, сдвиги влево/вправо.
- Использование битов: флаги, маски, оптимизации, контроль чётности.
- Two's complement (представление отрицательных чисел).
- IEEE 754 — float, double, проблемы с точностью.
2.2 Память
- Стек vs Куча (heap).
- Что хранится где: локальные переменные на стеке, объекты в куче.
- Stack overflow, heap overflow.
- Garbage Collection vs ручное управление (malloc/free, new/delete, RAII).
- Reference counting (PHP, Python, Swift).
- Mark-and-sweep (Java, Go).
- Memory leaks: что это, как искать (Valgrind, ASAN, pprof).
- Cache levels (L1/L2/L3), cache locality, false sharing.
2.3 Процессы и потоки
- Процесс = адресное пространство + ресурсы. Поток = поток выполнения внутри процесса.
- Контекстное переключение (context switch) — стоит дорого.
- Зелёные потоки (goroutine, корутины) — управляются runtime'ом, дешевле.
- Synchronization primitives: Mutex, RWMutex, Semaphore, Condition Variable, Barrier, Spinlock.
- Atomics (CAS — Compare-And-Swap).
- Race conditions, deadlock, livelock, starvation, priority inversion.
- Producer-Consumer, Reader-Writer, Dining Philosophers.
2.4 Concurrency vs Parallelism
- Concurrency — управление множеством задач одновременно (могут быть на одном CPU).
- Parallelism — реальное одновременное выполнение на нескольких CPU.
- Модели: threads (pthreads), event loop (Node.js, Python asyncio), green threads (Go), Actor model (Erlang, Akka), CSP (Go, Clojure core.async).
2.5 Сложность алгоритмов
- Big-O notation: O(1), O(log n), O(n), O(n log n), O(n²), O(2ⁿ), O(n!).
- Big-Θ (тэта) — точная асимптотика. Big-Ω (омега) — нижняя граница.
- Амортизированная сложность (пример: dynamic array push).
- Space complexity.
3. СТРУКТУРЫ ДАННЫХ И АЛГОРИТМЫ
3.1 Линейные структуры
- Array — фиксированный размер, O(1) доступ по индексу.
- Dynamic Array (vector, list в Python, slice в Go, ArrayList в Java) — амортизированно O(1) append.
- Linked List (singly, doubly, circular) — O(1) вставка/удаление при наличии указателя, O(n) доступ.
- Stack (LIFO) — push/pop O(1). Применения: рекурсия, undo, expression evaluation.
- Queue (FIFO), Deque (двусторонняя), Priority Queue (heap-based).
3.2 Хэш-таблицы
- Hash function — детерминированная, равномерная.
- Collision resolution: chaining (списки в bucket'ах), open addressing (linear/quadratic probing, double hashing).
- Load factor, rehashing.
- Применение: map, set, кэш, dedup.
- В реальности: HashMap в Java, dict в Python (Python 3.7+ сохраняет порядок вставки), map в Go (порядок случайный, специально), array в PHP (упорядочен).
3.3 Деревья
- Binary Tree — каждый узел до 2 детей.
- Binary Search Tree (BST) — left < root < right.
- Balanced trees: AVL, Red-Black. Гарантируют O(log n) на операциях.
- B-Tree, B+ Tree — используются в БД (InnoDB, PostgreSQL) для индексов. Высокий fan-out → меньше дисковых чтений.
- Heap (Min/Max) — для priority queue, heapsort.
- Trie (prefix tree) — для автодополнений, поиска по префиксу.
- Segment Tree, Fenwick Tree — для range queries (нужны редко, но полезно знать).
3.4 Графы
- Представления: матрица смежности, список смежности.
- DFS (depth-first), BFS (breadth-first).
- Dijkstra (кратчайший путь, неотрицательные веса).
- Bellman-Ford (есть отрицательные веса).
- A* (с эвристикой).
- Topological sort (для DAG — например, зависимости задач).
- Union-Find (Disjoint Set Union) — для кластеризации, Kruskal MST.
- Tarjan/Kosaraju — strongly connected components.
3.5 Сортировки
- Bubble, Insertion, Selection — O(n²), учебные.
- Merge Sort — O(n log n), стабильная, нужна доп. память.
- Quick Sort — в среднем O(n log n), худшее O(n²), in-place.
- Heap Sort — O(n log n), in-place, не стабильна.
- Counting Sort, Radix Sort — O(n), для целых чисел в ограниченном диапазоне.
- Timsort — гибрид merge+insertion, используется в Python и Java.
- В реальной работе: вызываешь стандартную sort(), но понимаешь сложность и стабильность.
3.6 Поиск
- Linear O(n).
- Binary search O(log n) — массив должен быть отсортирован.
- Hashing O(1) среднее.
- Знать когда какой использовать.
3.7 Парадигмы алгоритмов
- Divide and Conquer — Merge Sort, Quick Sort, Binary Search.
- Greedy — Dijkstra, Huffman coding, activity selection.
- Dynamic Programming — мемоизация, перекрывающиеся подзадачи (Fibonacci, knapsack, edit distance).
- Backtracking — N-Queens, sudoku, поиск с откатом.
- Two pointers, Sliding window — массивы/строки.
4. ОПЕРАЦИОННЫЕ СИСТЕМЫ И LINUX
4.1 Архитектура ОС
- Kernel space vs User space.
- Syscalls — системные вызовы (read, write, open, fork, exec, mmap, ioctl).
- strace — следить за syscall'ами процесса.
- Прерывания (interrupts), сигналы (signals).
- Планировщик процессов (CFS в Linux).
4.2 Процессы и сигналы
- fork() — создаёт копию процесса.
- exec() — заменяет образ процесса.
- wait() / waitpid() — родитель ждёт ребёнка.
- Zombie process — завершён, но не сжат.
- Orphan process — родитель умер, ребёнка усыновляет init.
- Daemon — фоновый процесс, отвязанный от терминала.
- Signals: SIGTERM (мягко), SIGKILL (жёстко), SIGHUP (reload), SIGINT (Ctrl+C), SIGSEGV (segfault), SIGPIPE.
4.3 Файловая система
- inode — метаданные файла (права, владелец, размер, указатели на блоки).
- Hard link vs Symlink.
- File descriptor — целое число, указывающее на открытый файл.
- 0=stdin, 1=stdout, 2=stderr.
- Pipes (|), redirection (>, <, >>, 2>&1).
- /proc/<pid>/ — информация о процессах.
- /sys — sysfs.
4.4 Память в Linux
- Virtual memory, page tables, MMU.
- Swap — когда RAM кончается, страницы выгружаются на диск.
- OOM killer — убивает процессы при нехватке памяти.
- mmap — отображение файла в память.
- Shared memory.
- Cgroups — лимитирование ресурсов (используется в Docker).
- Namespaces — изоляция (PID, NET, MNT, USER, UTS, IPC, CGROUP). Основа контейнеров.
4.5 Ввод-вывод (I/O)
- Blocking I/O — поток ждёт.
- Non-blocking I/O — возврат сразу, опрос.
- I/O multiplexing — select, poll, epoll (Linux), kqueue (BSD/macOS), IOCP (Windows).
- Async I/O (aio, io_uring).
- epoll — масштабируется лучше select. Основа async runtime'ов.
4.6 Команды Linux, которые должен знать Senior
- Навигация: ls, cd, pwd, find, locate.
- Тексты: cat, less, head, tail, grep, sed, awk, sort, uniq, wc, tr, cut.
- Процессы: ps, top, htop, kill, pkill, nice, renice, nohup, &.
- Сеть: ss (вместо netstat), ip (вместо ifconfig), tcpdump, nmap, curl, wget, dig, nslookup, host, traceroute, mtr.
- Диск: df, du, lsblk, mount, umount, fdisk, mkfs.
- Производительность: vmstat, iostat, mpstat, sar, free, uptime, dstat.
- Системное: uname, uptime, dmesg, journalctl, systemctl.
- Архивы: tar, gzip, gunzip, zip, unzip.
- Сравнение: diff, cmp.
- Контроль: strace, ltrace, perf.
4.7 Bash для Senior
- Переменные, кавычки (одинарные vs двойные).
- Подстановки: $(cmd),
cmd, ${var}. - Условия: [[ ]], if/elif/else.
- Циклы: for, while, until.
- Функции.
- Trap (обработка сигналов в скрипте).
- set -euo pipefail — безопасный bash.
5. СЕТИ И ПРОТОКОЛЫ
5.1 OSI/TCP/IP модели
- 7 слоёв OSI: Physical, Data Link, Network, Transport, Session, Presentation, Application.
- TCP/IP модель: Link, Internet, Transport, Application.
- Senior должен ориентироваться в L2-L7.
5.2 IP, маршрутизация
- IPv4: 4 байта, 32 бита. Адреса: 0.0.0.0 — 255.255.255.255.
- Приватные диапазоны: 10/8, 172.16/12, 192.168/16.
- IPv6: 128 бит.
- Маски подсетей, CIDR (например, /24 = 255.255.255.0).
- Маршрутизация: routing table, default gateway.
- NAT — Network Address Translation.
- ARP (IP → MAC).
5.3 TCP
- Connection-oriented, надёжный, упорядоченный.
- Three-way handshake: SYN, SYN-ACK, ACK.
- Four-way teardown: FIN, ACK, FIN, ACK.
- Sliding window, congestion control (slow start, AIMD).
- TCP states: LISTEN, ESTABLISHED, TIME_WAIT, CLOSE_WAIT, etc.
- Keep-alive.
- Nagle's algorithm, TCP_NODELAY.
5.4 UDP
- Connectionless, без гарантий.
- Применения: DNS, VoIP, видео, игры, QUIC.
5.5 DNS
- A, AAAA, CNAME, MX, TXT, NS, SOA, SRV, PTR.
- Recursive vs iterative resolver.
- TTL.
- DNS over HTTPS (DoH), DNS over TLS (DoT).
- Senior должен уметь дебажить DNS через dig/nslookup.
5.6 HTTP/HTTPS
- HTTP/1.0, 1.1, 2, 3 (QUIC).
- Методы: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS, TRACE.
- Идемпотентность: GET, PUT, DELETE — идемпотентны; POST, PATCH — нет.
- Безопасность методов: GET, HEAD, OPTIONS — safe (не меняют состояние).
- Status codes: 1xx info, 2xx success, 3xx redirect, 4xx client error, 5xx server error.
- Подробно: 200, 201, 204, 301, 302, 304, 400, 401, 403, 404, 409, 422, 429, 500, 502, 503, 504.
- Заголовки: Content-Type, Content-Length, Authorization, Cookie, Set-Cookie, Cache-Control, ETag, Last-Modified, If-None-Match, If-Modified-Since, Accept, Accept-Encoding, User-Agent, Origin, Referer, X-Forwarded-For, X-Real-IP.
- Cookies: HttpOnly, Secure, SameSite (Strict/Lax/None), Domain, Path, Expires/Max-Age.
- CORS: preflight (OPTIONS), Access-Control-Allow-Origin/Methods/Headers/Credentials.
- HTTP/2: бинарный, мультиплексирование, server push.
- HTTP/3: на UDP/QUIC, без head-of-line blocking.
5.7 TLS/SSL
- TLS handshake.
- X.509 сертификаты, цепочки доверия, CA.
- Let's Encrypt — бесплатные сертификаты, ACME протокол.
- Forward secrecy.
- mTLS (mutual TLS) — двусторонняя аутентификация.
- TLS termination — обычно на reverse proxy (nginx, Envoy, LB).
5.8 WebSockets, SSE, gRPC streams
- WebSockets — двусторонняя связь поверх HTTP, upgrade в начале.
- SSE (Server-Sent Events) — однонаправленный поток от сервера.
- gRPC streaming — bidi/server/client.
- Long polling vs WebSocket.
5.9 Reverse proxy и Load Balancing
- L4 vs L7 балансировка.
- Алгоритмы: round-robin, least connections, IP hash, weighted, random.
- nginx, HAProxy, Envoy, Traefik.
- Sticky sessions.
- Health checks.
6. БАЗЫ ДАННЫХ (РЕЛЯЦИОННЫЕ)
6.1 SQL фундамент
- DDL: CREATE, ALTER, DROP, TRUNCATE.
- DML: SELECT, INSERT, UPDATE, DELETE, MERGE.
- DCL: GRANT, REVOKE.
- TCL: BEGIN, COMMIT, ROLLBACK, SAVEPOINT.
- JOINs: INNER, LEFT, RIGHT, FULL OUTER, CROSS, SELF.
- Subqueries, CTE (WITH ... AS), recursive CTE.
- Window functions: ROW_NUMBER(), RANK(), DENSE_RANK(), LAG, LEAD, SUM() OVER ().
- GROUP BY, HAVING, аггрегаты.
- ORDER BY, LIMIT/OFFSET.
- DISTINCT, UNION/UNION ALL, INTERSECT, EXCEPT.
- CASE WHEN.
6.2 Нормализация
- 1NF — атомарность.
- 2NF — нет частичных зависимостей от составного ключа.
- 3NF — нет транзитивных зависимостей.
- BCNF.
- Когда денормализовать ради производительности — это решение Senior.
6.3 Индексы
- B-Tree — стандарт. Для =, <, >, BETWEEN, ORDER BY, LIKE 'prefix%'.
- Hash — для =.
- GIN, GiST (PostgreSQL) — full-text, JSON, arrays.
- BRIN — для очень больших таблиц с упорядоченными данными.
- Covering index, include columns.
- Partial index (с WHERE).
- Composite index — порядок колонок важен!
- Cluster index (InnoDB) — таблица физически упорядочена по PK.
- Non-clustered index.
- Что НЕ использует индекс: функции на колонке (WHERE LOWER(col) = '...'), LIKE '%suffix', неявное приведение типов.
- EXPLAIN/EXPLAIN ANALYZE — обязан читать.
6.4 Транзакции и ACID
- Atomicity — всё или ничего.
- Consistency — БД переходит из одного валидного состояния в другое.
- Isolation — параллельные транзакции не мешают.
- Durability — после commit изменения сохранены.
6.5 Уровни изоляции
- Read Uncommitted — dirty reads возможны.
- Read Committed (default в PostgreSQL) — нет dirty reads.
- Repeatable Read (default в MySQL InnoDB) — нет non-repeatable reads.
- Serializable — нет phantom reads, полная сериализуемость.
- Снэпшотная изоляция (MVCC) — PostgreSQL, Oracle, MySQL InnoDB.
- Аномалии: dirty read, non-repeatable read, phantom read, lost update, write skew.
6.6 Блокировки
- Shared (S) vs Exclusive (X).
- Row-level vs Table-level.
- Optimistic vs Pessimistic concurrency control.
- SELECT FOR UPDATE.
- Deadlock detection.
6.7 Репликация
- Master-Slave (Primary-Replica): чтение масштабируется.
- Master-Master: возможны конфликты.
- Synchronous vs Asynchronous.
- Semi-sync.
- Logical vs Physical replication.
- Read replicas, lag.
6.8 Шардирование (горизонтальное разделение)
- По ключу (hash, range, list).
- Consistent hashing.
- Проблема rebalancing.
- Vitess, Citus.
6.9 Партиционирование
- В пределах одной БД, разделение таблицы на части.
- Range, list, hash partitioning.
- PostgreSQL declarative partitioning.
6.10 Конкретные СУБД
- PostgreSQL: MVCC, богатые типы (JSONB, arrays, hstore), CTE, window functions, custom functions (PL/pgSQL, PL/Python), extensions (PostGIS, TimescaleDB, pgvector), wal, replication.
- MySQL/MariaDB: InnoDB (default), MyISAM, репликация bin-log based, GTID. Особенности: REPEATABLE READ как default, gap locks.
- Oracle, MS SQL — энтерпрайз, часто в крупных компаниях.
6.11 ORM
- Active Record (Eloquent в Laravel, Doctrine можно, но Doctrine — DataMapper). Single Table Inheritance.
- DataMapper (Doctrine, SQLAlchemy в режиме core).
- N+1 проблема — самая частая. EAGER vs LAZY loading.
- Identity map.
- Unit of Work.
- Когда ORM плох: тяжёлые отчёты, сложные агрегации — пиши SQL руками.
6.12 Миграции схемы
- Forward-only.
- Backward-compatible migrations (для zero-downtime deploy).
- Liquibase, Flyway, Alembic, Doctrine Migrations.
7. NOSQL, КЭШИ, ПОИСКОВИКИ
7.1 Классификация NoSQL
- Key-Value: Redis, Memcached, etcd.
- Document: MongoDB, Couchbase.
- Column-family: Cassandra, HBase, ScyllaDB.
- Graph: Neo4j, Dgraph.
- Time-series: InfluxDB, TimescaleDB, Prometheus.
- Search: Elasticsearch, OpenSearch, Meilisearch.
- Vector: pgvector, Weaviate, Pinecone (для AI).
7.2 Redis
- Структуры: string, list, hash, set, sorted set (zset), stream, bitmap, hyperloglog, geo.
- Persistence: RDB (snapshot), AOF (append-only file).
- Pub/Sub.
- Streams — как мини-Kafka.
- Sentinel — HA.
- Cluster — шардирование (hash slots).
- Lua scripting.
- Pipelining, transactions (MULTI/EXEC).
- Применения: cache, rate limiting, session store, leaderboard, queue, pub/sub.
7.3 Кэширование
- Стратегии: cache-aside, read-through, write-through, write-behind/write-back.
- Eviction: LRU, LFU, FIFO, random, TTL.
- Cache stampede / dogpile / thundering herd — когда тысячи запросов одновременно идут в БД при инвалидации кэша.
- Решения: locks (Redis SET NX EX), early refresh, request coalescing, probabilistic early expiration.
- Cache invalidation — одна из двух самых сложных вещей в CS (по шутке Phil Karlton). Думай про инвалидацию ДО введения кэша.
7.4 Elasticsearch
- Inverted index.
- Mapping, analyzers, tokenizers.
- Queries: match, term, bool, range, nested.
- Aggregations.
- Sharding, replicas.
8. АРХИТЕКТУРА ПРИЛОЖЕНИЙ
8.1 Принципы (внутрикодовые)
- SOLID:
- Single Responsibility — у класса одна причина для изменения.
- Open/Closed — открыт для расширения, закрыт для модификации.
- Liskov Substitution — подкласс заменяет родителя без поломок.
- Interface Segregation — много мелких интерфейсов лучше одного большого.
- Dependency Inversion — зависим от абстракций, не от конкретики.
- DRY — не повторяйся.
- KISS — keep it simple.
- YAGNI — не делай того, что "может пригодиться".
- Law of Demeter — не дёргай детей детей.
- Composition over inheritance.
8.2 Объектно-ориентированные паттерны (GoF)
- Порождающие: Factory Method, Abstract Factory, Builder, Prototype, Singleton.
- Структурные: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy.
- Поведенческие: Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor.
8.3 Архитектурные стили слоистости
- Layered (N-tier): Presentation → Application → Domain → Infrastructure.
- Hexagonal (Ports & Adapters) — Alistair Cockburn. Изоляция бизнес-логики от внешнего мира.
- Onion — Jeffrey Palermo, концентрические круги.
- Clean Architecture — Robert Martin (Uncle Bob). Dependency Rule: зависимости направлены внутрь.
- Все три похожи по сути: домен в центре, инфраструктура снаружи.
8.4 DDD — Domain-Driven Design
- Strategic patterns:
- Ubiquitous Language — единый язык бизнеса и разработки.
- Bounded Context — границы модели.
- Context Map — отношения между контекстами (Shared Kernel, Customer/Supplier, Conformist, Anti-Corruption Layer, Open Host Service, Published Language).
- Tactical patterns:
- Entity — объект с identity.
- Value Object — без identity, неизменяемый, сравнивается по значению.
- Aggregate — кластер связанных entities с одним корнем (Aggregate Root). Транзакционная граница.
- Repository — абстракция хранения агрегата.
- Domain Service — операция, которая не принадлежит ни Entity, ни VO.
- Domain Event — что произошло в домене.
- Factory — создание сложных объектов.
8.5 CQRS — Command Query Responsibility Segregation
- Команды (меняют состояние) и запросы (читают) — разные модели.
- Часто с разными хранилищами: write-side (нормализованная БД) + read-side (денормализованные представления, materialized views).
- Сложнее, чем обычное CRUD. Применяй когда сложная домен-логика и тяжёлые отчёты конкурируют.
8.6 Event Sourcing
- Состояние = поток событий, а не текущий снимок.
- Любой state можно восстановить, проиграв события.
- Снимки (snapshots) для оптимизации.
- Сложно, но даёт полный аудит + возможность строить любые проекции.
9. АРХИТЕКТУРНЫЕ СТИЛИ ПРИЛОЖЕНИЯ В ЦЕЛОМ
9.1 Monolith
- Один процесс, одна БД, один deploy.
- Плюсы: простой деплой, простой дебаг, низкая операционная сложность.
- Минусы: масштабируется только вертикально; одна команда правит весь код; долгий старт; одна точка отказа.
9.2 Modular Monolith
- Монолит, но разделённый на модули с чёткими границами и публичными API.
- Компромисс между монолитом и микросервисами.
- Можно потом отрезать модули в сервисы.
- Часто это правильный выбор для small/medium проектов.
9.3 SOA (Service-Oriented Architecture)
- Сервисы с контрактами, часто SOAP/ESB.
- Предшественник микросервисов.
9.4 Microservices
- Маленькие, независимо деплоящиеся сервисы.
- Каждый сервис — со своей БД.
- Связь по сети (HTTP, gRPC, события).
- Плюсы: независимый деплой, изоляция отказов, разные стеки, масштабирование по сервисам.
- Минусы: сложная операционка, distributed system проблемы, network latency, debugging сложен, нужна observability и DevOps зрелость.
- Когда НЕ нужны микросервисы: команда <30 человек, нет DevOps зрелости, нет SRE/observability. У вас будет distributed monolith — худшее из обоих миров.
9.5 Serverless
- FaaS (Functions-as-a-Service): AWS Lambda, Cloud Functions.
- Платишь за вызовы, не за серверы.
- Cold start.
- Vendor lock-in.
- BaaS (Backend-as-a-Service): Firebase, Supabase.
9.6 Event-Driven Architecture
- Сервисы взаимодействуют через события (Kafka, RabbitMQ).
- Producer публикует событие → consumer'ы реагируют.
- Слабая связанность.
- Сложнее дебажить — нужен distributed tracing.
10. DISTRIBUTED SYSTEMS
10.1 Фундаментальные теоремы
- CAP теорема (Brewer): из {Consistency, Availability, Partition tolerance} в условиях сетевого разделения выбираешь 2 из 3. Сеть всегда может разделиться, поэтому реально выбор между CP и AP.
- PACELC: расширение CAP. P → A/C; иначе (E) → Latency/Consistency.
- FLP impossibility: в асинхронной системе с одним падающим узлом невозможен детерминированный consensus.
- Two Generals' Problem: невозможна полная договорённость через ненадёжный канал.
10.2 Consistency models
- Strong consistency (linearizability) — все операции видны как один глобальный порядок.
- Sequential consistency — порядок операций каждого процесса сохраняется.
- Causal consistency — причинно-связанные операции упорядочены.
- Eventual consistency — рано или поздно все реплики сойдутся.
- Read your writes, monotonic reads, monotonic writes.
10.3 Consensus алгоритмы
- Paxos — классика, сложен.
- Raft — современный, понятнее. Используется в etcd, Consul, CockroachDB.
- Zab — Zookeeper.
- PBFT, Tendermint — Byzantine fault tolerance.
10.4 Распределённые транзакции
- 2PC (Two-Phase Commit) — блокирующий, координатор — single point of failure.
- 3PC — менее блокирующий, но всё равно проблемы.
- Saga pattern — последовательность локальных транзакций с компенсациями.
- Outbox pattern — события публикуются через ту же транзакцию, что и бизнес-данные.
- Inbox pattern — идемпотентная обработка входящих сообщений.
10.5 Гарантии доставки сообщений
- At-most-once — может не дойти, но не повторится.
- At-least-once — точно дойдёт, но может повториться. Идемпотентность обязательна.
- Exactly-once — мифическая, реально достигается через идемпотентность + at-least-once.
10.6 Идемпотентность
- Операция может выполниться много раз с тем же результатом.
- Idempotency key в API.
- Дедупликация по идентификаторам.
10.7 Часы и порядок событий
- Wall clock — ненадёжен, может прыгать.
- Monotonic clock — для измерения интервалов.
- Lamport timestamps — логические часы.
- Vector clocks — для causal consistency.
- Hybrid Logical Clocks (HLC) — CockroachDB.
10.8 Партиционирование (sharding)
- Range-based — простое, но hotspots.
- Hash-based — равномерно, но range queries дорого.
- Consistent hashing — минимизирует rebalancing при изменении числа узлов.
10.9 Реплики
- Single leader (Primary-Replica).
- Multi-leader (multi-master).
- Leaderless (Dynamo-style, Cassandra) — кворум на чтение/запись (R + W > N).
10.10 Failure detection
- Heartbeats.
- Gossip protocols (SWIM).
- Phi accrual failure detector.
10.11 Backpressure и rate limiting
- Token bucket, leaky bucket.
- Circuit Breaker (Hystrix, resilience4j).
- Bulkhead — изоляция пулов ресурсов.
- Timeout, retry с экспоненциальным backoff + jitter.
11. МИКРОСЕРВИСЫ — ПРАКТИКА
11.1 Декомпозиция
- По бизнес-возможностям (capability).
- По bounded context (DDD).
- По данным (data ownership).
- НЕ по технической функции (auth-service, db-service — это плохо).
11.2 Inter-service communication
- Sync: HTTP/REST, gRPC.
- Async: messages (RabbitMQ, Kafka), events.
- Async лучше для слабой связанности.
11.3 Service Discovery
- Client-side (Eureka).
- Server-side (Consul + DNS, Kubernetes Services).
11.4 API Gateway
- Единая точка входа.
- Аутентификация, rate limiting, routing, aggregation.
- Kong, Tyk, AWS API Gateway, Ambassador.
11.5 Service Mesh
- Istio, Linkerd, Consul Connect.
- mTLS между сервисами.
- Observability (tracing, metrics).
- Traffic management (canary, retry).
11.6 Distributed Tracing
- OpenTelemetry — стандарт.
- Trace ID, Span ID.
- Jaeger, Zipkin, Tempo, Honeycomb.
11.7 Паттерны устойчивости
- Circuit Breaker — обрывает запросы к падающему сервису.
- Retry с backoff и jitter.
- Timeout (всегда!).
- Fallback.
- Bulkhead.
- Throttling.
- Hedged requests.
11.8 Версионирование API
- URI versioning: /v1/, /v2/.
- Header versioning: Accept: application/vnd.api.v2+json.
- Сохранять обратную совместимость как можно дольше.
11.9 Антипаттерны микросервисов
- Distributed monolith — сервисы, которые нельзя деплоить независимо.
- Shared database — несколько сервисов в одной БД.
- Chatty services — много round-trip'ов между сервисами.
- Anaemic services — без своей бизнес-логики.
12. MESSAGE BROKERS И EVENT-DRIVEN
12.1 RabbitMQ
- AMQP протокол.
- Exchange (direct, topic, fanout, headers) → Queue → Consumer.
- Routing keys, bindings.
- Acknowledgements (ack/nack).
- Dead Letter Exchange.
- Confirmations (publisher confirms).
- Priority queues.
- TTL.
- Кластеризация, mirrored queues, quorum queues.
12.2 Apache Kafka
- Распределённый лог.
- Topic → Partitions.
- Producer → Broker → Consumer Group.
- Offsets, consumer group rebalancing.
- Replication factor, ISR (in-sync replicas).
- Log compaction.
- Kafka Streams, ksqlDB.
- Schema Registry (Avro, Protobuf, JSON Schema).
- Exactly-once semantics в Kafka (через идемпотентный producer + транзакции).
- Когда Kafka, когда RabbitMQ:
- Kafka — большие потоки данных, аналитика, event sourcing, retention важен.
- RabbitMQ — задачи (jobs), низкая latency, сложный routing.
12.3 Другие брокеры
- NATS, NATS JetStream.
- Redis Streams.
- AWS Kinesis, SQS, SNS.
- Google Pub/Sub.
- Pulsar.
12.4 Event-driven паттерны
- Event Notification — событие только сигнал.
- Event-Carried State Transfer — событие несёт нужные данные.
- Event Sourcing.
- CQRS + EDA.
- Choreography vs Orchestration.
13. API: REST, GRAPHQL, GRPC
13.1 REST
- Resource-oriented.
- HTTP методы соответствуют CRUD (хотя это упрощение).
- Statelessness.
- HATEOAS — спорно, мало кто реально делает.
- Richardson Maturity Model: уровни 0-3.
- Идемпотентность методов.
- Pagination: offset/limit, cursor-based (лучше для больших данных).
- Filtering, sorting, fields selection.
- Error responses: Problem Details (RFC 7807).
- Rate limiting headers (X-RateLimit-*).
13.2 OpenAPI/Swagger
- Описание API в YAML/JSON.
- Кодогенерация клиентов и серверов.
- Документация автогенерируется.
13.3 GraphQL
- Один эндпоинт, клиент описывает запрос.
- Query, Mutation, Subscription.
- Types, schema.
- Resolvers.
- DataLoader для N+1 проблемы.
- Проблемы: сложный auth, кэширование, depth/complexity limits, DoS.
13.4 gRPC
- HTTP/2 + Protocol Buffers.
- 4 типа: unary, server streaming, client streaming, bidi streaming.
- Сильная типизация.
- Кодогенерация.
- Идеально для inter-service связи.
- Плохо для браузеров (нужен grpc-web).
13.5 WebHooks
- Сервер вызывает callback URL клиента.
- Безопасность: подпись (HMAC), retry, идемпотентность.
14. БЕЗОПАСНОСТЬ (APPSEC) ГЛУБОКО
14.1 Threat Modeling
- STRIDE:
- Spoofing — подмена личности.
- Tampering — подмена данных.
- Repudiation — отказ от действий.
- Information Disclosure — утечка инфы.
- Denial of Service.
- Elevation of Privilege.
- DREAD (для оценки рисков): Damage, Reproducibility, Exploitability, Affected users, Discoverability.
- PASTA, OCTAVE, VAST — другие методологии.
- Attack Tree.
14.2 OWASP Top 10 (2021)
- Broken Access Control — IDOR, missing auth checks, privilege escalation.
- Cryptographic Failures — weak crypto, hardcoded keys, no HTTPS, weak hashing (MD5/SHA1 для паролей).
- Injection — SQL, NoSQL, OS Command, LDAP, XPath. ORM не панацея — raw queries и dynamic queries опасны.
- Insecure Design — отсутствие threat modeling, business logic flaws.
- Security Misconfiguration — defaults, открытые админки, debug в проде.
- Vulnerable and Outdated Components — старые библиотеки с CVE.
- Identification and Authentication Failures — слабые пароли, отсутствие MFA, broken session management.
- Software and Data Integrity Failures — supply chain (зависимости), несподписанные updates, deserialization.
- Security Logging and Monitoring Failures — нет логов важных событий, нет алертов.
- Server-Side Request Forgery (SSRF).
14.3 OWASP API Security Top 10 (2023)
- Broken Object Level Authorization (BOLA / IDOR).
- Broken Authentication.
- Broken Object Property Level Authorization.
- Unrestricted Resource Consumption.
- Broken Function Level Authorization.
- Unrestricted Access to Sensitive Business Flows.
- SSRF.
- Security Misconfiguration.
- Improper Inventory Management.
- Unsafe Consumption of APIs.
14.4 SQL Injection
- Классическая: ' OR '1'='1.
- Union-based, error-based, boolean blind, time-based blind.
- Защита: prepared statements (параметризованные запросы), ORM, escape если нет другого пути.
- Stored procedures не гарантируют защиты (если внутри dynamic SQL).
14.5 XSS (Cross-Site Scripting)
- Reflected — пейлоад в URL/параметре, возвращается в ответе.
- Stored — пейлоад сохранён в БД.
- DOM-based — манипуляция DOM на клиенте.
- Защита: output encoding (HTML escape), CSP (Content-Security-Policy), HttpOnly cookies (от кражи через document.cookie), фреймворки с auto-escape (Twig, Jinja2, Razor).
- Не доверять user input. Никогда.
14.6 CSRF (Cross-Site Request Forgery)
- Атакующий заставляет браузер жертвы сделать запрос от её имени.
- Защита: CSRF tokens (synchronizer token pattern, double submit cookie), SameSite cookies.
14.7 SSRF
- Сервер делает запрос на URL, контролируемый атакующим.
- Атака на внутренние сервисы (cloud metadata 169.254.169.254 — AWS, GCP).
- Защита: allowlist, запрет приватных сетей.
14.8 XXE (XML External Entity)
- Парсер XML подгружает внешние сущности.
- Утечка файлов, SSRF.
- Защита: отключить external entities в парсере.
14.9 Deserialization vulnerabilities
- PHP unserialize(), Python pickle, Java ObjectInputStream.
- Atomized control flow / RCE.
- Защита: не десериализовывать недоверенные данные. JSON безопаснее.
14.10 Path Traversal
- ../../etc/passwd.
- Защита: canonicalize path, allowlist, chroot.
14.11 Race conditions (TOCTOU)
- Time of Check, Time of Use — состояние меняется между проверкой и использованием.
- Atomic операции, locks, оптимистичная конкурентность (version field).
14.12 Authentication
- Что-то знаешь (пароль) + что-то имеешь (токен/телефон) + чем-то являешься (биометрия).
- MFA / 2FA.
- TOTP (RFC 6238), HOTP (RFC 4226).
- WebAuthn / FIDO2 / passkeys.
- Password hashing: bcrypt, scrypt, argon2 (argon2id предпочтительно). НЕ MD5, НЕ SHA1, НЕ голый SHA256.
- Salt — обязательно. Pepper — опционально.
14.13 Session management
- Server-side session storage (Redis).
- Stateless tokens (JWT).
- Session fixation, session hijacking.
- Secure, HttpOnly, SameSite cookies.
- Logout — invalidate session серверно.
14.14 JWT
- Header.Payload.Signature.
- Алгоритмы: HS256 (symmetric), RS256 (asymmetric), ES256 (ECDSA).
- Атаки: alg=none, key confusion (RS256 → HS256 с public key), JWK injection.
- Не хранить секреты в payload (он не зашифрован, только подписан).
- Срок жизни короткий, refresh tokens отдельно.
- Logout — проблема, нужен blacklist (теряется stateless).
14.15 OAuth 2.0 и OpenID Connect
- OAuth 2.0 — авторизация (доступ к ресурсам).
- OIDC — аутентификация поверх OAuth (получение identity).
- Flows:
- Authorization Code (с PKCE) — для web/mobile/SPA.
- Client Credentials — service-to-service.
- Device Authorization — для устройств без клавиатуры.
- Implicit, Password Grant — устарели, не использовать.
- PKCE (Proof Key for Code Exchange) — обязательно для public clients.
- Refresh tokens — rotation.
14.16 RBAC, ABAC, ReBAC
- RBAC — Role-Based: пользователь → роль → разрешения.
- ABAC — Attribute-Based: разрешения вычисляются по атрибутам.
- ReBAC — Relationship-Based (Google Zanzibar) — на основе графов отношений.
- Casbin, OPA (Open Policy Agent), Cerbos.
14.17 Secrets management
- НЕ в коде, НЕ в git, НЕ в env-файлах в репозитории.
- HashiCorp Vault, AWS Secrets Manager, GCP Secret Manager.
- Rotation.
- .env только для локальной разработки.
14.18 TLS правильно
- TLS 1.3 (или минимум 1.2 с правильными cipher suites).
- HSTS заголовок.
- Cert pinning — для mobile.
- mTLS для inter-service.
14.19 Rate limiting и DDoS защита
- На API: rate limits per IP/user/key.
- WAF (Cloudflare, AWS WAF).
- CDN.
- Captcha при подозрении.
14.20 Supply chain security
- SCA — Software Composition Analysis (Dependabot, Snyk, Renovate).
- SBOM — Software Bill of Materials (CycloneDX, SPDX).
- Lock-файлы (composer.lock, package-lock.json, go.sum) — коммитить.
- Signed commits.
- Dependency confusion attacks.
14.21 Container security
- Минимальные базовые образы (Alpine, distroless, scratch).
- Non-root user в контейнере.
- Read-only filesystem.
- Без secrets в образе.
- Сканирование (Trivy, Grype, Clair).
- Image signing (Cosign, Notary).
14.22 OWASP ASVS
- Application Security Verification Standard.
- 3 уровня: 1 (basic), 2 (standard), 3 (advanced).
- Чек-листы для всех аспектов AppSec.
15. КРИПТОГРАФИЯ — ПРИКЛАДНАЯ
15.1 Хэш-функции
- Свойства: deterministic, fast, preimage resistance, second preimage resistance, collision resistance.
- SHA-2 (SHA-256, SHA-512), SHA-3 (Keccak), BLAKE2/BLAKE3.
- MD5, SHA-1 — сломаны, не использовать для безопасности.
- HMAC — хэш с ключом для message authentication.
15.2 Хэширование паролей
- bcrypt, scrypt, argon2id (предпочтительно), PBKDF2.
- Параметры стоимости (cost / time / memory) — обновлять каждые 2-3 года.
- Salt уникальный для каждого пароля.
15.3 Симметричная криптография
- AES-128, AES-256.
- Режимы: ECB (НЕ использовать), CBC, CTR, GCM (предпочтительно — auth+encryption), ChaCha20-Poly1305.
- IV/Nonce — уникальный, никогда не повторять с тем же ключом.
- Padding (PKCS#7) — уязвимости (Padding Oracle).
- AEAD (Authenticated Encryption with Associated Data) — обязательно для современных применений.
15.4 Асимметричная криптография
- RSA — старая, но рабочая. 2048 минимум, 3072+ предпочтительно. RSA-OAEP для шифрования, RSA-PSS для подписи.
- ECC — Elliptic Curve. P-256 (secp256r1), Curve25519, secp256k1 (Bitcoin).
- ECDH — Diffie-Hellman на эллиптических кривых для key exchange.
- EdDSA (Ed25519) — современная подпись, быстрая.
- Post-Quantum: Kyber (KEM), Dilithium (signatures) — стандартизированы NIST в 2024.
15.5 Гибридные схемы
- Асимметрика для key exchange + симметрика для шифрования данных.
- TLS работает так.
15.6 PKI и сертификаты
- X.509.
- CSR → CA → Certificate.
- Chain of trust.
- CRL, OCSP — отзыв.
- ACME (Let's Encrypt).
15.7 Генерация случайных чисел
- CSPRNG обязательно для криптографии: /dev/urandom, getrandom(), CryptGenRandom, random_bytes() в PHP, secrets в Python, crypto/rand в Go.
- PRNG (math.random, rand()) — НЕ для криптографии.
15.8 Common pitfalls
- Roll your own crypto = wrong.
- Использовать проверенные библиотеки: libsodium, BoringSSL, Bouncy Castle.
- Constant-time сравнения для секретов (hash_equals в PHP, hmac.compare_digest в Python, subtle.ConstantTimeCompare в Go).
- Timing attacks, padding oracle, BEAST/CRIME/BREACH.
16. SDLC И SECURE SDLC (SSDLC)
16.1 SDLC модели
- Waterfall — последовательный, тяжёлый. Подходит для систем с фиксированными требованиями (госы, embedded).
- V-Model — Waterfall с явным тестированием на каждом этапе.
- Iterative / Incremental.
- Agile — итерации, фокус на работающем ПО (Scrum, Kanban, XP).
- Lean — устранение потерь, поток ценности.
- DevOps / DevSecOps — слияние разработки, операционки и безопасности.
16.2 Фазы классического SDLC
- Planning / Requirements.
- Analysis & Design.
- Implementation.
- Testing.
- Deployment.
- Maintenance & Operations.
16.3 SSDLC — встраивание безопасности в каждую фазу
Requirements
- Security requirements: compliance (GDPR, 152-ФЗ, PCI DSS, HIPAA), бизнес-требования по безопасности.
- Abuse cases / misuse cases — как этим можно навредить.
Design
- Threat modeling (STRIDE).
- Security architecture review.
- Defining trust boundaries.
- Choosing secure defaults.
Implementation
- Secure coding standards (CERT, OWASP Cheat Sheets).
- Code review с фокусом на security.
- Static analysis (SAST).
- Pre-commit hooks (secret scanning, linters).
- Dependency scanning (SCA).
Testing
- DAST (Dynamic Analysis).
- IAST.
- Fuzzing.
- Penetration testing.
- Bug bounty.
Deployment
- Infrastructure as Code review.
- Container image scanning.
- Secrets management — не зашивать в образы.
- Least privilege для service accounts.
Operations
- Logging, monitoring, alerting.
- WAF, IDS/IPS.
- Vulnerability management (CVE tracking, patching).
- Incident response.
- Forensics.
16.4 Инструменты SSDLC
- SAST: SonarQube, Semgrep, CodeQL, Checkmarx, Veracode, AppScreener (РФ), PVS-Studio.
- DAST: OWASP ZAP, Burp Suite, Acunetix, Netsparker.
- IAST: Contrast, Seeker.
- SCA: Snyk, Dependabot, OWASP Dependency-Check, Dependency-Track, CodeScoring (РФ), AppSec.Track.
- Container scanning: Trivy, Grype, Clair, Anchore.
- Secret scanning: gitleaks, trufflehog, GitHub secret scanning.
- IaC scanning: Checkov, tfsec, KICS.
- Fuzzing: AFL++, libFuzzer, go-fuzz, jazzer.
16.5 Compliance и стандарты
- ISO 27001 — Information Security Management System.
- SOC 2 — для SaaS, доверие к контролям безопасности.
- PCI DSS — для обработки платежных карт.
- GDPR — защита персональных данных в ЕС.
- 152-ФЗ (РФ) — обработка персональных данных. УЗ-1..4. ПП 1119, Приказ ФСТЭК 21, Приказ ФСБ 378.
- HIPAA — медицина в США.
- NIST 800-53, 800-218 (SSDF).
- OWASP SAMM — Software Assurance Maturity Model.
- BSIMM — Building Security In Maturity Model.
16.6 Управление инцидентами
- IR процесс: Detect → Triage → Contain → Eradicate → Recover → Lessons Learned.
- Постмортемы blameless.
- Runbooks.
- Forensics.
17. DEVOPS, CI/CD, IAC
17.1 DevOps принципы
- CALMS: Culture, Automation, Lean, Measurement, Sharing.
- Three Ways (Phoenix Project / DevOps Handbook):
- Поток слева направо.
- Быстрая обратная связь справа налево.
- Культура экспериментов и обучения.
- DORA metrics:
- Deployment Frequency.
- Lead Time for Changes.
- Change Failure Rate.
- Time to Restore Service (MTTR).
17.2 CI (Continuous Integration)
- Каждый коммит → автоматическая сборка + тесты.
- Быстрый фидбек.
- Trunk-based development vs Git Flow vs GitHub Flow.
- Build artifacts — immutable.
17.3 CD (Continuous Delivery / Deployment)
- Delivery — готов к деплою в любой момент, деплой — кнопкой.
- Deployment — автоматический деплой в прод.
17.4 Стратегии деплоя
- Recreate — остановить старое, поднять новое. Downtime.
- Rolling update — постепенная замена. Без downtime.
- Blue/Green — два окружения, переключение трафика.
- Canary — небольшой процент трафика на новую версию, постепенный рост.
- A/B testing — параллельные версии для разных групп.
- Shadow / dark launch — новая версия получает трафик, но ответы не возвращаются.
- Feature flags — переключение фич без деплоя (LaunchDarkly, Unleash).
17.5 Git
- Branching models: Git Flow, GitHub Flow, Trunk-based.
- Merge vs Rebase. Squash.
- Cherry-pick, bisect, reflog, stash.
- Hooks: pre-commit, pre-push, commit-msg.
- Conventional Commits.
- Signed commits.
17.6 CI/CD платформы
- GitLab CI, GitHub Actions, Jenkins, CircleCI, TeamCity, Drone, Argo Workflows.
- Build matrix, parallel jobs, caching.
17.7 Infrastructure as Code
- Terraform / OpenTofu — провижининг.
- Pulumi — IaC на обычных языках.
- Ansible, Chef, Puppet, SaltStack — configuration management.
- CloudFormation (AWS), ARM/Bicep (Azure), Deployment Manager (GCP).
- Версионировать инфраструктуру. State в S3+DynamoDB, не локально.
17.8 Конфиг-менеджмент vs провижининг
- Provisioning (Terraform) — создание инфраструктуры.
- Configuration management (Ansible) — настройка существующих машин.
- На современных подходах оба заменяются immutable infrastructure: образ + replace.
18. КОНТЕЙНЕРИЗАЦИЯ И ОРКЕСТРАЦИЯ
18.1 Docker
- Контейнер vs виртуальная машина.
- Image, container, layer, registry.
- Dockerfile: FROM, RUN, COPY, ADD, CMD, ENTRYPOINT, ENV, ARG, VOLUME, EXPOSE, USER, WORKDIR, HEALTHCHECK.
- Multi-stage build — уменьшение размера.
- BuildKit, кэширование слоёв.
- Docker Compose для локальной разработки.
- Тонкости:
- CMD vs ENTRYPOINT.
- .dockerignore.
- Не кэшируется COPY package.json — лайфхак для node/composer/pip.
- Не root!
- Минимальные образы (alpine, distroless, scratch).
- Один процесс на контейнер.
- PID 1 проблема (init, dumb-init, tini).
- signal handling.
18.2 OCI стандарты
- Open Container Initiative.
- Image spec, runtime spec, distribution spec.
- Альтернативы Docker: Podman, containerd, CRI-O.
18.3 Kubernetes (K8s)
Объекты
- Pod — минимальная единица, 1+ контейнеров.
- ReplicaSet — гарантирует количество реплик.
- Deployment — управляет ReplicaSet, обновления.
- StatefulSet — для stateful сервисов (БД).
- DaemonSet — по одному поду на каждой ноде.
- Job / CronJob — задачи.
- Service — стабильный endpoint (ClusterIP, NodePort, LoadBalancer, ExternalName).
- Ingress — HTTP routing.
- ConfigMap, Secret.
- PersistentVolume, PersistentVolumeClaim, StorageClass.
- Namespace — изоляция.
- NetworkPolicy — firewall между подами.
- HorizontalPodAutoscaler, VerticalPodAutoscaler.
Архитектура
- Control plane: kube-apiserver, etcd, kube-scheduler, kube-controller-manager.
- Node: kubelet, kube-proxy, container runtime.
- CNI (Calico, Cilium, Flannel).
- CSI (Container Storage Interface).
- CRI (Container Runtime Interface).
Управление
- kubectl, k9s.
- Helm — package manager.
- Kustomize — overlays.
- Operators (CRDs).
- ArgoCD, FluxCD — GitOps.
K8s Security
- RBAC.
- Pod Security Standards (privileged, baseline, restricted).
- OPA Gatekeeper, Kyverno — policy engines.
- Network Policies.
- Service mesh (Istio, Linkerd) для mTLS.
- Запрет привилегированных контейнеров.
- Read-only filesystem.
- Distroless images.
- Image signing.
K8s Networking
- Pod-to-pod, pod-to-service, ingress.
- DNS внутри кластера (CoreDNS).
- Service mesh.
19. ОБЛАКА
19.1 Модели
- IaaS — виртуалки, сети, диски.
- PaaS — runtime для кода (Heroku, App Engine, ECS, Cloud Run).
- SaaS — готовые продукты (Google Workspace).
- FaaS — serverless functions.
19.2 AWS ключевые сервисы
- Compute: EC2, ECS, EKS, Lambda, Fargate.
- Storage: S3, EBS, EFS, Glacier.
- Networking: VPC, Route53, CloudFront, ELB (ALB/NLB/CLB), API Gateway.
- Databases: RDS (Postgres/MySQL/Aurora), DynamoDB, ElastiCache, Redshift.
- Messaging: SQS, SNS, Kinesis, EventBridge, MSK.
- IAM, KMS, Secrets Manager, Parameter Store.
- CloudWatch, X-Ray.
19.3 GCP, Azure, Yandex Cloud, VK Cloud
- Аналогичные сервисы под другими именами.
- На РФ-рынке актуальны Yandex Cloud, VK Cloud, Selectel.
19.4 Multi-cloud, hybrid cloud
- Vendor lock-in.
- Стоимость vs flexibility.
20. OBSERVABILITY: LOGS, METRICS, TRACES
20.1 Три столпа
- Logs — дискретные события.
- Metrics — числовые ряды во времени.
- Traces — путь запроса через систему.
- Четвёртое — profiling (continuous profiling: Pyroscope, Parca).
20.2 Structured logging
- JSON, ключ-значение.
- Уровни: TRACE, DEBUG, INFO, WARN, ERROR, FATAL.
- Контекст: trace_id, user_id, request_id.
- НЕ логировать секреты, пароли, PII (или маскировать).
- Loki, ELK (Elasticsearch+Logstash+Kibana), Splunk, Datadog Logs.
20.3 Metrics
- Counter — только растёт (количество запросов).
- Gauge — может расти и падать (использование памяти).
- Histogram — распределение значений (latency percentiles).
- Summary — pre-aggregated quantiles.
- Prometheus — pull-based.
- StatsD — push-based.
- Grafana — визуализация.
- VictoriaMetrics — Prometheus-совместимая, быстрее.
20.4 Метрики, которые нужно собирать
- RED: Rate, Errors, Duration.
- USE: Utilization, Saturation, Errors (для ресурсов).
- Golden Signals: Latency, Traffic, Errors, Saturation.
- Business metrics: signups, orders, revenue.
20.5 Tracing
- OpenTelemetry — стандарт.
- Trace, Span, Span context, baggage.
- Sampling.
- Jaeger, Zipkin, Tempo, Honeycomb.
20.6 Alerting
- Symptom-based, не cause-based.
- SLI/SLO/SLA:
- SLI — Service Level Indicator (метрика).
- SLO — Service Level Objective (цель).
- SLA — Service Level Agreement (контракт).
- Error budget.
- Alertmanager, PagerDuty, OpsGenie, VictorOps.
- Алерт-усталость — реальная проблема. Меньше, точнее.
20.7 Профилирование
- CPU profiling, memory profiling, allocation profiling.
- pprof (Go, Python), perf, py-spy, async-profiler (Java), Xdebug profiler (PHP), Blackfire.
- Continuous profiling: Pyroscope, Parca, Datadog Continuous Profiler.
- Flame graphs.
21. ТЕСТИРОВАНИЕ
21.1 Пирамида тестирования
- Unit (база, много, быстрые).
- Integration / Component (меньше).
- E2E (немного, медленные).
- Альтернатива: Test Trophy (Kent C. Dodds) — больший упор на integration.
21.2 Виды тестов
- Unit — изолированная функция/класс. Mocks/stubs/fakes/spies.
- Integration — несколько компонентов вместе.
- Contract testing — Pact, между сервисами.
- End-to-End — через весь стек, browser-tests (Playwright, Selenium, Cypress).
- Smoke — базовая работоспособность.
- Regression — старое не сломалось.
- Load / Performance — k6, Locust, JMeter, Gatling, Artillery.
- Stress — выше предела нагрузки.
- Soak / Endurance — долго.
- Spike — резкие пики.
- Chaos engineering — Chaos Monkey, Litmus.
- Security testing — DAST, pentest, fuzzing.
- Accessibility — a11y.
21.3 TDD, BDD
- TDD: Red → Green → Refactor.
- BDD: Given/When/Then, Cucumber/Gherkin.
21.4 Test doubles
- Dummy — заглушка, не используется.
- Stub — возвращает фиксированные данные.
- Fake — упрощённая реальная реализация (in-memory DB).
- Mock — проверяет, что был вызван правильно.
- Spy — записывает вызовы.
21.5 Code coverage
- Statement, branch, function, line coverage.
- 100% покрытие ≠ 100% качество.
- Mutation testing (Stryker, PIT) — проверка качества тестов.
21.6 Test data
- Фикстуры, фабрики (factory_bot, faker).
- Test containers (testcontainers) — настоящие БД в Docker для тестов.
- Snapshot testing.
- Property-based testing (Hypothesis, fast-check, jqwik).
22. PERFORMANCE, PROFILING, OPTIMIZATION
22.1 Правила оптимизации
- "Premature optimization is the root of all evil" (Knuth).
- Сначала измерь, потом оптимизируй.
- 80/20 — большинство времени в малой части кода.
- Алгоритмическая сложность важнее микрооптимизаций.
22.2 Профилирование
- CPU-bound vs I/O-bound vs memory-bound.
- Wall time vs CPU time.
- Sampling vs Instrumentation profilers.
22.3 Database performance
- Индексы, EXPLAIN.
- N+1 queries.
- Connection pooling (pgbouncer, ProxySQL).
- Read replicas для масштабирования чтений.
- Caching на разных уровнях.
- Prepared statements.
- Batch operations.
22.4 Caching layers
- Client (browser cache).
- CDN.
- Reverse proxy (varnish, nginx).
- Application cache (in-memory, Redis).
- DB query cache.
- Application-level memoization.
22.5 Application performance
- Hot loops — минимизировать аллокации.
- String concatenation — использовать builders (StringBuilder, strings.Builder).
- Lazy initialization.
- Object pooling.
- Connection pooling.
- Pagination, lazy loading.
22.6 HTTP performance
- HTTP/2, HTTP/3.
- Compression (gzip, brotli).
- Caching headers (ETag, Cache-Control).
- CDN.
- Connection reuse (keep-alive).
22.7 Concurrency performance
- Lock contention.
- False sharing.
- Atomic ops vs mutex.
- Lock-free data structures.
22.8 Memory
- Allocations — дорого, особенно с GC.
- Object pooling.
- Зачем нужна Escape analysis (Go) — стек дешевле кучи.
- Memory leaks (event listeners, circular refs, неосвобождённые ресурсы).
23. SOFT SKILLS И РАБОТА SENIOR
23.1 Коммуникация
- Pull, не push: спрашивай контекст вместо предположений.
- Письменная коммуникация — RFC, ADR (Architecture Decision Records), design docs.
- Asynchronous-first.
- Уважительная конкретика.
23.2 Code review
- Хвалить хорошее, не только критиковать.
- "Why" важнее "what".
- Различай: must-fix vs suggestion vs nitpick.
- Не личное.
- Если есть автоматизация (форматтеры, линтеры) — не комментируй стиль.
- Спрашивай вопросы, не давай приказов.
23.3 Менторство
- Не давать решения, задавать наводящие вопросы.
- Pair programming.
- Делегировать сложные задачи, не только простые.
23.4 Принятие решений
- Two-way doors vs One-way doors (Bezos).
- Reversible решения — принимай быстро.
- Irreversible — основательно.
- "Disagree and commit".
- ADR (Architecture Decision Records) — фиксировать решения и контекст.
23.5 Управление техдолгом
- Boy Scout Rule — оставь код лучше, чем нашёл.
- Time boxing рефакторинга.
- Не "всё переписать" — постепенно.
- Strangler Fig pattern для legacy.
23.6 Оценка задач
- Story points, t-shirt sizes.
- 3-point estimation (optimistic/realistic/pessimistic).
- Учитывать неизвестные.
- Если "не знаю" — выделить spike/research.
23.7 Анти-выгорание
- Sustainable pace.
- Реалистичные сроки.
- "Нет" — нормальное слово.
- Отпуск без рабочего ноутбука.
23.8 On-call
- Runbook'и.
- Rotation.
- Post-incident review без обвинения (blameless).
24. РОАДМАП НА 12 МЕСЯЦЕВ (PHP → PYTHON → GO)
Месяц 1-4: PHP Senior
- Язык: PHP 8.x (typed properties, enums, readonly, attributes, fibers, match, named args).
- Фреймворки: Symfony (или Laravel) — глубоко. Doctrine ORM, dependency injection container, event dispatcher.
- Стандарты: PSR-1, 4, 7, 12, 15, 17, 18. Composer.
- Тестирование: PHPUnit, Pest, Mockery, Codeception.
- Качество: PHPStan/Psalm на максимальном уровне, PHP-CS-Fixer.
- Производительность: OPcache, JIT, profiling через Blackfire/Xdebug.
- Безопасность: SQL injection защита через PDO, password_hash, random_bytes, hash_equals.
- Проекты для портфолио:
- REST API на Symfony с auth (JWT), документация OpenAPI, тесты, Docker.
- Event-driven сервис с RabbitMQ.
- Доработка существующего Symfony-проекта (luchmarket.ru) — добавить рефакторинг, тесты, CI.
- Книги: "PHP Right Way", Fowler "Patterns of Enterprise Application Architecture", Evans "Domain-Driven Design".
Месяц 5-8: Python Senior
- Язык: Python 3.11+ (type hints, dataclasses, asyncio, walrus, match-case, generics).
- Фреймворки: FastAPI (предпочтительно для API), Django REST Framework (если работа с full-stack).
- Async: asyncio глубоко, event loop, await/async, asyncpg, httpx, aiohttp.
- Тестирование: pytest, pytest-asyncio, hypothesis, factory-boy, freezegun, responses.
- Качество: mypy strict, ruff, black, bandit, pre-commit hooks.
- Производительность: cProfile, py-spy, scalene. Numpy/Pandas если data.
- Безопасность: bandit, safety, secrets module, password hashing (passlib + argon2).
- Проекты:
- FastAPI сервис с PostgreSQL (asyncpg + SQLAlchemy 2.0 async), Alembic миграции, JWT, тесты, Dockerfile, docker-compose.
- Celery worker для фоновых задач, Redis как broker.
- Скрипт data processing (Pandas) с tests и mypy.
- Книги: Ramalho "Fluent Python", Slatkin "Effective Python", "Architecture Patterns with Python" (Cosmic Python).
Месяц 9-12: Go Senior
- Язык: Go 1.22+. Goroutines, channels, select, context, generics, errors wrapping.
- Стандартная библиотека: net/http, database/sql, encoding/json, sync, io, bufio, os/exec, testing.
- Идиомы: error handling (нет исключений), composition, interfaces small.
- Фреймворки и тулы: chi/gin/echo для HTTP, sqlx/pgx, golang-migrate, viper, zap/zerolog/slog, testify.
- Concurrency: глубоко — race detector, sync.Pool, errgroup, context cancellation, leaks goroutine.
- gRPC: protobuf, codegen, streaming.
- Качество: golangci-lint (включить все строгие линтеры), gosec.
- Производительность: pprof, benchmarks (testing.B), escape analysis (-gcflags="-m"), trace tool.
- Безопасность: crypto/rand, crypto/tls, gosec.
- Проекты:
- HTTP API на стандартной библиотеке (или chi), PostgreSQL через pgx, миграции, тесты с testcontainers, structured logging, Prometheus metrics, OpenTelemetry tracing.
- gRPC сервис с генерацией кода из proto, mTLS.
- CLI tool с cobra.
- Книги: Donovan/Kernighan "The Go Programming Language", Tsoukalos "Mastering Go", Cox-Buday "Concurrency in Go", Bodner "Learning Go".
Параллельно весь год
- CS фундамент: алгоритмы по leetcode (medium), 3-5 задач в неделю.
- System Design: ByteByteGo, Designing Data-Intensive Applications (DDIA) — обязательно.
- Безопасность: PortSwigger Web Security Academy (бесплатно, отличная), OWASP ASVS читать целиком.
- Linux: ежедневно использовать, ковырять /proc, strace, perf.
- Сети: tcpdump, Wireshark — разбирать реальный трафик.
- Один pet-project, который ты ведёшь весь год — туда складываешь применение новых знаний.
- Открытый блог / Хабр — 1 статья в месяц о том, что выучил. Это и портфолио, и закрепление.
- Контрибуции в open source — хотя бы 1-2 PR в популярный репозиторий.
Маяки прогресса
- К концу 4 мес: можешь спроектировать и реализовать в одиночку production-ready API на PHP с тестами, CI/CD, мониторингом.
- К концу 8 мес: то же на Python + асинхронный код, worker'ы, integration с message broker.
- К концу 12 мес: то же на Go + concurrent processing, gRPC, profiling, ты можешь в любом из 3 языков выходить на собес как Senior.
25. ЛИТЕРАТУРА (МУСТ-РИДЫ для Senior)
Фундамент CS / System Design
- "Designing Data-Intensive Applications" — Martin Kleppmann. Самая важная книга для senior backend.
- "Database Internals" — Alex Petrov.
- "Operating Systems: Three Easy Pieces" — Remzi Arpaci-Dusseau (бесплатно онлайн).
- "Computer Systems: A Programmer's Perspective" — Bryant/O'Hallaron.
- "TCP/IP Illustrated" — W. Richard Stevens.
- "High Performance Browser Networking" — Ilya Grigorik (бесплатно онлайн).
Distributed Systems
- "Designing Distributed Systems" — Brendan Burns.
- "Distributed Systems" — Maarten van Steen, Andrew Tanenbaum (бесплатно онлайн).
- Roberto Vitillo — "Understanding Distributed Systems".
- Papers: Dynamo, MapReduce, Bigtable, Spanner, Raft, Kafka.
Архитектура
- "Clean Architecture" — Robert Martin.
- "Patterns of Enterprise Application Architecture" — Martin Fowler.
- "Domain-Driven Design" — Eric Evans (synий кирпич).
- "Implementing Domain-Driven Design" — Vaughn Vernon (красный).
- "Building Microservices" — Sam Newman.
- "Monolith to Microservices" — Sam Newman.
- "Software Architecture: The Hard Parts" — Ford/Richards/Sadalage/Dehghani.
- "Fundamentals of Software Architecture" — Mark Richards, Neal Ford.
Качество кода
- "Refactoring" — Martin Fowler.
- "Clean Code" — Robert Martin (спорная, но базовая).
- "The Pragmatic Programmer" — Hunt, Thomas.
- "Code Complete" — Steve McConnell.
- "A Philosophy of Software Design" — John Ousterhout.
Безопасность
- "The Web Application Hacker's Handbook" — Stuttard, Pinto.
- "Real-World Cryptography" — David Wong.
- "Cryptography Engineering" — Ferguson, Schneier, Kohno.
- "Black Hat Python" — Justin Seitz.
- "The Tangled Web" — Michał Zalewski.
SRE / DevOps
- "Site Reliability Engineering" — Google (бесплатно).
- "The Site Reliability Workbook" — Google (бесплатно).
- "The Phoenix Project" — Gene Kim.
- "The DevOps Handbook" — Gene Kim et al.
- "Accelerate" — Forsgren, Humble, Kim.
- "Continuous Delivery" — Humble, Farley.
Тестирование
- "Test Driven Development" — Kent Beck.
- "Growing Object-Oriented Software, Guided by Tests" — Freeman, Pryce.
- "Working Effectively with Legacy Code" — Michael Feathers.
- "Unit Testing Principles, Practices, and Patterns" — Vladimir Khorikov.
Soft Skills / Управление
- "The Manager's Path" — Camille Fournier.
- "Staff Engineer" — Will Larson.
- "An Elegant Puzzle" — Will Larson.
- "The Five Dysfunctions of a Team" — Patrick Lencioni.
Языко-специфичные
- PHP: "Modern PHP" (Josh Lockhart), "PHP Objects, Patterns, and Practice" (Matt Zandstra).
- Python: "Fluent Python" (Luciano Ramalho), "Effective Python" (Brett Slatkin), "Architecture Patterns with Python" (Cosmic Python).
- Go: "The Go Programming Language" (Donovan/Kernighan), "Learning Go" (Jon Bodner), "Concurrency in Go" (Katherine Cox-Buday), "100 Go Mistakes and How to Avoid Them" (Teiva Harsanyi).
Бесплатные ресурсы
- PortSwigger Web Security Academy — портал по AppSec, бесплатно.
- High Scalability blog — кейсы архитектур.
- InfoQ Architecture — статьи.
- The Morning Paper — обзоры CS papers.
- AWS Well-Architected Framework — официальный гайд.
- Google SRE books — бесплатно.
- OWASP Cheat Sheet Series — практические рекомендации.
ПРАКТИКА И САМОПРОВЕРКА — ЧТО ДОЛЖЕН УМЕТЬ SENIOR
Перед каждой темой, прежде чем читать дальше, ответь себе: смог бы я объяснить это junior'у на собеседовании за 5 минут?
Самопроверка по темам:
- Опиши, что происходит между моментом, когда ты ввёл google.com в браузер, и появлением страницы. От keystroke до rendering.
- Нарисуй на бумаге, как работает TCP handshake.
- Объясни, почему индекс ускоряет SELECT, но замедляет INSERT/UPDATE.
- Объясни разницу между процессом и потоком на примере fork/exec.
- Опиши, как работает GC и где он может быть проблемой.
- Что такое race condition? Приведи пример из реальной работы.
- Что такое idempotency и почему она критична в распределённых системах?
- Объясни CAP теорему через пример конкретной БД.
- Что значит "eventual consistency"? Где её нельзя использовать?
- Опиши OAuth Authorization Code flow с PKCE.
- Как защититься от SQL injection? Почему prepared statements решают проблему?
- Что такое 2PC и почему он плохо работает в реальных распределённых системах?
- Чем canary deployment отличается от blue/green?
- Что такое cardinality в Prometheus и почему высокая cardinality убивает БД метрик?
- Опиши, как ты будешь дебажить ситуацию "сервис тормозит в проде".
Если ты можешь свободно ответить на эти 15 вопросов — ты на уровне Senior. Если на 2-3 запинаешься — нужно ещё месяц подготовки.
ЗАКЛЮЧЕНИЕ
Senior — это не звание, а способ работы. Главное не в том, чтобы выучить каждую технологию из списка. Главное:
- Глубоко понимать фундамент (CS, сети, БД, ОС).
- Видеть систему целиком, а не отдельные функции.
- Принимать решения с учётом trade-off'ов, а не "потому что так модно".
- Брать ответственность за прод, а не только за свои PR'ы.
- Учиться постоянно. Технологии меняются, фундамент остаётся.
Иди по роадмапу. Не пытайся выучить всё сразу. Один день — одна концепция. Месяц — один большой проект. Год — один новый язык до production-уровня.
Удачи.