it-history
March 12, 2023

Рождение, взлет и вымирание серверов приложений

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

Примерно так сейчас выглядит IBM Websphere глазами зумеров от веб-разработки.

Рассвет живых серверов

Сейчас уже мало кто помнит бурный рост ИТ-индустрии в 90е и историю появления компаний вроде Sun Microsystems, Oracle или Bea Systems.

Компании эти появились и росли взрывными темпами из-за интереса крупного бизнеса к ИТ и завышенных ожиданий — разработчиков ПО (не в РФ конечно) тогда натурально закидывали деньгами, ожидая манны небесной.

Концепция «сервера приложений» и продукты ее реализующие, играли ключевую роль в корпоративной разработке тех лет и оставались таковыми очень долго — до начала 2010х, когда начала активно развиваться концепция «микросервисов». Вместе с виртуализацией и контейнерами, микросервисы вытеснили и заменили сервера приложений.

В наши дни страшный как вьетнамская проститутка, корпоративный говнокод аккуратно распихивают по отдельным приложениям «микросервисам», каждое из которых разворачивается в отдельном контейнере.

Затем это все обвязывают оркестратором и проксями, думая что теперь-то все будет надежно работать.

Другой мир

Как-то так получилось что термин «сервер приложений» оказался монопольно связан с миром Java, все самые популярные решения из этой категории были и есть на этой платформе.

На петоне был и есть Zope — тоже позиционируемый как «сервер приложений», но какой-то массовой популярности за ним замечено не было.

Microsoft в своей платформе .NET также с самого начала использовала термин «сервер приложений», в качестве которого у них выступал IIS.

Но технически это было и есть куда ближе к подключаемым модулям старого доброго Apache2, чем к среде выполнения и разделяемым ресурсам предоставляемым JEE сервером.

Поэтому рассказ ниже будет именно про серверы приложений J2EE/JEE/JakartaEE (за#бали переименовывать), работающие на Java.

Так выглядел JBoss (вебморда) тех времен.

Сам я познакомился с серверами приложений довольно поздно — в 2005 м году и это был JBoss (который теперь Wildfly).

И сразу же погрузился по самые ноздри в адское месиво большого J2EE проекта — это был портал для обмена снимками с электронных микроскопов (!) от NT-MDT. Написанный аутсорсерами откуда-то из Новосибирска, без единой строчки описания, руководства или тестов.

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

Впрочем, все последующие энтерпрайз-проекты на серверах приложений мало чем отличались, говенность почему-то у них всех на уровне ДНК.

Но я немного увлекся, давайте все же вернемся к теме.

Благо на уровне голой концепции «сервер приложений» — класивая и логичная штука.

Крейсер с приложениями посреди водного ИТ-ланшафта

Приложениенесущий крейсер

Внутренние корпоративные приложения — просты и однотипны по своей сути, при этом их нужно много.

«Наклепать и настрогать» — любимые термины именно из корпоративной разработки а не из какой-то другой сказки про Буратино.

Еще все они используют одни и те же ресурсы компании, причем часто одновременно:

базы данных, хранилища файлов, почтовые шлюзы, сервисы авторизации типа LDAP и так далее.

Запускать по 150 сервисов на Java в виде отдельных приложений — дорого и сильно неоптимально. А если в каждом сервисе еще открыть пул подключений к одной и той же базе — эта база скорее всего помрет.

Или помрете уже вы — от рук DBA, им почему-то не нравится когда их базы сильно нагружают.

Вообщем это расточительно даже по нынешним меркам (каждое такое приложение — 1-2Гб памяти), а на 1998й год выглядело бы полным безумием.

Тогда и  появилась концепция «сервера приложений» — своего рода авианосца для однотипных коропративных приложений.

Собираешь себе эти 100-200 EAR файлов, размером по 500кб каждый (все библиотеки ведь обычно общие — на уровне самого сервера приложений), устанавливаешь на этот самый сервер приложений и все.

Все вообщем-то работало, пока из-за частых обновлений приложений сервер не зависал — технически все запускалось на одной и той же виртуальной машине, а сборщик мусора успевал не всегда.

Ну и конечно скорость холодного старта для всех серверов приложений тех лет оставляла желать лучшего — пару минут на запуск для какой-нибудь IBM Websphere считалось нормой.

Bea WebLogic еще до покупки Ораклом.

Унылые корпоративные будни

Был период в ИТ-индустрии (примерно 2005-2014), когда практически вся коммерческая разработка на Java подразумевала использование сервера приложений.

Обычно это был все тот же JBoss, реже — IBM WebSphere, еще реже — Oracle Weblogic.

Конечно Apache Tomcat, Jetty и «штуки» вроде Spring тоже были, но всерьез не воспринимались, по крайней мере в банковской сфере.

В телекоме было попроще — там как раз любили простоту и гоняли Tomcat со Spring.

Чаще всего было так, что в банке была куплен и развернут «большой» сервер приложений вроде IBM Websphere или Oracle Weblogic.

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

Это все тогда гордо называлось «ИТ-ланшафтом».

Внедрение такого «ИТ-ланшафта» сильно напоминало сцену из Х\Ф Буратино, с закапыванием золотого ключика в землю. А Алиса и кот Базилио были вылитыми тогдашними «внедренцами-интеграторами».

Вебконсоль IBM Websphere примерно тех лет.

Минутка WebSphere

С этим сервером приложений я познакомился в 2007м году, это был проект банк-клиента для юрлиц в одном крупном банке.

И на 2007й год проекту было уже 10 лет. Как вы наверное догадались это тоже был полный п#здец харкдор:

сильно устаревший код, сам клиент на Swing, подгружаемый через технологию Java-апплетов (ныне забытую), серверная сторона на EJB в этой самой вебсфере и взаимодействие через SOAP, поскольку RESTа тогда еще не существовало. В качестве базы конечно же Oracle, без какого-либо ORM, даже практически без прямых выборок - одни сплошные процедуры.

Еще там была криптография, в первую очередь для электронной подписи документов.

Как запихивали отечественный JCP-криптопровайдер в вебсферу, где даже сама JVM была от IBM и отличалась от оригинальной (тогда еще сановской) — отдельная история, как-нибудь расскажу.

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

У банка был куплен SLA (поддержка) максимального уровня от IBM, а я отлично знал английский, поэтому отрывался на бедных американцах по полной.

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

Вот вам пара исторических фото тех лет:

Вот так выглядело мое рабочее место в 2007м году.

Да, я действительно использовал линукс в банке на рабочей машине еще в 2007 м году. Доступ в домен AD, Lotus Notes, вход на другие машины через rdesktop — это вам не убунту в виртуалке :)

RAD, очень старая джава и.. Tcl!

На Tcl + Tk была сделана специальная административная панель для запуска команд, сама сборка — еще на Ant.

Так и не законченный прототип АБС , Java, Swing, Substance LAF. На 2009й выглядело очень круто.

Вообщем накопленного опыта хватило для активного участия уже в следующем большом проекте — переводу на IBM Websphere аж целой АБС, пусть и сильно устаревшей.

Но это тема для отдельной истории, печальной и поучительной.

Вы только вглядитесь в этот п#здец

Портлеты, корпоративные порталы и Liferay

Был период в ИТ, когда стало жутко модно делать корпоративные порталы, причем чем жирнее тем лучше.

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

Видите блоки с управляющими кнопками на картинке выше? — это портлеты, такие мелкие отдельные виджеты, реализующие той или иной функционал.

Поиск и вывод таблиц, голосования, календари, списки, страницы — вот это все и есть портлеты.

Даже целую отдельную спецификацию написали для этих портлетов, не самую маленькую.

На наборах таких портлетов, как предполагалось и будет строиться корпоративный портал.

Формально по спецификации реализовать портал можно было и без полного J2EE сервера приложений (например на сервлет-контейнере вроде Apache Tomcat), но чаще всего его разворачивали как раз на сервере приложений.

Видимо в погоне за двойной жирностью.

Свежая версия LifeRay, уже на Bootstrap.

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

Конечно были и есть подобные решения от всех крупных вендоров, некоторые я даже использовал, но Liferay был все равно упитанее популярнее.

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

На сегодняшний день, сама концепция внутреннего портала является несколько устаревшей, фактически такие порталы заменили корпоративные чаты. В первую очередь это конечно знаменитый Slack.

Для осмысленного применения подобной штуки нужно наверное от 1000 человек в штате и выделенные ресурсы: верстальщики, контент-менеджеры, администраторы.

Это все помимо Java разработчиков, которые собственно и сделают само решение на базе такого портала.

Как вы понимаете, такие выдающиеся ресурсы есть далеко не у всех. А в редких случаях прямой необходимости — подобные проекты разумнее делать на PHP, Node.js или чем-то подобном но современном.

Что вообщем-то и происходит на практике.

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

Если вдруг появится необходимость починить такого динозавра — пишите, помогу.

IBM ESB Integration Designer, 2012й год.

ESB, SOA и говно на лопате

Вообще интеграционная шина, да и сама SOA — тема для отдельной большой статьи, благо такой запредельный уровень скотства, да еще продававаемый инфоцыганскими методами просто нельзя пропускать.

Чтобы дети и внуки помнили к чему приводит неуемная жадность и жажда наживы.

Тут расскажу в кратце про саму идею.

Допустим у вас есть несколько информационных систем: CRM, складской учет, 1С у бухов, сервер отчетов и вебсайт с интернет-магазином.

Все это нужно связать воедино, так чтобы остатки на складе были видны в CRM, актуальные товары на складе — на витрине в интернет-магазине, а проводки — в базе у бухов.

И все это естественно в динамике.

Системы эти конечно не ваши, а покупные, готовых адаптеров для такой интеграции — допустим для примера что нет.

Хотя в реальности на 2023 уже наверное есть вообще все возможное и невозможное в плане адаптеров интеграции.

Вот тут и начинается работа интеграционной шины (ESB):

В специальном редакторе (см. скриншот выше — он как раз из реального проекта) описываете связи между системами, способы загрузки и выгрузки данных и логику преобразования.

Дальше нажимается кнопка сборки и готовое интеграционное решение устанавливается на интеграционную шину, которая работает на основе сервера приложений. И на этом (по идее) все начинает работать само, а вам остается только радоваться и считать прибыли.

Конечно суровая реальность сильно отличалась от рекламных проспектов — все работало медленно, глючило, сообщения терялись, а адаптеры отваливались.

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

От былого блеска не осталось и следов.

Как-то так выглядят микросервисы в рекламных проспектах.

Рост производительности и микросервисы

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

Например в какой-то момент оказалось, что абсолютно все мои проекты сдаются и далее эксплуатируются в виртуальной среде а не на реальном железе:

сервер приложений вместе с джавой и базой данных закатывался в образ докера, дальше в этот «виртуальный, но централизованный» сервер приложений деплоились сами JEE-приложения.

И так стало повсеместно.

В этих условиях массовой виртуализации, заморачиваться с централизованным сервером приложений, со сложным процессом развертывания и обслуживания — стало бесмысленно и неинтересно.

Управление и расшаривание общих ресурсов — ключевое что когда-то предлагал сервер приложений, теперь обеспечивает сам слой виртуализации/контейнеризации:

Docker, Ansible, Kubenetes — имя им уже легион.

Так начался исход в микросервисы.

Вымирание

Интерес к концепции серверов приложений сильно упал в угоду микросервисам и контейнерам.

На фоне этого, Oracle передал бразды управления стандартом JEE в руки Apache Foundation, теперь это называется Jakarta EE.

Сие есть знаковое и показательное событие для отрасли в целом и самого стандарта в частности. Ведь еще совсем недавно топовые компании бились за право добавить нужные правки в спецификации Java EE.

Вообщем будущее и стандарта и реализаций туманно:

Одно из последних нововведений в спецификацию — «Web Profile» направлено на урезание функционала сервера приложений в угоду компактности и скорости холодного старта.

Не очень похоже на бурный рост, правда?

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

Быстрая и яркая история серверов приложений закончилась.

Типичная команда IBM на митапе, грусные лица и хавка из макдака.