订单业务处理太过耗时如何优化?

2020-06-23 08:44:27 +08:00
 cai88112
单台服务器

对接的硬件设备,它们处理数据很快,超过 300ms 就认为超时、重试。
我的订单接口要插入数据到 6 张表中,大概 1-3s,所以经常出现大量重复请求。

想到一个不成熟方案,先把请求缓存 redis 中,先返回结果,再异步处理数据。
但是如果 redis 丢失或者 redis 缓存失败,数据就彻底丢失了,不知道如何补救。

求教好的方案
4823 次点击
所在节点    Java
31 条回复
zardly666
2020-06-23 08:48:45 +08:00
消息中间件就是做这个的呀 rabbitmq
hand515
2020-06-23 08:54:08 +08:00
如果单纯是插入 6 张表要 1~3s,我觉得应该从性能上入手,查找问题
cai88112
2020-06-23 08:54:22 +08:00
@zardly666 单机用不太好吧,挂了的话,系统就彻底崩了吧
swulling
2020-06-23 08:54:24 +08:00
redis 做高可用就行了,不丢不就完了。

简单点就主从同步,加一个监控避免从落后太对就够了。
AngryPanda
2020-06-23 08:56:17 +08:00
同意二楼,你这写入速度也忒慢了
crclz
2020-06-23 08:57:07 +08:00
消息中间件没毛病哦
skymei
2020-06-23 09:02:06 +08:00
感觉可以考虑先优化现有的 sql,然后尝试改为异步
sadfQED2
2020-06-23 09:02:41 +08:00
才 6 张表就要 1 到 3 秒??你应该先研究下为啥这么慢
allanzhuo
2020-06-23 09:03:44 +08:00
1 到 3 秒应该有可以优化的地方
cai88112
2020-06-23 09:04:13 +08:00
@skymei
@AngryPanda
@hand515 感谢,我再测试测试,sql 的问题
cai88112
2020-06-23 09:05:08 +08:00
@sadfQED2 中间还有业务处理,可能是业务处理耗时
thinkmore
2020-06-23 09:06:40 +08:00
可能人家楼主只能有一台服务器,上中间件不合适。还是想想优化业务逻辑
heyjei
2020-06-23 09:12:46 +08:00
先别急着 redis 和消息中间件,

先按二楼的意见,看下为啥 6 张表而已,却要 1-3 秒?
cai88112
2020-06-23 09:16:48 +08:00
@heyjei 嗯 谢谢,不着急,方案成熟了再搞
我再看看,有没有优化空间
leaderhyh
2020-06-23 09:23:50 +08:00
首先考虑最简单的通过提升硬件来 tps
其次考虑优化业务逻辑, SQL 等, 可以通过压测找出性能瓶颈 是代码还是 SQL, 亦或是有其他的第三方请求
最最最后才考虑改成异步, 因为异步返回的是处理中的中间态, 你可能还需要提供一个查询业务处理状态的接口
如果确定改异步, 可以考虑在简单的验证后将请求体直接落库, job 异步处理即可
JsonTu
2020-06-23 09:28:33 +08:00
先记录下哪里耗时严重,如果是代码逻辑,看能不能优化,如果单插入 sql 耗时用消息中间件吧
qq976739120
2020-06-23 10:00:21 +08:00
1-3 秒.....你插入的是 excel 不是 mysql 吧....
guanhui07
2020-06-23 10:22:07 +08:00
太慢了 1-3 秒 排除逻辑 只插入到 Mysql 要这么久
ty89
2020-06-23 10:24:01 +08:00
好奇,如何实现插入需要 1~3 秒的,一般人写不出来这么慢的 sql
Alex5467
2020-06-23 10:35:52 +08:00
订单的有些数据与本次请求无关的只是记录数据的插入操作完全可以做成异步的,还得排查一下是哪里慢了,整个看是看不出来的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/683961

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX