GemStone/S

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 19:16, 17 января 2019.
GemStone/S Object Server
GemStone-S logo and wordmark.png
GemStone/S logo and wordmark
Launchermenus.png
Скриншот работы GemTools Launcher
Разработчики: GemTalk Systems
Выпущена: 1986; 35 years ago (1986)
Постоянный выпуск: 64 Bit 3.3.3 / 12 December 2016 года; 4 years ago (2016-12-12)
Написана на: Smalltalk
Операционная система: AIX, Linux, macOS, Solaris
Платформа: IA-32, x86-64
Тип ПО: База данных объектов, Объектно-ориентированное программирование, Распределенный кеш в памяти и обработка
Лицензия: Собственное коммерческое программное обеспечение
Веб-сайт gemtalksystems.com/products/gss32

GemStone/S - компьютерное программное обеспечение, инфраструктура приложения (framework), которая была впервые доступна для языка программирования Smalltalk в качестве базы данных объектов. Это проприетарное коммерческое программное обеспечение[Источник 1].

История компании

GemStone Systems была основана 1 марта 1982 года под именем Servio Logic с целью создания базы данных на основе модели теории множеств. Ян Хуан, будучи советником главного исполнительного директора компании Sampoerna Holdings, способствовал появлению Servio Logic, наняв для работы следующий персонал:

  • Фрэнк Бутон (Президент) – был соучредителем компании Floating Point Systems Inc;
  • Д-р Майкл Малдер (Вице-президент по машиностроению) – был менеджером группы по продвинутому дизайну процессоров Sperry Univac и главным архитектором мэйнфрейма Univac 1180;
  • Стив Айви (Вице-президент по операциям) – был старшим менеджером Tektronix;
  • Леонард Юн (Вице-президент, Развитие бизнеса) – был менеджером по развитию баз данных DB2 компании IBM;
  • Д-р Джордж Коупленд (Главный архитектор) – был старшим инженером в расширенной группе разработчиков (Advanced Development Group) в Tektronix;
  • Стив Редфилд (Главный инженер) – был главным инженером микропроцессора Intel 80286;
  • Алан Пурди – был инженером в Tektronix;
  • Боб Бретл – был менеджером по разработке программного обеспечения в Tectronix Signal Processing Systems;
  • Аллен Отис – был инженером в Tektronix;
  • Джон Телфорд – был менеджером по разработке программного обеспечения в Electro Scientific Industries;
  • Монти Уильямс.

Servio Logic была переименована в GemStone Systems Inc., в июне 1995 года. В 1982 году фирма разработала свой первый аппаратный прототип, а в 1986 году выложила свой первый программный продукт (GemStone 1.0). Инженерная группа находится в Бивертоне, штат Орегон. Трое из первоначальных инженеров-соучредителей, Боб Бретл, Аллен Отис и Монти Уильямс (уже на пенсии) были с фирмой с самого начала.

GemStone были в числе первопроходцев по внедрению распределенных вычислений в бизнес-системах. Многие функции информационной системы, теперь связанные с Java EE, были реализованы ранее в GemStone. GemStone и VisualWave были ранними серверными платформами для веб-приложений. (VisualWave и VisualWorks на сегодняшний день принадлежат Cincom.) GemStone сыграл важную роль спонсора в Smalltalk Industry Council в то время, когда IBM поддерживала VisualAge Smalltalk, теперь принадлежащую Instantiations Inc. После крупного перехода, GemStone для Smalltalk продолжает существовать как GemStone/S и различные продукты на C++ и Java для масштабируемых распределенных вычислительных систем с многоуровневой архитектурой. GemStone Systems Inc. теперь разрабатывает и продает GemFire, который отличается сложной обработкой событий (complex event processing, CEP), обработкой потоков событий (event stream processing, ESP), виртуализацией данных и распределенным кэшированием.

6 мая 2010 года SpringSource, подразделение VMware, объявило о заключении окончательного соглашения о приобретении GemStone. 2 мая 2013 года GemTalk Systems приобрела платформу GemStone/S от VMware.

Продукт

Рисунок 1 - Скриншот работы GemTools Launcher

GemStone основывается на языке программирования Smalltalk. Системы GemStone служат в качестве критически важных приложений. Инфраструктуры приложений GemStone по-прежнему представляют определенный интерес для веб-сервисов и сервис-ориентированных архитектур.

