Хабрахабр

Подержанное авто в кредит за 1 минуту

Вместо введения

Однажды наш банк-партнер пришел к нам и сказал: “Ребята, мы научились делать скоринг в нашей системе за одну минуту. Как и все интересные истории, эта началась достаточно давно и неожиданно. С нас – решение и кредит, с вас – машины”. Как насчет того, чтобы объединить наши усилия и интегрировать проекты? Мы имели все шансы стать первыми чуть ли не в мире, кто может дать кредит онлайн на подержанное авто за одну минуту (ОДНУ МИНУТУ, КАРЛ)! Сказать, что мы воодушевились, – ничего не сказать! Ниже я расскажу, что из этого получилось, но для начала расскажу вам, кто такие, собственно, МЫ.

Каждый день наши продукты помогают шести миллионам казахстанцев покупать и продавать машины, квартиры, детские кроватки и тысячи других вещей. Мы — “Колёса | Крыша | Маркет” являемся крупнейшей IT-компанией, основанной в Казахстане. Kolesa.kz – самый большой авторесурс и приложение, уже не первый год занимает 1-е место в мобильном рейтинге Казахстана.

Что из себя представляет проект “Автокредит”?

На данный момент база подержанных авто составляет 103 400 автомобилей, более 60% из них доступны в кредит!

Как это выглядит в картинках

1. Выбираем машину которую хотим взять в кредит

Поисковая выдача машин доступных в кредит Рисунок 1.

2. На странице объявления видим форму для подачи заявки на кредит

Экран страницы объявления Рисунок 2.

3. Выбираем период и первоначальный взнос и нажимаем получить одобрение

Кредитный калькулятор для объявления
Рисунок 3.

4. Попадаем на форму, где нам нужно ввести свои контактные данные

Форма инициализации заявки на кредит
Рисунок 4.

Сюда вводим ваш номер мобильного телефона Имя и ИИН (в России это был бы ИНН)

5. Далее вам необходимо ввести код СМС который придёт на указанный вами номер

Форма подтверждения номера телефона путём ввода смс
Рисунок 5.

6. После этого начинается сам процесс скоринга, который длится не более 1 минуты

Экран процесса скоринга заявки Рисунок 6.

7. Есть несколько вариантов результата скоринга:

  1. Вам одобряют кредит
  2. Вам отказывают в получении кредита
  3. Вам предлагают альтернативные условия
  4. У вас запрашивают дополнительную информацию, после предоставления которой вы получаете один из предыдущих вариантов (а, б, в)

Пример экрана одобрения Автокредита
Рисунок 7.

Удобно, не правда ли? После того как человек получает одобрение своей заявки, ему в течение 10 минут перезванивает менеджер из банка и информирует человека о том, какие действия ему нужно произвести далее, для того чтобы оформить кредит. Давайте посмотрим как это всё было реализовано.

Ты помнишь как всё начиналось…

Если раньше у нас в качестве кредитной формы была просто форма обратной связи, то наша новая задумка была чем-то совершенно новым и непонятным. Всё было впервые и вновь! аналогов у нас не было, нам предстояло очень увлекательное занятие — планировать, проектировать, распределять и реализовывать. Т.к. Для начала мы разбили весь процесс нашей совместной интеграции на 2 блока, которые выполнялись параллельно, а именно:

  • Инфраструктурная интеграция
  • Программная интеграция

    На том и порешали. Изначально мы договорились с банком партнёром, что он(банк-партнёр) предоставит нам некое API, в которое мы будет слать некие данные и получать некоторые ответы. В плане программной интеграции же вырисовывалась достаточно простая схема, мы шлём данные в банк, банк их прокручивает в своей системе, и возвращает нам, и всё это за гарантированные 60 секунд. Мы стали ждать документацию по API от банка, свели между собой наших и их сетевых инженеров! На случай таймаута (куда ж без этого) договорились выводить аварийную анкету, в которой мы добираем данные которые могут дополнительно понадобиться банку.

Сети

У нас с банком-партнёром было на двоих: 2 рядом стоящих циски в одном ДЦ, кабель соединяющий циски, ВПН-туннель, сертификаты безопасности и приблуды для работы с ними всех цветов и размеров… План был следующий, Мы прокидываем шифрованный ВПН канал между нашими серверами, и строим прямую интеграцию между нашими сервисами. В то время пока разработчики выбирали инструментарий для реализации, проектировали свою систему и ждали документацию по системе партнёра, в отделе инфраструктуры работа уже во всю кипела! Схематично это можно изобразить так:

Поговорим про код

Итак, получив документ, описывающий сервис партнёра готовый к интеграции, мы узнали, что в отличие от нас банк работает только с запросами SOAP, и не про какие RESTful сервисы слышать не хочет. Ниже мы расскажем о том, как и что устроено со стороны нашего сервиса. Следовательно, нам нужно было научить наш сервис парсить SOAP запросы и конвертировать наши ответы обратно в SOAP. А так как в наших сервисах мы используем SOAP чуть реже чем никогда, нам предстояло много чудных открытий о том, как научиться готовить SOAP в нашем новом продукте.

