stringtranslate.com

Apache Ignite

Apache Ignite — это распределенная система управления базами данных для высокопроизводительных вычислений.

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

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

Кластер Apache Ignite может быть развернут локально на стандартном оборудовании, в облаке (например, Microsoft Azure , AWS , Google Compute Engine ) или в контейнеризированных и инициализирующих средах, таких как Kubernetes , Docker , Apache Mesos , VMware . [4] [5]

История

Apache Ignite был разработан компанией GridGain Systems, Inc. и стал открытым исходным кодом в 2014 году. GridGain продолжает оставаться основным разработчиком исходного кода и предлагает как коммерческую версию, так и профессиональные услуги по Apache Ignite.

После того, как проект Ignite был передан в дар как проект с открытым исходным кодом, в октябре 2014 года он был принят в программу Apache Incubator. [6] [7] Проект Ignite вышел из программы инкубатора и стал проектом Apache высшего уровня 18 сентября 2015 года. [7]

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

GridGain был основан в 2010 году Никитой Ивановым и Дмитрием Сетракяном в Плезантоне, Калифорния . В ноябре 2011 года было раскрыто финансирование в размере от 2 до 3 миллионов долларов. [9] К 2013 году компания находилась в Фостер-Сити, Калифорния, когда было раскрыто финансирование в размере 10 миллионов долларов. [10]

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

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

Клиентские узлы являются точками подключения приложений и служб к распределенной базе данных на кластере серверных узлов. Клиентские узлы обычно встроены в код приложения, написанный на Java , C# или C++ , для которого разработаны специальные библиотеки. В дополнение к своей распределенной основе Apache Ignite поддерживает интерфейсы, включая совместимые с JCache API-интерфейсы «ключ-значение», ANSI-99 SQL с объединениями, транзакции ACID , а также вычисления, подобные MapReduce . Ignite предоставляет драйверы ODBC , [12] JDBC [13] и REST в качестве способа работы с базой данных из других языков программирования или инструментов. Драйверы используют либо клиентские узлы, либо низкоуровневые сокетные соединения внутри для связи с кластером.

Разделение и репликация

База данных Ignite организует данные в виде пар ключ-значение в распределенных «кэшах» (понятие кэша используется по историческим причинам, поскольку изначально база данных поддерживала уровень памяти). Как правило, каждый кэш представляет один тип сущности, например сотрудника или организацию.

Каждый кэш разделен на фиксированный набор «разделов», которые равномерно распределены между узлами кластера с использованием алгоритма хеширования рандеву . Всегда есть одна основная и ноль или более резервных копий раздела. Количество копий настраивается с помощью параметра фактора репликации. [14] Если настроен режим полной репликации, то каждый узел кластера будет хранить копию раздела. Разделы автоматически перебалансируются [15], если узел добавляется в кластер или удаляется из него, чтобы добиться равномерного распределения данных и распределить рабочую нагрузку.

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

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

Архитектура памяти в Apache Ignite состоит из двух уровней хранения и называется «durable memory». Внутри она использует подкачку страниц для управления пространством памяти и ссылки на данные, [16] аналогично виртуальной памяти таких систем, как Unix . Однако одно существенное различие между архитектурами permanent и virtual memory заключается в том, что первая всегда хранит весь набор данных с индексами на диске (при условии, что включен уровень диска), в то время как virtual memory использует диск, когда на нем заканчивается RAM, только для целей подкачки.

Первый уровень архитектуры памяти, уровень памяти, хранит данные и индексы в оперативной памяти вне кучи Java в так называемых «регионах вне кучи». Регионы предварительно выделяются и управляются базой данных самостоятельно, что предотвращает использование кучи Java для нужд хранения, в результате чего помогает избежать длительных пауз в сборке мусора. Регионы разделены на страницы фиксированного размера, которые хранят данные, индексы и системные метаданные. [17]

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

Собственная настойчивость

Apache Ignite native persistence — это распределенное и строго согласованное дисковое хранилище, которое всегда содержит надмножество данных и индексов на диске. Уровень памяти [3] будет кэшировать только столько данных, сколько сможет, в зависимости от своей емкости. Например, если есть 1000 записей, а уровень памяти может вместить только 300 из них, то все 1000 будут сохранены на диске и только 300 будут кэшированы в ОЗУ.

Сохранение использует технику опережающей записи в журнал (WAL) для сохранения немедленных изменений данных на диске. [18] В фоновом режиме хранилище запускает «процесс контрольной точки», целью которого является копирование грязных страниц из уровня памяти в файлы разделов. Грязная страница — это страница, которая изменяется в памяти с изменением, записанным в WAL, но не записанным в соответствующий файл раздела. Контрольная точка позволяет удалять устаревшие сегменты WAL с течением времени и сокращает время перезапуска кластера, воспроизводя только ту часть WAL, которая не была применена к файлам разделов. [19]

Сохранение третьей стороны

Собственная персистентность стала доступна, начиная с версии 2.1. [20] До этого Apache Ignite поддерживал только сторонние базы данных в качестве своего дискового уровня.

Apache Ignite можно настроить как уровень в памяти поверх баз данных RDBMS , NoSQL или Hadoop, ускоряя последние. [21] Однако существуют некоторые ограничения по сравнению с собственной персистентностью. Например, SQL-запросы будут выполняться только для данных, находящихся в оперативной памяти, поэтому потребуется заранее загрузить весь набор данных с диска в память.

Пространство подкачки

При использовании чистого хранилища памяти размер данных может превысить размер физической оперативной памяти, что приведет к ошибкам нехватки памяти (OOME). Чтобы избежать этого, идеальным подходом будет включение собственного сохранения Ignite или использование стороннего сохранения. Однако, если вы не хотите использовать собственное или стороннее сохранение, вы можете включить подкачку, и в этом случае данные Ignite в памяти будут перемещены в пространство подкачки, расположенное на диске. Обратите внимание, что Ignite не предоставляет собственную реализацию пространства подкачки. Вместо этого он использует функциональность подкачки, предоставляемую операционной системой (ОС). Когда пространство подкачки включено, Ignites сохраняет данные в отображенных в память файлах (MMF), содержимое которых будет подкачиваться на диск ОС в зависимости от текущего потребления оперативной памяти.

Последовательность

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

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

Распределенный SQL

Доступ к Apache Ignite можно получить с помощью SQL API, предоставляемых через драйверы JDBC и ODBC, а также собственных библиотек, разработанных для языков программирования Java , C# , C++ . Синтаксис языков манипулирования данными и определения данных соответствует спецификации ANSI-99 .

Будучи распределенной базой данных, Apache Ignite поддерживает как распределенные, так и нераспределенные соединения . [23] Когда данные размещены, соединения выполняются на локальных данных узлов кластера, избегая перемещения данных по сети. Нераспределенные соединения могут перемещать наборы данных по сети, чтобы подготовить согласованный набор результатов.

Машинное обучение

Apache Ignite обеспечивает машинное обучение и функциональность вывода, а также предварительную обработку данных и оценку качества модели. [24] Он изначально поддерживает классические алгоритмы обучения, такие как линейная регрессия , деревья решений , случайный лес , градиентное усиление , SVM , K-средние и другие. В дополнение к этому, Apache Ignite имеет глубокую интеграцию с TensorFlow . [25] Эта интеграция позволяет обучать нейронные сети на данных, хранящихся в Apache Ignite, в одноузловой или распределенной манере.

Ключевая идея Apache Ignite Machine Learning toolkit — возможность выполнять распределенное обучение и вывод мгновенно без массивных передач данных. Он основан на подходе MapReduce , устойчив к отказам узлов и перебалансировке данных, позволяет избегать передачи данных и, таким образом, ускоряет предварительную обработку и обучение модели. [26]

Ссылки

  1. ^ ab "Загрузки - Apache Ignite". ignite.apache.org . Получено 2024-04-09 .
  2. ^ "Никита Иванов о платформе вычислений Apache Ignite In-Memory". InfoQ . Получено 11 октября 2017 г.
  3. ^ ab "Apache Ignite Native Persistence, краткий обзор - DZone Big Data". dzone.com . Получено 11 октября 2017 г.
  4. ^ "Развертывание Apache Ignite в Kubernetes на Microsoft Azure — DZone Cloud". dzone.com . Получено 11 октября 2017 г.
  5. ^ "OLTP в реальном времени в памяти и аналитика с Apache Ignite на AWS | Amazon Web Services". Amazon Web Services . 2016-05-14 . Получено 2017-10-11 .
  6. ^ "Никита Иванов о платформе вычислений в памяти Apache Ignite". InfoQ . Получено 2017-11-02 .
  7. ^ ab "Ignite Status - Apache Incubator". incubator.apache.org . Получено 2017-11-02 .
  8. ^ "Apache Ignite Momentum: Основные моменты 2020-2021: Apache Ignite". blogs.apache.org . 14 сентября 2021 г. Получено 13 июня 2022 г.
  9. ^ "Форма D - Уведомление об освобожденном предложении ценных бумаг". Комиссия по ценным бумагам и биржам США. 8 ноября 2011 г. Получено 16 февраля 2022 г.
  10. ^ "Форма D - Уведомление об освобожденном предложении ценных бумаг". Комиссия по ценным бумагам и биржам США. 7 мая 2013 г. Получено 16 февраля 2022 г.
  11. ^ "Клиенты и серверы". apacheignite.readme.io . Получено 2017-10-11 .
  12. ^ "Драйвер ODBC". apacheignite.readme.io . Получено 11 октября 2017 г. .
  13. ^ "Драйвер JDBC". apacheignite.readme.io . Получено 2017-10-11 .
  14. ^ "Основные и резервные копии". apacheignite.readme.io . Получено 11 октября 2017 г. .
  15. ^ "Перебалансировка данных". apacheignite.readme.io . Получено 11 октября 2017 г. .
  16. ^ "Apache Ignite 2.0: переработанная внекучная память, DDL и машинное обучение: Apache Ignite". blogs.apache.org . 5 мая 2017 г. Получено 11 октября 2017 г.
  17. ^ "Архитектура памяти". apacheignite.readme.io . Получено 2017-10-11 .
  18. ^ "Ignite Persistence". apacheignite.readme.io . Получено 11 октября 2017 г. .
  19. ^ "Ignite Persistence". apacheignite.readme.io . Получено 11 октября 2017 г. .
  20. ^ "Apache Ignite 2.1 — скачок от архитектуры In-Memory к архитектуре, ориентированной на память: Apache Ignite". blogs.apache.org . 27 июля 2017 г. Получено 11 октября 2017 г.
  21. ^ "Apache Ignite для кэширования базы данных - DZone Database". dzone.com . Получено 2017-10-11 .
  22. ^ "Распределенные мысли" . Получено 2017-10-11 .
  23. ^ "Apache Ignite 1.7: приветствуем неколлокированные распределенные соединения! - База данных DZone". dzone.com . Получено 11 октября 2017 г.
  24. ^ "Машинное обучение". apacheignite.readme.io . Получено 27.12.2018 .
  25. ^ "TensorFlow: интеграция Apache Ignite". github.com . Получено 27.12.2018 .
  26. ^ "Набор данных на основе разделов". apacheignite.readme.io . Получено 27.12.2018 .