Работа в GemStone главным образом ведется через терминал. Тем не менее, существует графический инструмент GemTools Launcher, работа которого продемонстрирована на рисунке 1 .

GemStone предоставляет широкий спектр служб, которые помогут вам собирать объектно-ориентированные информационные системы. GemStone:

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

Недавнее оживление интереса к Smalltalk произошло в результате его использования для генерирования JavaScript для веб-страниц электронной коммерции или в рамках инфраструктур веб-приложений, таких как у Seaside. Системы, основанные на объектных базах данных, не так распространены, как те, которые основаны на ORM или объектно-реляционных отображающих инфраструктурах приложений, таких как TopLink или Hibernate. На рынке инфраструктур приложений JBoss и BEA Weblogic несколько похожи на GemStone.

Многопользовательский сервер объектов

GemStone может поддерживать более 1000 одновременных пользователей, репозитории объектов до 100 гигабайт и постоянную скорость транзакций, более чем 100 транзакций в секунду. Серверные процессы управляют системой, в то время, как пользовательские сеансы поддерживают индивидуальную деятельность пользователя. Процессы репозитория и сервера могут быть распределены между несколькими машинами, а разделяемая память и SMP могут быть задействованы[Источник 2].

Одновременно могут быть активны несколько пользовательских сеансов, и каждый пользователь может открыть несколько сеансов. Гибкая схема именования позволяет раздельные и общие пространства имен для отдельных пользователей. Когерентные группы объектов могут быть распределены посредством репликации. Изменения, внесенные пользователями в объекты, фиксируются в транзакциях с элементами управления параллелизмом и блокировками, обеспечивающими согласование многопользовательских изменений объектов. Безопасность предоставляется на нескольких уровнях: от авторизации до привилегий доступа к объектам.

Программируемая объектно-серверная система

GemStone предоставляет определение данных, манипуляции данными и объекты запросов в одном, вычислительно полном языке - GemStone Smalltalk. Язык GemStone Smalltalk предлагает встроенные типы данных (классы), операторы и структуры управления, сопоставимые по объему и мощности с языками, такими как C, C++ или Pascal, в дополнение к многопользовательским службам параллелизма и управления сервисами репозиториев. Все средства на уровне системы, такие как управление транзакциями, авторизация пользователя и т.д., доступны из GemStone Smalltalk.

Крупномасштабный репозиторий

Языки программирования объектов, такие как Smalltalk, оказались высокоэффективными инструментами разработки. Smalltalk использует наследование и повторное использование кода и обеспечивает гибкость моделирования объектов реального мира с помощью автономных программных модулей. Однако большинство реализаций Smalltalk основаны на памяти. Объекты либо не сохраняются между выполнениями, либо сохраняются примитивным образом, что не поддается конкурентному или совместному использованию. Программисты Smalltalk сохраняют свою работу в «образ», который представляет собой файл, в котором хранится среда разработки на рабочей станции. В образе хранятся классы и экземпляры приложения, скомпилированный код для всех исполняемых методов и значения переменных, определенных в продукте.

GemStone основан на объектной модели Smalltalk - как и однопользовательский образ Smalltalk, он состоит из классов, методов, экземпляров и метаобъектов. Постоянность устанавливается путем присоединения новых объектов к другим постоянным объектам. Все объекты производятся от именованного корня (AllUsers). Объекты, которые были прикреплены и переданы в репозиторий, видны всем другим пользователям. Однако, в отличие от клиентских Smalltalks с образами на основе памяти, к репозиторию GemStone можно получить доступ через кеш-диски, поэтому он не ограничен в размере доступной памяти. Репозиторий GemStone может содержать более миллиарда объектов. Репозитории могут быть распределены между различными машинами и файлами. Поскольку каждый объект в репозитории имеет уникальный идентификатор объекта (известный как объектно-ориентированный указатель), приложения GemStone могут обращаться к любому объекту, не зная его физического местоположения.

Запросы и индексы

