
En lugar de presentar
Como todas las historias interesantes, esta comenzó hace mucho tiempo e inesperadamente. Una vez que nuestro banco asociado se nos acercó y dijo: “Chicos, aprendimos a hacer puntajes en nuestro sistema en un minuto. ¿Qué hay de unir fuerzas e integrar proyectos? Con nosotros, una decisión y un crédito, con usted, automóviles ". Decir que fuimos inspirados, ¡sin decir nada! ¡Tuvimos todas las posibilidades de convertirnos en los primeros casi en el mundo que pueden otorgar un préstamo en línea para un automóvil usado en un minuto (UN MINUTO, CARL)! A continuación, le diré lo que surgió, pero primero le diré quiénes somos, de hecho, NOSOTROS.

Somos "Ruedas | Techo | Market "es la mayor empresa de TI con sede en Kazajstán. Todos los días, nuestros productos ayudan a seis millones de kazajos a comprar y vender automóviles, apartamentos, cunas y miles de otras cosas. Kolesa.kz es el recurso y la aplicación automotriz más grande; ya lleva varios años ocupando el primer lugar en la calificación móvil de Kazajstán.
¿Qué es el proyecto "Préstamo de automóvil"?
Por el momento, la base de autos usados es 103,400 autos, ¡más del 60% de ellos están disponibles a crédito!
Como se ve en las fotos1. Elija el auto que queremos llevar a crédito

Figura 1. Resultados de búsqueda de automóviles disponibles a crédito
Figura 2. Pantalla de la página de anuncios
3. Seleccione el período y el pago inicial y haga clic para obtener la aprobación

Figura 3. Calculadora de crédito para el anuncio.

Figura 4. Formulario de inicialización de una solicitud de préstamo
Aquí ingresamos su número de teléfono móvil Nombre e IIN (en Rusia sería un TIN)
5. Luego, debe ingresar el código de SMS que llegará a su número

Figura 5. Formulario de confirmación de número de teléfono ingresando SMS
6. Después de eso, comienza el proceso de puntuación en sí, que no dura más de 1 minuto
Figura 6. Pantalla para el proceso de puntuación de la aplicación
7. Hay varias opciones para calificar resultados:
- Apruebas un préstamo
- Se le niega un préstamo.
- Se le ofrecen condiciones alternativas.
- Se le solicita información adicional, después de lo cual recibe una de las opciones anteriores (a, b, c)

Figura 7. Ejemplo de una pantalla de aprobación de préstamo automático
Después de que una persona recibe la aprobación de su solicitud, el gerente del banco le devuelve la llamada dentro de los 10 minutos y le informa qué medidas debe tomar a continuación para obtener un préstamo. Conveniente, ¿no es así? Veamos cómo se implementó todo.
¿Recuerdas cómo empezó todo ...
¡Todo fue por primera vez y otra vez! Si antes teníamos un formulario de comentarios como un formulario de crédito, entonces nuestra nueva idea era algo completamente nuevo e incomprensible. Porque No teníamos análogos, teníamos una tarea muy emocionante por delante: planificar, diseñar, distribuir e implementar. Para empezar, dividimos todo el proceso de nuestra integración conjunta en 2 bloques, que se llevaron a cabo en paralelo, a saber:
- Integración de infraestructura
Integración de software
Inicialmente, acordamos con el banco asociado que él (el banco asociado) nos proporcionará algún tipo de API, a la que enviaremos algunos datos y recibiremos algunas respuestas. Se decidieron por eso. ¡Comenzamos a esperar la documentación API del banco, reunimos a nuestros ingenieros de red y a nosotros! En términos de integración de software, surgió un esquema bastante simple, enviamos datos al banco, el banco los desplaza en su sistema y nos los devuelve, y todo esto durante 60 segundos garantizados. En caso de un tiempo de espera (donde podría ser sin esto), acordamos mostrar un cuestionario de emergencia, en el que obtenemos datos que el banco puede necesitar adicionalmente.
Redes
En ese momento, mientras los desarrolladores elegían las herramientas para la implementación, diseñaban su sistema y esperaban la documentación del sistema asociado, ¡el trabajo en el departamento de infraestructura ya estaba en su apogeo! Mi banco asociado y yo teníamos dos: 2 cisi uno al lado del otro en un DC, un cable que conectaba tsiska, túnel VPN, certificados de seguridad y pribludy para trabajar con ellos de todos los colores y tamaños ... El plan era el siguiente, reenviamos el canal VPN cifrado entre nuestros servidores, y construir integración directa entre nuestros servicios. Esquemáticamente, esto se puede representar de la siguiente manera:

Hablemos del código.
A continuación, hablaremos sobre cómo y qué organiza nuestro servicio. Entonces, después de recibir un documento que describe el servicio del socio listo para la integración, descubrimos que, a diferencia de nosotros, el banco solo trabaja con solicitudes SOAP y no quiere escuchar sobre ningún servicio RESTful. Y dado que en nuestros servicios usamos SOAP con un poco menos de frecuencia que nunca, tuvimos muchos descubrimientos maravillosos sobre cómo aprender a preparar SOAP en nuestro nuevo producto. Por lo tanto, necesitábamos enseñar nuestro servicio para analizar solicitudes SOAP y convertir nuestras respuestas nuevamente a SOAP.
Selección de marco
Para empezar, tenía que elegir al menos un lenguaje de implementación, había muchas ideas, comenzando con C y C # terminando con golang y erlang. Decidimos seguir un camino simple. El sistema deberá ser compatible, y para no encontrarse con el factor del bus con la falta de especialistas en el mercado, decidimos centrarnos en la tecnología más común en nuestra empresa: PHP. Gracias a Dios que fuera de la ventana ya no era 2001, sino 2017 y hay tantos frameworks de php que pueden satisfacer las necesidades de incluso ingenieros muy sofisticados. Después de pasar por un montón, elegimos uno de los más simples y al mismo tiempo compatibles: Yii 2.
Por esta decisión fue:
- Fácil de dominar, un montón de literatura;
- Es bastante fácil crear formularios y validadores;
- Hay un registro activo y un automóvil listo para trabajar con todo tipo de herramientas;
- El es realmente rápido;
- En base a esto, una API se construye simplemente, es conveniente escribir comandos de consola.
Contra fue:
- El marco se basa en métodos estáticos; esto es muy inconveniente, incluso al escribir pruebas
- No estaba claro qué herramientas adicionales necesitaríamos en el futuro cercano después del lanzamiento y, como resultado, existía el riesgo de no encontrar las bibliotecas necesarias ...
Selección de almacenamiento
Se eligió el marco, ahora es el momento de elegir un repositorio para aplicaciones. Había varias opciones, MySQL, mongoDB, postgreSQL ... Por un lado, una aplicación es un documento, lo más probable es que su estructura pueda cambiar, complementada de vez en cuando por nuevos campos y deshacerse de los irrelevantes. Por otro lado, el uso de bases de datos no relacionales impondrá sus limitaciones. Después de sopesar todos los pros y los contras, decidimos sentarnos en 2 sillas y usar MySQL para iniciar, y después del lanzamiento migrar a un montón de mongoDB + ElasticSearch. Como resultado, 2 réplicas de MySQL se generaron como almacenamiento y se atornillaron a la aplicación usando ActiveRecord. Cuando comenzamos la transición a mongoDB, la cantidad de datos creció mucho y tomó una tasa de crecimiento tal que hubo otra necesidad de dividir las aplicaciones en repositorios condicionales. Como una herramienta para la indexación de documentos casi en tiempo real, ElasticSearch decidió utilizar un servicio escrito en Golang - monstache.
Construyendo infraestructura
Decidimos hacer la siguiente infraestructura: 10 backends con la aplicación por parte del procesador de la aplicación, 2 equilibradores, 2 réplicas MySQL, 3 fragmentos elásticos de búsqueda, 3 réplicas mongoDB y 2 réplicas de servicio monstache. 
El proceso
En general, el proceso de préstamo de automóvil se puede dividir en 2 partes:
- Para comenzar, necesita encontrar un automóvil adecuado, disponible a crédito. Lo más probable es que se guíe por su condición y los términos del préstamo.
- Después de seleccionar un automóvil, debe obtener una aprobación de préstamo, para ello deberá completar una solicitud
Sobre la implementación de la segunda parte, más o menos lo describimos anteriormente, hablemos sobre la implementación de la primera parte. La implementación de la primera parte consta de varias subpartes:
- Al buscar un automóvil, una persona debe poder centrarse, además de los parámetros técnicos, en la disponibilidad de un automóvil para comprar a crédito y en el pago mínimo mensual. Para hacer esto, necesitamos saber en el momento del anuncio que el automóvil está disponible a crédito y cuál será el pago mínimo por él.
- Después de que una persona haya elegido un automóvil, debemos proporcionarle una calculadora de préstamos, donde pueda elegir el monto del pago inicial y el plazo del préstamo, eligiendo así el monto de pago mensual más cómodo.
Para este propósito, se desarrolló un microservicio especial en el lenguaje go. Su esencia era la siguiente: cuando se envía un anuncio al microservicio, se envía un objeto con todos los datos sobre el automóvil, el microservicio, basado en las reglas que se escriben por separado para él, devuelve el pago mensual mínimo para la indexación en la búsqueda, y también devuelve el anticipo mínimo y los plazos aceptables préstamos, que son la base para construir una calculadora de préstamos.

Almacenamos las opciones de cálculo erróneo por adelantado para el pago inicial estándar y los valores de pago mensual. Esto se hace para cada uno de los períodos de crédito disponibles. Si una persona cambia el pago inicial (dentro del rango aceptable), el microservicio volverá a calcular todos los datos. Si el pago inicial se especifica por debajo de lo permitido, la calculadora mostrará un error de validación.

Debido a la alta carga de nuestro servicio, la calculadora de préstamos tiene 2 grados de almacenamiento en caché: la primera se realiza en el backend, donde los clientes inicialmente van por la calculadora, la segunda en el microservicio.
Entonces, ¿cuál es el resultado final?
Lanzamos el proyecto el 11 de septiembre de 2017. Desde ese momento, hasta la fecha (4 de diciembre de 2018), se han presentado 2.973.868 solicitudes. Estamos en un proceso continuo para mejorar nuestro servicio y simplificar el viaje del usuario. ¡Lo hacemos más rápido, más fácil y más estable! El tiempo de actividad del proyecto para todo el período desde el lanzamiento fue del 99,99%.
Como resultado, tenemos los siguientes resultados:
- Ruta de usuario significativamente reducida
- Ampliamos el volumen de automóviles disponibles para préstamos al 60% de toda la base
- ¡Hasta la fecha, el número de aplicaciones ha crecido más de 7 veces!
En lugar de una conclusión
En 3 meses logramos construir un proyecto verdaderamente sorprendente y único. Su objetivo principal era dar a nuestros clientes la oportunidad de comprar autos usados sin salir de nuestra plataforma. En solo 1 minuto, el usuario puede tomar una decisión sobre su aplicación, llamar al vendedor y redactar todos los documentos necesarios el mismo día.
A juzgar por la cantidad de solicitudes para el año y 2 meses, podemos concluir que podemos hacer que el servicio sea realmente conveniente y demandado.