UPYUN Open Talk :同盾,从零打造千万级实时风控云服务

同盾科技,是由阿里、Paypal 反欺诈专家建立的,国内第一家风险控制与反欺诈云服务提供商,其涉及领域包括电商、B2B、互联网金融、游戏等。同盾技术总监张新波在 UPYUN Open Talk第二期《移动时代互联网金融的架构趋势》中阐述了同盾是如何从零开始打造千万级实时风控云服务,具体介绍了同盾系统平台构建过程当中主要须要解决的三大难题,以及解决这些问题的具体时实践过程。前端

同盾的后台系统是一套很是强大的,规则灵活配置的管理系统,搭建这个平台同盾主要面临了如下几个难点:
一、性能
同盾提供的云服务须要直接嵌入到用户的业务流程中,好比说登陆,客户的网站接受用户的登陆请求后,客户调用同盾提供的的服务,等咱们的服务作出响应后再决定下一步行为。一般状况下,客户给咱们的时间是500毫秒左右,除掉网络开销,基本上咱们必须在200毫秒内作完全部的数据分析计算,给客户响应。同时每次调用都需实时计算,且参与计算的数据量很是庞大,会涉及大量的指标运算。如何在短期内完成计算,对整个系统来讲是一个较大的挑战。mysql

二、可用性
和其余云服务商同样,咱们提供7×24小时的服务,若是系统挂了,对客户的系统会形成比较大的影响,若是某台服务器挂掉,致使服务不可用或不稳定,这种状况客户也是不可接受的。是否有完善的灾备和紧急备选方案,保证在各类异常状况下,整个系统均可持续使用,这是另外一个难点。sql

三、可扩展性
同盾是为企业提供服务,不少大的客户接进来数据量多是上百万的流量,随着客户的增多,对系统要求的处理能力会愈来愈大,因此咱们整个系统架构设计要求具有随时可进行线性扩展的能力,好比说如今可以处理500万,流量增长一倍的话,可以经过简单的加机器能够把处理能力提高到1000万,这也是一个难点。数据库

系统搭建前期工做缓存

图片描述

这是最开始咱们的系统架构。咱们作的一些对用户的管理,最主要的是策略配置,好比说咱们在针对借贷风险场景作一系列的规则配置,这些配置会直接写到数据库里面。咱们提供的API,能够加载一些客户本身定的策略,用户请求的时候能够经过执行策略和规则,获得风险评估的结果。服务器

具体流程见上图,能够看到,这里全部的流程几乎都须要直接和 mysql 交互,致使 mysql 压力很是大,系统性能一直不好。针对这个问题咱们作了两方面的改进。网络

首先是读优化,经过使用 Guava Cache,对用户校验和查找策略作了缓存处理,并在系统启动时预先加载所有用户数据和策略数据,并经过定时刷新缓存,保证请求基本不须要访问 mysql,所有在内存中进行计算。架构

而后是写优化,应用写数据时并不直接操做 mysql,而是经过本地任务队列异步保存数据。这里咱们使用的本地队列是 Berkeley DB。Berkeley DB 是一个内存数据库。咱们用它主要考虑到Berkeley DB 支持持久化,以及自己处理性能高。若是咱们写入的数据,消费端没有及时刷新数据库,或者写到其余地方处理完毕,数据将会堆积,若是全放在内存里,会把内存撑爆。Berkeley DB 的持久化性能,恰好能够解决这个问题。异步

在完成这两项优化后,系统性能已经有了很大提高,但在性能上仍是不能知足咱们的要求,后面加上了 memcached 的缓存,将数据经过 base64 加 Gzip 进行压缩后存到 memcached 当中,请求进来后,执行策略须要作指标计算时,能够很快从cache中取到数据,减小与 MySQL 的交互。由于热点数据比较少,为了提升缓存利用率咱们将数据的过时时间从一天提高到一周,这样大部分均可以命中缓存,无需再用 MySQL 读取,对性能有较大提高。memcached

