К современному корпоративному ПО предъявляется много новых требований. Уже недостаточно лишь разработать некий программный продукт и развернуть его на сервере приложений. Впрочем, этого никогда не было достаточно.
Сегодня мир меняется быстрее, чем когда-либо прежде. Поэтому способность быстро изменяться — одно из важнейших требований к современным ИТ-компаниям. Последние способны оперативно приспособиться к реальному миру и потребностям клиентов. Ожидаемое время выхода новых функций на рынок сократилось от нескольких лет или месяцев до недель и дней. Чтобы уложиться в такие сроки, компаниям необходимо не только вводить новые технологии или выделять больше денег на реализацию бизнес-логики, но и переосмысливать и реорганизовывать базовые принципы работы их ИТ.
Что в этом контексте означает быстро меняться? В чем это выражается? Какие методы и технологии этому способствуют?
Быстро меняться означает быстро адаптироваться к потребностям рынка и клиентов. Если требуется новая функция и она кажется многообещающей, сколько понадобится времени, чтобы она прошла путь от первоначальной идеи до готового инструмента в руках пользователя? Если нужна новая инфраструктура, сколько времени пройдет от принятия решения до получения работающего оборудования? И не будем забывать о том, что, кроме разработки программного обеспечения в требуемые сроки, нужен еще автоматизированный контроль качества, который гарантирует, что все будет работать как ожидалось и не нарушится существующая функциональность.
При разработке программного обеспечения основная часть этих вопросов касается непрерывного развертывания и автоматизации. Новое программное обеспечение должно быть разработано, протестировано и поставлено автоматическим, быстрым, надежным и воспроизводимым способом. Надежный автоматизированный процесс обеспечивает не только более быстрые изменения, но и в конечном счете более высокое качество. Автоматический контроль качества, например выполнение программных тестов, — часть технологического процесса. В современной разработке ПО непрерывное развертывание, автоматизация и надлежащее тестирование являются одними из наиболее важных принципов.
Самым узким местом в большинстве компаний всегда была инфраструктура. Небольшие компании часто пытаются построить новую инфраструктуру, имея ограниченный бюджет. Более крупным компаниям, как правило, не удается разработать быстрые и эффективные процессы. Проблема многих больших корпораций заключается не в бюджете, а в технологиях. Часто приходится ждать появления новой инфраструктуры в течение нескольких дней или даже недель из-за согласований и чрезмерно сложных процессов, которые технически могли бы быть выполнены за считаные минуты.
Именно поэтому так важны инфраструктура приложения и способ его разработки. В моем блоге мы рассмотрим современные облачные среды. Вы увидите, что на самом деле не имеет особого значения, используются облачные услуги или нет. Быстрые и продуктивные процессы можно реализовать и на локальном оборудовании. Гораздо важнее, чтобы они правильно работали и применялись соответствующие технологии.
Современная инфраструктура должна создаваться быстро и автоматически, быть воспроизводимой и надежной. Она должна без особых усилий адаптироваться к меняющимся требованиям. Для того чтобы соответствовать этим требованиям, инфраструктура должна быть описана в виде кода — либо как процедурный сценарий, либо как набор декларативных описаний. Позже мы увидим, как инфраструктура в виде кода влияет на процессы разработки программного обеспечения и какие технологии ее поддерживают.
Данные требования относятся и к рабочим группам. Команде разработчиков уже недостаточно просто создать программный продукт и передать его операционным командам, которые его запустят, а затем будут решать возникающие в процессе эксплуатации проблемы. Такая практика чревата натянутыми отношениями и перекладыванием на других ответственности за критические ошибки. Но ведь общая цель должна заключаться в том, чтобы поставлять программное обеспечение, полностью удовлетворяющее своему функциональному назначению. Описывая необходимую инфраструктуру и конфигурацию в виде кода, группы разработчиков и операционистов должны составлять единую команду, отвечающую за работу программного обеспечения в целом. Это называется DevOps — культура разработки и эксплуатации, нацеленная на ответственность всей команды разработчиков ПО за функционирование продукта. Все участники отвечают за то, что клиенты будут использовать надлежащее программное обеспечение. Это скорее организационная, чем техническая задача.
Технически для решения этих задач применяется непрерывное развертывание, а также методика, которую называют 12-факторным подходом и ориентацией на выполнение в облаке. Облачный и 12-факторный подходы описывают, как должны разрабатываться современные корпоративные приложения. Они определяют требования не только к разработке, но и к эксплуатации приложений. В этой книге мы изучим указанные подходы, современные облачные среды и то, как их поддерживает Java EE.
Современный способ построения корпоративных систем
Посмотрим, как разрабатываются корпоративные программные комплексы.
Стремясь удовлетворить потребности реальных клиентов, мы должны спросить себя: каково назначение приложения, которое мы намерены разработать? Прежде чем углубляться в технические детали, необходимо прояснить мотивы и цели создания корпоративных программных систем, иначе получится разработка ради разработки. К сожалению, так происходит слишком часто. Сосредоточив внимание на бизнес-логике и принципах проблемно-ориентированного проектирования, как это прекрасно описано в книге Эрика Эванса (Eric Evans), мы гарантируем, что создаваемое программное обеспечение будет отвечать корпоративным требованиям.
Только после того, как назначение и задачи приложения станут понятны всем заинтересованным сторонам, можно перейти к техническим деталям. Группы разработчиков должны выбирать те методики и технологии, которые позволят не только эффективно реализовывать бизнес-сценарии использования продукта, но и уменьшить объем работы и издержки. У разработчиков должна быть возможность сосредоточиться на бизнесе, а не на операционной среде или технологии. Хорошая операционная среда тихо и незаметно помогает реализовывать бизнеслогику, не требуя внимания разработчика.
Выбранная технология должна обеспечивать и максимально эффективные процессы разработки. Это означает не только автоматизацию и быстрое выполнение всех этапов, но и поддержку современной инфраструктуры, такой как контейнеры Linux.