Серии и карты
Все серии статей и тематические карты-навигаторы: с чего начать и как связаны материалы
Все серии
ClickHouse и аналитические БД
- 1 Когда нужен OLAP: ClickHouse против PostgreSQL для аналитики
- 2 ClickHouse из Go и Java: MergeTree, вставки и запросы
- 3 ClickHouse-драйверы: когда какой (ch-go, clickhouse-go, JDBC, HTTP)
- 4 Материализованные представления и real-time агрегации в ClickHouse
- 5 Распределённый ClickHouse: шардирование, репликация, Keeper
- 6 Эксплуатация и тюнинг ClickHouse: merges, mutations, мониторинг, backup
- 7 ClickHouse и S3: многоуровневое хранение и внешние данные
- 8 ClickHouse, TimescaleDB, DuckDB: что выбрать под аналитику
Поперёк языков
Стриминг и обработка данных
Индексы в базах данных
Docker в production
- 1 Multi-stage builds в Docker: собираем Go-приложение правильно
- 2 Production-сборка Docker-образов: secrets, proxy, healthcheck и CI
- 3 Golden builder image и Docker Registry: ускоряем сборку и публикуем образы
- 4 Docker volumes: как использовать тома правильно для скорости, надёжности и контроля доступа
- 5 Docker Buildx и multi-arch образы: одна сборка для amd64 и arm64
- 6 Docker Compose для production без Kubernetes
- 7 Rootless Docker: стоит ли переходить
Событийные паттерны
- 1 Событийная архитектура без магии: карта понятий
- 2 Что кладём в событие: notification vs event-carried state transfer
- 3 Гарантии доставки и идемпотентность: как получить effectively-once
- 4 Transactional Outbox/Inbox: события без распределённой транзакции
- 5 Контракты событий: schema evolution без боли
- 6 Event Sourcing: когда история важнее текущего состояния
- 7 CQRS: разделяем чтение и запись без лишнего пафоса
- 8 Saga: распределённые транзакции без двухфазного коммита
- 9 Хореография vs оркестрация: кто знает бизнес-процесс
- 10 Temporal: durable workflows вместо самодельных очередей
- 11 Что выбрать: матрица решений по событийным паттернам
- 12 Event Sourcing на практике: event store, проекции, снапшоты, replay
- 13 CQRS на практике: проекции, rebuild, консистентность, tooling
- 14 Saga на практике: компенсации, изоляция, идемпотентность, tooling
Apache Flink: глубокое погружение
Конкурентность в Go
- 1 Конкурентность в Go: горутины, каналы и context без подводных камней
- 2 Пакет sync и атомики в Go: примитивы синхронизации на практике
- 3 Модель памяти Go: happens-before и почему гонки — это не «иногда»
- 4 Паттерны конкурентности в Go: pipeline, semaphore, errgroup, singleflight
- 5 Отладка конкурентности в Go: race detector, утечки горутин, дедлоки
Go: глубокое погружение
- 1 Go: конфигурация через env без хаоса
- 2 Graceful shutdown в Go: завершаемся правильно
- 3 Когда env уже мало: layered configuration в Go с confita
- 4 PGX в Go: зачем уходить с pq и где проходит граница пользы
- 5 ORM в Go: где он уместен и что выбрать между GORM и go-jet
- 6 sqlc и SQL-builders в Go: генерация кода из SQL vs конструирование запросов
- 7 Профилирование и бенчмаркинг в Go: как измерять без самообмана
- 8 Тестирование в Go: table-driven, Testcontainers, -race
Основы Go вглубь
Идентификаторы: bigint, UUID, ULID, Snowflake
JVM backend: Java и Kotlin
- 1 Java для backend и контейнеров: где она по-прежнему очень сильна
- 2 Современная Java: records, sealed-классы, pattern matching и virtual threads
- 3 Kotlin для backend: null-safety, корутины и Ktor
- 4 Spring Boot вглубь: DI, стартеры, конфигурация и actuator
- 5 Конкурентность на JVM: virtual threads, корутины и reactive
- 6 Доступ к данным на JVM: JDBC, JPA/Hibernate, jOOQ и Spring Data
- 7 Сборка и упаковка JVM: Gradle, GraalVM native и минимальные образы
- 8 JVM в production: конфигурация, graceful shutdown, observability и GC
- 9 Профилирование JVM: async-profiler, JFR и JMH
- 10 Тестирование на JVM: JUnit 5, Testcontainers, MockK и Mockito
- 11 Messaging на JVM: Kafka-клиенты, Spring Kafka и надёжная доставка
- 12 Reactive на JVM: Project Reactor, WebFlux и когда он больше не нужен
Kafka: глубокое погружение
- 1 Kafka: лог, топики, партиции — ментальная модель
- 2 Consumer groups и ребалансировка в Kafka
- 3 Репликация и надёжность Kafka: ISR, acks, durability
- 4 Хранение в Kafka: retention, log compaction, tiered storage
- 5 Exactly-once и транзакции в Kafka
- 6 Эксплуатация Kafka: KRaft, мониторинг, тюнинг, обновление
- 7 Экосистема Kafka: Connect, Schema Registry, ksqlDB
- 8 Kafka-клиенты в разных языках: драйверы, родословные, различия
- 9 MirrorMaker 2 и геораспределённый Kafka: репликация между кластерами, DR, active-active
Готовый IdP: Keycloak на практике
MongoDB: глубокое погружение
Архитектура лунной базы
- 1 Архитектура, аналитика и лунная база: о чём эта серия
- 2 Почему аналитику недостаточно только требований
- 3 Problem statement: симптомы, причины и метрики
- 4 Требования как архитектурные драйверы
- 5 DDD для аналитика без культа терминов
- 6 Как доменная модель ломает и спасает архитектуру
- 7 C4-модель для аналитика: не рисовать красиво, а думать точно
- 8 Взаимодействия и интеграции: где ломается кажущаяся простота
- 9 Согласованность данных: где нужна строгая, а где достаточно «в итоге»
- 10 Эксплуатация в архитектуре: как инженеры возвращают схему в реальность
- 11 Сквозной итоговый кейс: собираем рабочую систему лунной базы
Погружение в NATS
- 1 NATS для тех, кто знает Kafka и RabbitMQ: subjects, Core и request/reply
- 2 JetStream: как NATS получает persistence, streams и гарантии доставки
- 3 Классический кластер NATS: routes, RAFT и надёжный failover
- 4 Геораспределённый NATS: superclusters, gateways, leaf nodes и mirror-стримы
- 5 Надёжность и производительность NATS: гарантии, репликация и tuning
- 6 NATS из Go: nats.go, Core и JetStream паттерны
- 7 NATS из Java: jnats, Core и JetStream паттерны
- 8 Безопасность и multi-tenancy в NATS: accounts, JWT, nkeys и TLS
- 9 Эксплуатация NATS: nats CLI, мониторинг, backup и обновление кластера
OpenSearch: глубокое погружение
- 1 OpenSearch: установка кластера через Ansible, авторизация и работа с индексами
- 2 OpenSearch: индексы, маппинги и шаблоны
- 3 Сбор данных в OpenSearch: API, клиенты и bulk-загрузка
- 4 Полнотекстовый поиск в OpenSearch: запросы, анализаторы и подсветка результатов
- 5 Retention в OpenSearch: ISM, rollover и жизненный цикл индексов
- 6 OpenSearch Dashboards: Discover, визуализации и дашборды
- 7 Семантический поиск в OpenSearch: k-NN, эмбеддинги и гибридный поиск
Производительность: низкая задержка под нагрузкой
- 1 Бюджет задержки и выбор транспорта: highload под SLA < 300 мс
- 2 HAProxy L4 vs L7 и HTTP/2: как масштабировать обработку между серверами
- 3 Go-клиент под нагрузкой: пул HTTP/2-соединений и потоки
- 4 JVM-сервис под нагрузкой: virtual threads, пулы и reactive для 1000 in-flight
- 5 JVM-клиент под нагрузкой: gRPC ManagedChannel и HttpClient на HTTP/2
Высокодоступный RabbitMQ
- 1 Отказоустойчивый RabbitMQ: quorum-очереди и failover без потерь
- 2 Не потерять сообщение в RabbitMQ: durability, confirms, ack и DLQ
- 3 Связываем кластеры RabbitMQ: Federation и Shovel
- 4 Эксплуатация RabbitMQ: мониторинг и продакшн-чеклист
- 5 Streams в RabbitMQ: Kafka-подобный лог и можно ли заменить Kafka
Redis: глубокое погружение
- 1 Redis вглубь: структуры данных и их внутренние кодировки
- 2 Один поток и событийный цикл: откуда у Redis скорость
- 3 Персистентность Redis: RDB, AOF и границы надёжности
- 4 Репликация, Cluster и Sentinel: Redis как распределённая система
- 5 Память и вытеснение: как Redis живёт под давлением памяти
- 6 Streams, Lua и функции: программируемость Redis
- 7 Эксплуатация Redis и карта выбора: когда он, а когда нет
Rust: глубокое погружение
- 1 Rust для backend: где он действительно уместен
- 2 Rust async runtime: Tokio изнутри
- 3 Rust web-фреймворки: Axum vs Actix и выбор под задачу
- 4 Rust в Docker: минимальные образы и cross-compilation
- 5 Rust в production: паттерны для надёжного backend
- 6 Тестирование в Rust: cargo test, proptest, mockall, Testcontainers
ScyllaDB: глубокое погружение
- 1 Когда нужна ScyllaDB и как думать данными: моделирование под wide-column
- 2 Архитектура ScyllaDB: shard-per-core и почему это меняет правила игры
- 3 Compaction, tombstones и repair в ScyllaDB: жизненный цикл данных под капотом
- 4 Consistency levels и LWT в ScyllaDB: что реально стоит кворум и Paxos
- 5 От token ring к tablets: репликация и multi-DC в ScyllaDB
- 6 Shard-aware драйверы ScyllaDB: Go и Java на практике
- 7 Эксплуатация ScyllaDB: мониторинг, backup и когда она вообще нужна
System design: resilience
Транзакции и изоляция
- 1 Аномалии и уровни изоляции: фундамент транзакций
- 2 Транзакции в реляционных БД на практике: PostgreSQL, изоляция и нагрузочный стенд
- 3 KV и документные: «транзакций» почти нет — Redis, MongoDB, ScyllaDB
- 4 Брокеры и стриминг: транзакции в очереди и логе — RabbitMQ и Kafka
- 5 Мульти-хранилищный стенд: один сценарий по всем БД и карта выбора