Apache Ignite

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 22:00, 29 января 2019.
Apache Ignite
Apache Ignite logo.png
Создатели: GridGain Systems
Разработчики: Apache Software Foundation
Выпущена: 24 March 2015 года; 4 years ago (2015-03-24)
Постоянный выпуск: 2.6.0 / 16 July 2018 года; 14 months ago (2018-07-16)
Состояние разработки: Active
Написана на: Java, C#, C++
Операционная система: Кросс-платформенное
Платформа: IA-32, x86-64, PowerPC, SPARC, Java platform, .NET Framework
Тип ПО: распределенная БД
Лицензия: Apache License 2.0
Веб-сайт ignite.apache.org

Apache Ignite - это распределенная база данных, кэширование и обработка с открытым исходным кодом, предназначенная для хранения и вычисления больших объемов данных в кластере узлов[Источник 1].
Apache Ignite – это высокопроизводительная распределенная платформа для обработки больших массивов данных в оперативной памяти в режиме реального времени, скорость таких операций на порядок быстрее, чем это возможно с традиционными технологиями хранения базы данных на дисковых носителях. Пространство хранения данных организованно соответственно принципам [IMDG_(In-Memory_Data_Grid)|IMDG]. Apache Ignite также поддерживает технологии репликации и шардинга. Возможна поддержка нескольких резервных копий для гарантии отказоустойчивости. Важно, что в независимости от используемой схемы репликации, Apache Ignite гарантирует согласованность данных на всех узлах кластера.
Касательно масштабирования системы, стоит отметить функциональность автоматического определения узлами кластера друг друга. За счет этого осуществляется масштабирование кластера по необходимости, без перезагрузки всей системы.
По данным Apache Ignite обладает производительностью 25000 RPS (Requests Per Second — количество запросов за одну секунду) для 8 узлов.

Как это работает

База данных Apache Ignite использует ОЗУ в качестве уровня хранения и обработки по умолчанию, поэтому он относится к классу вычислительных платформ в памяти. Уровень диска является необязательным, но после его включения будет храниться полный набор данных, тогда как уровень памяти будет кэшировать полный или частичный набор данных в зависимости от его емкости.

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

В дополнение к распределенной основе Apache Ignite поддерживает множество API, включая API-интерфейсы с ключевыми значениями, совместимые с JCache, ANSI-99 SQL с объединениями, транзакции ACID, а также вычисления MapReduce, такие как вычисления.

Кластер Apache Ignite может быть развернут на месте на товарном оборудовании, в облаке (например, Microsoft Azure, AWS, Google Compute Engine) или в контейнерах и средах подготовки, таких как Kubernetes, Docker, Apache Mesos, VMWare[Источник 2].

Кластеризация

Компонент кластеризации Apache Ignite основан на архитектуре общего ничего. Узлы делятся на две основные категории: сервер и клиент. Серверными узлами являются хранилища и вычислительные единицы кластера, которые содержат как данные, так и индексы и обрабатывают входящие запросы вместе с вычислениями. Серверные узлы также известны как узлы данных.

Узлы-клиенты - это точки подключения от приложений и сервисов к распределенной базе данных, представляемой в виде кластера узлов сервера. Клиентские узлы обычно внедряются в код приложения, написанный на Java, C# или C++, который разработал специальные библиотеки.

Кроме того, Apache Ignite предоставляет драйверы ODBC, JDBC и REST в качестве способа работы с базой данных с других языков или инструментов программирования. Драйверы используют клиентские узлы или низкоуровневые сокетные соединения внутри, чтобы взаимодействовать с кластером.

Хранение памяти

Apache Ignite основан на распределенной памяти, ориентированной на архитектуру, которая сочетает в себе производительность и масштаб вычислений в памяти вместе с долговечностью диска и согласованностью в одной системе[Источник 3]. Основное различие между ориентированным на память подходом и традиционным дисковым ориентиром заключается в том, что память рассматривается как полностью функциональное хранилище, а не как уровень кэширования, как это делают большинство баз данных. Например, Apache Ignite может работать в чистом режиме в памяти, и в этом случае его можно рассматривать как базу данных с памятью (IMDB) и встроенную в память память данных (IMDG) в одном.

