某企业支付产品,处于初级运营阶段,为客户、商户提供入驻、充值、结算等服务。产品基于SpringCloud体系构建微服务,项目代码结构图如下。
分微信公号和后台管理两块,采用 动静分离 结构部署,使用Nginx服务器。后端代码仅提供业务服务,无展现功能。该项目数据库并未严格按照微服务体系中各服务模块各有自维护自身数据库的原则,而是共用一个数据库,降低了数据间同步的复杂度。比如分布式事务、数据的一致性等问题处理起来简单一些。
代码管理采用maven,虽然gradle在未来趋势上表现更强劲。
下面就从技术点技术面来解构下该产品
1、采用 mvnw 替代单一的mvn命令。mvnw 全名是maven wrapper,它的原理是在maven-wrapper.properties文件中记录你要使用的maven版本,当用户执行mvnw clean 命令时,发现当前用户的maven版本和期望的版本不一致,那么就下载期望的版本,然后用期望的版本来执行mvn命令,比如刚才的mvn clean。它的应用场景是组织内部不采用mvnw是可行的,但针对开源的一个项目?如何保证你使用的maven的版本和下载源码的人的maven的版本一致呢,这时候就可采用mvnw。
2、 Lnhn 算法 ,由于产品发行卡片,为便于卡片卡号的识别校验,采用能用的Lnhn算法生成卡号。是一种简单的算法,此算法最初是在20世纪60年代由科学家创造,主要用于检验银行卡、信用卡号码的有效性的算法。该算法现已得到了广泛的应用,在包括信用卡在内的银行卡号以及不少重要身份识别的证件号。国内仅有极个别卡号发行未遵循Lnhn规则,它不是一种安全的加密,设计它的目的只是防止意外出错而不是恶意攻击。
简单罗列下Lnhn算法规则:
1、从卡号最后一位数字开始,逆向将奇数位相加。 2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。 3、将奇数位总和加上偶数位总和,结果应该可以被10整除。
(现在你可以校验下你钱包里的银行卡号,是不是符合这个规则?)
3、 Gogs 服务。作为全球最大的同性交友社区Github,运营主体在境外,有时候访问还是受限制的,你懂的。Microsoft收购了Github后也引发了一部分人出逃,不管是出于服务稳定,还是代码私密性,搭建自己的git服务还是很有必要的。Gitlab是个选择,但操作相对比较繁琐。此产品引入了Gogs,它是用Go语言写的,能兼容各个系统。能运行于 Windows,MAC,Linux,ARM 等,安装使用都比较轻量简便,是一个功能丰富的、私有的Git托管服务。
4、 Spring Batch 批处理框架,说批处理,Java领域相信不少朋友会采用Quartz来实现,其实我们只是采用了Quartz的调度功能,批处理功能是我们自己实现的,Quartz本身也并无批处理的能力。官网对其有明确的释义:
Spring Batch provides reusable functions that are essential in processing large volumes of records, including logging/tracing, transaction management, job processing statistics, job restart, skip, and resource management. It also provides more advanced technical services and features that will enable extremely high-volume and high performance batch jobs through optimization and partitioning techniques. Simple as well as complex, high-volume batch jobs can leverage the framework in a highly scalable manner to process significant volumes of information.
未完待续......