随记(一)

来源:互联网 发布:软件运维工程师 知乎 编辑:程序博客网 时间: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