专栏首页IT大咖说mongoDB在互联网金融的应用

mongoDB在互联网金融的应用

摘要

本次分享主要讲mongodb 在互联网金融中交易与非交易部分如何实践,金融行业涉及哪些注意点,又踩过的坑。

视频内容

什么是P2P

P2P是一种网上的借贷模式,放款人可以通过P2P公司选择认为比较靠谱的借款人进行投资。这个模式的缺点就是借款人很有可能会卷钱跑路,甚至还存在整个P2P平台全部跑路的风险,放款人的资金将无从追回。

投资到多个P2P平台

所以我们更为推崇的理财方式就是分散理财。那么如果要将全部资金都投入P2P,分散在各个平台里面,应该怎么做?

如上图所示,左边是放款人,右边是借款人。通过投资各种不同的平台中的各个借款,通过这种模式达到分散理财的效果。这样资金就不会出现比较大的风险,可以比较安稳一点。

但这种模式同样也有一个问题,要同时管理这么多平台的账户会很麻烦,这是第一个问题。全国大概有2000家P2P Platform,如何甄别好坏,这是第二个问题。

什么是(类)P2P Fund

于是我们推出了P2P fund概念,用户可以看的到产品背后是什么,只需要关心这个产品就可以了。

关于考拉理财

考拉理财就是一个类P2P Fund,类似于基金的概念。我们是为懒人理财服务,通过极致的分散理财,达到风险和收益的平衡。

我们对外通常介绍两个数字,交易额30亿,用户量有70万。投资用户大概在20万左右,管理的资金有7个亿。

这样的业务下面,Mongodb支撑了我们核心的业务。

需求:变动的需求

我们有很多P2P平台,需要和很多平台的数据对接、或者做数据爬取。我们各个P2P平台的信息完全是结构不一致的,结构比较稀疏(有些有,有些没有)。

每个子行业提供的P2P平台信息不同,市场的营销需求变化也很多。

目前,我们较大的collection,其 Doucment count大概在1000万至1亿,我们后台有各种各样的报表和分析。

在金融方面还有一点特殊的需求,就是数据不能丢失、不能删除,在安全方面有很高的要求,备份也需要很完整。

我们最初版本的Mongodb部署很简单,三个节点在IDC机房部署一个读写分离的架构。

后续碰到过一些误删除的坑,加了一个延时的节点,数据延时一个小时。同时根据不同的表、库的特点,有些会做每3~6小时备份、每天备份,保留一段时间,再自动删除比较久远时间的备份。

随着业务复杂的增加,阿里云机房部署了类似两个数据中心的节点,后来我们在公司里面也部署了这样一个节点,用于让数据分析员在本地分析各种报表。

我们现在还没有用到阿里云或腾讯云的结构,考虑到SLA的要求,后续我们从IDC机房迁到阿里云,将IDC转为备用数据中心。

备份的总结

我们当前有以下的备份、恢复策略:将使用Oplog的形式恢复到指定节点、Full backup每六个小时在别的机器、30天内每天的备份,以及延时一小时的备份。

技术栈

MongoDB是我们主要的数据库,也有MySQL、Hadoop,语言上我们用了Node.js、Python、R。R和SQL是给数据分析员去做的,以及少部分的Java。其余各互联网公司大概类似:Docker、Jenkins、ELK、Grafana、一些BI工具等等。

需要事务

事实上,我们对业务没有强一致性的要求,但是需要准确性。

需要事务MongoDB的事务问题的解决方案

官方提供大概两个解决方案,一个以嵌套的形式来保证事务的设计。它的更新和查询速度很快,和业务需求要较好的配合。

另一个Solution就是两步提交,它的缺点是代码比较复杂。

其它的解决方案

针对数据库层面来说,传统的是用Mysql,或者是Hybrid 的MySQL+MongoDB。SequoiaDB类似于mongoDB,但是它目前还没有很完善的社区支持,我们没有采用。

早已熟悉的Hybrid解决方案

如图所示,左边是需要交易的部分,右边是其它非交易部分。如果要用这套混合模式,中间必须要做到同步。

为了保证数据不丢失,我们会用MQ或其它的来保证数据接收的稳定性。

早已熟悉的Hybrid解决方案问题

