Опубликовано

Новинка: “Проектирование информационных систем. Профессиональный подход”

Проектирование информационных систем. Профессиональный подход

Рассмотрены подходы и технологии, применяющиеся для проектирования информационных систем и подбора инструментов с учетом развития и поддержки программных продуктов. Разобрана теория развертывания, тестирования, автоматизации, балансировки нагрузки и поддержка новых возможностей в развивающемся продукте. Материал теоретической части рассмотрен на основе гипотетической информационной системы для сказочных персонажей. В практической части описанные теоретические концепции применяются в рамках реализации технического задания и в условиях ограниченности ресурсов. Среди рассмотренных примеров – разработка телеграм-бота, интернет-магазина и плагина к редактору для  3D-моделирования.

Для программистов,  бизнес-аналитиков, архитекторов IT-решений

Правильные вопросы – ключ к правильным ответам

Перед вами книга о проектировании информационных систем (system design), написанная программистом для программистов.
Проектирование программного обеспечения не сводится к выбору готовых технологий и подходов. Грамотно построенная архитектура упрощает дальнейшую поддержку программного продукта и удешевляет разработку нового функционала, как запланированного, так и неожиданно вклинившегося в требования по проекту.  В книге исследованы различные архитектурные подходы и их адаптивность к изменяющимся требованиям бизнеса в долгосрочной перспективе.

Книга состоит из двух частей: теоретической и практической.

  • Материал теоретической части рассмотрен на основе гипотетической информационный системы для сказочных персонажей.
  • В практической части описанные теоретические концепции применяются в рамках реализации технического задания и в условиях ограниченности ресурсов. Среди рассмотренных примеров — разработка телеграм-бота, интернет-магазина, редактора изображений и инструмента для 3D-моделирования.
  • Архитектурные принципы и шаблоны
  • Проектирование программных систем
  • Тестирование
  • Развёртывание
  • Автоматизация процессов
  • Балансировка нагрузки
  • Анализ изменяющихся требований

 

Нет фото

Туров Владимир – инженер-программист, более пяти лет занимающийся коммерческой бэкенд-разработкой, закончил Санкт-Петербургский государственный университет информационных технологий по программной инженерии, автор более 80 технических статей на Хабре, выходивших преимущественно в корпоративном блоге компании Selectel https://habr.com/ru/users/Firemoon/. Автор телеграм-канала https://t.me/not_only_msk о тонкостях программирования.

Книгу “Проектирование информационных систем. Профессиональный подход” можно купить в нашем интенет-магазине.

Предисловие…………………………………………………………………………………………….. 9

Часть I. Теория проектирования……………………………………………… 11

Глава 1. Методологии разработки ПО……………………………………………………. 13

Водопадная модель…………………………………………………………………………………………………………………… 13

Спиральная модель……………………………………………………………………………………………………………………. 15

Rational Unified Process……………………………………………………………………………………………………………… 16

Язык моделирования UML………………………………………………………………………………………………………… 18

Сущности UML…………………………………………………………………………………………………………………… 18

Структурные сущности UML…………………………………………………………………………………… 18

Поведенческие и дополнительные сущности UML……………………………………………….. 19

Комментирующие сущности UML………………………………………………………………………….. 19

Отношения UML…………………………………………………………………………………………………………………. 19

Диаграммы UML………………………………………………………………………………………………………………… 20

Диаграмма классов…………………………………………………………………………………………………… 20

Диаграмма состояний………………………………………………………………………………………………. 21

Диаграмма развертывания………………………………………………………………………………………. 21

Диаграмма прецедентов…………………………………………………………………………………………… 22

Диаграмма последовательности……………………………………………………………………………… 22

Гибкие методологии………………………………………………………………………………………………………………….. 23

Scrum…………………………………………………………………………………………………………………………………… 24

Feature-Driven Development……………………………………………………………………………………………….. 26

Глава 2. Выяснение требований…………………………………………………………….. 29

Функциональные требования…………………………………………………………………………………………………… 30

Нефункциональные требования……………………………………………………………………………………………….. 31

Глава 3. Архитектурные шаблоны и стили…………………………………………….. 33

Монолитная архитектура…………………………………………………………………………………………………………. 33

Микросервисная архитектура………………………………………………………………………………………………….. 34

Микроядерная архитектура……………………………………………………………………………………………………… 35

Событийно-ориентированная архитектура……………………………………………………………………………. 36

Многоуровневая архитектура………………………………………………………………………………………………….. 37

Representational State Transfer (REST)……………………………………………………………………………………… 38

Распределенная транзакция……………………………………………………………………………………………………… 39

Протокол двухфазного согласования (2 Phase Commit, 2PC)………………………………………… 40

Протокол трехфазного согласования (3 Phase Commit, 3PC)………………………………………… 41

Оркестрация……………………………………………………………………………………………………………………….. 41

Хореография……………………………………………………………………………………………………………………….. 42

Паттерн SAGA…………………………………………………………………………………………………………………….. 42

Глава 4. Принципы разработки ПО……………………………………………………….. 45

Принцип KISS…………………………………………………………………………………………………………………………….. 45

Принцип YAGNI…………………………………………………………………………………………………………………………. 47

Принцип SOLID………………………………………………………………………………………………………………………….. 47

S — Single Response Principle (принцип единой ответственности)………………………………….. 47

O — Open-Closed Principle (принцип открытости/закрытости)………………………………………. 48

L — Liskov substitution principle (принцип подстановки Барбары Лисков)…………………… 49

I — interface segregation principle (принцип разделения интерфейса)……………………………. 51

D — dependency inversion principle (принцип инверсии зависимостей)…………………………. 52

Инверсия управления………………………………………………………………………………………………………………… 53

Внедрение зависимостей…………………………………………………………………………………………………………… 54

Глава 5. Технологии………………………………………………………………………………. 57

Системы управления базами данных………………………………………………………………………………………. 57

Реляционная модель данных…………………………………………………………………………………………….. 58

Столбцово-ориентированная модель………………………………………………………………………………. 60

Документо-ориентированная модель………………………………………………………………………………. 60

Графовая модель………………………………………………………………………………………………………………… 61

Ключ-значение…………………………………………………………………………………………………………………… 61

Базы данных для временнх рядов………………………………………………………………………………….. 62

Брокер сообщений……………………………………………………………………………………………………………………… 62

Параллельные вычисления……………………………………………………………………………………………………….. 64

Закон Амдала……………………………………………………………………………………………………………………… 64

Многопоточность………………………………………………………………………………………………………………. 65

Синхронизация в многопоточных программах……………………………………………………… 65

Псевдопараллелизм…………………………………………………………………………………………………………… 66

Сопрограммы (корутины)………………………………………………………………………………………………….. 67

Многопроцессорные вычисления…………………………………………………………………………………….. 67

Межпроцессное взаимодействие…………………………………………………………………………….. 67

Распределенные вычисления…………………………………………………………………………………………….. 68

Синхронизация в распределенных системах…………………………………………………………. 69

Вызов функций в распределенных системах………………………………………………………….. 70

GraphQL………………………………………………………………………………………………………………………………………. 70

WebSocket…………………………………………………………………………………………………………………………………… 71

Кеширование……………………………………………………………………………………………………………………………… 73

Кеширование при чтении (сквозное чтение, read-through)……………………………………………… 73

Кеширование при записи (сквозная запись, write-through)……………………………………………… 73

Чтение на стороне (Read aside)…………………………………………………………………………………………. 73

Запись на стороне (Write aside)…………………………………………………………………………………………. 75

Кеширование на опережение (Cache Ahead, Refresh Ahead)…………………………………………. 75

Политики инвалидации……………………………………………………………………………………………………… 76

Идентификация, аутентификация и авторизация……………………………………………………………………. 77

Идентификация…………………………………………………………………………………………………………………… 77

Аутентификация…………………………………………………………………………………………………………………. 77

Авторизация……………………………………………………………………………………………………………………….. 77

Глава 6. Тестирование……………………………………………………………………………. 79

Выбор данных для тестирования…………………………………………………………………………………………….. 81

Юнит-тестирование…………………………………………………………………………………………………………………… 83

Интеграционное тестирование…………………………………………………………………………………………………. 83

Сквозное тестирование (end-to-end)…………………………………………………………………………………………. 84

Полное тестирование………………………………………………………………………………………………………………… 84

Ручное тестирование…………………………………………………………………………………………………………………. 85

Заглушки…………………………………………………………………………………………………………………………………….. 86

Глава 7. Развертывание…………………………………………………………………………. 87

Автоматизация развертывания…………………………………………………………………………………………………. 87

Непрерывная интеграция………………………………………………………………………………………………….. 88

Непрерывная доставка………………………………………………………………………………………………………. 88

Непрерывное развертывание……………………………………………………………………………………………. 89

Масштабирование…………………………………………………………………………………………………………………….. 91

Вертикальное масштабирование……………………………………………………………………………………… 91

Горизонтальное масштабирование………………………………………………………………………………….. 92

Выделенные и облачные серверы……………………………………………………………………………………………. 92

Выделенный сервер……………………………………………………………………………………………………………. 93

Облачный сервер……………………………………………………………………………………………………………….. 93

DBaaS (Database as a Service)………………………………………………………………………………….. 94

Объектное хранилище………………………………………………………………………………………………. 94

Развертывание: контейнеризация…………………………………………………………………………………………….. 95

Технология chroot………………………………………………………………………………………………………………. 96

Технология Jail……………………………………………………………………………………………………………………. 96

Технология Docker……………………………………………………………………………………………………………… 97

Технология Kubernetes………………………………………………………………………………………………………. 99

Технология Nomad…………………………………………………………………………………………………………… 100

Развертывание: обнаружение сервисов…………………………………………………………………………………. 101

Глава 8. Балансировка нагрузки………………………………………………………….. 103

Алгоритмы балансировки……………………………………………………………………………………………………….. 103

DNS                                                                                                                                                                 105

GeoDNS……………………………………………………………………………………………………………………………………… 106

Обратный прокси-сервер………………………………………………………………………………………………………… 107

Глава 9. Обслуживание………………………………………………………………………… 109

Логирование…………………………………………………………………………………………………………………………….. 109

Мониторинг……………………………………………………………………………………………………………………………… 111

Оповещение………………………………………………………………………………………………………………………………. 111

Анализаторы исходного кода………………………………………………………………………………………………… 112

Сканеры уязвимостей………………………………………………………………………………………………………………. 113

Аудит-логи……………………………………………………………………………………………………………………………….. 113

Аварийные игры………………………………………………………………………………………………………………………. 114

Миграция схемы и миграция данных…………………………………………………………………………………….. 115

Версионирование…………………………………………………………………………………………………………………….. 116

Глава 10. Отказоустойчивость, резервирование и надежность……………… 119

Надежность системы……………………………………………………………………………………………………………….. 119

Отказоустойчивость………………………………………………………………………………………………………………… 120

Резервирование………………………………………………………………………………………………………………………… 120

Резервное копирование……………………………………………………………………………………………………. 121

Схемы резервирования……………………………………………………………………………………………………. 122

Восстановление после катастроф………………………………………………………………………………………….. 122

Часть II. Примеры проектирования систем……………………….. 125

Глава 11. Проектирование неинтеративного редактора изображений….. 127

Исходные требования……………………………………………………………………………………………………………… 127

Монолитный подход……………………………………………………………………………………………………………….. 127

Модульный подход…………………………………………………………………………………………………………………. 130

Внезапное требование…………………………………………………………………………………………………………….. 134

Рекомендуемые технологии……………………………………………………………………………………………………. 138

Распространение……………………………………………………………………………………………………………………… 138

Заключение………………………………………………………………………………………………………………………………. 139

Глава 12. Проектирование текстового блога………………………………………… 141

Исходные требования……………………………………………………………………………………………………………… 141

Быстрый минимальный вариант…………………………………………………………………………………………….. 142

Проектирование архитектуры………………………………………………………………………………………………… 145

Рекомендуемые технологии……………………………………………………………………………………………………. 150

Безопасность……………………………………………………………………………………………………………………………. 151

Аутентификация………………………………………………………………………………………………………………………. 152

Поиск…………………………………………………………………………………………………………………………………………. 152

Масштабирование…………………………………………………………………………………………………………………… 153

Локализация контента…………………………………………………………………………………………………………….. 153

Логирование и мониторинг…………………………………………………………………………………………………….. 155

Отслеживание популярности материалов…………………………………………………………………………….. 155

Рекомендательная система……………………………………………………………………………………………………… 156

Соблюдение локальных норм………………………………………………………………………………………………… 156

Резервное копирование……………………………………………………………………………………………………………. 156

Заключение………………………………………………………………………………………………………………………………. 157

Глава 13. Проектирование сервиса конвертации файлов……………………… 159

Исходные требования……………………………………………………………………………………………………………… 159

Проектирование архитектуры………………………………………………………………………………………………… 159

Проектирование веб-сервера………………………………………………………………………………………………….. 163

Проектирование агента…………………………………………………………………………………………………………… 164

Проектирование взаимодействия с инструментами конвертации………………………………………. 165

Проектирование фонового процесса……………………………………………………………………………………… 166

Выбор технологий…………………………………………………………………………………………………………………… 167

Ограничение анонимных пользователей………………………………………………………………………………. 167

Запрет использования сервиса в качестве файлового хранилища……………………………… 167

Ограничение количества действий с одного адреса…………………………………………………….. 168

Запрет регистрации с фальшивых почтовых адресов………………………………………………….. 169

Ограничение по объему и форматам……………………………………………………………………………… 169

Безопасность……………………………………………………………………………………………………………………………. 170

Взаимодействие с платежными системами…………………………………………………………………………… 171

Приватность данных……………………………………………………………………………………………………………….. 171

Пароль доступа………………………………………………………………………………………………………………… 171

Шифрование данных……………………………………………………………………………………………………….. 171

Логирование и мониторинг…………………………………………………………………………………………………….. 173

Распределенная архитектура…………………………………………………………………………………………………. 174

Улучшение пользовательского опыта…………………………………………………………………………………… 175

Подробные статусы…………………………………………………………………………………………………………. 175

Хеширование входных файлов……………………………………………………………………………………….. 176

Определение некорректных файлов……………………………………………………………………………….. 177

Добавление новой функциональности…………………………………………………………………………………… 177

Заключение………………………………………………………………………………………………………………………………. 177

Глава 14. Проектирование интернет-магазина в Telegram……………………. 179

Исходные требования……………………………………………………………………………………………………………… 179

Анализ возможностей………………………………………………………………………………………………………. 180

Ограничения……………………………………………………………………………………………………………………… 182

Проектирование интерфейса бота…………………………………………………………………………………………. 183

Проектирование зоны администратора………………………………………………………………………………… 186

Проектирование архитектуры………………………………………………………………………………………………… 188

Выбор технологий…………………………………………………………………………………………………………………… 190

Рассылка уведомлений……………………………………………………………………………………………………………. 190

Горизонтальное масштабирование……………………………………………………………………………………….. 192

Мониторинг……………………………………………………………………………………………………………………………… 193

Дальнейшие улучшения………………………………………………………………………………………………………….. 193

Заключение………………………………………………………………………………………………………………………………. 194

Глава 15. Проектирование плагина для отправки проекта
из программы 3D-моделирования…………………………………………………………. 195

Исходные требования……………………………………………………………………………………………………………… 195

Ограничения…………………………………………………………………………………………………………………………….. 195

Проектирование простой архитектуры…………………………………………………………………………………. 196

Проектирование составной архитектуры……………………………………………………………………………… 198

Выбор технологий…………………………………………………………………………………………………………………… 199

Логирование…………………………………………………………………………………………………………………………….. 199

Потенциальные технические улучшения………………………………………………………………………………. 200

Заключение………………………………………………………………………………………………………………………………. 200

Заключение………………………………………………………………………………………….. 201

Предметный указатель…………………………………………………………………………. 203