从零打造千万级实时风控云服务,UPYUN Open Talk :同盾 |
同盾科技,是由阿里、Paypal 反欺诈专家创建的,国内第一家风险控制与反欺诈云服务提供商,其涉及领域包括电商、B2B、互联网金融、游戏等。同盾技术总监张新波在 UPYUN Open Talk第二期《移动网金融的架构趋势》中阐述了同盾是如何从零开始打造千万级实时风控云服务,具体介绍了同盾系统平台构建过程中主要需要解决的三大难题,以及解决这些问题的具体时实践过程。 同盾的后台系统是一套非常强大的,规则灵活配置的管理系统,搭建这个平台同盾主要面临了以下几个难点: 2、可用性 3、可扩展性 系统搭建前期工作
这是最开始我们的系统架构。我们做的一些对用户的管理,最主要的是策略配置,比如说我们在针对借贷风险场景做一系列的规则配置,这些配置会直接写到数据库里面。我们提供的API,可以加载一些客户自己定的策略,用户请求的时候可以通过执行策略和规则,得到风险评估的结果。 具体流程见上图,可以看到,这里所有的流程几乎都需要直接和 mysql 交互,导致 mysql 压力非常大,系统性能一直很差。针对这个问题我们做了两方面的改进。 首先是读优化,通过使用 Guava Cache,对用户校验和查找策略做了缓存处理,并在系统启动时预先加载全部用户数据和策略数据,并通过定时刷新缓存,保证请求基本不需要访问 mysql,全部在内存中进行计算。 然后是写优化,应用写数据时并不直接操作 mysql,而是通过本地任务队列异步保存数据。这里我们使用的本地队列是 Berkeley DB。Berkeley DB 是一个内存数据库。我们用它主要考虑到Berkeley DB 支持持久化,以及本身处理性能高。如果我们写入的数据,消费端没有及时刷新数据库,或者写到其他地方处理完毕,数据将会堆积,如果全放在内存里,会把内存撑爆。Berkeley DB 的持久化性能,刚好可以解决这个问题。 在完成这两项优化后,系统性能已经有了很大提升,但在性能上还是不能满足我们的要求,后面加上了 memcached 的缓存,将数据通过 base64 加 Gzip 进行压缩后存到 memcached 当中,请求进来后,执行策略需要做指标计算时,可以很快从cache中取到数据,减少与 MySQL 的交互。因为热点数据比较少,为了提高缓存利用率我们将数据的过期时间从一天提升到一周,这样大部分都可以命中缓存,无需再用 MySQL 读取,对性能有较大提升。 系统前期处理好后,还存在很多单点问题,为了保证整个系统的可用性,得将所有的单点问题消灭掉,首先做了MySQL主备,主机宕机之后用 Keeplived 自动切换到备机。另外Memcached 也是单点,有些应用出现问题会导致系统无法效应,为了消除单点故障,做了Memcached 集群。 在这个过程中还进行了其他优化,主要包括: 灾备和应急方案 监控报警 为了保障实时了解整个系统线上运行情况,需要一个完善的监控系统。同盾选择了 Zabbix。 在完成上面的优化后,承载线上百万级的容量没有太大的问题。但随着业务量的增加,我们首先面临的最大问题是存储的问题,因为 MySQL 存储有限,在数据增长过快的情况下,分库分表已经不能很好的解决问题,所以我们又对系统架构做了一次调整:
通过引入 Cassandra 来实现自动水平扩展,整个系统承载能力又得到了一次提升。 最后,从同盾这一年来的经验来说,尽量在选用一些熟悉、成熟和社区活跃的开源技术,在创业初期,以解决业务问题为主,先满足业务需求再做优化。作为第三方云服务商,需要监控报警和应急预案放在非常重要的位置,如果出现问题能做出最快相应。系统的演变迭代是一起复杂的过程,且会遇到很多问题,要搭建真正的能承载大数据访问的系统,还需多实践,在这个过程中不断进行优化。 UPYUN Open Talk是 UPYUN 发起主办的行业技术沙龙,旨在以邀请各行各业优秀的企业技术负责人分享介绍自己工作过程中的技术架构经验的方式,推动整个移动互联网时代的企业员工的个人技术成长,从“人”这个关键点的个人成长提升去帮助推动企业的快速成长。 |