异步化

异步化
最近在处理交易下单的流程:
用户下单请求 <-> 前端控制层 <-> 业务逻辑层 <-> 同步调用 <-> 订单接口服务 <-> 数据层
以上即为目前用户下单的处理流程,业务逻辑层使用同步的方式调用接口服务,直到订单接口服务响应或者超时。
查看了很多资料说加入消息队列的机制,即可实现异步。
首先将用户的下单请求添加消息队列中,然后订单接口服务从消息队列中获取请求消息进行处理。
此时有两种处理方法:
1、前端系统在将请求添加到队列后,是一直在等待响应,还是返回处理结果,如果是等待,那和同步的本质上没区别,如果是返回结果,那下单是否成功也不得而知。
2、接口服务如何将处理结果返回给前端系统?

消息加入队列后,是等待返回处理结果,假设后面的处理步骤分三步,如果是同步,那么轮流等这1 2 3三步依次串联处理完成才返回结果,而后面处理三个步骤如果并行并发同时处理,无疑快得多。
只有能够加入异步的地方,才有可能实现并行并发。这应该是到处异步的核心意义,主要目的是从设计上解耦,从执行顺序上进行切分。

这里面有一个误解,认为异步就慢于同步,异步后才能并行并发,利用多CPU的并行并发处理要比同步串联处理无疑性能要提升多。
分布式计算处理,针对单个数据的处理来说无疑是变慢了,但对海量数据来说整体的速率可定是提高了很多。
分布式部署无疑要添加调用的引导者,多出的这道处理一定会使处理速度慢于直接调用,这只能针对少量数据处理可用,直接调用没有中间环节速度可定快。但当数据量上升到一定级别后,cpu耗尽,数据挤压时,整体的处理速度将会呈现下滑。分布式部署利用了多个cpu并发,使大量数据能同时接受处理。无疑从整体上看提供了速率。

时间: 2024-08-30 14:25:17

异步化的相关文章

使用消息队列异步化系统

使用消息队列异步化系统 基于Spring与ActiveMQ的配置实现方案 前言 前期为了快速开发,项目结构较为混乱,代码维护与功能扩展都比较困难,为了方便后续功能开发,最近对项目进行的重构,顺便在重构的过程中将之前的部分操作进行了异步处理,也第一次实际接触了JMS与消息队列.项目中采用的消息中间件为ActiveMQ. 什么是JMS Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分

[转]向facebook学习,通过协程实现mysql查询的异步化

FROM : 通过协程实现mysql查询的异步化 前言 最近学习了赵海平的演讲,了解到facebook的mysql查询可以进行异步化,从而提高性能.由于facebook实现的比较早,他们不得不对php进行hack才得以实现.现在的php5.5,已经无需hack就可以实现了.对于一个web网站的性能来说,瓶颈多半是来自于数据库.一般数据库查询会在某个请求的整体耗时中占很大比例.如果能提高数据库查询的效率,网站的整体响应时间会有很大的下降.如果能实现mysql查询的异步化,就可以实现多条sql语句同

使用JDK1.8 CompletableFuture异步化任务处理

0.概述 服务端编程的一个经典场景是在接收和处理客户端请求时,为了避免对每一个请求都分配线程而带来的资源开销,服务一般会预先分配一个固定大小的线程池(比如Tomcat connector maxThreads),当客户端请求到来时,从线程池里寻找空闲状态的线程来处理请求,请求处理完毕后会回到线程池,继续服务下一个请求.当线程池内的线程都处于繁忙状态时,新来的请求需要排队直到线程池内有可用的线程,或者当超出队列容量后(Tomcat connector acceptCount属性)请求被拒绝(con

Apache Ignite 改装(一) -- 服务异步化支持

本文假设读者了解Apache Ignite,阅读过ignite service grid的官方文档,或使用过ignite的service grid,本文同样假设读者了解 java的CompletionStage的相关用法.本文涉及的ignite版本为2.4.0. 使用Apache Ignite的Service grid作为微服务开发框架, 通常是如下定义和实现Service的: 服务接口: public interface MyService { public String sayHello(S

异步化,高并发大杀器

聊聊如何让项目异步化的一些事. 1.同步和异步,阻塞和非阻塞 同步和异步,阻塞和非阻塞, 这个几个词已经是老生常谈,当时常常还是有很多同学分不清楚,以为同步肯定就是阻塞,异步肯定就是非阻塞,其他他们不是一回事. 同步和异步关注的是结果消息的通信机制 同步:同步的意思就是调用方需要主动等待结果的返回异步:异步的意思就是不需要主动等待结果的返回,而是通过其他手段比如,状态通知,回调函数等.阻塞和非阻塞主要关注的是等待结果返回调用方的状态 阻塞:是指结果返回之前,当前线程被挂起,不做任何事非阻塞:是指

Dubbo 2.7新特性之异步化改造

这是why技术的第1篇原创文章 我与Dubbo的二三事 我是2016年毕业的,在我毕业之前,我在学校里面学到的框架都是SSH,即struts+spring+hibernate,是的你没有看错,在大学里面的课本里面学的是strusts,这个还没毕业就被基本抛弃的框架.然而我大四出去实习,用的技术是SSM,即Spring,SpringMVC,Mybatis.实习的时候做的项目都是外包项目,非常传统的单体大项目,和学校里面做课程设计一样,所有的功能包括前后端都糅合在一个项目里面,根本不知道什么是分布式

[项目回顾]项目异步化

前言 前期为了快速开发,项目结构较为混乱,代码维护与功能扩展都比较困难,为了方便后续功能开发,最近对项目进行的重构,顺便在重构的过程中将之前的部分操作进行了异步处理,也第一次实际接触了JMS与消息队列.项目中采用的消息中间件为ActiveMQ. 什么是JMS Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信.Java消息服务是一个与具体平台无关的A

log4j日志异步化大幅提升系统性能

.log4j已成为大型系统必不可少的一部分,log4j可以很方便的帮助我们在程序的任何位置输出所要打印的信息,便于我们对系统在调试阶段和正式运行阶段对问题分析和定位.由于日志级别的不同,对系统的性能影响也是有很大的差距,日志级别越高,性能越高. 2.log4j主要分为error,warn,info,debug四个级别,也是使用最多的四种,日志级别从左至右依次增加. 3.log4j对系统性能的影响程度主要体现在以下几方面:      a.日志输出的目的地,输出到控制台的速度比输出到文件系统的速度要

Django 异步化库celery

首先要了解Django其实是个同步框架,那么多个用户发送请求时就会发生排队的情况上一个用户的请求完成后在进行下一个,这样会对影响用户体验,所有就要用到异步方法来解决. 首先我们要安装celery库 pip install celery   celery的基础库 pip install celery-with-redis  celery对redis的库 pip install django-celery  celery对django的库 安装完成后要在settings.py内进行设置 #配置cel