技术-技术方案优化策略--异步
2017-03-08 11:29
267 查看
使用场景:
针对某些客户端的请求,在服务端可能需要做一些附属的事情,这些事情其实用户并不关心或者用户不需要立即拿到这些事情的处理结果,这种情况就比较适合用异步的方式处理.
优点:
缩短接口响应时间,使用户的请求快速返回,用户体验更好;
避免线程长时间处于运行状态,这样会引起服务线程池的可用线程长时间不够用,进而引起线程池任务队列长度增大,从而阻塞更多请求任务,使得更多请求得不到技术处理;
线程长时间处于运行状态,可能还会引起系统Load、CPU使用率、机器整体性能下降等一系列问题,甚至引发雪崩。异步的思路可以在不增加机器数和CPU数的情况下,有效解决这个问题;
常用方案:
额外开辟线程,这里可以采用额外开辟一个线程或者使用线程池的做法,在IO线程(处理请求响应)之外的线程来处理相应的任务,在IO线程中让response先返回。如果异步线程处理的任务设计的数据量非常巨大,那么可以引入阻塞队列BlockingQueue作进一步的优化。具体做法是让一批异步线程不断地往阻塞队列里扔数据,然后额外起一个处理线程,循环批量从队列里拿预设大小的一批数据,来进行批处理(比如发一个批量的远程服务请求),这样进一步提高了性能。
使用消息队列(MQ)中间件服务,MQ天生就是异步的。一些额外的任务,可能不需要我这个系统来处理,但是需要其他系统来处理。这个时候可以先把它封装成一个消息,扔到消息队列里面,通过消息中间件的可靠性保证把消息投递到关心它的系统,然后让这个系统来做相应的处理。这些事情理应不是该系统的负责范围,这个时候用MQ的方式,来解决这个问题最合适。
针对某些客户端的请求,在服务端可能需要做一些附属的事情,这些事情其实用户并不关心或者用户不需要立即拿到这些事情的处理结果,这种情况就比较适合用异步的方式处理.
优点:
缩短接口响应时间,使用户的请求快速返回,用户体验更好;
避免线程长时间处于运行状态,这样会引起服务线程池的可用线程长时间不够用,进而引起线程池任务队列长度增大,从而阻塞更多请求任务,使得更多请求得不到技术处理;
线程长时间处于运行状态,可能还会引起系统Load、CPU使用率、机器整体性能下降等一系列问题,甚至引发雪崩。异步的思路可以在不增加机器数和CPU数的情况下,有效解决这个问题;
常用方案:
额外开辟线程,这里可以采用额外开辟一个线程或者使用线程池的做法,在IO线程(处理请求响应)之外的线程来处理相应的任务,在IO线程中让response先返回。如果异步线程处理的任务设计的数据量非常巨大,那么可以引入阻塞队列BlockingQueue作进一步的优化。具体做法是让一批异步线程不断地往阻塞队列里扔数据,然后额外起一个处理线程,循环批量从队列里拿预设大小的一批数据,来进行批处理(比如发一个批量的远程服务请求),这样进一步提高了性能。
使用消息队列(MQ)中间件服务,MQ天生就是异步的。一些额外的任务,可能不需要我这个系统来处理,但是需要其他系统来处理。这个时候可以先把它封装成一个消息,扔到消息队列里面,通过消息中间件的可靠性保证把消息投递到关心它的系统,然后让这个系统来做相应的处理。这些事情理应不是该系统的负责范围,这个时候用MQ的方式,来解决这个问题最合适。
相关文章推荐
- 技术-技术方案优化策略--数据库层面
- 技术-技术方案优化策略--监控
- 技术-技术方案优化策略--缓存层面
- 技术-技术方案优化策略--代码层面
- 技术-技术方案优化策略--多线程与分布式
- 技术-技术方案优化策略--JVM调优
- 技术-技术方案优化策略--NoSQL
- 如何进行技术方案优化
- ARM 程序设计优化策略与技术
- ARM 程序设计优化策略与技术
- 数据库 SQL 查询技术的优化策略
- ARM 程序设计优化策略与技术
- GPU异步V-Sync技术方案
- 用双缓存技术优化listview异步加载网络图片
- ARM 程序设计优化策略与技术
- android-------用双缓存技术优化listview异步加载网络图片
- [转]ARM程序设计优化策略与技术
- Flash 平台技术的优化(十四) 异步操作
- 对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀(3)------优化方案
- 对网络上关于listview异步加载优化方案的文章的总结