基于云原生技术搭建金融级微服务架构体系
【课题研究机构】国信证券股份有限公司
01
课题背景
国信证券作为国有大型证券公司,为了迎接数字化、信创、信息安全、业务变革、架构演进的新时代新挑战,增强核心关键技术的自主研发和自主掌控水平,提高公司IT研发效能,提升敏捷交付能力,灵活响应业务变化,支持公司业务快速创新,实现信息系统服务高质量输出能力,打造创新型组织文化,国信证券提出基于云原生技术搭建金融级微服务架构体系课题。
课题作为公司数字化转型重点项目,是面向移动互联网、云计算、大数据及人工智能时代,落实公司数字化转型战略,打造数字化云平台基础技术设施的重要举措。
02
课题目标
课题立足于国信证券“数字化、智慧化、敏捷化和集团化”的IT战略规划,借助云原生技术体系,建设微服务架构、DevOps研发效能平台、容器平台、分布式数据库、服务网格架构、互联网关,并采用自动化手段将产品、研发、测试、安全、运维全流程自动化贯穿,实现端到端的打通,成为国信证券信息系统建设的技术支撑,提升公司信息技术研发效能能力,赋能IT人员建立敏捷交付能力,灵活响应业务变化。
03
课题内容
3.1
微服务架构(Zebra)
互联网时代,在极端情况下,每天都有新需求要开发上线。随着代码量及团队成员的增加,传统单体式架构的弊端日益凸显,严重制约了业务的快速创新和敏捷交付,与互联网所追求的“唯快不破”的目标越来越远。这就是微服务架构兴起的时代大背景。
我们希望开发框架更加敏捷、轻快、优雅,实现从SOA到微服务的架构持续演进,最终结合DevOps,打通开发、测试、运维三条线,实现整个流程的畅通、自动化。Zebra微服务架构包含服务通信、服务注册发现、配置中心、服务中心、监控支持系统、开发支持系统、互联网关等七大模块,其中互联网关内容在后续章节进行具体介绍。下图为Zebra微服务架构图。
Zebra微服务架构使用Google的gRPC作为RPC通信组件,实现服务之间的互相调用、跨语言互相调用、通信安全等。选用gRPC因为非常契合金融行业,具体有以下几个优势:
多语言支持,覆盖各类主流信息系统研发语言,满足证券行业多语言研发现状;
活跃的开源社区,生命力强,目前gRPC在开源社区github已有29.4K Star;
开放的生态,资料丰富,可实现核心技术的全面自主掌控;
gRPC使用Protocol Buffer协议,支持多平台、多语言、可扩展的的数据序列化机制,相较于XML来说,其更小更简单,支持自定义的数据结构,用其编译器生成特定语言的源代码;
支持流Stream,在流的基础上实现了Server Push,方便做变更通知,不再需要客户端做费力的 Long Pull。
采用etcd组件进行服务注册发现核心组件,etcd也采用gRPC作为通信方案,这样保障了统一技术栈的需求。当服务上线时,服务提供者将自己的服务信息注册到etcd,并通过心跳维持长链接,实时更新链接信息。服务调用者启动时通过etcd将服务信息缓存在进程中,然后根据可定制LB算法,找到一个服务。当服务下线时,etcd会主动发通知给服务客户端,客户端将本地缓存数据清理,即使etcd出现故障,服务间的通信也不会受到影响,保证了服务发现的可靠性。
自主研发的配置中心,支持MySQL、SQL Server等多种数据库能力;采用本地缓存技术,所有的配置信息在微服务本地缓存一份,通过timestamp机制保障本地缓存与配置中心的数据一致性。通过以上手段,配置中心即使全部宕机,也能保证微服务正常运行;通过与DevOps研发效能平台的紧密结合,实现配置信息多环境自动晋级,实现了配置信息的全生命周期管理与全流程自动化。
(四)服务中心
微服务的服务中心,是微服务的服务治理平台,服务中心主要实现服务治理的三大特性,第一,可观测性,微服务由于较单体应用有了更多的部署载体,需要对众多服务间的调用关系、状态有清晰的掌控;第二,流量管理,由于微服务本身存在不同版本,在版本更迭过程中,需要对微服务间调用进行控制,以完成微服务版本更迭的平滑。这一过程中需要根据流量的特征(访问参数等)、百分比向不同版本服务分发,这也孵化出灰度发布、蓝绿发布、A/B测试等服务治理的细分主题。第三,安全控制,不同微服务承载自身独有的业务职责,对于业务敏感的微服务,需要对其他服务的访问进行认证与鉴权,也就是安全问题。对服务治理能力充分建设后,就需要有足够的控制能力,能实时进行服务治理策略向微服务分发。
基于云原生Promethues搭建微服务监控支持系统。Promethues监控以时间维度存储连续的数据的集合,具备多维度数据模型、灵活的查询语言、不依赖分布式存储,单个服务器节点是自主的、通过基于HTTP的pull方式采集时序数据、可以通过中间网关进行时序列数据推送、通过服务发现或者静态配置来发现目标服务对象、支持多种多样的图表和界面展示,比如Grafana等,这些特性助力业务形成立体监控与告警。
开发支持系统是我们对整个Zebra微服务架构各类特性以及使用方式进行整理、归纳、总结,提供微服务Wiki知识分享,包含各类最佳实践以及高效特性使用说明,由浅到深、由易到难,同时也提供快速搭建微服务的脚手架,极大降低研发人员使用成本,助力研发人员快速上手。
3.2
DevOps研发效能平台(Simba)
DevOps研发效能平台(Simba)是国信基于Scrum敏捷研发体系与云原生技术体系自主研发建设的DevOps平台,平台整合了跨职能团队的各类能力,包括产品、安全、测试、运维等,极大提升开发、测试、运维研发流程的一体化程度,形成面向业务的IT服务供应链,提供透明化、高效率、高质量的 IT研发服务。
具体技术上率先使用云原生Kubernetes容器技术,具备灵活伸缩性与弹性故障恢复能力。理论上在资源足够的情况下可支持任意数量流水线并行,在SLA可用性方面可达到99.9%,保障7*24小时系统正常。根据Scrum先进理念,实现敏捷研发流程,并将先进的工具链体系与流程结合,实现端到端的打通。基于先进的互联网经验,制定客观研发效能度量体系,促进研发团队的持续改进。
DevOps研发效能平台建设的6个关键要素:第一,分支策略,是流水线设计的基石,不同分支策略决定了不同的流水线设计;第二,质量门禁,通过自动化流程代替人工节点评审,是以流水线的方式和实现“完成的标准”,可以实现增量存量灵活分别设置管理;第三,流水线模型,流水线将持续交付的核心工程实践和工具整合起来,包括自动化构建、测试、部署等实践与工具技术,贯穿研发、测试和运维,让价值顺畅流动;第四,测试分层,结合研发阶段以及自动化流水线执行相应的测试,分层管理,分而治之;第五部署方式,不同阶段不同环境同一个制品、一个部署流程、一套工具,传统与自动化结合,风险与效率平衡。第六,度量与改进,为了量化的评估和反馈研发过程的现状与风险,供公司进行研发效能分析和解读,针对性进行改进,以数据驱动精益化管理。
3.3
互联网关
企业随着前后端分离架构、微服务架构、技术中台战略、产业互联互通的实施必将产生大量的互通互联需求,国信“cuckoo”互联网关基于云原生与开源技术解决互联各项痛点,实现高效、可控、安全、审计、防雪崩、多协议、推送、动态伸缩等各类特性,服务开发者与外部调用方完全隔离,减少适配与安全工作,大幅提升外联服务的敏捷化交付能力。下面对设计要点进行简要说明。
我们分析了互联网关需要的协议特性,包括支持加密、报文压缩、支持完整性校验等基础能力。并且综合了开放性、扩展性、标准化、性能和安全角度的考虑。同时还最大限度保持原业务协议兼容性,支持HTTP和TCP两种协议。
提供报文转发和协议转换,互联网关支持TCP协议透传来自客户端的Protocol Buffer二进制请求报文到微服务,并相应地透传响应报文,不需要额外的协议转换。这种方式,可以使得网关对业务定义的数据没有任何依赖,极大的提升了网关的性能。
性能方面,互联网关,通过JVM的内存调优,使用堆外内存技术等,使高并发下连接创建限制及耗用较少内存、支持瞬间连接创建高峰、防范报文写出慢导致连接数据量大挤占内存。
流控方面,建立连接心跳控制,及时清除不活动的连接,提升高并发下连接回收速度,防范连接僵死;进行流量控制与熔断设置,防止雪崩,防范大尺寸请求包攻击。
3.4
容器平台(蜂鸟平台)
当今瞬息万变的互联网时代,业务微服务改造后,使用传统小型机、物理机、虚拟机等载体方式进行业务发布,已不是最佳方案。为了提高业务开发效率、满足更高效系统迭代支持,实现“敏捷开发+敏捷运维”秒级部署系统,国信于2020年完成蜂鸟容器云平台落地工作,解决代码量不断增加、开发运维协同难度大、多样化编译和复杂运行环境等问题,从而实现了更快的交付频率、更灵活的弹性伸缩能力。
由于金融行业的特殊属性,市面上绝大多数的开源解决方案无法有效解决即有问题,因此在蜂鸟容器云的落地过程中涉及了部分创新功能,也是本次课题的亮点:
智能调度技术创新:在现有的部署模式下,当业务并发量突发上升时,无法根据业务运行状态快速进行弹性扩容,虽然Kubernetes容器提供了基本调度技术实现不同服务间的调度,但是对于容器-虚机-物理机之间的协作效率并没有得到速度的保障。所以国信证券需要依据基础设施、容器平台、应用的多个场景进行优化,为此在蜂鸟容器云中自研了一套调度机制和技术,通过NUMA 感知技术加快了多处理器之间的协作效率,让内存访问的效率加快,让应用可以使用最少的资源来提供优秀的性能。此外还利用了 Evict 逻辑新增磁盘 IO 和网络 IO 两个维度根据历史数据进行资源使用量推荐,让用户可以使用最佳实践的资源推荐,杜绝资源上的浪费;
网络多元融合技术:在金融业态多场景下,容器网络缺少丰富性,一般的容器平台只能支持一种网络方法,但是在瞬息万变的券商市场环境下,一般一套系统都需要支持多个不同的网络平面或者网络类型。为此,国信证券在蜂鸟容器云平台上开发了一套多元融合的网络系统,可以为应用、容器、集群提供不同的网络系统插件,并且结合安全合规性要求,这套网络系统也可以根据自己的ACL规则进行严格的网路协议安全准入管理,解决网络安全的问题;应用一键编排交付:金融证券类应用系统复杂,创建、运维、修改的工作量都十分庞大,然而随着互联网的快速发展,又要求系统必须适应需求的快速变化,实现敏捷部署。为此,国信证券在蜂鸟云平台上开发了一套自动化应用编排系统,只需要通过资源编排模板定义需要创建的基础资源+镜像+应用模板的组合,就可以根据具体的配置来完成对资源的一键配置、创建和销毁,更加快速方便的构建应用。并可以一键部署应用到测试、预发布、生产环境,为DevOps流水线的构建奠定了基础;
金融专属管理平台:原生的K8S在功能和性能上都有着明显的不足,并不适用于金融这种高标准、高要求的行业。为此,国信证券蜂鸟容器云定制开发了金融版的管理平台,深度优化了原生K8S在功能和性能上的不足。从异构计算统一管理、网络多元兼容、存储高性能以及群集网络多分区等多项定制功能,深度贴合证券对运维标准的管理需求,是落地云原生金融版本的最佳实践;
运行故障自动判别:此前应用运行故障判别、隔离依赖传统运维工具体系,需要人工干预恢复,然而由于金融证券类系统的复杂性,人工恢复周期往往比较长,这就与故障快速恢复的要求相悖。因此,国信证券在蜂鸟容器云中开发了自动化排障系统,对于应用运行故障的判别、隔离和恢复都可以通过配置策略来自动化进行,极大地缩短了故障的排查、恢复时间,降低人力成本的同时也有效提高了系统的稳定性。
基于以上几点创新技术,蜂鸟容器云对比市面上开源或现有商用方案则更加匹配金融行业的特性,针对于因行业特性而产生的问题的解决方式也给以后其他的金融企业上云提供了指引。
3.5
分布式数据库(TiDB)
TiDB是PingCAP公司自主设计、研发的开源分布式关系型数据库,既可以应用于事务型数据库场景,亦可以应用于分析型数据库场景。降低了研发人员的使用复杂度。
国信金太阳手机证券App全账户资产分析业务的用户范围包括超过1500万的金太阳客户,其中的“清仓股票”模块于2020年11月底上线,请求量约13万/日,存量数据约10亿左右。“超级账单”于2020年12月底灰度上线,截至2021年1月中旬已完成全部的流量切换,目前请求量约30万/日,2年存量数据40多亿,后续5年数据量预计将达到100亿。
通过本次在金太阳App的全账户资产分析业务对分布式数据库产品进行试点后,获得了以下收益:
在系统性能上,采用分布式数据库产品后,提升效果显著。每日的数据同步时间大幅缩短,1000w数据同步时间从原来的90分钟到现在的20分钟,同步效率提升了70%~80%。
在应用架构上,将原来使用ShardingJDBC + SQLServer的分库分表方案替换为TiDB分布式数据库产品,实现了对SQL Server替换,无需固化分库分表规则,无需同时运维多个数据库集群,大大减轻了开发和运维负担。
在应用代码方面,简化了原有数据同步和业务处理逻辑,取消了原有的表定时管理任务,降低了由于不必要的代码复杂度带来的风险。
3.6
服务网格
在推动应用做微服务化改造的过程中,有些老旧单体应用已稳定运行很长一段时间,微服务改造动力不足,微服务化改造成本高;同时异构语言(比如Python)相关应用也想接入微服务体系,但是提供微服务框架SDK多语言并行开发及维护成本较高。针对上诉问题,我们参考Cloud Native的Istio 思想实现Service Mesh,在微服务框架的SDK上构建SideCar(类似华为 CSE Mesher、新浪 Motan Mesh),通过Proxy方式接管对应的应用的网络请求(HTTP),支持单体应用及异构语言接入Zebra微服务体系。
04
成果应用
课题完成以来,在金太阳手机证券APP中台上全面应用,包括交易中台、理财中台、业务办理中台、资讯中台、开户中台、扩展行情等,承担了超过50%的互联网流量,其中接入的国信金太阳手机证券APP总注册用户超过1500万,月活数据324万,动态有效用户超200万,日并发峰值超过27000+TPS,日推送个性化信息量达到1840万笔,接入以来未出现任何平台级生产事件,为国信证券信息系统建设的稳定、高效、安全的迭代和运行保驾护航。
课题采用先进的技术架构,实现端到端的打通,提升开发、测试、运维研发流程的一体化程度,极大提高了开发、测试、运维效率,使研发人员能够及时响应多变的市场需求;其次完整的立体化监控和弹性自动自愈能力,保障 7*24 小时系统正常;最后敏捷高效的迭代开发,降低了企业成本。对行业金融科技的应用提供了有价值的借鉴,起到示范作用。
课题也带来了一定的社会价值,首先,课题是行业内率先采用云原生技术体系与路线,在公司内外取得了较高的认可,引领了证券行业在金融科技的技术自主创新,推进行业技术进步。其次,项目中云原生微服务架构已在开源社区进行开源,为社会提供开箱即用的自主可控解决方案,使具有同样目标的公司与个人学习借鉴,减少弯路,提升云原生架构落地效率,项目在开源中国已有300+star;最后,秉持“国产化”和“软件化”两个原则,采用自研加开源的方式,核心技术均有自主知识产权。