Как прокачаться в проектировании программного обеспечения — список книг

  • что делаем
  • как делаем
  • как эксплуатируем

Что делаем

Domain-Driven Design: Tackling Complexity in the Heart of Software

What Is Domain-Driven Design?

Как делаем

Fundamentals of Software Architecture

  1. Foundations
  2. Architecture Styles
  3. Techniques and Soft Skills

Building Evolutionary Architectures

  1. Software Architecture — про архитектуру в общем и эволюционную конкретно
  2. Fitness Functions — про подход с fitness function из генетических алгоритмов, которые позволяют отслеживать соответствие изменений системы архитектурным правилам и подходам
  3. Engineering Incremental Change — про то, как обеспечивать инкрементальность изменений
  4. Architectural Coupling — про модульность, гранулярность и типы архитектур. Эта часть гораздо подробнее изложена в первых двух частях книги Fundamentals of Software Architecture
  5. Evolutionary Data — глава про эволюцию данных, эволюционирование схем и как быть если ваши системы интегрированы через антипаттерн Shared Database Integration
  6. Building Evolvable Architectures — конкретные подходы для построения эволюционных архитектур, как с гринфилда, так и для существующих систем
  7. Evolutionary Architecture Pitfalls and Antipatterns — про грабли, на которые можно наступить на этом пути
  8. Putting Evolutionary Architecture into Practice — глава про применение методов и подходов из предыдущих глав в реальном мире

Designing Data-Intensive Applications

  1. Основы информационных систем
  2. Распределенные данные
  3. Производные данные
  • 1. Надежные, масштабируемые и удобные в сопровождении системы
  • 2. Модели данных и языки запросов — SQL, NoSQL, Map Reduce, Cypher и SparQL
  • 3. Подсистемы хранения и извлечения данных — SSTables, LSM, B-Tree, Звезды и снежинки, столбцовое хранение данных
  • 4. Кодирование и эволюция — json, xml, thrift, protobuf, avro. Миграции данных:)
  • 5. Репликация — синхронная/асинхронная, master/slave, master/master, no-master
  • 6. Секционирование — типа ключ/значение, по диапазонам ключе, секционирование и репликация, секционирование и вторичные индексы, перебалансировка секций
  • 7. Транзакции — ACID/BASE, 2PL(two-phase locking), SSI (serializable snapshot isolation)
  • 8. Проблемы распределенных систем — сбои и отказы, ненадежные сети, ненадежные часы, знание/истина/ложь
  • 9. Согласованность и консенсус
  • 10. Пакетная обработка
  • 11. Потоковая обработка
  • 12. Будущее информационных систем

Designing Distributed Systems

  • одноузловые паттерны проектирования
  • паттерны проектирования обслуживающих систем
  • паттерны проектирования систем пакетных вычислений
  • sidecar: для https, динамической конфигурации и метрик
  • ambassador: для использования шардированного сервиса и для сплита трафика для тестирования разных версий
  • adapters: мониторинг, журналирование
  • репликация: для stateless сервсиов, sticky sessions, кеширование, …
  • шардирование: консистентный хеш, шардирование реплицированных сервисов, …
  • scatter-gather: распределенный поиск по документам
  • FaaS и events: преимущества и недостатки FaaS, реализация декораторов на функциях
  • выбор владельца: локи для распределенных систем
  • системы на основе очередей задач
  • событийно-ориентированная пакетная обработка
  • координированная пакетная обработка

Architecting for Scale, 2nd Edition

  • Доступность vs Надежность. Это не одно и то же, дальше в книге обсуждается только доступность
  • Способы улучшения доступности (учитывать отказы при проектировании и разработке, думать о масштабировании, управляйте рисками, контролируйте доступность, имейте план реагирования на проблемы)
  • Введение в управление рисками в контексте ИТ-систем (что это такое, критичность и вероятность риска, матрица рисков, смягчение рисков, …)
  • Сервисы и микросервисы — куда же без них в 2017 году:) Преимущества и недостатки сервисов. Обсуждение зависимостей между сервисами и к чему она приводит в плане доступности
  • Масштабирование приложений (запас на две ошибки, владение сервисами, классы сервисов и их использование, SLA, непрерывное улучшение)
  • Облака — еще одна “горячая” тема. Автор рассказывает про AWS, в проектировании и создании которого он участвовал до того, как перешел в NewRelic
  • Ну и напоследок заключение, в котором автор подбил summary под содержанием книги