系统前期处理好后,还存在不少单点问题,为了保证整个系统的可用性,得将全部的单点问题消灭掉,首先作了MySQL主备,主机宕机以后用 Keeplived 自动切换到备机。另外Memcached 也是单点,有些应用出现问题会致使系统没法效应,为了消除单点故障,作了Memcached 集群。

在这个过程当中还进行了其余优化,主要包括:
MySQL服务器硬盘从 SAS RAID5 升级到 SSD RAID10,保证较快的读写速度。
数据库从 MySQL 5.1 系统升级到 MySQL 5.6,以及对参数进行优化 。
客户数据记录单表更改成 按客户分表 ,提高读写性能和防止表过分膨胀。
Apache 改为了 NGINX,利用它的动态修改upstream server的组件,在发布时将机器自动摘除,发布完成以后再加入处处理集群中,避免系统性能抖动问题。
另外利用好各类 JVM 工具,如 jstat、jstack、MAT 以及BTrace能够方便地进行JVM的问题排查和优化。

灾备和应急方案
应用放在一个地方的话,老是会遇到各类各样的一些问题,因此,为了保障服务的稳定性,咱们在阿里云上部署了一套简化版的服务,若是在主机房不能正常提供服务,还有最基本的应急方案。
关于应急方案,咱们在最前端 Nginx 的 lua 脚本中添加全局开关,若是某个后台应用出现问题,能够当即经过全局开关禁用,以避免由于某个服务异常而致使总体响应时间过长。同时也能够针对特定用户设定开关,若是某个用户访问有异常,也能够经过开关直接关掉。经过后台界面和定制脚本,在出现紧急状况时,能够作到一两分钟以内切快速切换开关。

监控报警

为了保障实时了解整个系统线上运行状况,须要一个完善的监控系统。同盾选择了 Zabbix。
Zabbix 自己就有很完备的监控体系,而且还支持不少插件,能够较方便的搭建一套完整的监控报警系统。
Zabbix 主要从几个基本层面来完善监控报警。硬件层面,经过 Load、Memory、Disk、IO 等来判断。应用层面,每一个应用都有一个默认接口,在 Zabbix 上调用,看应用是否正常返回来检测。JVM 层面,经过 Heap 使用状况、GC 状况来监控。其余,能够经过 Memecached、Nginx、MySQL 的专有插件,来监控专门的应用,好比 Nginx的 QPS,Memcached 的命中率等。
Zabbix 对内部的监控仍是很强力的,但外部的,诸如 IP,Zabbix 监控不到。所以在 Zabbix的基础上搭配了360 的云监控,对 DNS、公网IP 等全部暴露在外部的接口都监控起来。

在完成上面的优化后,承载线上百万级的容量没有太大的问题。但随着业务量的增长,咱们首先面临的最大问题是存储的问题,由于 MySQL 存储有限,在数据增加过快的状况下,分库分表已经不能很好的解决问题,因此咱们又对系统架构作了一次调整:

图片描述

经过引入 Cassandra 来实现自动水平扩展,整个系统承载能力又获得了一次提高。

最后,从同盾这一年来的经验来讲,尽可能在选用一些熟悉、成熟和社区活跃的开源技术,在创业初期,以解决业务问题为主,先知足业务需求再作优化。做为第三方云服务商,须要监控报警和应急预案放在很是重要的位置,若是出现问题能作出最快相应。系统的演变迭代是一块儿复杂的过程,且会遇到不少问题,要搭建真正的能承载大数据访问的系统,还需多实践,在这个过程当中不断进行优化。

UPYUN Open Talk是 UPYUN 发起主办的行业技术沙龙,旨在以邀请各行各业优秀的企业技术负责人分享介绍本身工做过程当中的技术架构经验的方式,推进整个移动互联网时代的企业员工的我的技术成长,从“人”这个关键点的我的成长提高去帮助推进企业的快速成长。

相关文章
相关标签/搜索