Выбора фреймворка

Решили идти по простому пути. Для начала надо было выбрать хотябы язык реализации, идей было очень много, начиная с C и С# заканчивая golang и erlang. Слава богу, что за окном уже был не 2001, а 2017 год и php-фреймворков присутствует такое множество, что ими можно удовлетворить потребности даже весьма изощренных инженеров. Систему надо будет поддерживать, и дабы не нарваться на bus-фактор с нехваткой специалистов на рынке, решили сделать упор на наиболее распространенную технологию в нашей компании — PHP. Перебрав целую кучу мы выбрали один из самых простых и в то же время поддерживаемых — Yii 2.

За это решение было:

  • Легко освоить, целая куча литературы;
  • Достаточно легко строить формы и валидаторы;
  • Есть Active Record и вагон готовых либ для работы со всевозможным инструментарием;
  • Он и правда быстрый;
  • На его базе просто строится API, удобно писать консольные команды.

Против было:

  • Фреймворк построен на статических методах — это весьма неудобно, в том числе при написании тестов
  • Было не совсем понятно, какой доп инструментарий нам понадобится в ближайшее время после запуска, и, как следствие, был риск не обнаружить необходимых библиотек…

Выбор хранилищ

Было несколько вариантов, MySQL, mongoDB, postgreSQL… С одной стороны, заявка это документ, наверняка её структура может меняться, время от времени дополняясь новыми полями и избавляясь от неактуальных. Фреймворк выбрали, теперь настало время выбрать хранилище для заявок. Взвесив все “за” и “против”, мы решили усидеть на 2х стульях и к запуску использовать MySQL, а после запуска мигрировать на связку mongoDB + ElasticSearch. С другой стороны, использование нереляционных БД будет накладывать свои ограничения. К моменту когда мы начали переход на mongoDB объем данных очень сильно вырос и взял такой темп прироста, что появилась ещё одна необходимость в разделении заявок на условные хранилища. В итоге было поднято 2 реплики MySQL в качестве хранилища и прикручены к приложению с помощью ActiveRecord. В качестве инструмента near-realtime индексации документов в ElasticSearch решили использовать сервис, написанный на Golang — monstache.

Строим инфраструктуру

Инфраструктуру решили сделать следующую: 10 бэкендов с приложением обработчиком заявок, 2 балансировщика, 2 реплики MySQL, 3 шарда elasticsearch, 3 реплики mongoDB и 2 реплики сервиса monstache.

Процесс

Вообще процесс автокредита можно разделить на 2 части:

  1. Для начала, вам необходимо найти подходящую машину, доступную в кредит. Скорее всего вы будете ориентироваться на её состояние и на условия кредитования.
  2. После того, как вы выберите машину, вам нужно получить одобрение кредита, для этого вам понадобится заполнить заявку

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

  1. При поиске машины человек должен иметь возможность ориентироваться, помимо технических параметров, на доступность авто для покупки в кредит и на минимальный размер ежемесячного платежа. Для этого нам необходимо еще в момент подачи объявления знать, доступна ли машина в кредит и каков будет на неё минимальный платёж.
  2. После того, как человек выбрал машину, нам нужно предоставить ему кредитный калькулятор, где он мог бы выбрать размер первоначального взноса и срок кредитования, тем самым подобрав себе наиболее комфортный размер ежемесячного платежа.

Суть его заключалась в следующем: При подаче объявления в микросервис отправляется объект со всеми данными по автомобилю, микросервис, основываясь на правилах, которые для него пишутся отдельно, возвращает минимальный размер ежемесячного платежа для индексации в поиске, а также возвращает минимальный первоначальный взнос и допустимые сроки кредитования, которые идут в основу построения кредитного калькулятора. Для данной цели был разработан специальный микросервис на языке go.

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

В связи с высокой нагрузкой на наш сервис, кредитный калькулятор имеет 2 степени кэширования: 1-ая происходит на бэкенде, куда первоначально идут клиенты за калькулятором, 2-ая в самом микросервисе.

Так что в итоге?

С того момента, на сегодняшнюю дату (04. Мы запустили проект 11 сентября 2017 года. 2018) подано 2,973,868 заявок. 12. Делаем его быстрее проще и стабильнее! Мы находимся в непрерывном процессе улучшения нашего сервиса и упрощения пользовательского пути. 99%. Аптайм проекта за весь период с момента запуска составил 99.

Как итог мы имеем следующие результаты:

  1. Существенно сократили пользовательский путь
  2. Расширили объем доступных для кредитования авто до 60% от всей базы
  3. На сегодняшний день количество заявок выросло более чем в 7 раз!

Вместо заключения

Его основной целью было дать нашим клиентам возможность приобретать легковые авто с пробегом не покидая нашей платформы. За 3 месяца нам удалось построить воистину удивительный и уникальный проект. Всего за 1 минуту пользователь может получить решение по своей заявке, созвониться с продавцом, и в тот же день оформить все необходимые документы.
Судя по количеству заявок за год и 2 месяца можно сделать вывод, что у нас получается делать сервис действительно удобным и востребованным.

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»