Модель приложения (Avalanche — application framework for Java)
«Avalanche — application framework for Java» — реализация технологии стирающей различия
между вызовами локального и удаленного кода. Отказоустойчивость, масштабируемость,
модифицируемость, непрерывная доступность идут в комплекте приятными бонусами.
Рассмотренная в этой статье модель приложения родилась на основании собственного опыта реализации и эксплуатации различных интеграционных взаимодействий информационных систем (ИС) и прежде всего была направлена на сокращение использования различных ресурсов (финансовых, трудовых, временных и т.д.) при реализации этих интеграционных решений.
В большинстве предприятий эксплуатируются множество различных систем, автоматизирующих отдельные технологические процессы или работу отдельных структурных подразделений или отделов. В следствии чего возникает потребность организации информационного обмена между этими системами или с информационными системами смежных организаций с целью сокращения эксплуатационных расходов, исключения введения дублируемых данных и рассогласования данных в различных системах (например НСИ), уменьшения влияния человеческого фактора, сокращения временных затрат на обмен информацией.
Потребность интеграции возникает не только в специальном программном обеспечении собственной или заказной разработки, но и в «коробочных» решениях. Стоимость реализации может превосходить ожидаемое сокращение эксплуатационных издержек.
Существующие способы решения вопросов интеграции IT систем:
- Файловый обмен данными
- Обмен сообщениями (является разновидностью файлового обмена)
- Интеграция на уровне модели данных, например, создания специальных объектов базы данных или хранимых процедур
- С использованием RCP (remote call procedure) технологий, например, CORBA, RMI, SOAP, DCOM и т.д.
У всех этих способов реализации интеграционных решений есть одни и те же недостатки: трудоемкость реализации и модификации, низкая повторность использования, необходимость решения вопросов отказоустойчивости, невозможность работы в режиме разноверсионности в процессе установки изменений, трудоемкость эксплуатации и поддержание эксплуатационной документации в актуальном состоянии.
Результатом поиска альтернативы существующим решениям была сформулирована идея преобразования модели MVC (MODEL — VIEW — CONTROLLER) в модель MVFA (MODEL — VIEW — FUNCTION — APPLICATION), разбив CONTROLLER на два программных слоя FUNCTION и APPLICATION между которыми может быть размещена сеть передачи данных (СПД).
Разбиение на функции внутри контролера присутствует в той или иной степени во всех современных IT-системах, особенно, если разработка выполнена с использованием объектно-ориентированных языков программирования. А выделение этих функций в отдельный программный слой решает задачу их повторного использования другими IT-системами.
Выделение в отдельный программный слой объектов «приложение» стандартизирует обращение не только к собственным функциям, но и функциям других систем, что стирает все различия в вызовах «своих» и «чужих» функций.
Для реализации модели MVFA предложена следующая программная модель:
- Функция (Function), любой объект имеющий методы реализации какой либо функциональности ;
- Адаптер (Adapter), декларируемый объект не имеющий реализации. Этот объект обеспечивает связь объектов «приложение» с локальными или удаленными функциями. Для доступа к удаленным функциям используется объект «интерфейс»;
- Коннектор (Connector), обеспечивает доступ к локальным функциям удаленных объектов с помощью объектов «публикация»;
- Публикация (Publish), публикует локальную функцию в коннекторе;
- Интерфейс (Interface), обеспечивает обращение адаптеров к удаленным функциям;
- Приложение (Application), выполняет преобразование данных между представлением и функцией/функциями, также может выступать в роли «функции» для других объектов «приложения».
Пара «интерфейс» — «коннектор» образуют канал передачи данных по какому либо протоколу между различными системами или различными узлами одной системы. Реализованный канал должен иметь способность пропускать требуемые объемы данных.
Существуют специализированные реализации «интерфейсов», не имеющих парных элементов «коннектор», например — интерфейс высокой доступности, который позволяет создавать отказоустойчивые информационные системы. Основное назначение интерфейса высокой доступности — это перенаправление нагрузки на дублирующие узлы при планов или вне плановом отключении одного из узлов системы.
Рассмотренная модель MVFA реализована в программном продукте «Avalanche — application framework for Java», который относится к категории middle ware и предназначен для создания программных кластеров или отказоустойчивых информационных систем высокой доступности.
Конечно, как и у любой технологии, «Avalanche — application framework for Java» имеет некоторые ограничения:
- Любые объекты (типы), декларируемые в адаптерах (входные и возвращаемые параметры), могут быть переданы по сети, а следовательно эти объекты должны реализовывать интерфейс java.lang.Serializable. Локальные объекты вызываются напрямую, без использования операций чтения и записи в поток.
- Не все объекты могут быть переданы по сети. Например, объекты состояние или работоспособность которых зависят от конфигурации узла системы, где они были созданы. К таким объектам можно отнести объекты, реализующие спецификацию javax.sql.DataSource
- Дублирующие узлы системы должны размещаться на разных аппаратных средствах.
- Дублирующие узлы системы не должны выключаться (обслуживаться) одновременно.
Пример простого приложения описан в статье — Первое приложение (Avalanche — application framework for Java)
Комментарии (16)
lair
26.11.2019 15:37Раз вы решили говорить о проектировании приложения (а не только и исключительно интеграции), то у меня опять-таки есть стартовый вопрос:
Результатом поиска альтернативы существующим решениям была сформулирована идея преобразования модели MVC (MODEL — VIEW — CONTROLLER) в модель MVFA (MODEL — VIEW — FUNCTION — APPLICATION), разбив CONTROLLER на два программных слоя FUNCTION и APPLICATION между которыми может быть размещена сеть передачи данных (СПД).
Пожалуйста, дайте определения используемым вами в вашей модели понятиям Model, View, Function, Application и покажите типичные направления потоков данных и последовательностей вызова.
(ну, знаете, как Фаулер делает в описании MVC… который, кстати, не является моделью построения приложений)
vl65 Автор
29.11.2019 10:12Определения VIEW и MODEL идентичны определениям MVC
FUNCTION — выдает команды манипулирования моделью данных и получает результат этого манипулирования или изменяет состояние элементов системы.
APPLICATION — интерпретирует действия пользователя или по изменениям состояния элементов системы и оповещает функции о необходимости изменения модели или состояния системы.
Элемент APPLICATION может манипулировать множеством элементов FUNCTION.
Элемент APPLICATION может выступать в роли FUNCTION для других элементов FUNCTION, таким образом можно создавать сложную иерархическую структуры объектов.
lair
29.11.2019 10:18Определения VIEW и MODEL идентичны определениям MVC
Какого MVC? Лучше приведите используемые вами конкретно определения, это будет намного проще, нежели сначала искать "правильное" сторонее определение.
И сразу еще один вопрос: вы упоминаете некое "состояние элементов системы". Что это такое? Почему оно вынесено отдельно, а не является частью одного из ваших понятий M-V-F-A?
lair
Подождите-подождите. Давайте прямо сразу определимся: вы решаете задачу разработки одной системы, или задачу интеграции нескольких различных систем?
vl65 Автор
Сразу обе. Задачи сходны между собой.
lair
И вас не капли не смущает, что в случае интеграции различных систем у вас намного меньше контроля над платформой, на которой разработаны интегрируемые системы, и даже над протоколом интеграции?
Проще говоря, вам могут поставить задачу на интеграцию с готовой системой, которая умеет только json-over-HTTP. Согласитесь, это гигантское различие по сравнению с "я могу написать свою систему на любой удобной мне платформе и соединить любым удобным мне образом"?
vl65 Автор
Так подобные вопросы возникают и сейчас, без этого решения, когда возникает вопрос интеграции между системами. Одни разработчики начинают утверждать, что json "пуп земли", другие "мы тут специально создали хранимую процедуру для третьей системы, пользуйтесь ей". В результате, разработчиков приходиться "мирить" заказчику, выбрав один из предложенных вариантов. И этот выбор не всегда оптимальный.
lair
А это не важно. Важно, что задача интеграции нескольких систем сильно отличаются от задачи написания одной системы, поэтому давайте вы определитесь, о какой задаче вы говорите.
vl65 Автор
Занимаюсь сразу обеими задачами, они одинаковы. Одна задача, является частным случаем другой.
lair
Your words, not mine.
Ну давайте начнем с простого вопроса. Вот надо решить типовую задачу интеграции: есть существующий интернет-магазин, на PHP, он должен отсылать каждый новый заказ в разрабатываемую вами бэк-офис-систему, когда заказ обработан, она должна уведомлять интернет-магазин. Интернет магазин умеет слать уведомления на заданный HTTP-адрес в виде JSON, уведомления от других систем принимает по фиксированному адресу тоже в виде JSON. Схема JSON фиксирована интернет-магазином.
Как ваша модель приложения поможет решить эту задачу, и в чем выигрыш по сравнению с "обычной" реализацией (естественно, под обычной реализацией мы пониманием нормально спроектированную систему, удовлетворяющую DIP)?
vl65 Автор
Ваш пример не удачный, PHP мало что умеет и "предложить" ему что вне его рамок, думаю дело гиблое. Но и в этом случае, вариантов решений много.
Например, можно написать специализированный коннектор (в терминах Avalanche — application framework for Java).
Реализовать класс приложения
Вариантов много
lair
Что значит — неудачный? Это реальный случай из жизни, часто встречающаяся задача в интеграции. Я же не зря спросил, какую задачу вы решаете.
Я и в случае обычного приложения могу написать специализированный интеграционный код. В чем мне польза от вашей модели?
vl65 Автор
"Не удачный" — не видел больших корпоративных систем на PHP. Отдельные небольшие задачи, что когда называлось АРМами — да сколько угодно. Не это не является проблемой, интегрироваться можно и вашей задачей.
Польза, далее реализованная интеграция доступна "везде"
lair
А я и не говорю про корпоративные системы, я говорю про интернет-магазин. Вы про Magento не слышали?
Что значит "везде"? Поясните на примере.