Как мы расширяли систему, построенную под Oracle с помощью горизонтально масштабируемых noSQL-решений Архитектуры, масштабируемость
Занимается программированием уже 30 лет. Много лет разрабатывал системы, использующие реляционные БД. Затем 15 лет работал над созданием центров передачи сообщений в телекоммуникационной области, что потребовало изменить подходы к организации данных для обеспечения быстрой обработки больших потоков сообщений. Последнее время специализируется на разработке горизонтально масштабируемых систем обработки данных, использующих нереляционные БД.
Изначально задача была такова – есть система обработки транзакций (процессинг), нужно было организовать сбор и хранение данных для проверки транзакции на фрод в режиме реального времени, обеспечить расчет и выдачу персонифицированных свойств сервисам для принятия маркетинговых решений опять же в RT. Далее по собранным данным предполагалось построение моделей для машинного обучения и их перепроверки в прошлой перспективе. И все это требовалось сделать так, чтобы не увеличить нагрузку на существующую процессинговую систему, а перенести ее на горизонтально масштабируемую платформу. Также требовалась возможность подключать другие системы, поставляющие другие данные, которые могут дополнить общую картину, и все это без необходимости программирования.
В рамках первого анализа был определен набор элементов хранения (профили, счетчики, уникальные отношения, аккумуляторы), удовлетворяющий функциональным требованиям и позволяющий создать описание сценария разбора входящих данных, их преобразование, обогащение и последующее хранение. И это позволило создать систему, которую можно настраивать под разные источники данных и задавать различные сценарии их обработки без необходимости дополнительного программирования.
Далее был проведен анализ подходящих систем для хранения данных. В результате была выбрана Кассандра. Обновление данных было реализовано идемпотентным образом, что позволило гарантировать консистентность данных очень дешевым способом. Раскладка данных по различным хранилищам и способы их идентификации максимально используют возможности масштабируемости Кассандры, что позволяет выдавать по запросу сервиса довольно большой набор данных, который собран по параллельно исполняемым запросам к многим нодам кластера Кассандры. Это позволяет с миллисекундными задержками выдать, например, досье клиента, списки последних операций, клиентов, с которыми он взаимодействовал, страны, города, где он совершал операции, досье контрагента и связанные с ним списки и счетчики и др. Запрос данных также может быть задан с помощью описания плана запроса, клиенту лишь необходимо указать идентификатор плана запроса и параметры запроса, в результате система вернет единый JSON-документ, содержащий все требуемые сервису данные.