Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП / ООП / ры_приложений_полная_книга.pdf
Скачиваний:
524
Добавлен:
18.02.2017
Размер:
7.08 Mб
Скачать

Существующий код не имеет комплекта автоматизированных регрессивных тестов. Инвестируйте в автоматизацию тестов при разработке системы. Это окупится при проверке функциональности системы и в виде документации с описанием функциональности различных частей системы и их совместной работы.

Недостаток документации может затруднять использование, управление и обновления в будущем. Обеспечьте документацию, которая, как минимум, описывает общую структуру приложения.

Управляемость

Управляемость определяет, насколько просто системным администраторам управлять приложением, как правило, посредством достаточного и полезного инструментария, предоставляемого для использования в системах мониторинга, а также для отладки и настройки производительности. Обеспечьте такой инструментарий при проектировании приложения. Рассмотрим основные проблемы управляемости:

Недостаток хороших механизмов мониторинга, трассировки и диагностики. Создайте полноценную модель, определяющую существенные изменения состояния, которые могут оказывать влияние на производительность приложения, и используйте эту модель для выработки требований по инструментированию управления. Реализуйте инструментарий, такой как счетчики событий и производительности, который выявляет изменения состояния и предоставляет эти изменения через стандартные системы, такие как журналы событий (Event Logs), файлы трассировки или инструментарий управления Windows (Windows Management Instrumentation, WMI).

Отслеживайте и собирайте достаточное количество сведений об ошибках и изменениях состояния для обеспечения точного мониторинга, отладки и управления. Также рассмотрите возможность создания пакетов управления, которые могут использоваться администраторами в средах мониторинга для управления приложением.

Отсутствие возможности настройки во время выполнения. Продумайте, как можно обеспечить изменение поведения системы на основании требований операционной среды, таких как изменение инфраструктуры или развертывания.

Отсутствие инструментов поиска и устранения неисправностей. Рассмотрите возможность включения кода для создания снимка состояния системы, который может использоваться для поиска и устранения неисправностей, и включения специального инструментария для обеспечения подробных операционных и функциональных отчетов. Реализуйте сбор данных протоколирования и аудита, которые могут быть полезны для обслуживания и отладки, таких как детали запросов или выходные данные модулей и вызовы других систем и сервисов.

Производительность

Производительность – это показатель, характеризующий скорость, с какой система выполняет любое действие в заданный промежуток времени. Производительность измеряется в

показателях задержки или пропускной способности. Задержка – это время, необходимое для ответа на любое событие. Пропускная способность – это число событий, имеющих место в заданный промежуток времени. Производительность приложения может напрямую влиять на его масштабируемость, а недостаточная масштабируемость может негативно сказываться на производительности. Повышение производительности приложения часто приводит к улучшению его масштабируемости за счет снижения вероятности конкуренции за совместно используемые ресурсы. К факторам, влияющим на производительность системы, относятся запрос конкретного действия и ответ системы на этот запрос. Рассмотрим основные проблемы, связанные с производительностью:

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

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

Повышенный объем обработки на сервере базы данных, что приводит к снижению пропускной способности. Убедитесь, что выбраны эффективные типы транзакций, блокировок, соответствующие подходы к организации потоковой обработки и очередей. Использование эффективных запросов позволит максимально сократить негативное влияние на производительность и избежать выбора всех данных, когда требуется отображать только часть из них. Неправильное проектирование работы с базой данных приводит к ненужной повышенной нагрузке на сервер базы данных, невозможности реализовать требования по производительности и повышению денежных затрат.

Повышенная нагрузка на сеть, что приводит к увеличению времени ответа и повышению нагрузки и на клиент, и на сервер. Правильный выбор соответствующего механизма удаленного взаимодействия обеспечит высокопроизводительное взаимодействие между уровнями. Старайтесь сократить число транзакций через физические границы и максимально сократить объем передаваемых по сети данных. Работайте в пакетном режиме, чтобы сократить количество вызовов по сети.

Надежность

Надежность – это способность системы сохранять работоспособность в течение некоторого времени. Надежность определяется как вероятность того, что система сможет выполнять предусмотренные функции в течение заданного промежутка времени. Рассмотрим основные проблемы надежности:

Система дает сбой или не отвечает. Определите возможности для выявления сбоев и автоматического запуска обработки отказов или перенаправления нагрузки на запасную или резервную систему. Также реализуйте код, обеспечивающий использование альтернативных систем при выявлении определенного числа неудачных запросов к текущей системе.

Неустойчивый вывод. Реализуйте инструментарий, такой как счетчики событий и производительности, для выявления низкой производительности или сбоев запросов к внешним системам с последующим предоставлением этих сведений через стандартные системы, такие как журналы событий, файлы трассировки или WMI. Протоколируйте данные производительности и аудита для вызовов, выполняемых к другим системам и сервисам.

Система дает сбой из-за недоступности внешних ресурсов, таких как системы, сети и базы данных. Определите способы обработки ненадежности внешних систем, сбоев связи и транзакций. Продумайте, как можно реализовать очередь ожидающих выполнения запросов на время пребывания системы в автономном режиме. Реализуйте системы передачи данных с промежуточным хранением или системы связи посредством сообщений с кэшированием, обеспечивающие возможность сохранения запросов, когда целевая система недоступна, и их воспроизведения при восстановлении подключения. Использование Windows Message Queuing или BizTalk Server обеспечит надежный механизм одноразовой доставки для асинхронных запросов.

Возможность повторного использования

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

Применение разного кода или компонентов для достижения того же результата в разных частях программы; например, дублирование логики во многих компонентах и дублирование логики во многих слоях или подсистемах. Проанализируйте дизайн приложения для выявления общей функциональности и реализуйте ее в отдельных компонентах, которые можно будет использовать повторно. Определитесь со сквозной функциональностью, такой как проверка, протоколирование и аутентификация, и реализуйте эти функции как отдельные компоненты.

Использование множества аналогичных методов для реализации похожих задач. Разнообразить поведение метода помогут параметры.

Использование нескольких систем для реализации одной и той же возможности или функции, вместо совместного или повторного использования функциональности

другой системы, множества систем или разных подсистем приложения. Предоставляйте функциональность компонентов, слоев и подсистем через интерфейсы сервисов, которые могут использоваться другими слоями и системами. Применяйте независимые от используемой платформы типы данных и структуры, с которыми могут работать разные платформы.

Масштабируемость

Масштабируемость – это способность системы справляться с увеличением нагрузки без влияния на производительность системы или способность системы легко расширяться. Существует два метода улучшения масштабируемости: вертикальное масштабирование (scale up) и горизонтальное масштабирование (scale out). Для обеспечения вертикального масштабирования в систему добавляется больше ресурсов, таких как ЦП, память и дисковое пространство. Для обеспечения горизонтального масштабирования в ферме, выполняющей приложение и распределяющей нагрузку, используется большее количество компьютеров. Рассмотрим основные проблемы масштабируемости:

Приложения не могут справляться с увеличивающейся нагрузкой. Проектируйте слои и уровни, обеспечивая их масштабируемость. Продумайте, как выбранный дизайн может влиять на способность приложения и базы данных масштабироваться в вертикальном или горизонтальном направлении в случае необходимости. Логические слои можно разместить на одном физическом уровне, что позволит сократить количество необходимых серверов, повышая при этом возможности распределения нагрузки и обработки отказов. Реализуйте распределение данных по нескольким серверам баз данных, что обеспечит лучшие возможности для вертикального масштабирования и гибкое размещение подмножеств данных. Избегайте использования компонентов и подсистем, сохраняющих состояние, для снижения привязки к конкретному серверу.

Пользователи ощущают задержку при обращениях к системе и увеличение продолжительности времени выполнения задач. Продумайте, как обеспечить обработку всплесков трафика и нагрузки. Реализуйте код для использования дополнительных или альтернативных систем при достижении предельной загруженности сервиса или определенного числа ожидающих обработки запросов к текущей системе.

Система не может обработать очередь задач, сформированную в период повышенной загруженности, за время, когда нагрузка понижена. Реализуйте системы передачи данных с промежуточным хранением или системы связи посредством сообщений с кэшированием, обеспечивающие возможность сохранения запросов, когда целевая система недоступна, и их воспроизведения при подключении системы к сети.

Безопасность

Безопасность – это способность системы предотвращать злонамеренные или случайные действия, не предусмотренные при проектировании, или не допускать разглашение или утрату данных. Повышение безопасности ведет также к повышению надежности системы за счет

Соседние файлы в папке ООП