基于Python(Django)架构的分布式人工智能(AI)开发平台实践研究
中小银行由于其资产规模、业务范围、物理网点、人才资源的各项限制,在金融利率市场化、互联网电商跨界渗透、同业竞争加剧的大背景下必须积极拥抱“互联网+”理念,抓紧商机,快速推进信息化建设。目前,商业银行的业务转型逐步从柜面的低频交易向物联网平台高并发交易快速过度,银行对IT系统的交易并发量、响应时间、开发效率、分布式运维、成本管理等方面提出了几近严苛的标准。银行客户和内部管理也对基于人工智能和基于机器学习的数据分析提出了迫切的要求,此外,各个监管部门对银行交易的运行稳定性要求也在逐年提高。商业银行的传统开发模式已明显无力应对以上的挑战和要求,新型的开发架构及模式逐步呼之欲出。
XXXX公司银行在自研开发平台的实践过程遇到了许多的困难,实施团队在实际操作中主要采用了以下三项实施方法论兼顾开发效率、程序质量和运维工作量:一、采用基于Python(Django)的分布式人工智能整体架构,二、采用基于Python(Django)架构的敏捷开发模式,和三、采用基于Docker和 Ansible的分布式平台自动化运维管理三个方面构建分布式人工智能平台。
一、 Python(Django)分布式人工智能整体架构概述
着眼于Python语言的优势和发展潜力,根据互联金融的建设发展特点、结合自主可控战略的主导思想,XXXX公司银行通过深入学习同业经验、并在充分调研互联网金融企业所采用的成熟架构模式、各类新技术及开源软件的前提下,结合行内多年自主开发的经验,采用开源软件+自主开发的模式主导建设了基于Python(Django) 架构的分布式银行人工智能(AI)开发平台(以下简称MyIBS,如图1)
图1 基于Python(Django) 架构的分布式银行人工智能(AI)MyIBS开发平台
在总体架构的设计及规划中,XXXX公司银行将MyIBS总体架构划分为:一、基于Python(Django)架构的底层核心模块, 二、基于银行金融业务的BizCube开发规范, 三、基于Redis和MMAP技术的高速缓存模块, 四、基于XML和json协议的通讯服务, 五、基于ZooKeeper的服务调度模块, 六、基于MySQL + MyCat模式的分布式数据库技术, 七、基于Hadoop底层的分布式文件数据库和Spark集群机器学习引擎, 八、采用Spark技术的机器学习库(Spark MLlib)。
(一) 基于Python(Django)架构的底层核心模块
Python 是一个结合了解释性、编译性、互动性和面向对象的高级脚本语言。适合应用在金融、教育、互联网、计算科学统计等各个方面。在2017年后由于Python已经成为最受欢迎的程序设计语言之一,其使用率一直呈线性增长。
与目前市场上普遍流行的 Java相比,Python具有入门简单、库函数丰富、代码风格规范、易于调试、方便交互、开发速度快、实施成本低、对AI支持程度较高等各类优势。虽然在运行速度上较慢,但随着硬件资源的效率提升、分布式架构的有效应用支持下,相信Python 会如同2000年初的Java一样逐步占据市场主动。
Django是一个基于Python的开放源代码的Web应用框架,采用Python语言开发。不同于Java MVC的框架模式,Django使用了 MVT框架。M表示Model(数据模型层),负责与数据库交互,V表示View(视图层),主要负责Web响应的动态核心,负责接收请求、获取数据、返回结果;T表示Template(模板层),负责以模板的方式将视图产生的业务逻辑或数据渲染到HTML页面继而呈现给客户。
采用Django的主要优势在于Django框架本周就带有后台管理界面、用户管理、Session控制、Web框架安全控制等有效机制。可以让开发团队在跳出低层框架的限制,着重于业务逻辑的编写,并能够在成熟业务理念的带动下完成敏捷开发。
在开发工具上,XXXX公司银行采用业界最为流行的PyCharm作为MyIBS的开发工具。PyCharm类似于Eclipse, 是一个非常成熟易用的Python IDE(集成开发软件),带有一整套可以帮助开发者在使用Python语言开发时提高工作效率的工具,受到行内开发人员的广泛欢迎。
(二) 基于银行金融业务的BizCube设计规范
XXXX公司银行基于多年核心系统及电子银行自主研发的经验、总结出一套基于银行金融业务的BizCube设计规范,将其应用在MyIBS中。该规范将所有交易区分为产品类、交易群、交易块、UI界面层、交易逻辑层、业务逻辑层、服务层、数据持久层等多个切面,将金融交易的模式规范化及框架化。开发人员可选取合适的交易模板,将其赋值或继承为所需要的新交易并添加所需的数据映射、交易规则、处理逻辑等。一个普通的开发人员可以在2-3个工作日内完成一个集成模块的开发,同时能保障代码质量。
(三) 基于Redis集群和MMAP技术的高速缓存模块
考虑到互联网前提下的高并发交易下的参数读取、报文异步处理及数据缓存等情况,XXXX公司银行将Redis集群和MMAP技术引入MyIBS自研开发平台实践,有效解决了在大并发情况下的异步数据处理、进程间通讯调度等多项技术难题。为防止单一节点造成的系统宕机,XXXX公司银行充分利用的Redis的集群技术、硬件负载均衡方式和软件负载均衡的方式确保MyIBS数据缓存层的健壮性。
(四) 基于FlatText、XML和Json协议的通讯服务
结合自主EAI/ESB大前置开发的经验,XXXX公司银行在MyIBS开发框架中加入了异步多进程后台通讯模块,模块主要采用Socket/Http通讯协议,并内置FlatText、XML和Json相互结合的报文结构,通过调用后台服务层实现服务端的各类业务调用。在MyIBS的设计中FlatText由于其处理效率主要作为报文头使用,在通讯层解析出报文头后会根据报文协议将其交易分为穿透式或落地处理模式。针对穿透模式,MyIBS将会通过异步进程将交易按照请求报文头转发服务提供者。针对落地处理模式, 为提高处理效率,MyIBS会根据业务逻辑采用轻量级的Python Simple Json和Element Tree解析Json或XML报文。
(五) 基于ZooKeeper集群的服务调度模块
Zookeeper是一个能够提供配置信息、命名规则,分布式同步服务等相关的集中式的服务处理器。考虑到分布式环境下需要对各类注册的服务节点进行有效管理,XXXX公司银行的MyIBS框架中加入了ZooKeeper服务及管理,并在后台开启了Watch技术对服务信息的修改情况进行了监控,并利用此特性开启了异步推送更新服务。
(六) 基于MySQL + MyCat模式的分布式数据库技术。
为摆脱IOE 的传统模式束缚,降低银行自主开发平台的成本,MyIBS平台采用了MySQL作为业务数据库。为加强MySQL的健壮性,除采用了MySQL主主数据库同步模式之上,XXXX公司银行还利用业界流行的 MySQL + MyCat模式对数据库完成了分布式拆分。MyCat数据库分库分表中间件是我国自主开发,也是国内最活跃的、性能最好的开源数据库中间件。 MyCat支持基于心跳的自动故障切换和读写分离,可以提供高效的分库分表解决方案。MyIBS可利用MySQL + MyCat的以上特性,在低成本的前提下将现有的单机数据库和应用平滑迁移到云端,解决了数据存储和业务规模迅速增长情况下的数据瓶颈问题。
(七) 基于Hadoop HDFS的分布式文件数据库和Spark集群机器学习引擎
业界现有的关系型数据库已无法对基于海量数据的人工智能分析进行有效支撑,同时,这类数据库无法处理各类异构、非结构化的矢量数据。为了运行一张分析报表,商业银行在取数规则引擎和报表工具上花费了大量的金钱和人力。为应对此类问题,XXXX公司银行通过搭建Hadoop HDFS数据库及Spark集群平台为人工智能分析提供了良好的解决方案。
Hadoop 是Apache基金会下一个开源的分布式计算平台,它以分布式文件系统HDFS和MapReduce算法为核心,为用户提供了系统底层细节透明的分布式基础架构。
Spark是一个能够实现人机交互及快速调用的人工智能计算平台。Spark的主要优点是提供了大量易用高效的人工智能库组件,并能通过Scala或Python以非常便捷的方式进行交互。Spark的一个主要特点是能够在内存中进行计算, 并可以用于异步批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。Spark作为一个免费的平台可以提供一揽子的解决方案对中小商业银行具有非常吸引力。
(八) 采用Spark技术的机器学习库(Spark MLlib)
XXXX公司银行主要利用了Spark的机器学习库(Spark MLlib)中的推荐模型(Logistic Regression)、逻辑回归(Decision Tree)、决策树 (Linear Regression)、多元线性回归 (Correlation Analysis)、相关性分析 (Kmeans)、客户聚簇分析 (Isotonic Regression)、保序回归 (FPG Growth)、推荐模型(ALS)、神经网络(Artificial Neural Network)和 Spark Streaming等对行内现有数据进行了分析,分析的范围包括客户体验、营销数据、市场波动、 假设分析、信用模型等。
由于Python在人工智能方面的独有优势,XXXX公司银行将Spark引入了MyIBS自研开发平台,提供了Zepplin + Scala自主分析和MyIBS AI 预制报表模板两种方式。有成熟经验的用户可登录Zepplin,使用Scala主动分析数据,普通用户可选择登录MyIBS选择自主加载分析文件至服务器, 并由MyIBS调用Hadoop+Spark集群平台完成各类分析(如图2)。
图2 基于 Hadoop 和 Spark集群的MyIBS人工智能开发平台
二、 基于Python(Django)架构的敏捷开发框架及设计
互联网公司和部分商业银行在开发上已普遍采用了敏捷开发方法,并逐步将敏捷开发方法注入银行系统的各类开发实践中。XXXX公司银行进行多年的探索和积累,形成了一套有效的矩阵管理模型,并采用Scrum模型结合互联网金融的最新经验和实践通过MyIBS构建了新一代的敏捷开发模型。
(一) 开发模式:
该模型主要基于XXXX公司银行自研开发平台MyIBS并采用适合传统商业银行的瀑布开发模式和敏捷开发协同机制。项目负责人在Scrum规定流程下进行开发工作,单一项目人数控制在2至3人左右。每个成员必须要有很强的自我管理能力,采用*的工作方式,在限定的时间内完成所有开发。由于MyIBS开发平台采用Python作为基础,开发效率高,入门简单,相应也降低了银行的开发时间和成本。
(二) 成熟的框架模型
由于 MyIBS框架已集成了互联网环境下商业银行必备的开发平台及组件,开发人员只需正确套用BizCub模型即可将数据库模型映射至视图和页面,即可迅速完成基本交易的开发。XXXX公司银行利用该平台的设计理念和易用性能够充分发挥敏捷团队的开发效率,在提高客户需求响应速度和开发效率的同时确保了产品的开发质量。
(三) 自动化测试工具
敏捷开发团队在开发过程中还可使用MyIBS框架中集成的Selenium 自动化测试工具及测试模板对程序分支进行自动化单元或回归测试。也可以使用Jmeter自动化测试工具对Web应用、接口等进行自动化压力测试确保应用自身及其他服务提供者的程序质量和系统健壮性。
三、 基于Docker和 Ansible的分布式平台运维管理
在单一主机时代,系统易于维护,商业银行的运维成本较低,由于设备较少,系统较少,差错概率较低。在分布式微服务的时代中,服务颗粒越细则意味着维护成本越高。由于开源软件的普遍应用,系统环境和技术组件的复杂性和多样性日益增加,采用人工部署、启动和巡检的方式已无法支撑敏捷开发模式下的支持工作。
XXXX公司银行基于现有的系统管理痛点对分布式环境下的分布式架构进行了实践探索,并将Docker和Ansible软件引用到MyIBS开发平台中。
(一) 采用Docker对 Python + Django框架进行管理
在传统模式下,每次应用上线换版均需通过手工方式复制并重新启动服务。工作相对复杂,对操作人员的技术要求较高,且差错率较高。在遗漏文件的情况下容易造成系统缺陷或宕机。
Docker是目前最流行的开源应用容器引擎,运维团队可使用Docker所有应用软件的基础运行环境及依赖包等打包成软件开发的标准化单元。 Docker 容器将软件以及它运行安装所需的一切文件(代码、运行时、系统工具、系统库)打包到一起,确保了不管是在什么样的运行环境,系统应用能以相同的方式运行。
Docker “容器即服务”的概念帮助XXXX公司银行的MyIBS开发团队和运营团队更高效控制应用的构建、发布和运行,使之更加敏捷和安全。Docker的轻量级管理方案能让多个容器在一台机器上共享同一个操作系统内核,这样能够比虚拟机更有效地利用内存。在安全性方面,Docker容器能够隔离应用,避免相互影响,在基础架构层为应用程序提供了额外的保护层。在实践中,多个Docker可以通过负载均衡设备连接,从而达到弹性伸缩的控制目的。
(二) 采用Ansible 软件对运维工作进行管理
Ansible是目前较为流行的自动化运维工具,基于Python开发,集合了众多运维工具的优点。能够实现批量系统配置、批量程序部署、批量运行命令等功能。Ansible的优势在于:(一)无需安装的轻量级客户端部署方案。(二)可通过脚本远程调用批量任务。(三)使用Python编写,维护相较其他工具更为简单。
在采用Docker容器的同时,XXXX公司银行结合实践,对分布式平台采用了Ansible软件对各类应用平台进行管理。
(一) 自动化运维
Ansible自动化运维平台能够为银行内所有的X86服务器提供自动巡检服务,并能够对指定应用进行图形化的的重启、部署、补丁安装等工作,降低人力成本,提高工作效率和可靠性并降低操作风险。
(二) 支持分布式环境下的微服务
Ansible 可在在分布式环境下为微服务发布提供了方便高效的支持。同时由于Ansible的易用性可以为微服务下的分布式应用提供了优秀的弹性伸缩扩展能力。该平台可以在业务需求的前提下为银行提供了自动化扩容部署功能。
(三) 日志和配置收集
在分布式环境下的系统日志和配置收集一直是一个值得研究的问题。XXXX公司银行可以利用Ansible的特性根据实际要求对应用系统和操作系统的日志进行收集并纳入集中管理。XXXX公司银行目前正在研究将系统和应用的日志收集进自动日志分析平台,通过提取其中的关键字段对日志进行分析,并希望能够根据人工智能方案提前预测系统可能出现的故障。
在互联网金融大潮的背景下,XXXX公司银行一直在思考保证传统银行产品架构稳定运行的情况下,如何通过分布式人工智能平台的为银行业务打造快速、高效的敏捷开发平台。在此过程中,XXXX公司银行积极探索各类分布式架构和开源软件的功能的价值,持续规划具有自身特色的互联网金融模式。XXXX公司银行希望能够通过传统金融及互联网架构的有机结合,为中国银行业的业务创新及技术创新提供新的思路和方法,也希望能为XXXX公司银行在中国的业务运行提供坚实的保障。