Когда-то уже упоминал технологию AnyScreen. За последние 2-3 года произошел серьезный прогресс в развитиии, она набирает постепенно популярность в мире клариона. Проведенное недавно тестирование показало стабильность работы, поэтому было принято решение взять ее в арсенал средств для разработки учетных систем. Модуль "ФинСофт КупецЪ (Удаленный доступ)" использует данную технологию для доступа к базе данных и бизнес-логике Купца, будет постепенно наращивать функционал. В этой теме я опишу технологию в целом, как она представляется на данный момент времени.
AnyScreen является набором библиотек и утилит, написанных на кларионе. По своей архитектуре занимает, условно говоря, место между традиционными терминальными и веб серверами. Одна из утилит по сути является веб сервером. При получении запроса на подключение от веб броуза, запускается в специальном режиме экземпляр обычного приложения, написанного и скомпилированного на кларионе. Приложение работает в скрытом режиме, а содержимое его окон транслируется в веб броуз. Внутри приложения можно определить, что оно работает в режиме AnyScreen. В рантайм библиотеке clarion содержится набор функций для поддержки режима. Часть из них задействуются автоматически путем переключения адресов стандартных функций, часть можно использовать самостоятельно в коде приложения. Одно и то же приложение может работать как в обычном режиме, так и в режиме AnyScreen. Обмен с веб броузом происходит в формате xml, битмап, как в обычных терминальных серверах, не передается. Окно в кларионе это структура, содержащая контролы. Их свойства можно читать и устанавливать программно. Когда открывается окно, в веб броуз передаются все установленные свойства, в дальнейшем только изменения. Поэтому трафик получается небольшим. На стороне веб броуза работает приложение на javascript, использующее react library. Из получаемых xml пакетов выполняется прорисовка контролов и последующая работа с ними. Надо еще добавить, что перемещения мышки или набор в полях ввода не передаются на сервер, передача срабатывает на события select/accepted (выбор или подтверждение) контролов. Если по мере ввода информация не требует проверки, то передачу содержимого формы можно сделать при нажатии кнопки подтверждения, как в обычных веб приложениях.
В качестве клиента, кроме веб броуза, может использоваться нативный windows32 клиент. Если нужен доступ, например, к оборудованию на удаленном рабочем месте, то при работе через веб броуз устанавливается утилита AnyService, через которую можно запускать определенные приложения на удаленном компьютере. При работе через windows32 клиента AnyService не требуется.
Если сравнивать с традиционными терминальными серверами, то получается такая картинка.
Требования к серверу и интернет каналу существенно меньше. На сервере не создается терминальный сеанс, а просто запускаются экземпляры приложения. Функционал приложений обычно размещается в dll, сам исполняемый exe файл небольшой. Конечно, экземпляры приложения работают раздельно и используют свой менеджер памяти. Например, мы открываем окно, приложение забирает у операционной системы условно 1мб памяти. Закрываем окно, память операционной системе не возвращается, а используется приложением для своих нужд в дальнейшем. Как только памяти не хватает, то забирается очередная порция памяти. Поэтому, хотя мы и экономим на отсутствии терминального сеанса, по памяти существует ограничение на одном сервере. Веб сервера в этом плане потребляют меньше, так как работают в режиме запросов. Разумеется, все это базовые значения, многое зависит от самого прикладного приложения. По процессору нагрузка не так критична, так как приложения скомпилированы в машинный код.
Есть некоторые конкретные цифры. Один коллега, который перевел на технологию AnyScreen реальное приложение, использует для него виртуальный хостинг у провайдера с достаточно скромной конфигурацией (стоимость в районе 1300 руб в месяц). Создавал для проверки 50 одновременно работающих пользователей, система нагрузку выдержала. Если поднимать на хостинге традиционный терминальный доступ, например, tsplus (который также позволяет работать из веб броуза), то надо арендовать физический сервер, что в несколько раз дороже. В AnyScreen предусмотрена возможность запуска на одном физическом сервере до 200 пользователей. Рекомендуют 150. Разумеется, это зависит от железа, писали, что при достаточно мощном оборудовании тестировали 300 пользователей. Ели нужно больше, то в настройке AnyScreen можно подключать дополнительные сервера, то есть создавать ферму с автоматической балансировкой нагрузки. Разработчики AnyScreen создавали его для нужд своего бизнеса в реальном секторе. По информации от них, крупный клиент использует 600 одновременных подключений к ферме из нескольких серверов.
AnyScreen рассматривается в качестве основы для развертывания Saas. В комплекте утилит можно настраивать списки серверов, приложений, контрагентов и их сотрудников. Имеется тарификация, анализ нагрузки на сервера в виде графиков, рекомендации по модернизации серверов и подключению новых. Не знаю, насколько это эффективно работает, но видно, что ребята серьезно заходят.
Главные преимущество и смысл использования AnyScreen является сохранение технологии разработки и имеющихся наработок. Бизнес логика может быть использована как есть, косметическим изменениям подвергаются оконные диалоги. То есть, модуль "ФинСофт:Купец (Удаленный доступ)" это отдельное приложение, в которое по мере необходимости копипастится какой-то функционал из основной системы и адаптируется. При этом можно создавать работающие веб приложения с такой же легкостью, как настольные, не погружаясь на уровень вебовских языков. Мы имеем систему разработки со строгой типизацией данных, разделением приложения на области данных и кода, модульностью и областями видимости данных и процедур, дополненные хорошей реализацией ООП. Все это строго контролируется на этапе компиляции, что позволяет автоматически локализовывать ошибки. Добавим сюда расширяемую систему метаданных с многократной автоматической регенерацией простого в понимании кода, возможность взаимодействия объектов метаданных между собой. Тот, кто выживал в больших проектах, понимает, насколько это все важно.
Очень важен еще вопрос безопасности. Когда мы делаем настольные приложения, то действует принцип сделал и забыл. В вебе это не так, там постоянно все обновляется и изменяется. Взломать систему на AnyScreen достаточно проблематично из-за ее архитектуры.
Вместе с тем, AnyScreen имеет ряд ограничений, которые надо учитывать при разработке приложений. Это, например, отказ от размещения на тулбаре элементов управления, общих для всех окон, отказ от использования плавающих тулбоксов, некоторые ограниченния использование фоновых процедур, отсутствие поддержки механизма drag/drop. Наверно, что-то со временем доделают, но пользоваться надо тем, что есть сейчас.
Для работы AnyScreen требуется рантайм clarion 11. Проект "ФинСофт:КупецЪ" работает на рантайме clarion 6, одной из причин является поддержка старого оборудования и старых версий операционной системы. Соответсвенно, классический интерфейс Windows NT. Если мы работаем через веб броуз, то такая потребность отпадает, так как на старых компьютерах и ОС современные веб броузы не живут. Поэтому было решено заодно провести редизайн интерфейса, чтобы он выглядел современно (другой шрифт, набор иконок, некоторые контролы с альтернативным функционалом). Поэтому в дальнейшем сборка ФинСофт:Фреймворк останется, как сейчас, для основной разработки на райтайме 6, а сборка фреймворка для рантайма 11 будет постепенно дорабатываться с учетом редизайна и ограничений AnyScreen. Это заключается в подключении дополнительных контрол шаблонов и визардов, а так же d косметической правке входящих в состав фреймворка стандартных диалогов.
Еще надо отметить пару нюансов по сравнению с обычными терминальными серверами. В случае с AnyScreen мы не можем оставить сеанс, запущенный на сервере, а затем подключиться из того-же или другого компьютера и продолжить работу. В случае с AnyScreen выполняется последовательность действий - что-то ввели в веб броузе, отправили на сервер, там это отработало, что-то вернуло, отобразили в броузе. Обычные терминальные сервера транслируют битмап с заданной дискретностью, независимо от того, что делают приложения. Поэтому при работе с AnyScreen будет заметна некоторая задержка в отзыве интерфейса. Примерно, как в традиционных веб серверах.
Дальше приведу несколько скриншотов.
Окно авторизации в PWA (progressive web application) при подключении к серверу.
Окно авторизации в прикладном приложении.
Так выглядит интерфейс в веб броузе (pwa).
В основном проекте "ФинСофт:КупецЪ" мы видим подключение из веб броуза.
Обычные пользователи и те, кто подключился через систему AnyScreen работают совместно. На следующем скриншоте сообщение о блокировке на редактирование записи о складе, открытой в веб броузе.
Так выглядит интерфейс в нативном windows32 клиенте.