
而不是介绍
像所有有趣的故事一样,这个故事是很久以前开始的,出乎意料。 我们的合作伙伴银行到我们这里说:“伙计们,我们学会了在一分钟内对系统进行评分。 联合起来并整合项目怎么样? 有了我们-决定和信誉,有了您-汽车。” 要说我们受到启发-什么也不说! 我们几乎有机会成为世界上第一个可以在一分钟内在线购买二手车贷款(一分钟,卡尔)的人! 下面我将告诉您它的来龙去脉,但首先我会告诉您我们是谁,实际上是WE。

我们是“车轮| 屋顶| “市场”是哈萨克斯坦最大的IT公司。 每天,我们的产品都会帮助600万哈萨克斯坦人买卖汽车,公寓,婴儿床和成千上万的其他物品。 Kolesa.kz是最大的汽车资源和应用程序;几年来,它一直在哈萨克斯坦的移动评级中排名第一。
什么是“汽车贷款”项目?
目前,二手车的数量为103,400辆,其中60%以上可通过信贷获得!
图片的外观1.选择我们想贷记的汽车

图1.信用卡可用的搜索结果
图2.广告页面屏幕
3.选择期间和预付款,然后单击以获取批准

图3.公告的信用计算器

图4.贷款申请的初始化表格
在这里,我们输入您的手机号码名称和IIN(在俄罗斯为TIN)
5.接下来,您需要输入手机号码中的短信代码

图5.输入SMS的电话号码确认表单
6.之后,计分过程本身开始,持续不超过1分钟
图6.应用程序评分过程的屏幕
7.评分结果有几种选择:
- 您批准一笔贷款
- 您被拒绝贷款
- 向您提供其他条件
- 要求您提供其他信息,之后您会收到以前的选项之一(a,b,c)

图7.自动贷款批准屏幕的示例
当某人收到其申请的批准后,银行的经理会在10分钟内给他回电,并告知该人接下来需要采取什么措施才能获得贷款。 方便,不是吗? 让我们看看它是如何实现的。
您还记得这一切是如何开始的吗?
一切都是第一次! 如果以前我们只是将反馈表作为信用表,那么我们的新想法是全新的且难以理解的。 因为 我们没有类似物,我们还有一项非常激动人心的任务-规划,设计,分发和实施。 首先,我们将联合集成的整个过程分为两个部分,这两个部分是并行进行的,即:
网路
那时,当开发人员选择实现工具时,他们正在设计系统并等待有关合作伙伴系统的文档,而基础架构部门的工作已经全面展开! 我和我的合作伙伴银行有两个:两个cisi在一个DC中彼此相邻,一条电缆连接tsiska,VPN隧道,安全证书和使用各种颜色和大小的它们的专有权。该计划如下,我们正在我们之间转发加密的VPN通道服务器,并在我们的服务之间建立直接集成。 可以用以下方式表示:

让我们来谈谈代码
下面我们将讨论服务的安排方式。 因此,在收到描述合作伙伴已准备好进行集成的服务的文档后,我们了解到,与我们不同,该银行仅处理SOAP请求,并且不希望听到任何RESTful服务。 并且由于在我们的服务中使用SOAP的频率比以前少了一些,因此,在如何学习如何在新产品中准备SOAP方面,我们有了很多精彩的发现。 因此,我们需要教我们的服务来解析SOAP请求,并将响应转换回SOAP。
框架选择
首先,您必须至少选择一种实现语言,这里有很多想法,以C和C#开头,以golang和erlang结尾。 我们决定走一条简单的道路。 该系统将需要得到支持,并且为了不因缺乏市场专家而陷入总线问题,我们决定专注于公司最常见的技术-PHP。 感谢上帝,窗外已经不是2001年,而是2017年,并且有如此多的php框架,它们甚至可以满足非常老练的工程师的需求。 经过一整堆之后,我们选择了最简单且受支持的平台之一-Yii 2。
为此决定是:
- 易于掌握的一堆文学作品;
- 构建表单和验证器非常容易;
- 有一个Active Record和一辆随时可以使用各种工具的汽车。
- 他真的很快。
- 基于此,可以简单地构建一个API,可以方便地编写控制台命令。
反对是:
- 该框架基于静态方法构建-这非常不便,包括编写测试时
- 尚不清楚在启动后不久的将来我们将需要哪些其他工具,因此,存在找不到所需库的风险……
储存选择
选择了框架,现在是时候为应用程序选择存储库了。 有几种选择,MySQL,mongoDB,postgreSQL ...一方面,应用程序是一个文档,很可能其结构可能会更改,有时会以新字段为补充,并删除不相关的字段。 另一方面,使用非关系数据库将施加其限制。 在权衡了所有利弊之后,我们决定坐在两把椅子上并使用MySQL进行启动,并在启动后迁移到一堆mongoDB + ElasticSearch。 结果,产生了两个MySQL副本作为存储,并使用ActiveRecord固定到应用程序中。 到我们开始向mongoDB过渡时,数据量增长非常快,并且增长速度如此之快,以至于又需要将应用程序划分为条件存储库。 作为用于近实时文档索引编制的工具,ElasticSearch决定使用以Golang编写的服务-monstache。
建筑基础设施
我们决定采用以下基础结构:由应用程序处理器处理的10个后端,2个平衡器,2个MySQL副本,3个Elasticsearch分片,3个mongoDB副本和2个monstache服务副本。 
过程
一般而言,汽车贷款流程可以分为两个部分:
- 要开始使用,您需要找到一辆合适的汽车,可以赊购。 您很可能会受到她的状况和贷款条款的指导。
- 选择汽车后,您需要获得贷款批准,为此您需要填写一份申请表
关于第二部分的实现,我们在上文中或多或少地描述了,让我们来谈谈第一部分的实现。 第一部分的实现包括几个子部分:
- 在寻找汽车时,除了技术参数外,人们还应该能够集中精力以信贷方式购买汽车和每月最低付款额。 要做到这一点,我们需要在公告之时知道这辆车可以信用使用,最低付款额是多少。
- 一个人选择了汽车之后,我们需要为他提供一个贷款计算器,他可以在其中选择预付款的大小和贷款期限,从而选择最舒适的每月还款额。
为此,开发了一种专用的go语言微服务。 其本质如下:当将广告提交给微服务时,将发送包含有关汽车的所有数据的对象,微服务将根据为其单独编写的规则返回用于搜索索引的最低每月付款,还返回最低首付和可接受的期限贷款,这是构建贷款计算器的基础。

我们会预先为标准预付款和月度付款值缓存错误计算选项。 这是针对每个可用信用期完成的。 如果某人更改了初始付款(在可接受的范围内),那么微服务将再次计算所有数据。 如果指定的初始付款额小于允许的金额,则计算器将显示验证错误。

由于我们服务的高负荷,贷款计算器具有2个缓存级别:第一个缓存发生在后端,客户端最初在这里购买计算器,第二个缓存在微服务本身中。
那么底线是什么?
我们于2017年9月11日启动了该项目。 从那时起到现在(2018年12月4日),已经提交了2,973,868份申请。 我们正在不断改进服务并简化用户流程。 我们使它变得更快,更轻松,更稳定! 自启动以来,整个项目的正常运行时间为99.99%。
结果,我们得到以下结果:
- 大大减少了用户路径
- 我们将可提供贷款的汽车数量扩大到整个基础的60%
- 迄今为止,应用程序的数量已增长了7倍以上!
而不是结论
在3个月内,我们成功建立了一个真正令人惊叹的独特项目。 其主要目标是让我们的客户有机会在不离开我们平台的情况下购买二手车。 在短短1分钟内,用户可以决定自己的应用程序,致电卖方,并在同一天草拟所有必要文件。
从一年零两个月的申请数量来看,我们可以得出结论,我们能够使服务真正变得方便和有需求。