GemStone позволяет моделировать информацию в структурах, настолько простых, насколько позволяют данные, и не более сложных, чем требования к данным. Вы можете представлять объекты данных в таблицах, иерархиях, сетях, очередях или в любой другой подходящей структуре. Каждый из этих объектов также может быть индексируемым. Сложные структуры данных могут быть построены путем вложения объектов различных форматов. Мощность и гибкость GemStone Smalltalk позволяют вам выполнять запросы регулярного и ассоциативного доступа к очень большим коллекциям. Поскольку вы можете представлять информацию в формах, которые отражают ее естественную структуру, преобразование пользовательских запросов в исполняемые запросы может быть значительно проще в GemStone. Вам не нужно переводить пользовательские нажатия клавиш или выбор меню в формулы реляционной алгебры, выражения для вычислений и процедурные операторы, прежде чем запрос может быть выполнен.

Управление транзакциями и параллелизмом

Каждый сеанс GemStone определяет и поддерживает согласованную рабочую среду для своей прикладной программы, предоставляя пользователю согласованное представление о хранилище объектов. Пользователь работает в среде, в которой видны только его изменения в объектах. Эти изменения являются конфиденциальными для пользователя, пока транзакция не будет зафиксирована. Эффекты обновлений в хранилище объектов другими пользователями сводятся к минимуму или невидимы во время транзакции. Затем GemStone проверяет согласованность с изменениями других пользователей перед совершением транзакции.

GemStone предоставляет два подхода к управлению конкурирующими транзакциями:

  • Используя оптимистический (optimistic) подход, вы читаете и записываете объекты, как если бы вы были единственным пользователем, позволяя GemStone управлять конфликтами с другими сеансами только при попытке зафиксировать транзакцию. Этот подход легко реализовать в приложении, но вы рискуете отказаться от проделанной вами работы, если GemStone обнаружит конфликты и не позволит вам совершить транзакцию. Когда GemStone ищет конфликты только во время их фиксации, ваши шансы на конфликт с другими пользователями возрастают как со временем между вашими коммитами, так и с количеством объектов, которые читаются и пишутся.
  • Используя пессимистический (pessimistic) подход, вы предотвращаете конфликты как можно раньше, явно запрашивая блокировки на объектах, прежде чем изменять их. Когда объект заблокирован, другие пользователи не могут заблокировать этот объект или зафиксировать любые изменения, которые они внесли в объект. Когда вы сталкиваетесь с объектом, заблокированным другим пользователем, вы можете подождать или немедленно прервать транзакцию, вместо того, чтобы тратить время на выполнение работы, которая не может быть зафиксирована. Если в вашем приложении много конкуренции за совместную информацию или ваше приложение не может допустить даже случайную невозможность фиксации, использование блокировок может быть вашим лучшим выбором.

GemStone предназначен для предотвращения конфликтов, когда два пользователя изменяют один и тот же объект одновременно. Однако некоторые параллельные операции, которые изменяют объект, но согласованным образом, должны быть разрешены для обработки. Например, это может не вызывать беспокойства, если два пользователя одновременно добавили объекты в один и тот же Bag [1] в конкретном приложении.

Для таких случаев GemStone предоставляет классы с ограниченным конфликтом (Rc, reduced-conflict), которые можно использовать вместо обычных классов в тех приложениях, которые в противном случае могут столкнуться с слишком большим количеством ненужных конфликтов:

  • RcCounter может быть использован вместо обычного числа для отслеживания количеств, когда не важно, что вы сразу знаете результаты.
  • RcIdentityBag предоставляет те же функциональные возможности, что и IdentityBag, за исключением того, что не возникает конфликта, если несколько пользователей читают объекты в сумке или добавляют объекты в сумку одновременно.
  • RcQueue предоставляет очередь, в которой не возникает конфликтов, когда другие пользователи читают объекты в очереди или одновременно добавляют объекты в очередь.
  • RcKeyValueDictionary обеспечивает те же функциональные возможности, что и KeyValueDictionary, за исключением того, что не возникает никакого конфликта, когда пользователи читают значения в словаре или добавляют ключи и значения в словарь одновременно.

Соединения с внешними источниками данных

Хотя все методы GemStone написаны на Smalltalk (за исключением нескольких примитивов), вам часто может потребоваться обратиться к другой логике, написанной на C. GemStone предоставляет способ присоединения внешнего кода, называемого userActions, к сеансу GemStone. С помощью userActions вы можете получить доступ или генерировать внешнюю информацию и передавать ее в GemStone в виде объектов, которые затем могут быть зафиксированы и предоставлены другим пользователям. GemBuilder для C используется для написания пользовательских действий на C и добавления их в GemStone Smalltalk в соответствии с правилами, описанными в руководстве GemBuilder для C (GemBuilder for C). Описание класса System в справочнике по ядру GemStone (GemStone Kernel Reference) описывает сообщения, которые вы можете отправить для вызова этих userActions.

