挖财后端架构简介

挖财后端技术用的主要是比较大众的东西,Web容器用Tomcat,框架主要是Spring MVC,也有少量的Play,中间服务层是Dubbo,微容器用Spring Boot,服务注册这一块是用ZooKeeper,核心业务开发方式还是围绕着Spring和Mybatis等;数据的存储这块是MySQL和Hbase,分布存储这块是用阿里巴巴之前开源的一个中间件Cobar。消息和实时计算这块主要是Kafka, Storm,日志以及监控系统则是用典型的ELK和Zabbix。另外我们将要放弃MongoDB和Memcached,并不是这些产品自身的问题,而是人的因素,最早的架构师对MongoDB很熟,后来因为他离开,这块的一些问题缺乏强有力的人把控,就放弃了。其他人对MySQL和Hbase更熟悉,并且这两种组合基本满足我们的需求了。Memcached则是被Redis替代。总的来说,我们裁剪掉了一些之前使用的相似产品,减少为一种,主要是基于自身运维能力考虑的,不在于这些技术是否足够好或者是否符合团队的特性和遇到的问题,而是你能不能把它维护的好,或者说风险控制好。

业务上面我们大概也是比较典型的。基础设施是一块,然后中间是服务,上面是日常的应用。基础设施就包括典型的存储、消息、框架,还有发布、运维、监控等等。中间就是现在典型的SOA服务,用户的资产、服务、流水、交易等等,所有的服务采用Spring Boot打包部署,主要便于运维上的统一和方便做一些切面层的事情。最上面是应用,包括社区、记帐、钱管家、理财。而安全和风控会切入在每一个环节。

其实作为一个互联网的金融公司,很多时候我们对金融会有一点点陌生,在我们看来做一个理财产品或者一个理财业务其实和电商业务有很大的相似之处。主要就是理财产品,他也是一个商品,这个商品可能有高的回报,最初形成这个商品的时候背后有一套综合系统或者说有一套逻辑。并且购买这个商品之后,这个商品是有历史的,他的收益是在变化的,所以简化之后,我们发现跟电商系统是相似的。

这就是典型的架构,前面是Web或Gateway,中间是Service,中间层协议是Dubbo默认方式或者是HTTP。

数据存储这一块主要是MySQL和Hbase,当前还有小部分数据使用的Mongo,ORMapping这块我们用了MyBatis。数据的水平扩展主要是基于刚才提到的Cobar,它是阿里比较成功的开源产品之一。Cobar支持数据的二维扩展,能满足我们的场景,比如说几千万用户的流水记录可以按用户加时间的维度来划分。如果单纯按时间的维度分区,在查询用户的流水时要散落到各个分区上,对各个分区的压力都较大。而按用户的维度则可能导致这个分区在一定时间后达到我们预设的容量上线,因为一天有几百万甚至上千万的流水进入。二维的方式可以解决这些问题。尽管我们后来发现用户的数据大多在最近一段时间内较热,时间比较早的数据相对较冷,只用了Cobar的一维扩展方式,将冷数据归档到Hbase集群来解决。在数据的在线处理这块,有很多用Akka框架的程序,比如计息系统主要是运算的,所以Akka很适合干这个事情。

自动记帐这块主要是钱管家这款产品,他会根据银行的帐单把这些数据汇总到这个产品里面,主要是从其他系统汇聚出原始的数据,根据这些数据我们会进行分类,进行加工和抽取,最后汇总到database,这个过程的思路就是command+pipeline下面这套组合,只不过是分布式命令和管道,分布式里面命令是Akka所承担的角色。

数据分析这块,Canal会把binlog数据丢到Kafka然后同步到其他系统。在线分析主要通过Storm进行,数据分析过程中缓存用了豌豆荚的Codis。离线分析目前用Hadoop/Spark的方式,数据分析之后,一部分存到Hbase,另一部分在通过Cober存储到MySQL里面。

转载于:https://www.cnblogs.com/linjiqin/p/6406853.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【pyqt5学习】——QcomboBox学习

目录 1、添加条目: 1)逐一添加 2)批量添加 3)获取当前选中的索引 4)获取当前选中文本 5)根据索引获取文本 6)统计条目总数 7)信号——当前选中的索引发生改变currentIndexChanged() 2、…

vSphere Client 编辑虚拟机属性的问题

vSphere Client 编辑虚拟机属性的问题 编辑虚拟机属性的时候, 出现: vpxclient.vmconfig.cpuid 初始值设置异常之类的,重置了, 并将注册表中的所有vmvare 相关键值删除了, 还是一样的。。 后面参照https://kb.vmware.c…

Val编程-系统架构

利用Val可以编写相对大型软件。 界面书写,运动轨迹规划,外部通讯,进程交互,文本读写.... GlobalData可以利用一个库来作为一个公用库,实现各个库的数据交互。 PublicFunc书写基本的通用函数来作为基本函数,…

poj 1256 Anagram—next_permutation的神奇应用

题意:给你一条字符串,让你输出字符串中字符的全排列,输出的顺序要按它给的奇葩的字典序。 题解:要输出全排列,暴力dfs可以过,但要注意题目的字典序以及相同字符的情况。如果用next_permutation()处理可以简…

【pyqt5学习】—— 滑动条Qslider、计数器QSpinBox学习

目录 1、滑动条QSlider 1)常用属性 2)实例——利用滑动条来实现字体大小的修改 ​编辑 2、计数器QSpinBox 1)属性方法 2)实例 1、滑动条QSlider 1)常用属性 self.slider QSlider(Qt.Horizontal)# 设置最小值self.slider.setMinimum(2)…

shell常用命令之curl: -w,–write-out参数详解

顾名思义,write-out的作用就是输出点什么。curl的-w参数用于在一次完整且成功的操作后输出指定格式的内容到标准输出。 输出格式由普通字符串和任意数量的变量组成,输出变量需要按照%{variable_name}的格式,如果需要输出%,double一…

Val编程-速度因子

机械手臂在一个三个基本指令(movel,movej,movec)指令中有下面基本参数进行配置。 1. Frame toolField; Tcp的值2. Frame frameField;用户坐标系的值3. MoveType absRelField;绝对运动与相对运动4. Config configField;姿态5. BlendType blendTypeField;倒…

Node.js学习之路24——Express框架的app对象

1.express() 基于Node.js平台,快速、开放、极简的web开发框架。创建一个Express应用.express()是一个由express模块导出的入口top-level函数.const express require(express); let app express(); 1.1 静态资源管理 express.static(root, [options]) express.stat…

【pyqt5学习】——对话框QDialog学习(QMessageBox、QColorDialog、QFIleDialog、QFontDialog、QInputDialog)

目录 1、对话框QDialog类别 2、通用对话框 ​编辑 3、消息对话框QMessageBox() 1)消息对话框QMessageBox类型 2)案例 ​编辑 4、输入对话框QInputDialog 1) 类型 2)案例 5、字体格式对话框QFontDialog 6、颜色对话框QColorDialog 1&…

使用 Mesos 管理虚拟机

摘要 为了满足渲染、基因测序等计算密集型服务的需求,UCloud 推出了“计算工厂”产品,让用户可以快速创建大量的计算资源(虚拟机)。该产品的背后,是一套基于 Mesos 的计算资源管理系统。本文简要介绍该系统的结构、Mes…

Swift数据类型_整型和浮点型

//swift中的整型和浮点型/***//类型推断整数是Int 浮点数是Double ,日常使用需要注意不能越界,存储时间毫秒数 英雄经验数等等之类内容容易越界整型大多数情况下,你不需要在代码中指定哪种整型。Swift提供了一种额外的整型,Int类型Java中的long型&#x…

Val编程-套接字

套接字的介绍:http://zh.wikipedia.org/wiki/Berkeley%E5%A5%97%E6%8E%A5%E5%AD%97 主要分为客户端和服务器。客户端一般是需要主动去链接,需要配置服务器的IP和端口。服务器是被动响应,需要打开相应的端口。端口一般不推荐使用系统端口和常用…

【pyqt5学习】——Qpainter控件学习(文本、图像、各种图形)

目录 1、作用及应用步骤 2、绘制文本drawText() 3、像素级别绘制点(正弦曲线为例) 4、绘制不同样式的直线 5、绘制弧形、圆形、扇形、图像等 6、画刷填充区域QBrush 1、作用及应用步骤 QPainter是一个用于绘制的类,该类可以用于绘制&…

反向代理与Real-IP和X-Forwarded-For(转)

如下图所示,客户端通过Nginx Proxy1 和 Nginx Proxy2 两层反向代理才访问到具体服务Nginx Backend(或如Tomcat服务)。那Nginx Backend如何才能拿到真实客户端IP呢? 接下来我们来看看如何才能获取到客户端真实IP。 场景1  场景1是…

Android studio打开之后 cannot load project: java.lang.NUllpointerException

参考来源:http://bbs.csdn.net/topics/391014393 关闭网络,重新打开Android studio就好了。(但是原因不清楚是为什么?) Internal error. Please report to http://code.google.com/p/android/issuescom.intellij.ide.p…

Val编程-任务编程

不同任务之间可以通过一个标志符来实现互斥事件。 程序代码&#xff1a; Task2 <span style"font-size:12px;">beginwhile truewait(bTaskFlag)cls()gotoxy(1,1)put("这是Task2")gotoxy(1,2)if bTaskFlagput("BFlag:true ")elseput(&…

【pyqt5学习】——拖拽功能(DragDrop)、剪切板(QApplication.clipboard)

目录 1、拖拽功能&#xff08;Drag&Drop&#xff09; 2、剪切板&#xff08;QApplication.clipboard&#xff09; 1、拖拽功能&#xff08;Drag&Drop&#xff09; 选择文本输入框中的文本&#xff0c;移动到下拉框中自动添加步骤&#xff1a; 1、将文本输入框设置为可…

oracle12c之 控制pdb中sga 与 pga 内存使用

Memory Management using Resource Manager Oracle数据库资源管理器(资源管理器)现在可以在多租户容器数据库(CDB)中管理可插入数据库(PDBs)之间的内存使用。这一特性有助于在CDB中维护所有PDBs的性能&#xff0c;确保所有的PDBs都不会占用更多资源&#xff0c;从而导致其他PDB…

[LeetCode] 21. Merge Two Sorted Lists ☆

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 解法&#xff1a; 新建一个链表&#xff0c;依次比较两个链表的头元素&#xff0c;把较小的移到新链表中&#xff0c;直到有…

Val编程-特殊函数使用

Waitendmove()和$Waitendmove()使用心得 这是两个部分&#xff0c;程序运行部分和运动堆栈部分&#xff0c;waitendmove是两个部分进行交互的一个函数。 一般情况下waitendmove()速度会降到0&#xff0c;相当于blend等于off. 代码&#xff1a; begincls()userPage()title("…