2019独角兽企业重金招聘Python工程师标准>>>

说在前面

本文转自“天河聊技术”微信公众号

财务平台在美利1年多的时间经过了2次平台架构的演变,中间也遇到了这样那样的架构、技术的问题,今天整理了下,希望可以给予大家一些启发。

架构演变

财务平台整体架构图

业务处理流程

财务平台是和美利的大数据平台、用友NC系统进行合作来完成整个财务的账务处理过程的。

大数据平台把对接财务平台的业务系统,如公司新核心、资产、负债、结算、支付等业务系统的mysql数据库数据通过sqoop抽取到hive中进一步转换成财务业务数据口径数据推送到财务平台接入服务数据库中,再由财务平台的批处理服务拉起台账转换的任务进行集群全服处理后,财务人员进行台账数据核对后创建明细账,在进行明细账核对后创建凭证数据,再把凭证数据推送到用友NC服务系统,财务余额管理、总账管理、相关财报管理有用友NC系统来实现。

财务平台V1架构

1.0应用架构采用的是单体模式,数据库架构采用的是分片架构

项目背景

技术的应用架构、数据架构一定是为业务架构服务,脱离业务只谈技术架构是纸上谈兵

为了尽快满足业务需求,财务组面临财务业务专业、复杂,数据量巨大这样的问题,就要求开发要很懂财务业务知识、对海量数据处理的相关技术要熟悉、甚至要精通,代码性能要很好,财务平台从0到1搭建、财务组团队也是从0到1搭建,因此面对这样的客观原因,要快速落地财务平台,对财务平台灵活性(如会计科目、事务处理规则、会计规则配置灵活配置化)、扩展性(抽象出来事务处理规则引擎、会计规则引擎、计费引擎、账务处理引擎)、账务处理性能(能吞吐海量数据)都有很高的要求,因此更急切的架构是数据库架构要能抗住这么大的数据量,因此采用了数据库分片架构,数据库架构由我的上级阿兵主刀,感谢阿兵,到现在财务平台已经到了平稳运营阶段,抗住了第一次业务历史数据亿级别数据结账以及到现在的单日业务数据量500W左右、月账务处理数据量在5000W左右的一个体量。

应用架构为什么采用单体模式?

单体模式架构有很多好处

1、        代码共享

2、        易于测试

3、        容易部署

因此如果需要从0到1快速落地一个项目这种应用架构方案是不二选择,虽然财务平台采用的是单体模式架构,但是财务平台模块设计是以微服务架构设计模式的,为后期的微服务化架构落地打下了坚实的基础。

没有完美的架构只有最合适的架构,架构都是根据业务变化一步一步演变而来,否则有可能导致过度设计适得其反。

面对这么大的数据量财务平台采用了分片架构模式,中间件采用的是sharding-jdbc,这个框架财务平台用的是1.5版本,基于client的实现jdbc规范的一个增强数据库驱动,比较轻量级,目前财务平台对其进行了一部分定制化开发,现在已经很稳定。目前的账务处理流程是写大于读的场景,因此这个架构版本中是没有考虑读写分离的。

在架构1.0版本中利息计提服务是采用的存储过程逻辑来实现。

为什么要采用存储过程

  1. 存储过程可以更好的进行模块化设计。

  2. 执行更快,如果一个SQL要大量、重复执行、存储过程要比SQL快的多。

  3. 减少网络消耗。

  4. 版本迭代比较快,只专注开发SQL就可以,开发、测试比较方便。

这种数据库架构方案也是为了快速落地。

财务平台V2架构

架构1.0有哪些不好的地方呢

单体应用架构模式的弊端

1、        不够灵活

2、        妨碍持续交付

3、        受技术栈限制

4、        技术债务,代码耦合,牵一发而动全身

存储过程有哪些不好的地方呢

1、        执行进行SQL级别的数据库优化

2、        运行在mysql服务器端,数据量大的话会造成数据库服务器io、cpu性能消耗,无法进行优化,在mysql环境下不同的应用服务的数据库在一台mysql实例上,一个数据库的存储过程把数据库服务器资源都占用,对其他应用服务来说无疑是一场灾难。

因此在架构2.0中我们对利息计提进行了服务化,替换掉了全部的存储过程,演变为服务化架构模式。

财务平台V3架构

为什么要做服务化、微服务化是为了达到服务高可用的终极目标。

架构2.0中服务化架构还是比较粗粒度的,那么在这个架构模式下有哪些问题呢?

1、        服务之前还是耦合到一起的,没有真正的解耦

2、        数据库还是耦合到一起的

3、        不是严格的遵循了单一职责原则

4、        一些服务是耦合到一起的不能做到真正的独立部署、升级、替换,账务服务是一个服务包括台账、明细账、凭证

因此基于现在的服务化架构还需要进一步服务化,达到微服务化的目的,财务平台采用的技术栈是spring cloud。

微服务化后带来了哪些好处呢

1、        更便于开发、不同开发分工协作、持续交付

2、        应用启动更快

3、        故障进一步隔离,一个微服务出现问题不会影响其他服务,更不会影响整个应用

4、        理论上不受限制于技术栈,只要服务之前通讯协议达成一致即可。

数据库采用了读写分离

写还是sharding-jdbc+mysql数据库集群、读采用的是elasticsearch,elasticsearch采用的是倒排索引机制,理论上比SQL查询的效率要快上百倍以上,如果想详细了解elasticsearch,请关注“天河聊技术”微信公众号,有更详细的关于elasticsearch的总结、还有其他技术的一些看法。

微服务化后面临的问题

最大的问题就是分布式数据一致性的问题,目前财务平台采用TCC实现的强一致性事务。其他一些问题spring cloud生态体系基本上解决或者加以定制化。

财务平台业财一体化架构的一些思考

财务平台现阶段来说是一个后知的系统。

对接财务平台的系统之多、业务场景之多,数据治理是需要一个漫长而艰辛的过程,比如结算支付退票这种场景,线下结算的这种场景,线下还款等等业务场景,财务平台拿到的数据并非实时、完全准确的,也可能是一种业务上中态的数据,所以目前业务数据到财务平台是经过大数据平台这个桥梁来对业务数据进行统一对接,因此财务平台无法实时感知业务端的数据的,所以要达到真正的业财务一体化,决策者可以实时看到财报,财报的实时性、准确性暂时还是无法达到的,这也是财务平台未来规划要实现的,后期要把财务平台和业务数据真正的实时打通,业务系统全部线上化、财务平台进行实时记账、财务对账流程自动化、账务处理流程自动化,才能做到财报的实时性,最终也才能达到业财一体化的目的。

现在处理方案是T日抽取T-1日的业务数据来进行财务账务处理,因此数据量集中在一起对数据库的压力、服务器的压力是很大的,峰值都在一个时间区间,除了这个时间区间其他时间服务器基本上是空闲的,很大程度是这是一种服务器的资源浪费,这也是财务平台架构上要后期优化的地方。

这个架构方案目前只是一个idea,还没有进行详细规划,算是一个思路,要走到这一步是需要一个漫长而艰辛的过程。

要实现这个目标要这些事情

1、        业务数据治理、操作全部线上化。

2、        业务数据与财务平台实时打通。

3、        账务处理完全自动化。

说道最后

以上是针对财务平台的三个版本应用、数据库演变之路做了些总结,仅供参考。

转载于:https://my.oschina.net/u/3775437/blog/1795494

