JAVAEE大型金融支付-第1章-讲义-项目介绍

第1章 讲义-项目介绍与环境搭建

1.项目背景

1.1 项目背景

随着移动支付的盛行,商业银行、第三方支付公司、其它清算机构、消费金融公司等众多类型的机构,都在为商户 提供网络(移动)支付解决方案。另一方面,用户的支付需求繁多,支付渠道已呈“碎片化”状态,并且“碎片化”程 度将逐渐加深。惠民支付顾名思义就是将目前主流的支付进行整合,形成第三方支付的惠民通道,也被称为“第四方支付”。

下图是惠民支付的产业结构:

在这里插入图片描述

惠民支付不进行资金清算,因此无需支付牌照,其只是完成支付环节的信息流转和商户运营的承载,其在集合银联、支付宝、微信等主流支付方式的基础上,帮助商户降低接入成本,提高运营效率,具有中立性、灵活性、便捷 性等特点。

下图是商户通过惠民支付平台完成支付业务:

在这里插入图片描述

1.2 项目概述

惠民支付是一个提供惠民支付的平台,惠民支付目前主要的做法就是线上惠民收银台(开放API),线下C2B一码多付、线下B2C商家扫码。平台以SaaS服务形式提供给各商户订单管理、门店管理、财务数据统计等基础服务, 惠民支付还以支付为入口,通过广告、营销、金融等服务,构建一个移动支付的全生态系统。

1.3 功能模块

平台主要包括三个模块:官网&开放平台、商户平台、运营平台,详细功能如下

功能模块名称功能说明
官网&开放平台产品展示、功能介绍、帮助中心和开发者中心
商户平台-首页提供商户注册、登录、基本信息查看、数据看板
商户平台-账户管理提供商户企业资质认证、企业信息查看和套餐购买
商户平台-支付管理为商户提供应用创建、渠道参数配置、交易总览和开启支付(生成二维码)等
商户平台-门店管理为商户提供新增门店、店长分配、门店导入等
商户平台-员工管理为商户提供新增员工、定义角色、分配角色等
商户平台-优惠管理为商户提供优惠券管理、活动统计等
运营平台-商户管理对商户进行检索、审核和订单统计
运营平台-优惠管理为商户设置优惠策略和优惠券发送
运营平台-管理员管理为平台提供新增管理员、定义角色和分配角色等

1.4 业务流程

平台主体业务流程如下:

  1. 商户注册惠民支付平台账号

  2. 提交资质信息进行认证

  3. 平台审核商户资质信息

  4. 商户审核通过后,可在平台购买不同的套餐(服务)

  5. 商户创建应用

  6. 商户填写支付渠道参数(支付宝、微信、银联等)

如果商户要使用线上支付业务,则需要使用SDK和开放平台API集成或开发支付功能

  1. 商户测试支付渠道后上线

  2. C端用户在商户消费并进行二维码支付

  3. 商户可通过平台进行运营管理

可以通过项目原型进一步了解项目的业务流程,包括:商户注册、C扫B、B扫C等。 参考“项目原型设计”。

2.项目的技术架构

2.1 软件架构的演进

软件架构的发展经历了从单体架构、垂直架构、SOA架构到微服务架构的过程

2.1.1 单体架构

Web应用程序发展的早期,大部分web工程师将所有的功能模块打包到一起并放在一个web容器中运行,所有功能 模块使用同一个数据库。

下图是一个单体架构的电商系统:

特点:

1、所有的功能集成在一个项目工程中。

2、所有的功能打在一个war包部署到服务器。

3、通过部署应用集群和数据库集群来提高系统的性能。

优点:

1、项目架构简单,前期开发成本低,周期短,小型项目的首选。

2、开发效率高,模块之间交互采用本地方法调用。

3、容易部署,运维成本小,直接打包为一个完整的包,拷贝到web容器的某个目录下即可运行。

4、容易测试:IDE都是为开发单个应用设计的、容易测试——在本地就可以启动完整的系统。

缺点:

1、全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。

2、版本迭代速度逐渐变慢,修改一个地方就要将整个应用全部编译、部署、启动,开发及测试周期过长。

3、无法按需伸缩,通过集群的方式来实现水平扩展,更无法针对某业务按需伸缩。

2.1.2 分布式架构

针对单体架构的不足,为了适应大型项目的开发需求,许多公司将一个单体系统按业务垂直拆分为若干系统,系统 之间通过网络交互来完成用户的业务处理,每个系统可分布式部署,这种架构称为分布式架构。

特点:

1、按业务垂直拆分成一个一个的单体系统,此架构也称为垂直架构。

2、系统与系统之间的存在数据冗余,耦合性较大,如上图中三个项目都存在客户信息。

3、系统之间的接口多为实现数据同步,如上图中三个项目要同步客户信息。

优点:

1、通过垂直拆分,每个子系统变成小型系统,功能简单,前期开发成本低,周期短。

2、每个子系统可按需伸缩。

3、每个子系统可采用不同的技术。

缺点:

1、子系统之间存在数据冗余、功能冗余,耦合性高。

2、按需伸缩粒度不够,对同一个子系统中的不同的业务无法实现,比如订单管理和用户管理

2.1.3 SOA架构

SOA是一种面向服务的架构,基于分布式架构,它将不同业务功能按服务进行拆分,并通过这些服务之间定义良好 的接口和协议联系起来。

特点:

1、基于SOA的架构思想,将重复公用的功能抽取为组件,以服务的方式向各系统提供服务。

2、各系统与服务之间采用webservice、rpc等方式进行通信。

3、ESB企业服务总线作为系统与服务之间通信的桥梁。

优点:

1、将重复的功能抽取为服务,提高开发效率,提高系统的可重用性、可维护性。

2、可以针对不同服务的特点按需伸缩。

3、采用ESB减少系统中的接口耦合。

缺点:

1、系统与服务的界限模糊,会导致抽取的服务的粒度过大,系统与服务之间耦合性高。

2、虽然使用了ESB,但是服务的接口协议不固定,种类繁多,不利于系统维护。

2.1.4 微服务架构

基于SOA架构的思想,为了满足移动互联网对大型项目及多客户端的需求,对服务层进行细粒度的拆分,所拆分的 每个服务只完成某个特定的业务功能,比如订单服务只实现订单相关的业务,用户服务实现用户管理相关的业务等 等,服务的粒度很小,所以称为微服务架构

特点:

1、服务层按业务拆分为一个一个的微服务。

2、微服务的职责单一。

3、微服务之间采用RESTful、RPC等轻量级协议传输。

4、有利于采用前后端分离架构。

优点:

1、服务拆分粒度更细,有利于资源重复利用,提高开发效率。

2、可以更加精准的制定每个服务的优化方案,按需伸缩。

3、适用于互联网时代,产品迭代周期更短。

缺点:

1、开发的复杂性增加,因为一个业务流程需要多个微服务通过网络交互来完成。

2、微服务过多,服务治理成本高,不利于系统维护。

2.2 技术架构

惠民支付采用当前流行的前后端分离架构开发,由用户层、UI层、微服务层、数据层等部分组成,为PC、H5等客 户端用户提供服务。下图是系统的技术架构图:

业务流程举例:

1、用户可以通过PC、手机等客户端访问惠民支付。

2、系统应用CDN技术,对一些图片、CSS、视频等资源从CDN调度访问。

3、所有的请求全部经过负载均衡器。

4、首先请求UI层,渲染用户界面。

5、商户通过平台进行注册和企业认证,UI层通过网关请求服务层,服务层完成业务处理后将数据持久化到数据 层。

6、平台运营人员对商户信息进行审核,其系统执行流程和商户注册过程一致,UI层请求服务层业务处理,服务层 查询数据层并将数据持久化到数据层。

各模块说明如下:

序号名称功能描述
1用户层用户层描述了本系统所支持的用户类型包括:pc用户、app用户、h5用户。pc用户通过浏览 器访问系统、app用户通过android、ios手机访问系统,H5用户通过h5页面访问系统。
2CDNCDN全称Content Delivery Network,即内容分发网络,本系统所有静态资源全部通过 CDN加速来提高访问速度。系统静态资源包括:html页面、js文件、css文件、image图片、pdf和ppt及doc教学文档、video视频等。
3负载均衡系统的CDN层、UI层、服务层及数据层均设置了负载均衡服务,上图仅在UI层前边标注了负 载均衡。 每一层的负载均衡会根据系统的需求来确定负载均衡器的类型,系统支持4层负载均衡+7层负载均衡结合的方式,4层负载均衡是指在网络传输层进行流程转发,根据IP和端 口进行转发,7层负载均衡完成HTTP协议负载均衡及反向代理的功能,根据url进行请求转发。
4UI层UI层描述了系统向pc用户、app用户、h5用户提供的产品界面。根据系统功能模块特点确 定了UI层包括如下产品界面类型: 1)面向商户的惠民支付商户平台。 2)面向平台运营人员的惠民支付运营平台。
5微服务层微服务层将系统服务分类两类:业务微服务、基础微服务。 业务微服务:主要为商户和运营人员提供业务服务,包括统一认证、商户服务、交易服务等。 基础微服务:为系统级的公共服务,不涉及具体的业务,包括文件服务、配置服务、验证码服务、调度服务等。
6数据层数据层描述了系统的数据存储的内容类型,持久化的业务数据使用MySQL。 消息队列:存储系统服务间通信的消息,本身提供消息存取服务,与微服务层的系统服务连接。 缓存: 作为系统的缓存服务,存储商户信息、验证码信息、用户信息等,与微服务层的所有服务连 接。 文件存储:提供系统静态资源文件的分布式存储服务,文件存储服务器作为CDN服务器的数据来源,CDN上的静态资源将最终在文件存储服务器上保存多份。
7外部系统接口1)支付宝、微信支付接口,本系统提供支付宝、微信两种支付接口。2)短信接口,本系统 与第三方平台对接短信发送接口。 3)文件存储 ,静态资源文件的存储采用第三方文件服务方式,本系统采用七牛云文件存储。4)CDN,本系统与第三方CDN服务对接,使用CDN加速服务来提高本系统的访问速度。

2.3 技术栈

下图是项目技术架构的简图,通过简图了解项目所使用的技术栈。

重点了解微服务技术栈:

惠民支付服务端基于Spring Boot构建,采用Spring Cloud Alibaba微服务架构。

1)基础设施

业务数据持久化采用MySQL,数据缓存采用Redis,采用RocketMQ的事务消息机制完成部分场景下的分布式事务控制,采用第三方云平台完成文件上传与分布式存储。

2)组件

系统微服务基于SpringBoot开发,数据库连接池采用Druid,POJO构建采用Lombok,日志系统采用Log4j2,

Guava工具类库,Mybatis Plus持久层接口实现,Sharding-jdbc分库分表组件,Swagger接口规范组件,XXL-job

分布式任务调度组件,Sentinel限流组件等。

3)接入

Zuul网关完成客户端认证、路由转发等功能,Dubbo RPC完成微服务远程调用,JWT提供前后端令牌管理方案。

4)视图

系统微服务基于SpringBoot开发,数据库连接池采用Druid,POJO构建采用Lombok,日志系统采用Log4j2,

Guava工具类库,Mybatis Plus持久层接口实现,Sharding-jdbc分库分表组件,Swagger接口规范组件,XXL-job

分布式任务调度组件,Sentinel限流组件等。

3)接入

Zuul网关完成客户端认证、路由转发等功能,Dubbo RPC完成微服务远程调用,JWT提供前后端令牌管理方案。

4)视图

平台支持H5、PC等各种前端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/250629.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

视频推拉流平台EasyDSS点播文件播放请求添加token验证的实现方法

EasyDSS视频直播点播平台可提供一站式的视频推拉流、转码、点播、直播、播放H.265编码视频等服务,搭配RTMP高清摄像头使用,可将设备的实时流推送到平台上,实现无人机视频推流直播等应用。今天我们来介绍下EasyDSS系统点播文件播放请求添加tok…

谷歌的开源供应链安全

本内容是对Go项目负责人Russ Cox 在 ACM SCORED 活动上演讲内容[1]的摘录与整理。 SCORED 是Software Supply Chain Offensive Research and Ecosystem Defenses的简称, SCORED 23[2]于2023年11月30日在丹麦哥本哈根及远程参会形式举行。 摘要 💡 谷歌在开源软件供应…

Tor网络原理详解

引入 匿名通信是一种通过采用数据转发、内容加密、流量混淆等措施来隐藏通信内容及关系的隐私保护技术。为了提高通信的匿名性,这些数据转发链路通常由多跳加密代理服务节点构成,而所有这些节点即构成了匿名通信系统(或称匿名通信网络&#…

Flask学习四:补充

插件 flask-caching 简介 Flask-Caching 是一个 Flask 扩展,旨在为 Flask 应用程序添加缓存功能。缓存是一种提高应用性能的技术,通过将常用数据暂时存储在一个快速访问的位置(如内存或磁盘),从而减少对较慢资源&…

【Nginx】Nginx了解(基础)

文章目录 Nginx产生的原因Nginx简介Nginx的作用反向代理负载均衡策略动静分离 Nginx的Windows下的安装Linux下的安装Nginx常用命令 负载均衡功能演示 Nginx产生的原因 背景 一个公司的项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发…

MIT6.5840-2023-Lab2C: Raft-Persistence

前置知识 见上一篇 Lab2A。 实验内容 实现 RAFT,分为四个 part:leader election、log、persistence、log compaction。 实验环境 OS:WSL-Ubuntu-18.04 golang:go1.17.6 linux/amd64 Part 2C: persistence 大部分的bug都与这…

Datawhale 12月组队学习 leetcode基础 day3 递归

这是一个新的专栏,主要是一些算法的基础,对想要刷leedcode的同学会有一定的帮助,如果在算法学习中遇到了问题,也可以直接评论或者私信博主,一定倾囊相助 进入正题,今天咱们要说的是递归,递归是是…

SpringBoot 自动装配原理---源码详解

目录 SpringBoot 自动装配原理源码流程详解:流程总结:条件匹配解释:其他解释: SpringBoot 自动装配原理 源码流程详解: 1、先看启动类,启动这个main方法,然后调用这个run方法。 2、把 启动类作…

牛客网 DP35 【模板】二维前缀和

代码: import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextInt()) { //…

netty-daxin-3(rpc远程调用)

文章目录 nettyRpcObjectEncoder 与 ObjectDecoderjdk动态代理回顾Rpc调用过程简析服务端客户端 nettyRpc ObjectEncoder 与 ObjectDecoder ObjectEncoder继承自MessageToByteEncoder<Serializable>&#xff0c;它内部使用ByteBufOutputStream包装ByteBuf对象&#xff…

Python 爬虫之简单的爬虫(一)

爬取网页上所有链接 文章目录 爬取网页上所有链接前言一、基本内容二、代码编写1.引入库2.测试网页3.请求网页4.解析网页并保存 三、如何定义请求头&#xff1f;总结 前言 最近也学了点爬虫的东西。今天就先给大家写一个简单的爬虫吧。循序渐进&#xff0c;慢慢来哈哈哈哈哈哈…

TrustGeo代码理解(一)main.py

代码链接:https://github.com/ICDM-UESTC/TrustGeo 一、导入各种模块和数据库 # -*- coding: utf-8 -*- import torch.nnfrom lib.utils import * import argparse, os import numpy as np import random from lib.model import * import copy from thop import profile imp…

devc++如何建立一个c++项目?devc++提示源文件未编译?

打开devc APP后是这样的界面&#xff1b; 点击文件-> 新建->项目&#xff0c;这一点应该不难&#xff0c;主要是最后这个选择什么&#xff1f; 这样即可。 devc提示源文件未编译&#xff1f; 点击工具->编译选项&#xff1b; 如果不能解决&#xff0c;那就是可能路径…

NNDL 循环神经网络-梯度爆炸实验 [HBU]

目录 6.2.1 梯度打印函数 6.2.2 复现梯度爆炸现象 6.2.3 使用梯度截断解决梯度爆炸问题 【思考题】梯度截断解决梯度爆炸问题的原理是什么&#xff1f; 总结 前言&#xff1a; 造成简单循环网络较难建模长程依赖问题的原因有两个&#xff1a;梯度爆炸和梯度消失。 循环…

代码随想录算法训练营第53天| 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划

JAVA代码编写 1143.最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情…

软件测试面试八股文(答案解析+视频教程)

1、B/S架构和C/S架构区别 B/S 只需要有操作系统和浏览器就行&#xff0c;可以实现跨平台&#xff0c;客户端零维护&#xff0c;维护成本低&#xff0c;但是个性化能力低&#xff0c;响应速度较慢。 C/S响应速度快&#xff0c;安全性强&#xff0c;一般应用于局域网中&#xf…

【华为数据之道学习笔记】3-10元数据管理架构及策略

元数据管理架构包括产生元数据、采集元数据、注册元数据和运 维元数据。 产生元数据&#xff1a; 制定元数据管理相关流程与规范的落地方案&#xff0c;在IT产品开发过程中实现业务元数据与技术元数据的连接。 采集元数据&#xff1a; 通过统一的元模型从各类IT系统中自动采集元…

Linux下FFmepg使用

1.命令行录一段wav,PCM数据 ffmpeg -f alsa -i hw:0,0 xxx.wav//录制 ffplay out.wav//播放ffmpeg -f alsa -i hw:0,0 -ar 16000 -channels 1 -f s16le 1.pcm ffplay -ar 16000 -channels 1 -f s16le 1.pcm -ar freq 设置音频采样率 -ac channels 设置通道 缺省为1 2.将pcm…

002.Java实现两数相加

题意 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示两数之和的新链表。 示例 输入&#xff1a;l1[2,4,3],l2[5,6,4] 输出…

【从零开始学习JVM | 第七篇】深入了解 堆回收

前言&#xff1a; Java堆作为内存管理中最核心的一部分&#xff0c;承担着对象实例的存储和管理任务。堆内存的高效使用对于保障程序的性能和稳定性至关重要。因此&#xff0c;深入理解Java堆回收的原理、机制和优化策略&#xff0c;对于Java开发人员具有重要的意义。 本文旨在…