我们引用了多一个DB在生产环境,引入了MQ、同步机制,疑问着维护成本、延时。

还需要考虑Foreign Key或者Join Tables的问题,但是如果内部能够处理好这一块,就可以去做。创业公司不建议考虑这个方案。

其他仅用MongoDB的解决方案: Events Sourcing

把所有的东西都记录成一个Event,都是通过Event去驱动业务。所有的Event都可以重放(REPLAY),重放要求对于系统必定是无伤害性的。

我们的解决方案

账户设计会考虑内嵌式的文档设计,同时造了一套类似事务的机制去实现。

上图就是事务的逻辑。

上图用代码简化内部来说明:先记录一下要做什么,如果成功就结束了,如果失败就回撤。下图是代码的应用简化的实例。

关于交易最佳实践的要求

所有涉及到交易的部分必定是可重入的(幂等),再执行一遍对系统不会造成伤害。

主动查询第三方订单是否支付完成,如果已经支付了就主动确认。

进行交易的前有严格的schema 验证程序。

用户操作级别提供操作锁、限制并发。

还有一些与MongoDB无关,但是我们认为比较有效的:在操作前做一个检查,以及利用Unit Test以保证代码质量。

MongoDB可以作为一个很好的候选,前提是如果要做事务(区别好业务是强一致还是最终一致),做好程序上的最佳实践。

我的分享就到这里,谢谢大家!

本文分享自微信公众号 - IT大咖说(itdakashuo),作者:邓维

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-01-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 干货 | TUTUCLOUD架构师李扬:如何高效地打造人脸识别服务

    嘉宾演讲视频 Guest Video ? 温馨提示 本视频时长19分26秒,建议在wifi下观看 4月21日,极光开发者沙龙在上海圆满举办。极光携手涂图TUTU...

    IT大咖说
  • NSX高级路由架构

    内容来源:2018 年 10 月 24 日,VMware高级讲师寇雪旭在“VMware技术专题分享”进行《NSX高级路由架构》演讲分享。IT 大咖说(微信id:...

    IT大咖说
  • DevOps与传统的融合落地实践

    内容来源:2017年5月6日,王津银在“DevOps&SRE 超越传统运维之道”进行《DevOps与传统的融合落地实践》演讲分享。IT大咖说作为独家视频合作方,...

    IT大咖说
  • 数据恢复的一些小结

    最近碰到的数据问题还是不少,这个过程中也发现了一些隐患,每次恢复的策略和方法都不大一样,但是最终还是修复了数据。

    jeanron100
  • 详解 python3 urllib

    本文是爬虫系列文章的第一篇,主要讲解 Python 3 中的 urllib 库的用法。urllib 是 Python 标准库中用于网络请求的库。该库有四个模块,...

    猴哥yuri
  • 图解 JVM GC 过程

    假设现在Heap内存大小为20M,其中年轻代为10M,老年代为10M,年轻代中Eden区6M,From区2M,To区2M,新创建的对象首先往Eden区分配,当再...

    CoderJed
  • Remove China Apps凉了?作死的阿三们并没有罢休

    近日,一款名为『Remove China Apps』的应用,在印度火了,上架2周,下载量500W+,日均下载量超过20W,登上了Google PlayStore...

    Android扫地僧
  • 响应式编程中 Stream 对象的实现原理

    这篇文章介绍一种编程泛型,叫做响应式编程。将响应式称作“编程泛型”可能有些夸大其作用范畴,不过通过引入响应式确实会改变我们对特定问题的思考方法,就像刚接触red...

    腾讯IVWEB团队
  • 读了这些书,才能正确入门深度学习

    编者按:本文作者为 Jeffries Consulting 创始人 Daniel Jeffries,他以自己的阅读体验,对当前含金量极高的几本深度学习书籍进行点...

    AI研习社
  • 甲骨文云ERP主打8000元套餐 剑指用友、金蝶?

    在ERP市场,一直是国内和国外厂商平分天下的局面,SAP和甲骨文把持着高端大客户市场,而中小和腰部客户市场一直是本土厂商用友和金蝶的天下,不过这个固有的格局有可...

    人称T客

扫码关注云+社区

领取腾讯云代金券