Cloud Native

Patterns of Enterprise Application Architecture

Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions

  • передача файла (file transfer)
  • общая база данных (shared database)
  • удаленный вызов процедуры (remote procedure invocation)
  • обмен сообщениями (messaging)
  • каналы обмена сообщениями
  • построение сообщений
  • маршрутизация сообщений
  • преобразование сообщений
  • конечные точки обмена сообщениями

Monolith to Microservices

  • что такое микросервис и какого размера он может быть — по bounded context’у
  • какой логикой пользоваться для декомпозиции вашего монолита на микросервисы — внезапно тут активно упоминается очередной трехбуквенный акроним DDD (Domain Driven Design)
  • всегда ли вам нужны микросервисы — логично, что нет:)
  • как не облажаться с миграцией с монолита на микросервисы
  • как распиливать монолитный код
  • как быть с источниками данных — аля пилим базу данных
  • какие боли у вас возникнут когда вместо одного рантаймящегося монолита у вас появится коллекция микросервисов, в которой сложность эксплуатации возрастает на порядки, если использовать те же подходы, что для эксплуатации монолита

Building Microservices, 2nd Edition

Как эксплуатируем

Release It!, 2nd Edition

  • крахе системы покупки билетов на самолеты, причем информация подана в виде небольшой детективной истории:)
  • антипаттернах стабильности
  • паттернах стабильности

Site Reliability Engineering

  • Введение
  • Принципы
  • Практики
  • Управление
  • Выводы
  • менеджмента рисков (глава 3)
  • определения качества обслуживание сервиса aka SLO, SLA, SLI (глава 4)
  • избавления от рутины (глава 5)
  • мониторинга распределенных систем (глава 6)
  • технологий выпуска ПО (глава 8) — эту главу рекомендую разработчикам
  • простоты (глава 9) — эту главу рекомендую разработчикам
  • тестирования надежности систем (глава 17)
  • балансировки нагрузки на уровне фронтенда (глава 19)
  • балансировки нагрузки в датацентрах (глава 20)
  • способах борьбы с перегрузками (глава 21)
  • способах борьбы с каскадными сбоями (глава 22)
  • разрешениях конфликтов в распределенных системах и достижения консенсуса (глава 23)
  • распределенный cron (глава 24)
  • конвейеры обработки данных (глава 25)
  • сохранность данных (глава 26)

The Site Reliability Workbook

Kubernetes Patterns

  • Foundational patterns — ключевые принципы и практики для построения контейнерных cloud native приложений
  • Behavioral patterns — поведенческие паттерны, описывающие взаимодействия разных типов контейнеров и платформы
  • Structural patterns — структурные паттерны, помогающие организовать контейнеры внутри пода
  • Configuration patterns — паттерны конфигурации для настройки cloud native приложений в k8s
  • Advanced patterns — продвинутые паттерны, которые покрывают темы, которые позволяют расширять саму платформы при помощи операторов (operator).

Итоги

--

--

--

Director of digital ecosystem development department at Tinkoff. Bachelor at applied math, Master at system analysis, Postgraduate studies at economics.

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Alexander Polomodov

Alexander Polomodov

Director of digital ecosystem development department at Tinkoff. Bachelor at applied math, Master at system analysis, Postgraduate studies at economics.

More from Medium

Comparing X.509 Certificates with SSI

Getting Java-11 docker images to run on mac m1 (arm64) with adoptium/temurin

Mixins in Common Lisp

ServiceNowAgent WorkSpace — Adding a Module

Agent WorkSpace example