随记(一)
来源:互联网 发布:软件运维工程师 知乎 编辑:程序博客网 时间:2024/05/01 15:55
工作已经一年多了,从学校的项目中的curd慢慢的向着服务框架发展。crud是开发服务器最基本的数据库操作,所以不仔细说下去了。参加工作后,除了crud之外,在对内存、日志、缓存、文件、线程、socket、并发更进一步的学习和运用。闲来无事,写一下工作一年所做的系统。
项目框架
在公司做的第一个上线项目是统统付第三方支付项目,整个项目采取的模式如下图所示:
1、客户端通过https发送请求给php代理服务器;
2、php代理服务器接收到请求,作负载均衡作用,向路由服务器获取服务器ip地址;
3、php代理服务器将请求转发给对应ip服务器;
4、对应的服务器接收请求后,进行逻辑处理,操作数据库,然后将结果原路返回;
业务流程图
一、订单服务
订单服务的功能:
1、创建支付订单;
2、查询支付订单;
该服务最大的亮点是订单池:通过本地共享内存来存储支付订单信息,查询的时候,先查询订单池,假如没有的话,就直接查数据库;
二、清分服务
商户在使用第三方支付系统时,会跟第三方支付系统进行费用签约。打个比方说,你在淘宝买完东西,使用支付宝支付的时候,支付宝根据签约的费用对淘宝收取费用。这是支付公司盈利的一种方式。在这过程中,你是一个客户,淘宝是商户。清分是对商户的订单进行费用计算,计算完之后,再由结算服务对商户结算。总的来说就是,客户进行交易的钱会先到第三方支付,第三方支付进行费用计算,然后再将交易的钱打给商户。在这其中,第三方支付作用是古代钱庄的作用。
清分服务主要有两个功能:
1、记录交易服务请求的支付订单;
2、对支付订单进行清分(包含费用计算、银行到账查询);
第一个功能的流程图:
当交易服务发送请求给清分服务,只要是失败就会写入文件中。这样做的目的是为了要保证支付订单一定要入库成功。两个服务之间通信,会出现通信失败,入库也会出现入库失败。为保证数据一定入库,失败的时候先由交易服务将数据写入文件,然后清分服务去请求交易服务读取文件中的数据,进行再次入库。
第二个功能的主要流程图:
清分过程不是实时的过程,所以做法是创建一个线程load数据出来清分。这就涉及到了一个数据库资源的问题了。load数据的时候会进行全表扫描,一条一条数据从数据库读出来,然后再一条条更新回去。当数据多的时候,会造成数据库高的读写io和长时间的数据库连接。而且目前线上只有一个数据库,所以会影响到其他服务调用数据库的效率。后来为了改进,从一条一条数据load,变成分批次load,一次load固定大小的数据,不过数据库的io并没有降低多少。
清分服务改版:
在第一版的清分服务,做法是load表数据进行清分,对数据库的消耗太大。在上面提及了清分的最主要两个功能。
第一个功能改成为:
增加了入库成功后,清分服务将支付订单数据写入文件。在第二个功能对支付订单数据进行清分的时候,不在对数据库load数据清分而改为读文件。清分完数据后,再同步到数据库中。从数据库改成文件,需要保证文件的数据与数据库的数据一致。
结算服务:
结算服务就是将钱打给商户,过程比较简单就不详细写了。
1 0
- 随记(一)
- 孕妇随记(一)
- 学习随记(一)
- 工作随记(一)
- 随记(一)
- ocp学习随记(一)
- 移动产品设计随记(一)
- Android学习随记(一)
- C语言随记(一)
- threejs学习随记(一)
- 随记(一)
- 随记一
- 编程随记 ---- 拼包程序(一)
- SQL教程随看随记(一)
- 学习DatabaseConnectionPool--数据库连接池(随记一)
- 阅XML基础教程随记(一)
- IOS7 随记(一)之unwind segue
- Android 画一条线(随记一)
- 设计模式简要总结——结构型模式
- Android跨组件通信——TheWatcher使用介绍
- SQL Error: ORA-01427: single-row subquery returns more than one row
- java常用sql处理函数类
- 2. 将对象分离到单独的xml文件
- 随记(一)
- python开发框架(tornado, web.py)
- 缺少web.xml的version引发的血案
- SpringMVC入门(搭建SpringMVC)
- 是谁在背后操控着生鲜电商的生与死?
- 如何让不支持Emoji表情符的数据库存取Emoji表情
- 二、模版模式与回调Template Method(行为型模式)
- 优先级队列:PriorityQueue
- Linux下进程通信的八种方法