• Масштабирование вглубь – увеличение производительности
аппаратного обеспечения без увеличения количества его единиц
• Масштабирование вширь – увеличение количества единиц
аппаратного обеспечения без увеличения производительности отдельной единицы
Достижение масштабируемости
• Приложение не должно ждать
• Компоненты приложения не должны конкурировать за
ресурсы
– Самые большие ресурсы следует выделять в начале работы
приложения
– Минимизировать обращения к файловым хранилищам и БД
– Выделять ресурсы как можно позднее и высвобождать как
можно ранее
• Проектировать процессы коммутативными, т.е. при любом
порядке выполнения и одинаковых входных данных выдающих одинаковый результат
• Проектировать элементы приложения взаимозаменяемыми,
что позволяет объединить ранее использованные элементы в пул
• Минимизировать связи между действиями и ресурсами, что
позволяет избежать узких мест и оптимально использовать вычислительные ресурсы
Готовность
• Готовность – мера того, как часто система готова к
обработке запросов относительно запланированного времени работы системы
• Достижение готовности
– Сокращение запланированного времени простоя
– Сокращение незапланированного времени простоя,
например за счёт применения кластеров
– Использование балансировки сетевой нагрузки в
кластерах
– Использовать RAID массивы
– Изолировать критичные приложения
Надёжность
• Надёжность информационной системы – способность
выдавать правильные результаты
• Достижение надёжности
– Документировать требования по надёжности в
спецификации
– Использовать продуманную архитектуру
– Разработать систему самоконтроля
– Использовать избыточность
– Использовать качественные средства разработки
– Использовать проверки надёжности внутри приложения
– Реализовать систему обработки исключений
– Использовать постепенное снижение возможностей системы
при возникновении исключительных ситуаций
Производительность
• Производительность системы определяется её
количественными временными параметрами, например, количеством обрабатываемых
запросов в секунду
• Достижение производительности
– Выделение ограничений с технической стороны
(применяемые технологии могут ограничивать производительность, выявить
аппаратные ограничения) и с организационной стороны (рассмотреть возможность
смены технологий)
– Определение возможностей системы – необходимо
определить, для какой части системы, какой её возможности производительность
является критичной и разработать тесты производительности
– Определение нагрузки – нагрузка на систему определяет
её производительность
Виды тестирования
• Покрывающее тестирование (coverage
testing) – тестирование программного кода на низком уровне
– Основное техническое тестирование – выполняется
автором кода
– Внешнее тестирование – выполняется тестировщиком или
экспертом
– Коллегиальное тестирование – осуществляется
программистом, не являющимся автором кода
• Пользовательское тестирование (usage testing) – выполняется потенциальными пользователями системы
– Определяет характер взаимодействия пользователей с
системой
– Позволяет выявить недостатки производительности
системы
Термины тестирования
• Входные тесты (Сheck-in tests) – при отправке кода в систему контроля версий
• Блочные тесты (Unit tests)
– контроль реализации возможностей системы, используется в покрывающих тестах
• Функциональные тесты (Functional tests) – контроль реализации требуемого функционала, а не
отдельных возможностей