在公司做项目遇到哪些坑,如何解决的,备之,算积累经验
1
问题:
与XX的接口,商量好,每天XX会把钱打到公司账户上,日终我们拿这钱进行入账,XX公司没放钱,结果大半夜日终卡掉,半夜业务人员也睡了,搁置到了早上才解决
解决:
到了早上,XX公司人员打钱,继续跑任务,解决
经验:
做系统千万别相信人的主观能动性,能不手工做就别让人手工做
2 做还款业务
问题:贷款业务无非就是放款和还款,还款中会遇到各种问题,正向交易还好,逆向交易会让你想死的感觉都有
解决:还款会有还款顺序问题,但是代偿的业务,还款顺序可能发生变化。比如正向顺序: 罚息 滞纳金 费用 利息 本金
那么逆向顺序就有可能是本金 利息 罚息 滞纳金 费用等。这还好,总之是还款,要是还款撤销,可就糊他了,要记录各种还款之前的状态,不光金额要回滚,包括还款计划状态,结清状态,罚息滞纳金是否要重新记回来等各种问题
经验:一切正向的操作还好说,一旦陷入逆向操作,要谨慎,会有各种问题
3 做划扣业务–关于异步
如图,如果M系统的三个块代表一个方法,那么中间逻辑,或者调用其他系统的逻辑有一个地方出现问题,对系统都是致命的。
如何处理好这些逻辑,对提升系统的健壮性非常有必要,不知道这张图你能看懂吗?
其实这个问题就是分布式事务的问题的,
一,可以分段提交事务,TCC
二, 也可以在出现异常时提供回调接口来冲掉刚才的操作
4 关于resthub接口超时问题
问题:调用接口,基于rcp调用,刚开始是没有配置超时的,但是在有一天,技术部不知道为啥,配置了,接口处理时间1分钟后超时,结果造成大面积的数据异常。
想想A系统发B系统,接口超时,结果,数据到没到B,B到底处理了吗?A系统是因为超时造成的异常还是就是数据处理异常,真想说一句,MYGOD.
解决:后来,经沟通,让技术部去掉了接口超时验证。
经验:任何策略的产生都要考虑清楚
5 db2单表数据5000万,查询分页都要2分钟才能查出10条数据,如果分表,没有好的分法,比如我们不能根据id进行Hash,前端列表页还有查询各种条件。大神有好的方法吗?
大表需要分表,目前可能只有这一种方法来提高效率。
6,rabitmq踩的坑,同一个生产者,在测试环境,只有一个消费者没有问题。
但是在生产环境配置了负载均衡。如果发两条一样的信息,在测试环境,肯定是这要的
第一条插入时,数据库没有该数据,没有问题
第二条插入时,数据库有了该数据,更新该数据,也没有问题
但是在生产上,如果发两条一样的信息,这时候,假如A机器消费了,插入库还没有提交事务,这时候B机器也消费了,插入库的时候因为A的数据还没有提交,所以它认为数据库没有该数据,也会执行插入,
待事务提交的时候,这时候会出现两条记录同时插入的情况。
解决方案:一, 将消费者只保持在一台服务器上 ,将另一台的消费者干掉
二,消费者同时在两台服务器存在,在表中加上唯一索引,当出现索引重复的时候,第二条数据是插入不了的,然后捕获运行时异常,不抛出。