Software: Ошибки и компромиссы при разработке ПО [Томаш Лелек] (pdf) читать постранично, страница - 3

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

. . . . . . . . . . . 114
4.2. Возможность предоставления собственной библиотеки метрик . . . 118
4.3. Обеспечение расширяемости API с использованием .
перехватчиков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
4.3.1. Защита от непредвиденного использования .
API перехватчиков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
4.3.2. Влияние API перехватчиков на производительность . . . . . . 125
4.4. Обеспечение расширяемости API за счет использования
прослушивателей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
4.4.1. Прослушиватели и перехватчики . . . . . . . . . . . . . . . . . . 130
4.4.2. Неизменяемость архитектуры . . . . . . . . . . . . . . . . . . . . 131

12  Оглавление
4.5. Анализ гибкости API и затраты на обслуживание . . . . . . . . . . . . 133
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Глава 5. Преждевременная оптимизация и оптимизация .
критического пути: решения, влияющие на производительность кода . . . . 137
5.1. Когда преждевременная оптимизация — зло . . . . . . . . . . . . . . . 138
5.1.1. Создание конвейера обработки учетных записей . . . . . . . . 139
5.1.2. Оптимизация обработки на основании ложных .
утверждений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
5.1.3. Оценка оптимизации производительности . . . . . . . . . . . . 141
5.2. Критические пути в коде . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
5.2.1. Принцип Парето в контексте программных систем . . . . . . . 146
5.2.2. Настройка количества параллельных пользователей .
(потоков) для заданного уровня SLA . . . . . . . . . . . . . . . . . . . . 147
5.3. Словарный сервис с потенциальным критическим путем . . . . . . . 148
5.3.1. Получение «слова дня» . . . . . . . . . . . . . . . . . . . . . . . . . 149
5.3.2. Проверка существования слова . . . . . . . . . . . . . . . . . . . . 151
5.3.3. Предоставление доступа к WordsService .
с использованием сервиса HTTP . . . . . . . . . . . . . . . . . . . . . . 151
5.4. Обнаружение критического пути в коде . . . . . . . . . . . . . . . . . . 153
5.4.1. Применение Gatling для создания тестов .
производительности API . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
5.4.2. Измерение хронометража кодовых путей .
с использованием MetricRegistry . . . . . . . . . . . . . . . . . . . . . . 157
5.5. Повышение производительности критического пути . . . . . . . . . . 159
5.5.1. Создание микротеста JMH для существующего решения . . . 160
5.5.2. Оптимизация проверки с использованием кэширования . . . 161
5.5.3. Увеличение количества входящих слов в тестах
производительности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Глава 6. Простота и затраты на обслуживание API . . . . . . . . . . . . . . . 170
6.1. Базовая библиотека, используемая другими инструментами . . . . . 171
6.1.1. Создание клиента облачного сервиса . . . . . . . . . . . . . . . . 172
6.1.2. Стратегии аутентификации . . . . . . . . . . . . . . . . . . . . . . 173

Оглавление  13
6.1.3. Понимание механизма конфигурации . . . . . . . . . . . . . . . 175
6.2. Прямое предоставление настроек зависимой библиотеки . . . . . . . 179
6.2.1. Конфигурация пакетного инструмента . . . . . . . . . . . . . . . 181
6.3. Абстрагирование настроек зависимой библиотеки . . . . . . . . . . . 183
6.3.1. Конфигурация стримингового сервиса . . . . . . . . . . . . . . . 184
6.4. Добавление новой настройки для облачной .
клиентской библиотеки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
6.4.1. Добавление новой настройки в пакетный инструмент . . . . . 187
6.4.2. Добавление новой настройки в стриминговый сервис . . . . . 188
6.4.3. Сравнение UX-ориентированности и удобства .
обслуживания в двух решениях . . . . . . . . . . . . . . . . . . . . . . . 189
6.5. Удаление настроек в облачной клиентской библиотеке . . . . . . . . 190
6.5.1. Удаление настройки из пакетного инструмента . . . . . . . . . 192
6.5.2. Удаление настроек из стримингового сервиса . . . . . . . . . . 194
6.5.3. Сравнение UX-ориентированности и затрат .
на обслуживание для двух решений . . . . . . . . . . . . . . . . . . . . 196
Итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Глава 7. Эффективная работа с датой и временем . . . . . . . . . . . . . . . . 198
7.1. Концепции представления даты и времени . . . . . . . . . . . . . . . . 200
7.1.1. Машинное время: моменты времени, эпохи и интервалы . . . 200
7.1.2. Календарные системы, даты, время и периоды . . . . . . . . . . 204
7.1.3. Часовые пояса, UTC и смещения от UTC . . . . . . . . . . . . . 211
7.1.4. Концепции даты и времени, вызывающие приступ .
головной боли . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
7.2. Подготовка к работе с информацией о дате и времени . . . . . . . . . 219
7.2.1. Ограничение объема работ . . . . . . . . . . . . . . . . . . . . . . 219
7.2.2. Уточнение требований к дате и времени . . . . . . . . . . . . . . 221
7.2.3. Использование подходящих библиотек или пакетов . . . . . . 227
7.3. Реализация кода даты и времени . . . . . . . . . . . . . . . . . . . . . . . 229
7.3.1. Последовательное