Vue3+ElementPlus+Koa2 全栈开发后台系统
工作异步中常用的接口性能优化
在工作中,我们经常会遇到界面响应慢、超过阈值触发报警,甚至网关超时、App无响应、用户投诉等情况。虽然有些场景可能是业务本身复杂的逻辑造成的,但还是要靠程序员来抵制一切。
今天我们就来说说常用的在工作中的接口性能优化方法:异步。
说到异步,可能很容易想到同步、阻塞和非阻塞。
异步:当一个方法或服务被调用时,当被调用的服务没有完成处理时,是否有返回或响应。当业务处理完成后,返回的响应称为同步;当接收到的请求还没有被处理时,有一个立即的响应被称为异步。
阻塞和非阻塞:当一个方法或服务被调用时,当方法服务没有返回时,当前线程是否可以做其他任务(被挂起)是没有区别的。
1.多线程异步调用。
使用主线程池来并发处理一些操作,以减少总体响应时间。可以直接使用线程池、@Async异步任务、CompletableFuture等。
线程池、@Async和CompletableFuture的用法和注意事项后面会详细讨论。
具体场景,比如近期业务中与商机相关的后台管理。需要查询家长,学生,销售等姓名。这些数据存储在其他系统中,本地冗余会造成数据不一致。一般情况下,会根据查询结果动态查询相应的数据,然后进行补充。
当然最好配合缓存,如果数据量不太大的话,比如销售数据甚至可以全部缓存。当然,后面我们会单独讲缓存。
image.png
2通过队列的异步任务等。
这种方式其实就是用MQ削峰填谷,任务是异步的。其实削峰填谷也可以看作是异步处理的一个场景,但其目的是缓冲瞬时请求。任务异步的目的是让一些任务异步,而不是阻塞主任务的执行,提高响应速度。
2.1削峰填谷
还是为了最近的生意。在做与用户增长相关的业务时,用户从登陆页面向内部系统提交数据,内部系统会简单处理数据,然后推送到外部CRM系统。与客户沟通后,销售会将线索转化为商机。在这个转换过程中,CRM会将数据推送到内部系统。内部系统会根据传输过来的数据进行各种操作,比如创建和更新家长,创建和更新学生,各种附加业务信息。整个操作涉及多个系统,有时甚至无法控制。
外部CRM系统可以通过脚本函数进行扩展,根据业务需要增加内部系统的按钮。此按钮操作是同步闭锁。当调用函数(接口)不返回时,整个页面都无法操作,这是一种非常不友好的交互方式。
image.png
2.2任务异步化
这个场景是我第一次做商城项目的时候。用户下单支付后,首先更新本地订单记录,然后推送消息到第三方物流系统,向用户发出与订单相关的站内信,并可能触发推荐人的积分赠送和返利计算,并可能触发相关营销规则发放优惠券。
Vue3+ElementPlus+Koa2 全栈开发后台系统
download:链接:https://pan.baidu.com/s/1kDDolB6suxp0dtrF4mBePA?pwd=egfu
提取码:egfu
--来自百度网盘超级会员V5的分享


雷达卡



京公网安备 11010802022788号