美利财务平台架构演进相关推荐

  1. 从零到百亿级,揭秘科大讯飞广告平台架构演进之路

    作者:仉乾隆 https://www.infoq.cn/article/PkWo_g6G5YGaXEiT8lm9 广告.电商和游戏是互联网变现的三个最主要手段,而电商中除了直接卖东西的部分,其他本质上 ...

  2. 58同城高性能移动Push推送平台架构演进之路

    本文详细讲述58同城高性能移动Push推送平台架构演进的三个阶段,并介绍了什么是移动Push推送,为什么需要,原理和方案对比:移动Push推送第一阶段(单平台)架构如何设计:移动Push推送典型性能问 ...

  3. 中国民生银行天眼日志平台架构演进的平凡之路

    本文由 [AI前线]原创,原文链接:t.cn/RYgJ8hD AI 前线导读: "随着中国民生银行的 IT 业务系统的迅速发展,主机.设备.系统.应用软件数量不断增多,业务资源访问.操作量不 ...

  4. 《中国民生银行天眼日志平台架构演进的平凡之路》阅读有感

    <中国民生银行天眼日志平台架构演进的平凡之路>阅读有感 随着中国民生银行的 IT 业务系统的迅速发展,主机.设备.系统.应用软件数量不断增多,业务资源访问.操作量不断增加,对于应用整体系统 ...

  5. vivo 推送平台架构演进

    本文根据Li Qingxin老师在"2021 vivo开发者大会"现场演讲内容整理而成.公众号回复**[2021VDC]**获取互联网技术分会场议题相关资料. 一.vivo推送平台 ...

  6. 分析视角下银行业数据平台架构演进及实现

    当前,数据成为驱动银行业数字化转型的关键生产要素.如何从海量的数据中识别有效的价值数据,实现业务与数据的深度融合,激活数据要素潜能.深挖数据资产价值,成为银行业持续探索的重要课题. 随着云计算.大数据 ...

  7. 《微店大数据开发平台架构演进》阅读有感

    <微店大数据开发平台架构演进>阅读有感 一.为什么需要大数据开发平台 微店在16年4月份之前,数据开发流程基本是这样的: 开发人员通过公共账号登录安装了Hive.Hadoop客户端的gat ...

  8. 《微店大数据开发平台架构演进》读后感

    <微店大数据开发平台架构演进>读后感 <微店大数据开发平台架构演进>这篇文章向我们介绍了八个问题,其中对Mars大数据平台构成.Mars系统架构设计.分布式系统架构.定时.依赖 ...

  9. 云时代架构之微店大数据开发平台架构演进

    微店大数据开发平台架构演进 为什么需要大数据开发平台? 微店在16年4月份之前,数据开发流程基本是这样的: 开发人员通过公共账号登录安装了Hive.Hadoop客户端的gateway机器:编写自己的脚 ...

  10. 美利财务平台数据库架构进阶

    2019独角兽企业重金招聘Python工程师标准>>> 说在前面 本文转自"天河聊技术"微信公众号 分布式是一个老生常谈的话题了,大家都在做服务拆分.微服务化,那 ...

最新文章

  1. Android 中查看内存的使用情况集经常使用adb命令
  2. 012-简单辅助元素
  3. java中如何忽略字符串中的转义字符--转载
  4. 清翔电子单片机原理图stc89c52_1000. 电子编程入门到工程师--从看得到开始
  5. 深入了解Blazor组件
  6. java下载网络文件_java下载网络文件的方法有哪些
  7. 电商订单ElasticSearch同步解决方案--使用logstash
  8. Javascript的简单介绍,只作为个人笔记,不作为知识参考,如果想要学习,请找其他文章
  9. 基于C语言及51单片机的PID控制电机调速详解(附详细代码及Protsus仿真)
  10. nfc卡模式与标准模式_NFC(1)NFC简介,3种模式
  11. android 天气类应用,一周天气预报!7款另类Android天气应用
  12. C语言零碎知识点之输入字符数组
  13. UML活动图案例-业务流程建模
  14. ”左行右立“折寿探秘
  15. 原笔迹手写实现平滑和笔锋效果之:笔迹的平滑(二)
  16. 基于登录注册用ajax实现手机验证码功能
  17. 【渝粤教育】国家开放大学2018年秋季 2408T中国当代文学 参考试题
  18. 实现广电宽带电视网关单线复用IPTV的设置
  19. Neutral Graph Collaborative Filtering——论文提炼
  20. 如何在Ubuntu 20.04上安装Kvm

热门文章

  1. 威联通Docker安装为知笔记方法
  2. 计算机网络技术报告一份,计算机网络技术》实验的报告.doc
  3. 计算机网络基础实验报告--利用数据包嗅探器Wireshark捕获数据包实验
  4. android桌面 vulkan,Vulkan 设计指南
  5. Vulkan层的简要说明
  6. python 求和_python pandas行、列求和及累加求和
  7. MTK平台前后摄使用PMIC供电无法设置不同的DVDD电压
  8. 30岁前,环游世界220天
  9. C语言统考试卷一及答案,2017年《计算机应用基础》统考试题及答案
  10. 监控摄像头进行网页直播和微信直播的技术方案