GemStone использует этот механизм для создания своего продукта GemConnect, который обеспечивает доступ к информации реляционной базы данных из объектов GemStone. GemConnect также обеспечивает автоматическое отслеживание изменений объекта для синхронизации реляционной базы данных и поддерживает генерацию SQL для обновления реляционной базы данных с изменениями. GemConnect полностью инкапсулирован и поддерживается на объектном сервере GemStone. Обратитесь к руководству по программированию GemConnect (GemConnect Programming Guide) для получения дополнительной информации о GemConnect и его возможностях.

Безопасность объектов и управление учетными записями

По сравнению с однопользовательской системой Smalltalk, GemStone требует значительно больше механизмов безопасности и контроля. Как инструмент для реализации сервера, многопользовательский Smalltalk должен обрабатывать запросы от многих пользователей, работающих с различными приложениями, каждое из которых может требовать различной доступности объектов. Аутентификация и авторизация являются краеугольными камнями безопасности GemStone Smalltalk.

Сервер должен надежно идентифицировать людей, пытающихся использовать системный ресурс. Этот процесс идентификации называется аутентификацией. Для аутентификации требуется действительный идентификатор пользователя и пароль. Предотвращение несанкционированного доступа пользователей в систему путем запроса имен пользователей и паролей, как правило, эффективно против случайного вторжения. GemStone Smalltalk поддерживает собственный протокол аутентификации, а также схему Kerberos.

Следующий тип безопасности, известный как авторизация, существует в GemStone и контролирует доступ к отдельным объектам. Применение авторизации реализовано на самом низком уровне доступа к базовым объектам, чтобы пользователи не могли обойти проверку авторизации. Ни один объект не может быть доступен с любого языка без соответствующей авторизации. GemStone предоставляет ряд классов для определения и управления политиками авторизации объектов.

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

В GemStone Smalltalk пользователь представлен экземпляром класса UserProfile. UserProfile содержит следующую информацию о пользователе:

  • уникальный идентификатор пользователя;
  • пароль (зашифрованный);
  • информация об авторизации по умолчанию;
  • привилегии;
  • членство в группах.

Только пользователи, у которых есть UserProfile, могут войти в систему. Для получения дополнительной информации о UserProfile смотрите руководство по системному администрированию GemStone (GemStone System Administration Guide).

Сервисы для управления репозиторием GemStone

Объекты GemStone часто являются корпоративными ресурсами. Они должны быть общими для всех пользователей и приложений, чтобы они могли выполнять роль хранилищ важной бизнес-информации и логики. Их роль выходит за рамки отдельных приложений, что требует постоянства и доступности для всех частей системы. GemStone способен управлять большим количеством объектов, совместно используемых сотнями пользователей, запускать методы, которые обращаются к миллионам объектов, и обрабатывать запросы к большим коллекциям объектов с помощью индексов и оптимизации запросов. Он может поддерживать крупномасштабные развертывания на нескольких машинах в различных сетевых конфигурациях. Все эти функции требуют широкого спектра услуг для управления хранилищем, системными процессами и пользовательскими сеансами.

GemStone предоставляет сервисы, которые могут:

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

Это руководство содержит информацию о программных методах, которые можно использовать для оптимизации среды GemStone для системного администрирования. Фактические процессы системного администрирования и управления обсуждаются в руководстве по системному администрированию GemStone (GemStone System Administration Guide).

Установка

Преимущества

  • Очень быстрая разработка, обновление и развертывание приложений
  • Никаких шагов компиляции / ссылок, необходимых для изменения поведения приложения.
  • Возможность хранения очень больших (миллиардов объектов) и сложных графиков объектов.
  • Нет объекта для реляционного (O / R) слоя отображения для поддержки.

Примечания

  1. тип, представляющий структуру данных "сумка"

Источники

  1. Official website // URL: https://gemtalksystems.com/products/gss32 (дата обращения: 17.01.2018)
  2. Documentation // URL: http://www.laputan.org/pub/sag/gem.PDF (дата обращения: 17.01.2018)