Статьи

Масштабируемая сетка данных с использованием Apache Ignite

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

Что такое таблица данных?

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

Доступ к данным в сетке осуществляется через API (предпочтительно REST и в формате JSON). Данные могут быть сохранены на диск или могут быть сохранены в другой базе данных. Сетка должна быть очень эластичной по своей природе (горизонтально масштабируемой) и должна поддерживать практически любой объем данных. Несколько сервисов могут сохранять данные в формате JSON в этой сетке и отправлять запросы в миллисекундах (аналогично кешу). 

Ниже приведены свойства Data Grid:

  • Доступ к данным из сетки осуществляется с использованием API — на основе REST в формате JSON.
  • Действительно эластичный по своей природе — может быть масштабирован горизонтально без верхних границ. 
  • Долговечность — выдерживает простои и сбои системы.
  • Предлагает ответы с низкой задержкой.

Необязательные (хорошо иметь) свойства:

  • Учитывая важность данных, каждый запрос данных из сетки может быть разрешен            

  • Возможность очистить данные и освободить место для более актуальных данных.
  • Возможность сохранения данных на диск.
  • Возможность горячей загрузки данных из других источников данных, таких как хранилища RDBMS или NoSQL.


Вам также могут понравиться:
Примеры гридов данных, вычислительных гридов, сервисных гридов и выполнение запросов SQL .

Использование сетки данных

В истинном мире архитектуры микросервисов, где каждый сервис имеет свою собственную частную базу данных (база данных на модель сервиса), сложно, если какой-либо из сервисов требуется извлекать данные из нескольких сервисов. Первоочередной задачей может быть обработка ответов от этих служб в различных форматах, таких как JSON, XML или двоичный формат. Некоторые запросы могут быть по HTTP (S) с использованием стандартов REST , некоторые с использованием SOAP, некоторые с использованием RPC и т. Д.

Это не технические проблемы, а довольно громоздкие для реализации в микросервисе для таких сценариев, как: обработка сбоев, таких как исключения безопасности, проверка данных, квитирование, сеть, анализ данных и т. Д. Хотя можно с уверенностью предположить, что это наиболее используемый подход, фактор высокой зависимости вводится. Любое изменение в любой из услуг производителя может изменить структуру ответа, и потребителю может также потребоваться учесть это изменение. Это может быть неэффективным, если потребительские сервисы только запрашивают данные (и не запрашивают какие-либо результаты вычислений) из других сервисов.

Чтобы решить вышеупомянутую проблему, мы представляем подход Data Grid, который предлагает практически любой объем настраиваемого хранилища данных с низкими задержками ответов, которые легко масштабируемы и просты в обслуживании. Мы можем использовать Apache Ignite (именуемый Ignite в будущем) в качестве одного из основных компонентов нашей системы Data Grid, которая предлагает надежную, гибкую и распределенную платформу в памяти. Ignite предлагает множество вариантов кэширования, возможность подключения к хранилищам RDBMS и NoSQL и вычислительные сервисы.

Определения данных

Как правило, для построения Data Grid для вашей инфраструктуры все микросервисы должны публиковать формат данных, которые они записывают в сетку. Например, служба пользователя (служба для управления всеми пользователями системы) должна публиковать всю информацию о пользователях для всех операций загрузки и удаления. Пользовательская служба должна опубликовать определение данных структуры пользовательских данных. Это определение данных должно поддерживать управление версиями, чтобы любая новая служба могла запрашивать определенную / последнюю версию. Все зависимые потребительские сервисы могут запросить определение данных из таблицы данных и начать создание функциональности сервиса. Ниже приведен пример опубликованной структуры пользовательских данных (версия 1). 

https: // <хост> / grid / datadefinition & type = user & version = 1 .


JSON