博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
清结算系统的一些思考
阅读量:4335 次
发布时间:2019-06-07

本文共 1409 字,大约阅读时间需要 4 分钟。

美团点评智能支付核心交易系统的可用性实践:https://tech.meituan.com/Trade-High-Availability-in-Action.html

今天看了一篇支付相关的博客,回头看了下我们的清结算系统,引发了一些思考。

1、消除依赖、控制依赖、弱化依赖

     消除依赖:交易系统将订单数据推送给MQ,而清结算系统从MQ上拉取订单数据,这样的优点是交易与清结算消除了依赖,实现了交易与清结算的解耦。

     控制依赖:MQ接收消息依赖交易系统,清结算系统拉取消息依赖MQ

     弱化依赖:对于以上依赖关系,当MQ发生故障时,交易系统与清结算系统将无法通信,这样的话我们可以直接采用RPC调用通信,实现弱化依赖的效果,达到容灾处理。

2、事务中不包含外部调用

   这里的外部调用,可直接理解为调用外部服务接口。当调用外部服务接口时,可能出现一些不稳定因素:比如有可能遇到外部服务挂掉引起调用接口失败,或者网络不稳定引起的调用接口超时,当遇到这种情况的时候我们一般采用重试机制,一般默认重试3次,当最后一次调用失败则报警,人工干预。

  而事务中如果包含外部调用,必然会造成大事务,大事务会造成其他对数据库的连接请求获取不到,导致和这个数据库相关的所有服务处于等待状态,造成连接池被打满,多个服务直接宕掉。

解决方案:

排查各个系统的代码,检查是否存在RPC调用,HTTP调用,消息队列操作,缓存,循环查询等耗时操作,将这些操作移到事务外,理想情况事务中只处理数据库操作。

建议不要使用xml文件配置事务,而使用注解的方式。原因是XML配置事务,第一可读性不强,第二切面通常配置的比较泛滥,容易造成事务过大,第三对于嵌套情况的规则不好处理。

对大事务添加监控报警。

3、合理设置超时时间和重试次数

清结算系统的响应时间=内部处理时间+外部依赖超时时间*重试次数

清结算系统存在一些外部服务调用、消息队列操作等,而当这些依赖方发生故障时,如果超时时间过长、重试次数过多,或者系统长时间不返回,可能导致连接池被打满,系统宕掉;如果超时时间设置过短,则错误会增多,系统可用性就比较差。

解决方案:

超时时间=响应时间*1.5;

调用方的超时时间依赖被调用方的响应时间;

可默认重试次数为3;

4、处理慢查询

读写分离。读走分库,写走主库

优化索引。索引过多影响数据库写性能,索引不够查询会慢;调研所有查询sql,优化索引,页面查询,可设置默认值,走组合索引,DBA建议索引个数不要超过5个,组合索引字段不要超过5个

将查询分为实时查询、近实时查询、离线查询。实时查询可直接查询数据库,其他可通过ES实现一个查询中心,处理近实时查询和离线查询

不要出现大表。当一张表的数据量达到千万级别,效率将急剧下降,则可考虑分库分表

5、熔断

当依赖的服务不可用时,服务调用方应采用一些技术手段,向上提供有损服务,保证业务柔性可用。

解决方案:

自动熔断,

手动熔断,

6、限流

系统可能收到一些有意或无意的请求,如DDoS攻击、用户失败重刷。

流量控制中常用的算法:令牌桶、漏桶、计数器。可以使用Guava的RateLimiter来实现,其中SmoothBurstry是基于令牌桶算法的,SmoothWarmingUp是基于漏桶算法的。

 

转载于:https://www.cnblogs.com/tilamisu007/p/9037078.html

你可能感兴趣的文章
阶段3 3.SpringMVC·_07.SSM整合案例_04.ssm整合之编写SpringMVC框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_5、SpringBoot2.x的依赖默认Maven版本...
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_08.ssm整合之Spring整合MyBatis框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_9、SpringBoot基础HTTP其他提交方法请求实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_12、SpringBoot2.x文件上传实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_19、SpringBoot个性化启动banner设置debug日志...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_20、SpringBoot2.x配置全局异常实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_23、SpringBoot2.x启动原理概述...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_21、SpringBoot2.x配置全局异常返回自定义页面...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_34、SpringBoot整合Mybatis实操和打印SQL语句...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_35、事务介绍和常见的隔离级别,传播行为...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_42、SpringBoot常用定时任务配置实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_41、SpringBoot定时任务schedule讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_43、SpringBoot2.x异步任务实战(核心知识)...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介
查看>>