Вот примеры проблем, с которыми сталкивается администратор системы:
• Администратор не может заново отправить запрос, чтобы воспроизвести проблему. В рабочей среде вы не можете выполнить финансовую транзакцию в «боевой» базе данных, чтобы просто посмотреть, где произошла ошибка.
• Когда приложение находится в рабочей среде, требования исправить ошибки исходят от пользователей и начальства, а не от руководителя проекта и группы тестирования — а разгневанное начальство гораздо опаснее.
• В рабочей среде нет отладчика.
• В рабочей среде процесс развертывания планируется и координируется заблаговременно. Никто не разрешит вам отключить приложение на несколько минут, чтобы протестировать исправление.
• В среде разработки журналы сообщений обычно содержат гораздо более подробную информацию, чем в рабочей среде.
Некоторые из симптомов недостаточного планирования поддержки выглядят так:
• Большинство проблем требует привлечения разработчика.
• Отношения между командой разработчиков и службой поддержки весьма напряженные; разработчики считают, что в службе поддержки собрали одних идиотов.
• Служба поддержки ненавидит новое приложение.
• Команды архитекторов и разработчиков проводят много времени в рабочей среде.
• Приложение часто перезапускается для решения возникших проблем.
• Администраторам вечно не хватает времени для нормальной настройки системы, потому что они постоянно занимаются «тушением пожаров».
Чтобы ваше приложение успешно работало после того, как выйдет из рук разработчиков, вы должны:
• Понять, что разработка и поддержка требуют разных навыков.
• Как можно раньше вовлечь в проект руководителя службы технической поддержки.
• Сделать руководителя службы технической поддержки одной из центральных фигур проектной команды.
• Привлечь руководителя службы технической поддержки к планированию поддержки приложения.
Проектируйте продукт так, чтобы обучение персонала службы поддержки проходило с максимальной скоростью. Трассируемость, аудит и журналы играют в сопровождении чрезвычайно важную роль. Когда довольны администраторы системы, все остальные тоже довольны (особенно ваш начальник).
Приготовьтесь выбрать два из трех
Иногда ввод некоторого ограничения или отказ от какого-либо свойства улучшает архитектуру, делает ее более простой и экономичной. Желательные свойства обычно группируются по три, но попытки описать и построить систему, обладающую всеми тремя свойствами, как правило, дают результат, посредственный во всех трех отношениях.
Знаменитый пример такого рода — теорема Брюэра, которая гласит, что для распределенной системы желательными являются три свойства — целостность (Consistency), доступность (Availability) и устойчивость к разделению (Partitioning tolerance) — и что достичь всех трех целей сразу невозможно. Попытки получить «все сразу» кардинально повышают затраты на разработку и, как правило, влекут за собой рост сложности, не приводя при этом к желаемому эффекту и реальному достижению бизнес-цели. Если данные должны быть распределенными и постоянно доступными, обеспечение целостности обходится все дороже и в конечном счете становится нереальным. Аналогичным образом, если система должна быть распределенной и целостной, обеспечение целостности ведет сначала к задержкам и проблемам с производительностью и в конце концов — к недоступности в то время, когда система занята проверкой данных.