Архитектура памяти

Традиционная архитектура

Кратко рассмотрим архитектуру традиционной системы. Обычный или традиционный архитектуры приложения использует хранилища данных, которые имеют синхронные операции чтения-записи. Это полезно для согласованности и долговечности данных. Рассмотрим следующую традиционную архитектуру (см. рисунок 1).

Рисунок 1 – Традиционная архитектура


Обработка больших объемов транзакций

Сетка данных в памяти добавляет дополнительный слой в среде, которая использует оперативную память (RAM) сервера для хранения большей части всех данных, необходимых для приложений. В памяти сетка данных находится между серверами приложений и хранилищем данных. Сетка данных в памяти использует кеш и клиент часто получает доступ к данным в активной памяти, а затем получает доступ к постоянному хранилищу при необходимости. Клиент может даже асинхронно отправлять и получать обновления из постоянного хранилища. Архитектура приложения с сеткой данных в памяти показана на рисунке 2.

Рисунок 2 – Архитектура приложения с сеткой данных в памяти

Используя сетку данных в памяти, данные перемещаются ближе к конечным точкам приложения. Такой подход уменьшает время отклика и может уменьшить время транзакций с нескольких секунд до доли секунды. Таким образом, приложение может поддерживать огромное количество одновременных транзакций с терабайтами оперативных данных, обеспечивая более быстрые и надежные транзакции для клиентов. Это также более современная масштабируемая система управления данными, чем традиционная СУБД.

Отказоустойчивое веб-приложение

С сеткой данных в памяти, такой как Apache Ignite, можно обеспечить отказоустойчивость своего веб-приложения и ускорить производительность веб-приложения. Не меняя код, можно разделить состояние сеанса между веб-приложениями через кеши (Рисунок 3).

Рисунок 3 – Отказоустойчивое веб-приложение

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

Обработка событий и анализ в реальном времени

Данные показывают то, что происходит сейчас с вашим бизнесом на заднем плане прямо сейчас. С IoT как непрерывный источник данных, возможность использовать в своих интересах горячие данные выше, чем когда-либо. Традиционная система управления данными не может обрабатывать большие данные достаточно быстро, чтобы уведомить важные события бизнеса по мере их возникновения, таких как обнаружение мошенничества с кредитными картами в Интернете или расчет рисков. Apache Ignite позволяет обрабатывать непрерывные бесконечные потоки данных в масштабируемых и отказоустойчивых системах памяти, а не анализ данных после того, как они попали в базу данных (Рисунок 4).

Рисунок 4 – Комплексное оповещение о событиях и их обработка

Это позволяет обрабатывать данные быстрее и эффективнее. Сетка данных памяти Apache Ignite может управлять огромным количеством поступающих данных и отправлять уведомления в бизнес-приложение, когда изменения происходят с сервером. Непрерывные запросы Apache Ignite позволяет системам быстро получать доступ к значительному количеству бесконечных входящих данных.

Микросервисы в распределенном виде

Микросервисная архитектура имеет некоторые преимущества и обеспечивает уровень модульности, который на практике чрезвычайно трудно достичь с помощью монолитной базы кода. Сетка данных в памяти, такая как Apache Ignite, может предоставить независимые узлы кеша соответствующим микросервисам в одном распределенном кластере и дает несколько преимуществ по сравнению с традиционными подходами (Рисунок 5).

Рисунок 5 – Apache Ignite микросервисная архитектура

Это позволяет максимально использовать ресурсы данных / сетки. Сервисы, работающие на кластере в памяти намного быстрее, чем сервер приложений на диске. Apache Ignite - микросервис, основанная на сервисной сетке, предоставляет платформу для автоматического развертывания любого количества распределенных сервисов в кластере.

BigData ускоритель

