Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >高效程序员如何优雅落地需求

高效程序员如何优雅落地需求

作者头像
技术zhai
发布于 2019-02-15 04:05:54
发布于 2019-02-15 04:05:54
9030
举报
文章被收录于专栏:JAVA技术zhaiJAVA技术zhai

回想起从公司成立敲出的第一行代码算起到现在也快三年了,平台的技术架构,技术体系也算是经历了四次比较重大的升级转化(目前第四代架构体系正在进行中),临近年底也想抽出时间来回顾一下,一个小公司从最开始的零交易到现在交易量超过百亿背后的技术变迁。

总体介绍

在互联网金融行业一百多亿其实也算不上大平台,也就是二级阵营吧,其实每次的架构升级都是随着业务重大推进而伴随的,在前一代系统架构上遇到的问题,业务开发过程中积累一些优秀的开发案例,在下一代系统开发中就会大力推进架构升级。一方面可以平滑过度,一方面公司资源可以大力支持,同时技术的小伙伴们可以使用到前沿的技术,更有开发的成就感,就这样我们大概也就是9个月就行系统架构一次升级,就到了我们现在的这套架构中。

很多网友经常会问,你们平台的TPS是多少呀,最大并发是多少呀,性能怎么样,说实话我们是一个小公司,最夸张也就上万人同时抢标,但是做为一个中型的互联网金融平台要做的事情也真的不少,远远不只是这些参数可以说的清楚;我们也不是什么高大上的平台,使用的技术也是目前比较主流开源产品,但在公司不断发展的过程中也遇到了很多的问题,也尽量去使用比较主流的、开源的、适合我们的一些解决方案来构建整个系统,在这里分享平台发展背后技术换代的变化,同时希望和大家多做一些交流,多提一些建议。

我们进行了四次大的架构变化,每代架构都用一句话来总结:

  • 第一代架构特点:业务比较集中、功能满足投资理财需求、快速上线
  • 第二代架构特点;分布式系统改造,平台化初具规模,各项垂直业务系统搭建上线、产品端极大丰富用户投资、大数据平台研究并使用
  • 第三代架构特点;SOA治理,使用zookeeper作为注册中心,dubbo做监控和调度中心;cas实现单点登录,使用shiro做权限控制
  • 第四代架构特点;全面启用微服务开发模式,springboot+springcloud技术桟做为第四代架构技术支撑

下面做详细介绍

第一代系统架构

2014年应该算是互联网金融元年,在之前其实已经有很多互联网公司用着各种模式在生存,一直不温不火,但是到2014年突然火爆了起来,首先是网贷之家,网贷天眼这种第三方网站流量突然增加,接着是媒体报道不断跟进,再后来就报出各种互联网金融公司获得XXX美元投资的报道越来越多,政策也慢慢明朗,于是很多大型公司(集团)也就趁着这股热潮跟进,其中就包括我们。

第一代系统最主要就是抢时间,公司希望用最短的时间内保证系统上线,那时候移动浪潮已经启动,于是决定优先上线移动端,网站可以暂不考虑。公司当时有PHP和Java两种开发语言技术储备,因为PHP在快速开发上面有着非常大的优势,因此决定采用前端PHP+后端Java这种模式。系统分成了三层:用户层:安卓和IOS移动端;接口层:php提供用户和交易接口;后端:后端有两部分,后台和定时系统。后台用PHP开发和接口层公用了一个系统,另一个是定时系统,负责计息、派息、到期等定时任务等使用了java开发。

基础服务和中间件,mysql做了最基本的主从来支持,第一代系统只是使用了mysql的主库,从库只是同步备份;memcached用来处理用户抢标的并发问题,也只用了这一块;ActiveMQ用来使用二级市场的转让撮合以及其它一些异步消息通知。项目部署:php使用apache部署,定时服务使用tomcat6来做应用服务器,使用lvs来做前端apache的负载,基本上第一代也就这些技术了,下面是第一代系统的架构图。

第一代系统上线之后,网站和H5(手机浏览器或者微信端)系统建设就变的特别突出,作为一个互联网金融公司没有官网不能忍,于是又开始马不停蹄的开始开发网站和H5系统,在这个期间PHP之前做的后台这块摘了出来,用java从新规划了一版,至此PHP就负责了网站、APP接口、H5这三个系统,三个系统共用的一个核心交易,java这边负责后台管理和定时服务,我们一般给这个架构叫做1.1代架构。

第1.1代系统架构图,绿色部分为变动部分

第一代系统的缺点是业务过于集中,仓促上线,后期问题较多

第二代系统架构

第二代系统的背景是随着公司业务量的快速发展,很多初期所欠的技术债务统统爆发,线上出现了很多问题,最严重的一次是给个别用户重复派息,各种被骂,现在记忆犹新。另一方各业务部门需求不断,公司产品需求不断,所以这个阶段就是忙着修复各种生产问题,一边还需要开发垂直业务系统。那段时间差点被逼疯了,第一代系统是封闭开发,回来还没缓过劲,这边又赶马上架,真是疼并快乐着。

第一个垂直子系统上线的是:合同系统,当时用户投标后没有一个合同,很多用户很不放心,就把优先级提到了前面。后来就单合同系统就改了三个版本,第一个版本只是生成pdf,第二阶段上线电子签章,第三个阶段加水印,自定义动态生成pdf;紧接着开发积分系统:用户邀请,投资等生产积分,用来兑换抵现卷等;抽离出消息系统:站内消息、短信、邮件等;上线监控系统、业务监控和服务监控,业务失败预警;各业务部门继续不断提需求,上线财务系统:财务人员统计核算金额;风控系统:监控异常用户,异常交易;给销售开发了销售系统;因为和很多第三方系统对接,又开发了对外接入系统。

一代系统做的很赶,产品界面又很烂,随即启动规划了网站2.0、APP2.0、H52.0,针对前端系统的需求,在后端开发了CMS系统来发布项目、公司的公告新闻等;第二代产品端普遍规划了很多大数据分析的一些需求,会在官网展示全量数据分析后投资偏好、投资的金额都跑到哪里去,前端用地图来展示,对于个人也会有还款日历,代收数据分析等,因为需要跑全量数据,在规划的时候都是设计离线来处理,将数据从mysql从库同步到mongodb的集群中,利用mongdo的mapreduce技术来处理大量的数据,于是我们的数据库层就变成下面的这个架构

mysql实时同步到mongodb,我们使用的是tungsten-relicator这个工具,会在mysql服务器端启动一个监控agent,实时监控mysql的binlog日志,同时在mongodb的服务器端也起了一个服务端,agent监控到数据变化后传送给服务端,服务端解析后插入到mongodb集群中以达到实时同步的效果,如上图,当初写了一篇文章来介绍:大数据实践-数据同步篇tungsten-relicator(mysql->mongo),其实这个工具在使用中,也不是特别的稳定,但是当初的选择方案并不多,幸好后期慢慢的熟悉后算是稳定了下来。

数据清洗系统我们大胆的使用了golang来开发,当时使用的golang版本是1.3吧,现在都1.8了,以前也是没有接触过也是锻炼了队伍,好在golang语言本身非常简洁和高效,虽然踩了N多坑,但是最终我们还是按时投产了;后来又使用了golang开发了一个后台,是在beego框架的基础上来做的。大数据分析系统后来又升级了一代,在前端的各业务系统,UI用户层做了很多埋点来收集用户数据,通过activeMQ传输接收最后存储到mongodb,在进行数据清洗,将清洗后的结果存入到结果库中,供前端业务系统使用;后来利用beego+echart重新做了一版数据分析系统。

大数据系统的架构图

因为后端数据库的压力不断增大,后端管理系统、业务系统均作了主从分离;后台管理系统增加缓存,启动了redis做缓存;使用nginx搭建了独立的图片服务器;第二代系统开发过程中,也是公司发展最快的阶段,上线了N多的活动。

第二代系统架构图:

稍等总结一下: 第二代架构上线了各业务系统,做了主从分离,搭建了大数据平台为以后更多的数据处理提供了技术基础 缺点:各业务系统切分之后,各项目之间调用复杂;后台系统繁多、各系统之间有单独的账户系统,运营需要来回切换完成平台运营监控

第三代系统架构

第二代系统开发完成之后,留给我们了三个问题很痛苦,第一个是随着业务系统不断增多,系统之间的调用关系成指数级别上涨,在第三代系统初期,我们又开发了很多基础组件,更是加剧了这个问题;第二个问题和第一个问题相辅相成,系统之间调用关系太多,如果移动其中一个子系统,可能需要修改关联系统的配置文件,重新启动服务,经常因为更新一个系统,其它系统也需要被动更新,投产和出问题切换很复杂;第三个问题是我们开发了很多的后台系统,但是账户没有统一,每个子系统有各自的账户中心,运营和业务人员需要来回登录才能完成日常工作,随着业务量增大这个问题也日益突出。

于是又开启调研、系统选型等,解决第一个问题就是引入SOA服务治理,通过服务的注册和发现解决系统之间的解耦,当时考察了很多,最后选型dubbo,原因无它,有大量群众使用基础该趟的水的趟过了。解决第二个问题就是引入配置中心,当时调研了360的Qihoo360/QConf、Spring的spring-cloud-config、淘宝 的diamond、还有百度的disconf,最后纠结半天选定了disconf,完美和spring cloud擦肩而过,但是正是从这里开始让我们注意到了spring-cloud、Spring-boot为第四代的架构选型做了基础,其实最后disconf也只是在少部分项目使用,也没完全推广开;解决第三个问题就是账户中心,使用了cas实现单点登录,shiro做权限控制,dubbo来提供登录后权限列表等服务端接口。

改造后的架构图

在这个基础上面,我们又抽离出来很多基础组件,comomn组件处理共用的基础类,包含字符类、日期类、加密类….,搭建了fastDFS集群来处理文件系统,做了redis集群的测试;单独开发了定时调度系统,将所有的定时任务统一集成到调度系统,那个系统需要定时任务都可以在页面自动添加调度策略;前端PHP做了系统改造,主从分离、静态优化等

在后来,公司又启动众筹平台的建设,这次系统完全采用java语言开发,app端采用混合开发模式,其中APP的所有一级页面全部采用原生开发,所有的二级页面都是H5+vue这种模式,后端全部采用dubbo做服务化,最终的架构如下:

图里面系统只罗列一部分,使用其它服务来代替

第三代系统启动了SOA服务治理,引入统一账户中心、基础组件;缺点是开发环境较复杂

第四代系统架构

人总是不满足,技术呢也总是希望可以使用最好架构体系,在三代系统架构的开发中,了解到了spring cloud和spring boot,在不断的学习之后,越发的感觉到springboot的便利性,快速开发的优点甚是喜爱,spring cloud体系也完全满足一个大型系统需要考虑的方方面面,微服务的概念不断的被提出来,以上为技术背景;另一方面国家开始严格要求P2P公司必须与银行存管,分析了银行的相关接口后发现如果严格按照规则走,我们的系统需要大改造,同时公司为了满足监管要求,又开发出白条相关产品也是一个大项目,趁着以上的两个背景,我们决定在进行银行存管和白条项目的同时全面拥抱微服务。

至于为什么我们要抛弃dubbo转而全面拥抱spring cloud原因有三,1、dubbo多年都没有更新了,spring cloud不断的在更新升级;2、dubbo主要做服务治理和监控,spring cloud几乎考虑了微服务所需要方方面面,比如统一配置中心、路由中心;3、spring cloud更是无侵并且完美和spring其它项目整合,开发效率更高。

既然选定了使用spring boot+spring cloud来改造,微服务技术选型这边就定了下来,那么如何开启改造呢,毕竟在进行新一代系统改造的同时也不能影响原有业务,其中最主要的问题就是最初的系统虽然都是按照分布式的开发模式来进行,由于老系统的原因有的系统还是共用了一个数据库,微服务要求每个独立的子系统有自己独立的库操作,别的系统如果需要修改或者查询子系统的数据,需要根据服务间接口调用来获取。因此计划先从新开发的项目和需要改造的项目中启用springcloud项目,别的系统暂时先通过路由器模式来通讯,最终的系统架构图如下:

在架构的这条路上面没有终点,变化就是永远的不变,架构的升级更是为了更好的支撑业务,二者相辅相成。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年06月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
干货 | 携程高可用架构的演变和迭代——应用开发者视角
作者简介 周源,携程技术中心基础业务研发部高级研发经理,从事软件开发10余年。2012年加入携程,先后参与支付、营销、客服、用户中心的设计和研发。 前言 携程的架构经历了长期的演变和迭代,其中多个产品已经历了5次以上更新换代。每次迭代都有其背景和出发点,都解决了前一个版本的痛点又不可避免地带来一些新的问题或遗漏一些问题。这种迭代过去、现在,以及将来将一直持续,其中经历可圈可点,值得技术人细细品味。 本文会首先从总体介绍携程架构的组成,然后以发布系统、配置管理和SOA三个实际案例,详细介绍架构迭代,最后以Us
携程技术
2018/03/16
1.2K0
干货 | 携程高可用架构的演变和迭代——应用开发者视角
Istio入门(服务网格Service Mesh)安装简介
Istio提供一种简单的方式来建立已部署的服务的网络,具备负载均衡,服务到服务认证,监控等等功能,而不需要改动任何服务代码。简单的说,有了Istio,你的服务就不再需要任何微服务开发框架(典型如Spring Cloud,Dubbo),也不再需要自己手动实现各种复杂的服务治理功能(很多是Spring Cloud和Dubbo也不能提供的,需要自己动手)。只要服务的客户端和服务端可以进行简单的直接网络访问,就可以通过将网络层委托Istio,从而获得一系列的完备功能。可以近似的理解为:
王先森sec
2023/04/24
6860
Istio入门(服务网格Service Mesh)安装简介
12306网站:分布式内存数据技术为查询提速75倍
问题导读: 1、什么是GemFire分布式内存数据技术? 2、12306购票网站是如何实现大规模访问? 摘要: 背景和需求   中国铁路客户服务中心网站(www.12306.cn)是世界规模最大的实时交易系统之一,媲美Amazon.com,节假日尤其是春节的访问高峰,网站压力巨大。据统计, 在2012年初的春运高峰期间,每天有2000万人访问该网站,日点击量最高达到14亿。大量同时涌入的网络访问造成12306几近瘫痪。 中国铁道科学院电子计算技术研究所作为12306互联网购票系统的承建单位,急需寻
用户1410343
2018/03/27
2.7K0
12306网站:分布式内存数据技术为查询提速75倍
十年一剑,谷歌数据中心网络Jupiter的进击之路
十几年前,谷歌发现传统的网络架构无论是硬件还是软件,都无法满足其带宽需求和数据中心分布式计算基础设施的规模。秉着 “没有人做就自己做” 的精神,谷歌开始构建自己的网络硬件和软件,将数据中心中所有的服务器连接在一起,为其分布式计算和存储系统提供动力。 2015年,谷歌在SIGCOMM会议上发表论文《Jupiter Rising: A Decade of Clos Topologies and Centralized Control in Google’s Datacenter Network》,详细地阐述了
SDNLAB
2022/09/19
3.5K0
十年一剑,谷歌数据中心网络Jupiter的进击之路
Spark 极简教程
何谓计算引擎,一言以蔽之,就是专门处理数据的程序,在大数据之前,人们用数据库来处理数据,人们常说的SQL,它是一种DSL,它的背后正是数据库的计算引擎,但是数据库的计算和存储通常被集成在一起,统称为数据库引擎。
一个会写诗的程序员
2021/12/16
6090
Spark 极简教程
自动化革命与DevOps
天阳供能,地阴成形,古圣人察而用之。顺四时,因地宜,谓之无为。无为非不为,乃顺自然而为。
DevOps持续交付
2020/06/09
3970
Intel ARC GPU路线图曝光,台积电将获得大量订单
4月6日消息,近日,英特尔Arc系列GPU路线图曝光,目前Intel Arc GPU的第一代产品是Alchemist,之后是 Battlemage、Celestial 和 Druid 共四代产品。与前三代不同的是,第四代的 Druid 将采用全新的 Xe 架构来取代之前的 Xe-HPG 架构。
芯智讯
2023/04/11
3080
Intel ARC GPU路线图曝光,台积电将获得大量订单
详解AI加速器(四):GPU、DPU、IPU、TPU…AI加速方案有无限种可能
选自Medium作者:Adi Fuchs 机器之心编译 在上一篇文章中,前苹果工程师、普林斯顿大学博士 Adi Fuchs 聚焦 AI 加速器的秘密基石:指令集架构 ISA、可重构处理器等。在这篇文章中,我们将跟着作者的思路回顾一下相关 AI 硬件公司,看看都有哪些公司在这一领域发力。 这是本系列博客的第四篇,主要介绍了 AI 加速器相关公司。全球科技行业最热门的领域之一是 AI 硬件, 本文回顾了 AI 硬件行业现状,并概述相关公司在寻找解决 AI 硬件加速问题的最佳方法时所做的不同赌注。 对于许多 AI
机器之心
2022/03/04
2K0
微服务架构的进化之路
在第一代微服务架构中,应用除了需要实现业务逻辑之外,还需要自行解决上下游寻址、通信及容错等问题。随着微服务规模的逐渐扩大,服务寻址逻辑的处理正变得越来越复杂,哪怕是同一种编程语言的另一个应用,上述微服务的基础能力也需要重新实现一遍。
全球技术精选
2021/10/09
6240
微服务架构的进化之路
从火种到核心 浅析Hadoop大数据用户的演变
在Hadoop发展的8年时间里,我们看到一种“使用浪潮”——一代又一代用户在相同的时间和类似的环境下使用Hadoop。每一个在数据处理时使用了Hadoop的用户,都面临着类似的挑战,为了让一切正常运转,要么被迫协同工作,要么干脆隔离。接下来我们就讨论这些客户,看他们彼此之间有何不同。 第0代——火种 这是开头:在谷歌2000年中的研究论文的基础上,一些信徒奠定了廉价存储和计算能力的商品化基础。 Doug Cutting是教父。他跟Mike Cafarella一起,实现了谷歌文件系统和Map
静一
2018/03/16
5770
时间管理的定义与目的
时间管理定义 ◆时间就是生命,时间就是金钱。 ◆人们往往是重视生命,乐于理财,而忽略了时间管理。 ◆善用时间,就是善用自己的生命! 时间管理是在日常事务中执着并有目标地应用可靠的工作技巧,引导并安排
cloudskyme
2018/03/20
5.5K0
时间管理的定义与目的
新至强训练推理增效10倍,英特尔CPU加速AI更上一层楼
人工智能技术改变了我们的生活,而说到 AI 背后的算力,人们经常会先想到 GPU。从 2019 年英特尔为其第二代至强可扩展处理器增添了内置的深度学习加速技术后,原本定位通用计算的 CPU 芯片,也加入了为 AI 加速的行列。
芯智讯
2023/02/09
7680
TRICONEX MP3009X 电路形式与输出的交流信号
池型式上可分作衬底式与薄膜式,衬底式在材料上又可分单晶式、或相溶后冷却而成的多晶式衬底;薄膜式则可和建筑物有较佳的结合性,它具有曲度,有可挠、可折叠等特性,材料上较常用非晶硅。除前二者外,另有有机或纳米材料制作之太阳能电池,目前仍处研发阶段。
用户10530100
2023/04/27
2840
TRICONEX MP3009X 电路形式与输出的交流信号
深入了解服务器 CPU 的型号、代际、片内与片间互联架构
在前面两篇文章《个人 CPU 的型号、代际架构与微架构》 和 《聊聊近些年 CPU 在微架构、IO 速率上的演进过程》 , 我们介绍了个人台式机电脑中的 CPU 型号规则、核设计细节,以及各代 CPU 的关键变化。在这一节中,让我们进入到和大家手头工作相关度更高的服务器 CPU 原理部分。
开发内功修炼
2024/01/03
4.1K0
深入了解服务器 CPU 的型号、代际、片内与片间互联架构
计算机发展史资料简介,计算机发展史简介「建议收藏」
人类所使用的计算工具是随着生产的发展和社会的进步,有着从简单到复杂、从低级到高级的发展过程,计算工具相继出现了如算盘、计算尺、手摇机械计算机、电动机械计算机等。
全栈程序员站长
2022/11/02
3590
斯坦福AI 5小时DNA测序破世界纪录!创人类新里程碑,成本仅3万
---- 新智元报道   编辑:桃子 袁榭 拉燕 【新智元导读】近日,斯坦福大学研究团队把人类DNA测序的时间缩短至5小时2分钟,重新定义了人类基因组测序速度! DNA测序时间减半,还创下了最新吉尼斯世界纪录!近日,斯坦福大学研究团队完成了利用人工智能计算加速工作流程的「DNA巨量测序」技术。 最新研究已于1月12发表在《新英格兰医学杂志》上。 论文地址:https://www.nejm.org/doi/full/10.1056/NEJMc2112090 此研究中处理速度最快的病例样本仅用了5小时2
新智元
2022/03/04
4600
Spring Cloud Alibaba - 02 SpringCloud 、 SpringCloud Alibaba 、SpringBoot的生产版本选择
https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
小小工匠
2022/02/02
8620
Spring Cloud Alibaba - 02 SpringCloud 、 SpringCloud Alibaba 、SpringBoot的生产版本选择
太赞了!Github上都没有的“网约车”项目!!!
该项目是一款标准且已上线的“网约车”应用。符合我国交通部对网约车监管的技术要求。通过了交通部对网约车线上和线下能力认定。项目原型曾在杭州上线运行。
java思维导图
2020/12/11
2.6K0
太赞了!Github上都没有的“网约车”项目!!!
谷歌第四代TPU性能实测来了!每秒10万万亿次运算,今年将向谷歌云用户提供服务
一个TPU v4 pod就能达到1 exaflop级的算力,实现每秒10的18次方浮点运算。
量子位
2021/06/17
7290
初步了解SpringCloud微服务架构
针对上述问题,传统的单体结构已经不再适用于复杂度日益渐增的产品,因此一种新的软件架构提供了解决方案 —— 微服务 。
程序员Leo
2023/08/07
1.1K0
初步了解SpringCloud微服务架构
推荐阅读
相关推荐
干货 | 携程高可用架构的演变和迭代——应用开发者视角
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档