
Em vez de introduzir
Como todas as histórias interessantes, esta começou há muito tempo e inesperadamente. Uma vez que nosso banco parceiro veio até nós e disse: “Pessoal, aprendemos a fazer pontuações em nosso sistema em um minuto. Que tal unir forças e integrar projetos? Com a gente - uma decisão e crédito, com você - carros. Dizer que fomos inspirados - não dizer nada! Tivemos todas as chances de nos tornarmos os primeiros quase no mundo a conceder um empréstimo on-line para um carro usado em um minuto (UM MINUTO, CARL)! Abaixo, vou contar o que aconteceu, mas primeiro vou dizer quem somos, de fato, NÓS.

Nós somos “Rodas | Telhado Market ”é a maior empresa de TI do Cazaquistão. Todos os dias, nossos produtos ajudam seis milhões de cazaquistão a comprar e vender carros, apartamentos, berços e milhares de outras coisas. O Kolesa.kz é o maior recurso e aplicativo para automóveis; ocupa o primeiro lugar na classificação móvel do Cazaquistão há vários anos.
O que é o projeto "Empréstimo de carro"?
No momento, a base de carros usados é 103.400 carros, mais de 60% deles estão disponíveis a crédito!
Como fica nas fotos1. Escolha o carro que queremos levar a crédito

Figura 1. Resultados da pesquisa de carros disponíveis a crédito
Figura 2. Tela da página de anúncio
3. Selecione o período e o adiantamento e clique em para obter aprovação

Figura 3. Calculadora de crédito para o anúncio

Figura 4. Formulário de inicialização de um pedido de empréstimo
Aqui, inserimos o número do seu celular Nome e IIN (na Rússia, seria um TIN)
5. Em seguida, você precisa digitar o código SMS que chegará ao seu número

Figura 5. Formulário de confirmação do número de telefone digitando SMS
6. Depois disso, o próprio processo de pontuação começa, que não dura mais que 1 minuto
Figura 6. Tela para processo de pontuação do aplicativo
7. Existem várias opções para pontuação de resultados:
- Você aprova um empréstimo
- Você foi negado um empréstimo
- Você tem condições alternativas
- Você é solicitado a obter informações adicionais, após o que recebe uma das opções anteriores (a, b, c)

Figura 7. Exemplo de uma tela de aprovação de empréstimo automático
Depois que uma pessoa recebe a aprovação de seu pedido, o gerente do banco o chama de volta em 10 minutos e informa a pessoa sobre quais ações ele precisa executar a seguir para obter um empréstimo. Conveniente, não é? Vamos ver como tudo foi implementado.
Você se lembra como tudo começou ...
Tudo foi pela primeira vez e novamente! Se antes tínhamos um formulário de feedback como crédito, nossa nova ideia era algo completamente novo e incompreensível. Porque Não tínhamos análogos, tínhamos uma tarefa muito empolgante pela frente - planejar, projetar, distribuir e implementar. Para começar, dividimos todo o processo de nossa integração conjunta em 2 blocos, que foram realizados em paralelo, a saber:
- Integração de infraestrutura
Integração de software
Inicialmente, concordamos com o banco parceiro que ele (o banco parceiro) nos fornecerá algum tipo de API, para o qual enviaremos alguns dados e receberemos algumas respostas. Eles decidiram isso. Começamos a aguardar a documentação da API do banco, reunindo nossos engenheiros e os de suas redes! Em termos de integração de software, surgiu um esquema bastante simples: enviamos dados ao banco, o banco os rola em seu sistema e os devolve para nós, e tudo isso por 60 segundos garantidos. No caso de um tempo limite (onde poderia ser sem isso), concordamos em exibir um questionário de emergência, no qual obtemos dados que o banco pode precisar adicionalmente.
Redes
Naquela época, enquanto os desenvolvedores estavam escolhendo ferramentas para implementação, estavam projetando seu sistema e aguardando a documentação no sistema parceiro, o trabalho no departamento de infraestrutura já estava em pleno andamento! Tínhamos um banco parceiro para dois: 2 tsiska próximos um do outro em um DC, um cabo que conecta tsiska, túnel VPN, certificados de segurança e pré-estudo para trabalhar com eles de todas as cores e tamanhos ... O plano era o seguinte: Estamos encaminhando o canal VPN criptografado entre nossos servidores e criar integração direta entre nossos serviços. Esquematicamente, isso pode ser representado da seguinte maneira:

Vamos falar sobre o código
Abaixo, falaremos sobre como e o que é organizado pelo nosso serviço. Portanto, depois de receber um documento descrevendo o serviço do parceiro pronto para integração, aprendemos que, diferentemente de nós, o banco trabalha apenas com solicitações SOAP e não deseja ouvir sobre nenhum serviço RESTful. E como em nossos serviços usamos o SOAP um pouco menos do que nunca, tivemos muitas descobertas maravilhosas sobre como aprender a preparar o SOAP em nosso novo produto. Portanto, precisamos ensinar nosso serviço a analisar solicitações SOAP e converter nossas respostas novamente em SOAP.
Seleção de framework
Para iniciantes, você tinha que escolher pelo menos uma linguagem de implementação, havia muitas idéias, começando com C e C # terminando com golang e erlang. Decidimos seguir um caminho simples. O sistema precisará ser suportado e, para não encontrar o fator de barramento com a falta de especialistas no mercado, decidimos nos concentrar na tecnologia mais comum em nossa empresa - PHP. Graças a Deus que fora da janela já não era 2001, mas 2017 e existem tantos frameworks php que podem satisfazer as necessidades de engenheiros muito sofisticados. Depois de passar por um monte, escolhemos um dos mais simples e ao mesmo tempo compatíveis - Yii 2.
Para esta decisão foi:
- Fácil de dominar, um monte de literatura;
- É fácil o suficiente criar formulários e validadores;
- Há um registro ativo e um carro pronto para trabalhar com todos os tipos de ferramentas;
- Ele é realmente rápido;
- Com base nisso, uma API é simplesmente criada, é conveniente escrever comandos do console.
Contra foi:
- A estrutura é baseada em métodos estáticos - isso é muito inconveniente, inclusive ao escrever testes
- Não ficou claro quais ferramentas adicionais precisaríamos no futuro próximo após o lançamento e, como resultado, havia o risco de não encontrar as bibliotecas necessárias ...
Seleção de armazenamento
A estrutura foi escolhida, agora é hora de escolher um repositório para aplicativos. Havia várias opções, MySQL, mongoDB, postgreSQL ... Por um lado, um aplicativo é um documento, com certeza sua estrutura pode mudar, de tempos em tempos, complementada por novos campos e se livrando de campos irrelevantes. Por outro lado, o uso de bancos de dados não relacionais imporá suas limitações. Depois de ponderar todos os prós e contras, decidimos sentar em duas cadeiras e usar o MySQL para iniciar e, após o lançamento, migrar para um monte de mongoDB + ElasticSearch. Como resultado, duas réplicas do MySQL foram geradas como armazenamento e parafusadas no aplicativo usando o ActiveRecord. No momento em que iniciamos a transição para o mongoDB, a quantidade de dados cresceu muito e teve uma taxa de crescimento tão grande que havia outra necessidade de dividir aplicativos em repositórios condicionais. Como uma ferramenta para indexação de documentos quase em tempo real, o ElasticSearch decidiu usar um serviço escrito em Golang - monstache.
Infra-estrutura predial
Decidimos fazer a seguinte infraestrutura: 10 back-end com o aplicativo pelo processador de aplicativos, 2 balanceadores, 2 réplicas do MySQL, 3 shards de pesquisa elástica, 3 réplicas de mongoDB e 2 réplicas de serviço monstache. 
O processo
Em geral, o processo de empréstimo de carro pode ser dividido em 2 partes:
- Para começar, você precisa encontrar um carro adequado, disponível a crédito. Muito provavelmente você será guiado pela condição dela e pelos termos do empréstimo.
- Depois de selecionar um carro, você precisa obter uma aprovação de empréstimo, para isso, precisará preencher um requerimento
Sobre a implementação da segunda parte, mais ou menos descritos acima, vamos falar sobre a implementação da primeira parte. A implementação da primeira parte consiste em várias sub-partes:
- Ao procurar um carro, uma pessoa deve ser capaz de se concentrar, além dos parâmetros técnicos, na disponibilidade de um carro para compra a crédito e no valor mínimo de um pagamento mensal. Para fazer isso, precisamos saber no momento do anúncio que o carro está disponível a crédito e qual será o pagamento mínimo.
- Depois que uma pessoa escolhe um carro, precisamos fornecer uma calculadora de empréstimo, onde ele pode escolher o tamanho do adiantamento e o prazo do empréstimo, escolhendo assim o valor do pagamento mensal mais confortável.
Para esse fim, um microsserviço especial na linguagem go foi desenvolvido. Sua essência era a seguinte: quando um anúncio é enviado ao microsserviço, um objeto com todos os dados sobre o carro é enviado, o microsserviço, com base nas regras escritas separadamente para ele, retorna o pagamento mensal mínimo para indexação na pesquisa e também retorna o pagamento mínimo inicial e os prazos aceitáveis empréstimos, que são a base para a construção de uma calculadora de empréstimos.

Armazenamos em cache antecipadamente as opções de erro de cálculo para os valores padrão de adiantamento e pagamento mensal. Isso é feito para cada um dos períodos de crédito disponíveis. Se uma pessoa alterar o pagamento inicial (dentro do intervalo aceitável), o microsserviço calculará novamente todos os dados. Se o pagamento inicial for especificado abaixo do permitido, a calculadora exibirá um erro de validação.

Devido à alta carga em nosso serviço, a calculadora de empréstimos possui 2 graus de armazenamento em cache: o primeiro ocorre no back-end, onde os clientes buscam inicialmente a calculadora, o segundo no próprio microsserviço.
Então, qual é o resultado final?
Lançamos o projeto em 11 de setembro de 2017. Desde esse momento, até a data (4 de dezembro de 2018), 2.973.868 pedidos foram arquivados. Estamos em um processo contínuo de melhoria de nosso serviço e simplificação da jornada do usuário. Tornamos mais rápido, mais fácil e mais estável! O tempo de atividade do projeto durante todo o período desde o lançamento foi de 99,99%.
Como resultado, temos os seguintes resultados:
- Caminho do usuário significativamente reduzido
- Expandimos o volume de carros disponíveis para empréstimos para 60% de toda a base
- Até o momento, o número de aplicativos cresceu mais de 7 vezes!
Em vez de uma conclusão
Em 3 meses, conseguimos construir um projeto verdadeiramente incrível e único. Seu principal objetivo era dar a nossos clientes a oportunidade de comprar carros usados sem sair de nossa plataforma. Em apenas 1 minuto, o usuário pode tomar uma decisão sobre sua inscrição, ligar para o vendedor e elaborar todos os documentos necessários no mesmo dia.
A julgar pelo número de solicitações para o ano e 2 meses, podemos concluir que somos capazes de tornar o serviço realmente conveniente e demandado.