Русские Блоги
Адаптивная коммуникационная среда ACE (ADAPTIVE Communication Environment)
ACE ADAPTIVE Communication Environment (ADAPTIVE Communication Environment) — это свободно используемая объектно-ориентированная (OO) инфраструктура с открытым исходным кодом (Framework), в которой реализованы многие основные режимы для программного обеспечения параллельной связи. ACE предоставляет богатый набор повторно используемых C ++ Wrapper Facade (внешний вид пакета) и компонентов инфраструктуры, которые могут выполнять общие задачи программного обеспечения связи на нескольких платформах, включая: демультиплексирование событий и отправку обработчика событий, обработку сигналов и обслуживание. Инициализация, межпроцессное взаимодействие, управление общей памятью, маршрутизация сообщений, динамическая (пере) конфигурация распределенных сервисов, параллельное выполнение и синхронизация и т. Д.
Целевые пользователи ACE — разработчики высокопроизводительных коммуникационных сервисов и приложений в реальном времени. Это упрощает разработку сетевых приложений и сервисов объектно-ориентированного программирования, которые используют межпроцессное взаимодействие, мультиплексирование событий, явное динамическое связывание и параллелизм. Кроме того, посредством динамической связи между службами и приложениями во время выполнения, ACE также автоматизирует настройку и реконфигурацию системы.
ACE постоянно совершенствуется. Riverace (http://www.riverace.com) использует бизнес-модель с открытым исходным кодом для обеспечения коммерческой поддержки ACE. Кроме того, многие члены команды разработчиков ACE в настоящее время разрабатывают The ACE ORB (TAO, http://www.cs.wustl.edu/
Во-вторых, преимущества использования ACE
Преимущества использования ACE:
. Улучшенная переносимость: с помощью компонентов ACE легко писать параллельные сетевые приложения на одной платформе ОС, а затем быстро переносить их на различные другие платформы ОС. Более того, поскольку ACE — это бесплатное программное обеспечение с открытым исходным кодом, вам не нужно беспокоиться о привязке к конкретной платформе или компилятору операционной системы.
. Лучшее качество программного обеспечения: при разработке ACE используется множество ключевых моделей, которые могут улучшить качество программного обеспечения. Эти факторы качества включают гибкость коммуникационного программного обеспечения, масштабируемость, возможность повторного использования и модульность.
. Более высокая эффективность и предсказуемость: ACE тщательно разработан для поддержки широкого диапазона требований к качеству обслуживания (QoS) приложений, включая низкую задержку ответа для чувствительных к задержке приложений, высокую производительность для приложений с высокой пропускной способностью и предсказуемость для приложений реального времени.
. Легче переключиться на стандартное расширенное промежуточное ПО: TAO использует повторно используемые компоненты и шаблоны, предоставляемые ACE. Это исходный код разработки CORBA, стандартной реализации, оптимизированный для высокопроизводительных систем реального времени. С этой целью ACE и TAO предназначены для совместной работы и предоставления комплексных решений промежуточного программного обеспечения.
3. Структура и функции ACE
На следующем рисунке показаны ключевые компоненты ACE и их иерархические отношения:
Структура рисунка и компоненты каждого слоя описываются следующим образом.
Четыре, уровень адаптации ОС ACE
Этот уровень находится непосредственно над собственным API ОС, написанным на C. Он обеспечивает легкий уровень адаптации, подобный ОС POSIX, экранирующий другие уровни и компоненты в ACE, а также следующие особенности платформы, связанные с API ОС:
. Параллелизм и синхронизация. Уровень адаптации ACE инкапсулирует API ОС для многопоточности, многопроцессорной обработки и синхронизации.
. Межпроцессное взаимодействие (IPC) и общая память: уровень адаптации ACE инкапсулирует API ОС для локального и удаленного IPC и общей памяти.
. Механизм демультиплексирования событий: уровень адаптации ACE инкапсулирует API ОС для синхронного и асинхронного демультиплексирования событий на основе ввода-вывода, таймеров, сигналов и синхронизации.
. Явное динамическое связывание: уровень адаптации ACE инкапсулирует API ОС для явного динамического связывания. Явное динамическое связывание позволяет настраивать службы приложения во время установки или выполнения.
. Механизм файловой системы: Уровень адаптации ACE инкапсулирует API файловой системы ОС для управления файлами и каталогами.
Переносимость уровня адаптации ОС ACE позволяет ACE работать во многих операционных системах. ACE был перенесен и протестирован на широком спектре платформ ОС, включая Win32 (то есть на платформах Intel и Alpha, с использованием MSVC ++, Borland C ++ Builder и IBM Visual Age WinNT 3.5.x, 4.x, 2000, Win95 / 98 и WinCE), Mac OS X, большинство версий UNIX (например, Solaris 1.x и 2.x на SPARC и Intel, SGI IRIX 5.x и 6.x , DG / UX, HP-UX 9.x, 10.x и 11.x, DEC / Compaq UNIX 3.x и 4.x, AIX 3.x и 4.x, UnixWare, SCO и свободно доступные Реализации UNIX, такие как Debian Linux 2.x, RedHat Linux 5.2, 6.x и 7.x, FreeBSD и NetBSD), операционные системы реального времени (такие как LynxOS, VxWorks, Chorus ClassiX 4.0, QnX Neutrino, RTEMS и PSoS), MVS OpenEdition и CRAY UNICOS.
Из-за абстракции, обеспечиваемой уровнем адаптации ОС ACE, все эти платформы используют одно и то же кодовое дерево. Такая конструкция значительно увеличивает портативность и удобство обслуживания ACE. Кроме того, доступна версия ACE для Java (http://www.cs.wustl.edu/
5. C ++ Wrapper Facade интерфейса ОС.
Можно писать высокопортативные приложения C ++ непосредственно поверх уровня адаптации ОС ACE. Однако большинство разработчиков ACE используют слой C ++ Wrapper Facade, показанный на рисунке выше. Предоставляя типобезопасные интерфейсы C ++, которые инкапсулируют и улучшают локальный параллелизм ОС, обмен данными, управление памятью, демультиплексирование событий, динамическое связывание и API файловой системы, ACE Wrapper Facade упрощает разработку приложений. Приложения могут комбинировать и использовать эти пакеты путем выборочного наследования, агрегирования и / или создания экземпляров следующих компонентов:
. Компоненты параллелизма и синхронизации: ACE абстрагирует собственные многопоточные и многопроцессорные механизмы ОС, такие как мьютексы и семафоры, для создания расширенных абстракций объектно-ориентированного параллелизма, таких как активные объекты и полиморфные фьючерсы. .
. Компоненты IPC и файловой системы: упаковка ACE C ++ инкапсулирует локальные и / или удаленные механизмы IPC, такие как сокеты, TLI, UNIX FIFO и STREAM-каналы, а также именованные каналы Win32. Кроме того, пакет ACE C ++ также инкапсулирует API файловой системы ОС.
. Компонент управления памятью: компонент управления памятью ACE обеспечивает гибкую и расширяемую абстракцию для управления динамическим распределением и освобождением общей памяти между процессами и памятью кучи внутри процесса.
Пакет ACE C ++ предоставляет многие из тех же функций, что и уровень адаптации ОС ACE. Однако эти функции создаются с использованием классов и объектов C ++, а не независимых функций C. Такая ОО-упаковка помогает сократить усилия, необходимые для правильного изучения и использования ACE.
Например, использование C ++ повышает надежность приложения, поскольку упаковка C ++ строго типизирована. Следовательно, компилятор может обнаруживать нарушения системы типов во время компиляции, а не во время выполнения. Напротив, невозможно обнаружить нарушения системы типов API-интерфейсов ОС уровня C 1, таких как ввод-вывод сокетов или файловой системы, до времени выполнения.
ACE использует множество методов для уменьшения или устранения дополнительных накладных расходов на производительность. Например, ACE широко использует встраивание C ++ для устранения дополнительных накладных расходов на вызов методов; такие накладные расходы могут быть вызваны дополнительными уровнями безопасности типов и абстракции, обеспечиваемыми уровнем адаптации ОС и упаковкой C ++. Кроме того, для пакетов с высокими требованиями к производительности, таких как метод send / recv сокета и файловый ввод-вывод, ACE избегает использования виртуальных функций.
ACE также содержит расширенную структуру сетевого программирования, которая интегрирует и расширяет нижний уровень C ++ Wrapper Facade. Платформа поддерживает динамическую конфигурацию параллельных распределенных служб в приложениях. Фреймворк ACE включает следующие компоненты:
. Компоненты демультиплексирования событий: ACE Reactor и Proactor — это расширяемые объектно-ориентированные демультиплексоры. Они назначают процессоры для конкретных приложений для ответа на несколько типов ввода-вывода и времени на основе Устройства, сигналы и синхронизированные события.
. Компоненты инициализации службы: компоненты ACE Acceptor и Connector отделяют задачи активной и пассивной инициализации от задач, связанных с конкретным приложением, которые выполняет служба связи после завершения инициализации.
. Компоненты конфигурации служб: ACE Service Configurator (конфигуратор служб) поддерживает настройку приложений, службы этих приложений могут быть динамически собраны при установке и / или во время выполнения.
. Компоненты многоуровневого потока. Компонент ACE Stream упрощает разработку приложений коммуникационного программного обеспечения, состоящих из многоуровневых служб, таких как стеки протоколов пользовательского уровня.
. Компонент адаптера ORB: через адаптер ORB ACE можно легко интегрировать с однопоточной и многопоточной реализацией CORBA.
Компоненты инфраструктуры ACE облегчают разработку коммуникационного программного обеспечения. Их можно обновлять и расширять без модификации, перекомпиляции, повторного связывания или частого перезапуска запущенных приложений. В ACE эта гибкость достигается за счет объединения следующих элементов: (1) функции языка C ++, такие как шаблоны, наследование и динамическое связывание, (2) шаблоны проектирования, такие как абстрактные фабрики, стратегии и конфигураторы сервисов, и (3) механизмы ОС, такие как явное динамическое связывание и многопоточность.
Семь распределенных сервисов и компонентов
В дополнение к уровню адаптации ОС, C ++ Wrapper Facade и компонентам инфраструктуры, ACE также предоставляет стандартную библиотеку распределенных сервисов, упакованную в автономные компоненты. Хотя эти сервисные компоненты не являются строго частью библиотеки фреймворка ACE, они играют в ACE две роли:
. Разберите «строительные блоки» повторно используемых распределенных приложений: эти сервисные компоненты предоставляют многократно используемые реализации общих задач распределенных приложений, таких как службы имен, маршрутизация событий, регистрация, синхронизация времени и блокировка сети.
. Продемонстрируйте распространенные варианты использования компонентов ACE: эти распределенные службы также демонстрируют, как использовать компоненты ACE, такие как Reactor, Service Configurator, Acceptor и Connector, Active Object и IPC Packaging, для эффективной разработки гибкого, эффективного и надежного коммуникационного программного обеспечения.
8. Расширенные компоненты промежуточного программного обеспечения для распределенных вычислений.
Даже при использовании такой коммуникационной инфраструктуры, как ACE, все еще сложно разработать надежные, масштабируемые и эффективные коммуникационные приложения. В частности, разработчики должны владеть многими сложными операционными системами и концепциями связи, такими как:
. Сетевая адресация и идентификация услуг.
. Представляет преобразование, такое как шифрование, сжатие и обратное преобразование между разнородными конечными системами.
. Создание и синхронизация процессов и потоков.
. Системные вызовы и библиотечные подпрограммы для механизма локального и удаленного межпроцессного взаимодействия (IPC).
За счет использования передового промежуточного программного обеспечения для распределенных вычислений, такого как CORBA, DCOM или Java RMI, можно уменьшить сложность разработки коммуникационных приложений. Усовершенствованное промежуточное ПО для распределенных вычислений находится между клиентом и сервером и может автоматически выполнять многие проблемные и подверженные ошибкам аспекты разработки распределенных приложений, включая:
. Аутентификация, авторизация и безопасность данных.
. Размещение и привязка услуг.
. Регистрация и активация услуги.
. Демультиплексирование и отправка событий.
. Реализуйте фреймы сообщений поверх протоколов связи, ориентированных на потоки байтов, таких как TCP.
. Он включает сетевой порядок байтов и проблему преобразования представления при маршалинге параметров.
Чтобы предоставить разработчикам коммуникационного программного обеспечения эти функции, в ACE связаны следующие расширенные приложения промежуточного уровня:
. ACE ORB (TAO): TAO — это реализация CORBA в реальном времени, построенная с использованием компонентов инфраструктуры и шаблонов, предоставляемых ACE, включая сетевые интерфейсы, ОС, протоколы связи и компоненты промежуточного программного обеспечения CORBA. TAO основан на стандартной эталонной модели OMG CORBA и был усовершенствован с целью преодоления недостатков традиционных ORB для высокопроизводительных приложений реального времени. TAO, как и ACE, также является свободно доступным программным обеспечением с открытым исходным кодом.
. JAWS: JAWS — это высокопроизводительный самонастраивающийся веб-сервер, созданный с использованием компонентов и шаблонов инфраструктуры, предоставленных ACE. JAWS структурирован как «каркас». Общая структура JAWS содержит следующие компоненты и структуры: демультиплексор событий, стратегия параллелизма, стратегия ввода-вывода, конвейер протокола, процессор протокола и виртуальная файловая система кэша. Каждая структура создается как набор совместных объектов, которые реализуются путем объединения и расширения компонентов в ACE. JAWS также является свободно доступным программным обеспечением с открытым исходным кодом.
Источник
hitfounder
Путь программиста
Рассуждаю о культуре программирования
Библиотека ACE (ADAPTIVE Communication Environment) не слишком широко известна особенно среди русской аудитории, между тем это довольно интересное решение для разработчиков сетевых приложений на С++. Как известно, сетевое программирование особенно на низком уровне является не простой задачей. Непосредственное использование системного API делает программу непереносимой, кроме того, возникает совершенно ненужная сложность, связанная с изучением тонкостей работы с сокетами на разных платформах. Само по себе использование socket API является лишь частью общей задачи создания сетевого приложения, в которую также входит управление потоками (процессами), синхронизация, сериализация данных и т.д. Идеальным помощником для С++ программистов любого профиля является популярная кроссплатформенная библиотека boost, однако в области сетевого программирования ACE может составить ей очень серьезную конкуренцию.
ACE (ADAPTIVE Communication Environment) — это кросс-платформенное программное обеспечение промежуточного уровня (middleware), которое позволяет упростить решение конкретной прикладной задачи путем предоставления разработчикам готового и верифицированного кода. Разработкой библиотеки занимается исследовательская группа Distributed Object Computing (DOC) из Vanderbilt University, Washington University в St. Louis и University of California в Irvin.
Изначально проект ACE вырос из докторской диссертации Дугласа Шмидта. Первая версия этой библиотеки появилась в 1992 году. К концу 90-х годов библиотека приобрела тот вид, который она имеет сегодня. На сегодня ACE поддерживает следующие платформы: все семейство Windows (в том числе и CE), Linux, OS X, Solaris, HP-UX и большинство других Unix-подобных систем, ОС реального времени, — такие как VxWorks, QNX Neutrino, LynxOS, а также такие ОС, как OpenVMS, Cray UNICOS и так далее. Дальнейшая разработка ACE ведется в направлении поддержки новых и обновленных платформ и компиляторов, повышения ее надежности и стабильности, а также оптимизации исходного кода.
Наиболее широкое применение ACE нашла в различных сетевых и телекоммуникационных проектах, которыми занимаются компании Siemens, Ericsson, Motorola, Nortel, Bell, Alcatel и прочие. Также ACE применяется в проектах, связанных с аэрокосмической и оборонной деятельностью компаний Boeing, Lockheed-Martin, Raytheon Systems и других.
Основные особенности ACE:
Объектно-ориентированный дизайн с использованием паттернов
Реализация на С++
Многоуровневая архитектура, содержащая уровень адаптации (OS Adapter Layer), уровень фасадов С++ (C++ wrapper facades), уровень каркасов (frameworks) приложений
Предоставление интерфейсов для управления сетевыми сокетами, потоками, задачами, синхронизацией.
ACE предоставляет строительные блоки в виде готовых классов С++, которые решают любые проблемы, возникающие при создании сетевых приложений:
Проблема обмена данными по сети. ACE_SOCK является базовым классом сокета, он является родительским для классов, объекты которых используются для создания соединений. ACE_SOCK_Connector служит для создания соединения, для этого необходимо вызвать метод connect, передав объект типа ACE_INET_Addr. ACE_SOCK_Acceptor служит для установления пассивного соединения со стороны удаленного хоста, для этого существует метод accept. ACE_SOCK_Stream инкапсулирует примитивы для обмена данными send и recv.
Проблема сериализации/десериализации данных передаваемых по сети. Чтобы передать объект по сети и восстановить его на выходе в первоначальном состоянии необходимо использовать механизм сериализации. В ACE реализован механизм, использующий формат CORBA Common Data Representation (CDR). ACE_OutputCDR служит для создания CDR потока, отправляемого по сети. ACE_InputCDR служит для получения данных из CDR потока поступившего из сети.
Проблема создания однопоточного сетевого приложения, реагирующего на события (reactive server). В этом случае приложение не использует многопоточность, однако способно работать со многими клиентами, создавая иллюзию многозадачности за счет разделения времени. ACE_Handle_Set инкапсулирует набор дескрипторов сокетов, состояние которых можно контролировать. ACE_Handle_Set_Iterator инкапсулирует механизм для перебора дескрипторов в наборе. ACE::select() возвращает дескрипторы из набора, которые требуют обработки событий.
Проблема создания многопроцессного приложения. Отдельные соединения или отдельные запросы могут обрабатываться изолированно и параллельно в отдельных процессах. ACE предоставляет удобные средства для запуска и управления процессами. ACE_Process предоставляет средства для запуска нового процесса (spawn — запуск, аналогично fork или CreateProcess; wait — ожидание процесса; terminate — завершение процесса). При помощи класса ACE_Process_Options можно задать различные опции для запуска процесса. ACE_Process_Manager позволяет создавать группы процессов.
Проблема создания многопоточного приложения. Потоки запускаются внутри приложения и имеют общее адресное пространство. Для порождения потоков и управления ими имеется класс ACE_Thread_Manager, методы этого класса почти идентичны методам ACE_Process_Manager. Для выставления приоритетов существует класс ACE_Sched_Params. Имеется также обертка ACE_TSS реализующая механизм thread-specific storage (TSS), при котором данные, имеющие глобальную видимость, на самом деле являются специфичными для каждого потока.
Проблема синхронизации. ACE_Guard, ACE_Read_Guard, ACE_Write_Guard реализуют идиому Scoped Locking. Имеютcя мьютексы для процессов и потоков с возможностью блокировки по чтению и записи: ACE_Process_Mutex, ACE_Thread_Mutex, ACE_RW_Thread_Mutex, ACE_RW_Process_Mutex. Семафоры: ACE_Thread_Semaphore, ACE_Process_Semaphore. Синхронизация по событиям: ACE_Condition_Thread_Mutex.
Список возможностей поражает, разработчику доступны средства для создания полнофункциональных сетевых приложений. На выходе получаем чистый компактный код с хорошим объектно-ориентированным дизайном, а в качестве бонуса потенциальная кроссплатформенность. Звучит хорошо.
1. Douglas C. Schmidt, Stephen D. Huston, «C++ Network Programming, Volume 1: Mastering Complexity with ACE and Patterns»
2. Douglas C. Schmidt, Stephen D. Huston, «C++ Network Programming, Volume 2: Systematic Reuse with ACE and Frameworks»
Источник