当前位置: 首页 > 后端技术 > Java

工作中常用的接口性能优化--异步

时间:2023-04-01 21:23:34 Java

工作中经常遇到接口响应慢,超过阈值触发告警,甚至导致网关超时,App无响应,以及用户投诉等等。虽然有些场景可能是业务本身的复杂逻辑导致的,但是一切还是要靠程序员来抵挡。今天我们就来说说工作中常用的接口性能优化方法:异步。说到异步,大家可能很容易想到同步、阻塞、非阻塞。同步和异步:在调用方法或服务时,是否有返回或响应是被调用的服务还没有处理完的区别。当服务处理完成后,返回响应称为同步;当收到请求,还没有处理完,就立即返回一个响应,称为异步。阻塞非阻塞:调用方法或服务时,当方法服务还没有返回时,不区分当前线程是否可以做其他任务(挂起)。1通过多线程实现异步调用主要是利用线程池并发一些操作来减少整体的响应时间。可以直接使用线程池、@Async异步任务、CompletableFuture等实现,关于线程池、@Async、CompletableFuture,后面会详细讲到使用和注意事项。近期商机相关的后台管理等具体场景。需要关联查询家长、学生、销售的姓名。这些数据存储在其他系统中,本地冗余会造成数据不一致。一般情况下,会根据查询结果动态查询相应的数据,然后完成。当然最好配合缓存。如果数据量不是太大,比如销售数据,甚至可以全缓存。当然,关于缓存,后面会单独说。2通过队列等异步任务这种方式其实是用MQ削峰填谷,任务是异步的。其实削峰填谷也可以认为是一种异步处理的场景,只不过它的目的是缓冲瞬时请求。任务异步的目的是将部分任务异步化,不阻塞主任务的执行,提高响应速度。2.1削峰填谷仍针对近期业务。在用户增长业务方面,用户从落地页向内部系统提交数据,内部系统将数据简单处理后推送至外部CRM系统。与客户沟通后,销售会将线索转化为商机。在此转换过程中,CRM会将数据推送到内部系统。内部系统会根据传入的数据进行各种操作,比如创建和更新家长,创建和更新学生,以及各种附加的业务信息。整个操作涉及多个系统,有时无法控制。外部CRM系统可以通过脚本函数扩展其功能,并根据业务需要添加一个到内部系统的按钮。这个按钮操作是同步阻塞的。当调用函数(界面)没有返回时,整个页面无法操作,是一种非常不友好的交互方式。2.2任务异步这种场景最早是在做商城项目的时候。用户下单付款后,先更新本地订单记录,然后将待发货消息推送到第三方物流系统,将订单相关内信发送给用户,并可能触发积分赠送和推荐人返利计算,并可能触发相关的营销规则派发优惠券等3本来想在后记讲一下,结果发现涉及的内容太多了。等到这篇文章留下的坑后面都被填完了,再来更新这篇文章。回声'5Y6f5Yib5paH56ugOiDmjpjph5Eo5L2g5oCO5LmI5Zad5aW26Iy25ZWKWzkyMzI0NTQ5NzU1NTA4MF0pL+aAneWQpihscGUyMzQp'|base64-d