# biBACK **Repository Path**: mysting/biBACK ## Basic Information - **Project Name**: biBACK - **Description**: bi是我的系列项目的标识,BACK是后台,就是后台服务,主要偏于银行业务,基于Lagom框架(一个微服务架构)。 - **Primary Language**: Scala - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2019-01-23 - **Last Updated**: 2021-01-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## biBACK biBACK是一个实验项目,实验用Lagom微服务框架构建后台应用。该后台应用的业务背景是一个小小的银行核心系统,包括了客户、账户、核算等基本模块,提供存取、转账、支付等基本的服务。 另外,作为做了十多年银行应用系统的老人家,希望在这个实验中能够尝试不同于传统的技术和业务理念: ### 一、技术方面 技术方面主要是想实现完全的分布式(应用层+存储层)。传统银行应用系统都是“大集中”式的(图1),它有这么几个特点: * 几台应用服务器,通常是IBM的小型机,为避免单点故障,用F5并联 * 一个数据库,通常是Oracle的,为避免单点故障,用RAC模式 * 使用大容量可靠存储设备,通常是EMC的磁盘 > 这就是所谓的“IOE”。当然大银行核心系统还会使用IBM大型机(含DB2数据库和存储),例如工行、建行。 一种架构思想的存在,总有其优缺点,“大集中”式的架构思想,有: * √ 架构简单易于维护 * √ 数据集中单笔处理效率极高 * √ 强一致性(数据库事务) * × 不易于弹性扩展(尤其在数据层) * × 鸡蛋都在一个篮子里 * × 总体成本高(还受制于IOE) 而本实验想实现的分布式架构的优缺点可能正好相反,是目前大型互联网公司普遍采用的架构模式。实验中使用的Lagom微服务框架,在存储层是Cassandra(一个分布式的NoSQL数据库),在应用层是基于CQRS思想+AKKA框架实现的微服务。感觉上,应用层很像多年以前的的J2EE架构(StateBean + EntityBean),只是在分布式、读写分离、订阅/发布上做的更多。 ### 二、业务方面 - 客户角度 银行的业务范围很广,很多我也不懂,因而仅就“个人业务”提出些自己的想法,并努力实现之。包括: #### 1. 客户为中心 其实这个口号提了十几年,在我看来实际并未达到。不是建几个针对客户信息、客户分析的系统就是“客户为中心”了的,目前为止全部还是以“账户”为中心的 - 就是不停地去发卡,围绕卡来设计产品实现系统。 我认为的“客户为中心”,是这样想的:我(客户)只知道我在银行里有“钱”,其他卡/折/手机什么的只是识别我(客户)的手段/介质,科技的发展可以随时改变介质(如人脸、指纹、虹膜、DNA...),但我(客户)还是我。 银行用普卡银卡金卡来识别一个客户的重要与否是完全错误的,那天我没带卡片我就不是VIP了吗?就算现在有些POS/ATM使用还需要卡片,但每家银行都有卡甚至一家银行好几张卡,每个卡还有密码,我的天呐!一卡通”就是骗人的!更难理解的是一家银行不同分行开的卡之间转账还要收费,跨行还有个资金和清算的成本,你自己家有个啥成本! > 欣慰的是现在政府强制每个行只能开一个户/卡,本行转账也不许收费了。 #### 2. 钱“态” 刚才说到我(客户)知道在某银行有“钱”,正如现实生活中,有钱也不仅仅说你有很多现金,任何可以变现的都可以算,房产、车、股票、存款 ... 等等,这些都是钱的形态。 那么,在银行里的“钱”的“形态”大概可以理解为金融产品。对我(客户)来说,改变钱“态”就是购买/赎回金融产品,在记忆里就是:我在X银行有多少存款,多少贷款,多少理财 ... (和我有存折我有卡似乎没有毛关系,是银行自己管理需要关联起来的,还让客户参合进来)。 我(客户)有钱,就可能花钱用钱,这时候就该银行体现期服务价值了 - “钱”的管家!管家要做好三件事: * 让我的“钱”保值增值。别忽悠我买这买那了!我放多少钱在这里你就告诉我年收益多少吧,别的我也不懂,也不想搞懂。 * 无缝地用/花“钱”。不要告诉我只能用/花活期的钱,所有的钱都应该能花,不管定期、理财、贷款额度、信用额度、股票 ... 我要花多少你就给我折腾出多少(只要我有),怎么倒换我不care! #### 3. 智慧生活 之前的用/花“钱”的可能多是指客户主动发起的行为,有些特定场景是由商家主动发起的,通常是日常生活中的各种缴费和月供。这是管家要做好的第三件事: * 所有缴费单/月供发给我管钱的银行,银行帮我缴了/还了就好,一些要预缴的也给我安排好周期别错过,让我的生活里用水电煤宽带 ... 勿需操心! ### 三、业务方面 - 银行角度 以前我听过一个需求,行长提的,就是:这个IT系统能不能做到让我从头到尾定制出来一套银行业务系统。这是每个做业务的行员的心声,因为他们实在听厌了需求、测试、投产、排期 ... ITer其实很无奈,在这里我只能说,能部分实现就很好!那么在那些方面可能做一些工作呢? #### 1. 业务编程语言 概念有点像股票软件里公式的定义,当然会更复杂,需要很多领域知识的抽象,最基础的就是业务对象、名词的统一。 业务人员有很多工具来描述业务流程,工程师也能在某个框架体系下定制开发(无需编码),但没有描述完就可以运行的产品(类似Swift里的Playground)。