Спустя 2 месяца проектирования и прототипирования мы сумели сформировать требования к будущей системе. Итак, она должна
- Быть быстрой. Настолько быстрой, насколько это возможно. Прежде всего скорость принятия решения влияет на все остальные части системы и в конечном счете на имидж компании для клиента.
- Помимо того что система должна быть быстрой, она должна быть достаточно гибкой для изменений. Очень часто в нашей практике мы сталкивались с тем, что самые небольшие изменения на первый взгляд требуют, без шуток, недель работ программистов. Такого лучше избегать еще на старте, при проектировании системы.
- Система должна позволять проводить А/Б тесты на клиентах и собирать статистику. Например, вы хотите проверить как считаются новый набор правил, но не хотите чтобы решение по новому набору правил принималось сразу. Именно это должна позволять делать хорошая RMS система.
- Система должна обладать высокой переносимостью, в том числе между странами. Очень часто особенно в последнее время встает вопрос переносимости решения между странами, который можно свести всего к одному вопросу - как долго и дорого будет развернуть это решение в новой стране? Ведь помимо работы инженеров над инфраструктурой важно еще учитывать, что нужен человек со стороны бизнеса, который разработает новые наборы правил и проверит их работу на новых данных.
- Система не должна содержать вендор-локов. То есть мы не должны зависеть от вендоров при проектировании и реализации системы. В идеале все технологии должны быть с открытым исходным кодом.
- Наша RMS должна обладать средствами аналитики причем сразу с веб-интерфейсом, чтобы профильный сотрудник могу сразу одним взглядом на графики понять что происходит со процессом и в каком месте проблема. И также сформировать отчеты по прошедшим периодами, чтобы в любой момент под рукой иметь все данные необходимые для аналитики.
- И последнее, но не самое последнее по важности - наша будущая RMS должна предоставлять возможности для гибкой настройки кэширования запросов к интеграциям, в том числе и для кредитных бюро.
- Система не должна быть дорогой. Промышленные решения могут стоить десятки миллионов рублей за лицензию и сотни тысяч ежемесячно за поддержку. Для нашего будущего продукта это слишком непомерная величина - ведь с такой стоимостью мы не сможем охватить наибольший сегмент рынка.
- Все промышленные системы обладают очень существенным недостатком - они либо вообще не подстраиваются под потребителя, либо за очень большие деньги. Мы встречали оценки доработок в системах и оценки разнятся - от 600 тысяч до 1,5 миллионов
- RMS должна быть рассчитана на большой поток данных. На некоторых системах мы тестировали пропускную способность и она была плачевной - от 2-5 запросов в минуту до 2 в секунду. То есть одновременно могут проходить процесс оценки только два клиента. Если процесс предполагает длину в 20 и более секунд, то это не позволит масштабироваться.
После завершения процесса сбора требований мы приступили к отрисовке будущей архитектуры. Хотелось с одной стороны сделать максимально гибкий процесс, а с другой не утонуть в многочисленных настройках будущей системы. Стек решили взять привычный для разработчиков в команде - микросервисы на Java и Spring Boot, PostgreSQL для длительного хранения, Elasticsearch для аналитики и быстрых поисковых запросов, BPMN для оркестрации процессов, REST или gRPC для общения модулей друг с другом. По итогам проектирования родилась следующая архитектурная диаграмма: