【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

大型跨国银行系统架构的微服务与敏捷开发实践之路

  • 2019-08-30
  • 本文字数:3935 字

    阅读完需:约 13 分钟

大型跨国银行系统架构的微服务与敏捷开发实践之路

30 多年前,汇丰银行聚集了一批当时的 IT 精英,花了几年时间,在 IBM AS400 小型机平台上,开发了一个当时非常前沿领先的国际财富交易系统。这个传奇系统第一个版本在香港正式上线运作,是 1987 年。


30 年后,2016 年,这个系统的单体式架构和瀑布开发模式已经难以适应现阶段的业务需求,没人相信这个系统还能继续起舞。


但七个月后,该系统重新登台,与微服务架构深度结合,拥抱敏捷开发的工程理念,在复杂的业务环境中如鱼得水。如今,开发人员仍在围绕性能、安全等方向继续优化系统架构。


在互联网产业飞速变革的今天,这样的故事时有发生,为了给大家揭示这些架构演进背后的秘密,在2019 ArchSummit全球架构师峰会·深圳站 现场,来自汇丰科技的资深技术专家,为参会者详细展示了传统遗留系统的改造思路,同时还带来更多技术领域的分享,包括微服务架构的设计心得、敏捷开发思想的践行方法以及在金融犯罪监控领域的架构设计要点。

一、使用微服务进行外围搭建,让“祖传系统”重返青春

遗留代码、遗留系统,常被开发者戏称为“历史遗留问题”,让整个团队身负重担。它往往经历过多支团队的维护,业务逻辑异常复杂冗余,难以支撑业务拓展、难以维护,难以拥抱新的技术和理念。


针对以上遗留系统的改造问题,汇丰科技软件工程经理刘华 、汇丰科技基金服务部门架构师谢强彬 以自身负责的基金服务系统为例,在现场总结了相应的三条解决方案,分别是:


  • 在遗留系统外围搭建微服务系统,从而解决遗留问题;

  • 通过 API 的设计解耦,使银行系统不再依赖落地文件;

  • 使用OAuth认证 完善外部交互的安全机制。

1.采用微服务架构搭建外围系统

每当有新的需求到来,开发团队会首先构建数个微服务作为中间层满足需求,解决单体应用的复杂性问题。然后将其注册到Eureka,以保证微服务集群的可用性和分区容错性。同时,允许内外部系统通过路由服务器输入 Gateway 访问中间的服务。


在微服务监控方面,系统会主动将日志文件从微服务推送到 ELK 服务器,并配合ZipKinPrometheus 等工具对服务状态作出监控,一旦出现故障立刻熔断,并在Grafana展现出来。

2.通过 API 设计解耦对落地文件的依赖

API 设计是改造的关键,它分为系统级 API 和业务级 API,保证了与供应商系统的解耦。汇丰科技通过系统级 API 把供应商里的数据通过领域抽象进行映象,使得数据成为单独的 API。当新的需求到来,即通过业务级 API 调度系统级 API,完成需求。


API 开发的上下游测试也是一件比较麻烦的事情。汇丰科技利用契约测试,由 API 开发的下游对上游约定接口的期望结果。约定完成后,大家可以按契约分别测试,从而解耦 API 上下游之间开发和测试之间的依赖,使得大家可以按照自己的开发节奏进行。

3.使用 OAuth 完善外部交互的安全机制


OAuth 是为用户资源的授权提供的一个安全、开放、简易的标准协议。OAuth 的授权不会使第三方触及到用户的帐号信息,非常安全。而且任何第三方都可以使用 OAuth 认证服务,所以现在 Google、Microsoft 等公司都提供了 OAuth 认证服务,使其正在逐渐成为开放资源授权的标准。


在这套架构里,每一次来自外部的对微服务的请求,都要通过 OAuth 服务器验证。OAuth 在此统一了众多微服务的安全机制,并且将安全做到了微服务级别而不是网关级别。


基于上述设计理念,汇丰银行对基金服务系统的整体架构进行了重新设计,如下图所示:



至此,曾经难以支撑业务发展的古老系统重新焕发生机。未来,两位专家还期望将 API 开放成 API 商店,提供完善的 API 文档和服务。

二、控制好微服务划分颗粒度,使用成熟的解决方案加速改造

我们了解了微服务在传统遗留系统改造问题上的设计方案,但很多开发者在实施的过程中仍然会被很多具体问题所困扰。比如从单体架构演进为微服务架构,对于模块的划分力度的掌握非常重要,这也是开发者经常碰到的问题。如果划分太粗会有复用性和灵活性的问题,划分太细会造成 API 臃肿的问题。


汇丰工商金融香港网上银行架构师傅寅旺 为我们分享的原则是:


  • 每个微服务设计都能快速响应市场需求,可以代表完整的业务功能。

  • 尽量将业务逻辑放在外层处理,从而保证架构的灵活性,减少以后系统升级的复杂度。

  • 允许不同的服务按照不同的版本进行部署,便于实现平台的灵活性,上下兼容。


为了实现这些原则,这里将微服务架构进行分层:



在架构图中,最底层是公共基础层,它在所有下游系统间进行通讯,把数据收集起来后暴露接口给外层使用;


向上是基础业务层,某一个具体功能的业务处理将在这一层进行应用过滤;


最上层是应用服务层,主要体现微服务和对应功能之间的差异,解决不同场景、不同项目之间的需求,对基础服务层和公共基础层进行不同的编排调用。


在银行的数字化转型过程中,技术团队面临的问题往往包括基础设施和软件设计两方面。一个好的基础设施能极大加速架构的改造过程,避免团队精力的浪费。因此,傅寅旺团队也对一些 toB 解决方案做了调研选型。


经过整个团队的探讨分析,在前端系统的构建上,选用了 Backbase;在后端系统构建上,选择了 MuleSoft。


选择 Backbase 主要考虑到其提供的平台管理工具,将 UI 设计变得简单,释放前端工程师的精力;同时,Backbase 也提供外部容器,可以使用 Camel 将请求转发到后台微服务系统中。


对 MuleSoft 的选用则主要看中了可视化 API 编程与对每一条 API 请求都有有效校验的安全机制。


这两者的选择与充分利用最终帮助汇丰香港网上银行顺利完成了架构改造。


在维护正常业务需求的同时对固有的遗留系统进行改造并不轻松,如何在精力有限的情况下打磨细节避免绕弯路,合理选择成熟产品避免重复造轮子,是一个成功架构师的必备能力。

三、“乐高积木”式架构,用敏捷开发让系统“健步如飞”

架构设计的重要程度不言而喻,一套优秀的架构不但能让遗留系统焕发新的生机,还具备良好的可拓展性,对未来可能的业务拓展也有很强的支撑能力。但在汇丰银行特殊业务场景下的前端领域,新的问题又出现了,汇丰亚太区手机银行开发总监刘明华为我们带来了详细的讲解:


首先,前端技术更迭非常快,每隔三个月到半年,就会出现新的架构、新的技术,开发团队追之不及。


其次,汇丰作为一家大型跨国银行,所处理业务遍及全球多个地区,每个地区的政策、用户使用习惯都不同,反映到技术层面就需要大量差异化的 APP 开发。


最后,前端架构缺乏很好的依赖管理工具,模块难以复用,代码越来越臃肿,严重影响开发和部署速度。


在这种情况下,如何实现敏捷开发是个难题,而汇丰科技采用“乐高积木”的方式构建了自己的敏捷开发基础。


首先设计通用的底层框架作为插板,然后将所有的功能模块像乐高零件一样分配给小型团队维护开发。各团队根据国家及地区差异完善配置文件,从模块库里选择组件安装在“插板”上,接下来通过持续集成、持续发布的工具,不断的将代码、零部件按照你的要求整合打包发布在对应的市场上。


这些乐高零件般的功能模块包括设计库、核心功能库等等,通过 GitHub 来管理,同时严格禁止“重复造轮子”的问题,以最大程度实现代码和模块的复用。



当然,这些方案的推行离不开方法和机制的辅助,例如InnerSource(内部开源) 和自动化代码审查。


很多巨头如 Google、Paypal 都在采用 InnerSource,最大程度的加强了软件组件的重用。当然,InnerSource 的好处不止于此,其在改善软件质量、促进开放式创新等方面都效果显著。对于汇丰科技团队来说,InnerSource 是团队敏捷开发的核心,代码管理直接建构在 InnerSource 机制之上,如果不使用基础组件,不利用可以复用的代码模块,则根本不能进入开发流程。


而自动化代码审查更需要一个完整、严谨的流程,使自动化测试和单元测试贯穿开发流程始终,如此才能保障代码质量,让以上所有机制不会成为工程师协作的负担,得以顺利执行。



在上述方案一一得以实行后,敏捷开发的基因已经融入团队,系统的迭代和拓展也因此“健步如飞”。

四、统一全球标准,以情报为主导构建金融犯罪风险管理系统

在大型跨国银行的业务背景下,单纯的数字化转型恐怕还不足以满足一些特有业务的需求。


一份 2017 年的联合国调查报告显示,当年全球金融犯罪金额高达 3.8 万亿美元,其中接近 2 万亿美元流入全球金融系统进行洗钱操作,银行的金融犯罪监控系统面临的压力与日俱增。


那么如何优化系统架构设计,在技术的纬度打击犯罪分子?


汇丰科技合规科技部中国区负责人关助凡 给出的答案主要分为两点:


  • 建立统一的全球标准,并保证数据同步。

  • 建立以情报为主导的金融犯罪风险管理系统。


统一的全球标准主要是为了应对各个地区政策不同,各个银行对洗钱行为的鉴别方式不同等情况。首先汇丰科技建立了通过 Hadoop 管理的数据池,辅以客户细分工具,将所有的数据放入池中管理并细分;接下来,对细分后的数据分析建模,并对模型进行检验,将存在威胁的事件按不同权重派送给调查员进行调查。


以情报为主导的金融犯罪架构分为三大部分:


  • 数据

  • 分析

  • 交付


数据,包括交易数据、实体数据、数字化数据、金融犯罪数据、开源数据等。


分析是指对我们的数据进行分析。通过数据建立模型,并对模型进行分析及语境解释,对事件进行分类、事件排序,最终交给我们调查员进行决策。


交付阶段主要依赖人为决策,决策行为则转换成数据进行反馈,作为日后人工智能技术应用的基础。



上述两点综合起来,为金融犯罪监控领域的诸多问题提供了至关重要的技术解决方案。


以上五位专家的解析涵盖了一个传统单体架构如何优化转型,如何应用敏捷开发思想让系统始终保持旺盛的生命力,以及如何面向未来迎接新的需求挑战。


在这个过程中,敏捷开发的思想始终伴随着架构的设计和搭建,企业内部的 DevOps 文化建设更与银行的数字化转型相辅相成。须知,未来各领域业务的复杂度会进一步增长,业务规模也会迅速增大,只有将前沿技术与先进思想有机结合,才能在变幻莫测的挑战和机遇中稳居不败之地。


2019-08-30 16:3114294
用户头像
王一鹏 InfoQ 总编辑

发布了 151 篇内容, 共 87.2 次阅读, 收获喜欢 455 次。

关注

评论 1 条评论

发布
用户头像
对于老系统,如:核心系统,还是处于所谓“后台”的位置,将快速变化的需求基于微服务实现
2020-12-12 22:23
回复
没有更多了
发现更多内容

Java 必须掌握的 12 种 Spring 常用注解!你掌握了几种?

Java 程序员 后端

Java中当对象不再使用时,不赋值为null会导致什么后果?

Java 程序员 后端

JAVA代码审计之Shiro反序列化漏洞分析,浦发银行Java开发笔试题

Java 程序员 后端

Java 多线程 —— 同步代码块(1),狂神说docker进阶笔记

Java 程序员 后端

Java 常见的 30 个误区与细节!,java面试刷题

Java 程序员 后端

JavaWeb Ajax详解,java64位3下载百度云盘

Java 程序员 后端

JavaWeb快速入门--Tomcat,java高级特性面试

Java 程序员 后端

Java中高级核心知识全面解析-容器(ArrayList)

Java 程序员 后端

Java内存问题 及 LeakCanary 原理分析,mybatis架构设计层次

Java 程序员 后端

Java初学01:学习路线,java基础入门清华大学出版社

Java 程序员 后端

JAVA-数据结构与算法,mysql数据库应用与实践教程

Java 程序员 后端

JavaOOP面试题48题(含答案),大厂Java高级多套面试专题整理集合

Java 程序员 后端

java中常用单词系列(一),最新Java高级面试题汇

Java 程序员 后端

Java中高级核心知识全面解析——常用框架(Spring常用注解

Java 程序员 后端

Java 低代码开发平台“光”发布 2,springboot的工作原理图

Java 后端

Java个人学习之旅(第十天),java就业班百度网盘

Java 程序员 后端

Java中的几种线程池详解,rabbitmqpdf百度云

Java 程序员 后端

内卷把同事逼成了“扫地僧”,把Git上所有面试题足足整理24W 字

Java spring 程序员 mybatis SpringCloud

Java 多线程 —— 同步代码块,联通java开发面试

Java 程序员 后端

Java 调试技术 JPDA 架构解读,图文详解

Java 程序员 后端

Java 之类与对象,java零基础自学视频百度云

Java 程序员 后端

Spring是如何自动注入多类型的?

编号94530

spring bean @Autowired 自动注入

Java中高级核心知识全面解析——Dubbo,java语言入门自学书

Java 程序员 后端

Java之StringUtils的常用方法,java整体项目架构图

Java 程序员 后端

JavaScript基础大总结,对于java开发岗位的理解面试

Java 程序员 后端

JavaWeb学习总结18--redis学习,java高级程序设计作业系统

Java 程序员 后端

Java之Spring基础与IOC,java实用教程第五版答案第四章

Java 程序员 后端

JavaWeb快速入门--JavaScript(2),java面试题库及答案

Java 程序员 后端

JavaWeb快速入门--Tomcat(1),关于Java性能优化的几点建议

Java 程序员 后端

Java中的泛型,java程序执行过程与编译原理

Java 后端

Java几种常用JSON库性能比较,java接口开发面试

Java 程序员 后端

大型跨国银行系统架构的微服务与敏捷开发实践之路_架构_王一鹏_InfoQ精选文章