前言
作为一个创业型部门,我们领导经常给我们灌汤:要有创业精神,只做精品!
在他的鼓(洗)舞(脑)下,我们克服了一个又一个困难(不仅仅是技术上,更多的是沟通的不断失败带来的挫败感),终于在去年底上线了新的数码渠道系统,与香港老网银系统并驾齐驱,力争未来取代老网银系统!因此项目从立项开始就被香港人比较强烈的抵触(明知道我们是来抢地盘的,哪有拱手让出江山的。。。),但不得不承认,未来会有越来越多的香港银行选择将开发中心建立在深圳这个有着丰富且廉价的科技人才的天然大后方,未来更多的系统建设也都会由内地机构来承担,这也是我们创业的最终目标。
好了,废话不多说,在拿下这个项目之后,我们便对整个系统架构进行了分析,需要基于老网银系统新建立一套数码渠道系统,采用全新的开发框架,依赖老网银基础服务完成新的业务需求。接下来我们便需要解决一个又一个问题:
一、 互联网出口
一开始我们决定从架构上与老网银独立开,申请了新的应用服务器做后台服务,但是出于网络那边提出的安全要求,web服务器无法申请,且无法申请新的网络出口(新的网络出口意味着需要买新的域名、以及对应的网络防护服务等),因此我们只能借用现有的网银服务的网络出口,通过在老网银web服务器(Apache)上加一条代理,将我们的渠道请求转发到我们的网关服务器,再进入我们的后台应用服务器。这时候网络的同事又提出不能从web直接进入我们的网关,要先通过老网银的was服务器,因此我们又采用在was服务器上加一个Forward Servlet,专门接收来自web的请求,并将请求转发到我们的网关,再由网关转发到后台应用。
这样,一条从老网银web->was->新网银网关->新网银应用的全新网银渠道的网络通路设计好了,当然中间还有一些其他的网关服务器没有特别说明,包括后面在联调阶段就会发现这条路径太长,而且每个网络区段之间都要做一次证书的卸载和装载,极大的影响访问性能,后面会专门讲如何优化。
二、认证问题
因为我们只是基于老网银建立的渠道系统,所有用户数据及鉴权还是要依赖老网银,因此用户的认证及单点登录(如何保证用户仅在一台设备上登录)问题就需要第一时间解决。
好在我们不需要实现用户的登录,所有访问新渠道的业务都是已经登录的用户,通过在老网银上配置新的菜单的形式进入我们的页面完成对应的业务功能,因此我们要求老网银在首次进入我们的页面时,把认证用的accesstoken传到我们页面,我们在前端接收到这个token之后保存在localstorege(前端缓存)中,此后每次访问我们的后台接口,都需要带上这个accesstoken并加密。请求到达后台时,首先经过我们的前置应用,我们在前置应用中设置了统一拦截器来检查用户是否合法,通过解密请求体,拿到accesstoken后,首先查询一下缓存中是否存在该token以及是否过期,如果不存在则表示第一次登录我们的应用,我们将该token送给老网银的sso服务器进行登记(标记为login),并将其放入缓存redis并设置当前时间为上一次访问时间;下次访问的时候判断该token的上一次访问时间与当前时间的差值是否超过10分钟,超过则认为会话过期,直接返回给用户会话过期信息;否则为未过期则将该token送给老网银的sso服务器进行登记(标记为keepalive),由sso服务器管理单点登录问题,如果该用户又在另外的设备上登录着,则本次keepalive会返回用户已在其他地方登录的信息,同样需要提示客户重新登录。
只有通过了sso验证的请求,才会继续进行下面的业务逻辑。
三、数据安全问题
同样应网络及安全团队的要求,我们需要对前端请求的数据进行加密,数据只能以密文的形式上传到服务器。因此我们引入了对称及非对称两种加密方式,对称密钥用来对请求参数进行加密,非对称密钥用来对对称密钥进行加密,然后将加密后的对称秘钥和请求数据放在请求体中送给后台。这里对称秘钥是由前端临时生成的唯一性秘钥,非对称秘钥由加密机生成,并将公钥保存在前端配置文件中,私钥放在后台数据库,由于加上了这一层加密,整体性能下降了许多。
四、性能优化
由于整个架构导致请求链路过长,数据加解密耗时等一系列影响性能的问题出现,我们在UAT阶段就已经发现每次页面载入及请求时间都无法接受,因此从各个方面想办法进行优化。
1、首先对前端资源进行瘦身,调整vue配置打包的文件,将依赖的包以单独的文件形式提供,不再与项目文件打在一起,减少单个文件大小,对比下整个前端包减少了一半以上,同时也在页面上加入了一些载入等待的提示,提高了用户体验。
2、其次,原来的前端资源都放在新网银的网关服务器,每次请求都要透过老网银web服务器->was服务器,才能访问到web资源,对页面请求链路过长,因此申请将所有的web页面都放到老网银的WEB服务器,离用户最近。
3、但这样还不够,由于服务器都是在香港,受限于两地基础网络带宽影响,大陆用户访问页面同样巨慢,因此我们申请了大陆的cdn,将静态资源缓存在大陆运营商服务器上,这样每次用户访问,都只需要从最近的一台运营商服务器上获取静态资源即可,这样就大大提高了页面请求的效率,也减轻了老网银web服务器的访问压力。
4、在调试的过程中,我们发现每次前端过来的请求,到我们应用服务器这边都会变成两条请求,其中第一条是http head请求,第二条才是我们真正的http post请求,咨询了老网银的人了解到,前面的head请求是老网银在前端加上的,目的是用这条body为空的请求试探整个网络链路是否顺畅;但是由于到我们后台服务器本来链路就很长,每次请求还要双倍,这是无法接受的,因此我们在Forward servlet那一层就加了处理,控制在一定时间内的head请求不再往后台转发,直接返回成功即可,减少了网络试探的频率。
经过半年时间的努力,我们不断地调整方案,将这条新开辟的渠道建设的越来越成熟稳定,后续不断地有新的业务,也都基于我们的模式进行叠加业务功能即可,所有公共的模块我们都做了统一处理,极大的便利了业务开发上线。未来我们会逐步壮大我们的新网银渠道,成为支撑香港及大陆业务的中坚力量。加油!!!
原文链接:https://blog.csdn.net/pxy1993/article/details/120578155?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165918469516781647515574%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165918469516781647515574&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-27-120578155-null-null.nonecase&utm_term=%E9%A6%99%E6%B8%AFcdn
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/3093