Hadoop широко используется для способности экономно хранить и анализировать большие наборы данных и уже давно перешла к тому, чтобы быть достойной технологией. Тем не менее, это пакетное планирование накладных расходов, а дисковое хранилище данных сделало его непригодным для анализа реальных данных в реальном времени в производственной среде. Одним из основных факторов, ограничивающих масштабирование производительности Hadoop и Map / Reduce является тот факт, что Hadoop опирается на файловую систему, которая генерирует много ввода / вывода (I / O). Альтернатива - хранить необходимые распределенные данные в памяти, размещая Map / Reduce в памяти с необходимыми данными, что устранит задержку ввода-вывода файла (Рисунок 6).

Рисунок 6 – Память Map/Reduce

Apache Ignite предлагает набор полезных компонентов, позволяющих выполнять задания Hadoop в памяти и операции с файловой системой. Ускоритель Apache Ignite Hadoop может автоматически развернуть все необходимые исполняемые программы и библиотеки для Map / Reduce во всех JVM, значительно сокращая времени запуска до миллисекунд. Это ускоряет анализ, избегая задержек в доступе хранилища. Кроме того, поскольку механизм выполнения интегрирован с сеткой данных в памяти, то key / value, размещенные в сетке данных, могут быть эффективно считаны в механизм выполнения для минимизирования время доступа.

Кэш как сервис

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

Рисунок 7 – Кэш как сервис

Можно изолировать слой кэширования от приложений, отделив слой кэширования любого приложения (Java, .Net, C ++) по всей организации, которые могут хранить и читать данные из кэша. Используя сетку данных в памяти в качестве службы, нет необходимости создавать и развертывать локальное кэширование и инфраструктуру для каждого приложения. Приложения могут использовать Apache Ignite в качестве кэша или записи за их базу данных или загрузить данные из базы данных в кэш. Это устраняет сложность в управлении сотнями или более отдельных инфраструктур кэширования. Вот некоторые из способов, которыми сетки в памяти, такие как Apache Ignite, послужили важным, архитектурный компонент для преобразования того, как предприятия используют свои данные для ведения бизнеса.

Соответствие требованиям ACID

Данные, хранящиеся в Ignite, являются ACID-совместимыми как в памяти, так и на диске, что делает Ignite сильной последовательной системой: запускать транзакции по всей сети и охватывать несколько серверов.

Согласованность

Apache Ignite - это строго согласованная платформа, которая реализует двухфазный протокол фиксации. Гарантии согласованности выполняются как для уровней памяти, так и для дисков. Транзакции в Apache Ignite совместимы с ACID и могут охватывать несколько узлов и кешей кластера. База данных поддерживает пессимистические и оптимистичные режимы параллелизма, взаимоблокировки и бездействия.

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

Поддержка SQL

Ignite обеспечивает полную поддержку SQL, DDL и DML, что позволяет пользователям взаимодействовать с Ignite с использованием чистого SQL без написания кода. Это означает, что пользователи могут создавать таблицы и индексы, а также вставлять, обновлять и запрашивать данные, используя только SQL. Наличие такой полной поддержки SQL делает Ignite единственной в своем роде распределенную базу данных SQL[Источник 4].

Масштабируемость и долговечность

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

Установка

Следующие инструкции предназначены для установки OpenText Gupta SQLBase на Windows 10.

Ссылки

Источники

  1. The definition of Apache Ignite // Википедия [2018-2018].Дата обновления: 20.05.2018. URL: https://ru.bmstu.wiki/Apache_Cassandra_%26_Apache_Ignite (дата обращения: 28.11.2018)
  2. The cluster of Apache Ignite // Блог [2006-2018]. Дата обновления: 27.03.2017. URL: https://habr.com/company/gridgain/blog/415973/ (дата обращения: 28.11.2018)
  3. Apache Ignite vs Oracle СУБД // Блог [2006-2018]. Дата обновления: 08.01.2017. URL: https://habr.com/post/346262/ (дата обращения: 28.11.2018)
  4. Apache Ignite // Хранилище GitHub [2006-2018]. Дата обновления: 29.09.2018. URL: https://github.com/apache/ignite (дата обращения: 28.11.2018)