TOP全异步模式
Top全异步方式调用技术方案
背景:目前top通过servlet3.0技术结合异步管道化框架做到半异步调用,半异步调用采用异步线程同步调用后端的方式来做api
call
半异步的好处
在异步线程使用的是权重线程池,在异步线程的资源分配上做到可控,通过这个我们可以做到一个ISP发生问题,不会影响其他的ISP的调用,做到服务隔离的目的。
半异步的劣势
采用半异步的方式,虽然可以做到服务隔离,但是异步线程还是同步调用后端,也就是说在一次后端的API
call的过程中还是消耗了我们的一个线程。在后端很快响应的情况下,这个是没关系的,但是如果某个ISP的服务如果真的一次call的时间就需要好几秒才可以返回(支付宝的API有这个要求),那么我们的异步线程也会被消耗好几秒,但这种消耗是完全没有必要的。
全异步的模式
全异步的模式,基于的是后端的call可以异步的方式,目前我们调用后端ISP主要是http透传和HSF,这两种方式正好都可以异步。那么,异步call的方法下,我们的调用变为
详细方案
基于我们的异步框架的几种pipe异步场景,原来使用的是 Ansy模式,将execute
pip的管道属性配置成为Ansy,这样这个管道的执行就会交由权重线程池另起线程执行。
新的全异步方式,Execute pipe将被配置为condition模式,在dopipe中调用HSF或者HTTP异步客户端,发起异步请求,同时设置回调函数,然后结束,这时pipe会被挂起。当调用成功拿到结果后,HSF或者HTTP客户端会回调我们设置的回调函数,在回调函数中,我们调用event.complete()结束挂起的pipe,这样权重线程池会再调用接下来的pipe,直到请求结束。
TOP全异步模式的更多相关文章
- Ansible系列(七):执行过程分析、异步模式和速度优化
本文目录:1.1 ansible执行过程分析1.2 ansible并发和异步1.3 ansible的-t选项妙用1.4 优化ansible速度 1.4.1 设置ansible开启ssh长连接 1.4. ...
- 【JS】336- 拆解 JavaScript 中的异步模式
点击上方"前端自习课"关注,学习起来~ JavaScript 中有很多种异步编程的方式.callback.promise.generator.async await 甚至 RxJS ...
- MySQL主从复制之异步模式
MySQL主从复制有异步模式.半同步模式.GTID模式以及多源复制模式,MySQL默认模式是异步模式.所谓异步模式,只MySQL 主服务器上I/O thread 线程将二进制日志写入binlog文件之 ...
- 高性能的关键:Spring MVC的异步模式
我承认有些标题党了,不过话说这样其实也没错,关于“异步”处理的文章已经不少,代码例子也能找到很多,但我还是打算发表这篇我写了好长一段时间,却一直没发表的文章,以一个更简单的视角,把异步模式讲清楚. 什 ...
- 异步编程系列06章 以Task为基础的异步模式(TAP)
p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提 ...
- 基于事件的异步模式(EAP)
什么是EAP异步编程模式 EAP基于事件的异步模式是.net 2.0提出来的,实现了基于事件的异步模式的类将具有一个或者多个以Async为后缀的方法和对应的Completed事件,并且这些类都支持异步 ...
- 与其他.Net异步模式和类型进行互操作
返回该系列目录<基于Task的异步模式--全面介绍> Tasks和异步编程模型APM(Tasks and the Asynchronous Programming Model) 从APM到 ...
- 实践基于Task的异步模式
Await 返回该系列目录<基于Task的异步模式--全面介绍> 在API级别,实现没有阻塞的等待的方法是提供callback(回调函数).对于Tasks来说,这是通过像ContinueW ...
- 实现基于Task的异步模式
返回该系列目录<基于Task的异步模式--全面介绍> 生成方法 编译器生成 在.NET Framework 4.5中,C#编译器实现了TAP.任何标有async关键字的方法都是异步方法,编 ...
随机推荐
- How to install Armbian on Orange Pi Plus 2e
bian on Orange Pi Plus 2e How to install Armbian on Orange Pi Plus 2e Armbian on the microSD You jus ...
- 移动端meta几个值的设置以及含义
<!-- 为移动设备添加 viewport --> <meta name="viewport" content="width=device-width, ...
- js中Array.prototype.push.call的用法
var arr = [] Array.prototype.push.call(arr,"a","b","c") <==> []. ...
- Snapshot Standby
INTRODUCTION Snapshot standby database是ORACLE 11g的新特性.允许Physical standby短时间的使用read write模式. Snapshot ...
- Log4Net 用法记录
https://www.cnblogs.com/lzrabbit/archive/2012/03/23/2413180.html https://blog.csdn.net/guyswj/articl ...
- 浅谈架构之路:单点登录 SSO
前言:SSO 单点登录 "半吊子"的全栈工程师又来了,技术类的文章才发表了两篇,本来想先将主攻的几个系列都开个头(Nodejs.Java.前端.架构.全栈等等),无奈博客起步太晚, ...
- [React Native] Animate the Scale of a React Native Button using Animated.spring
In this lesson we will use Animated.spring and TouchableWithoutFeedback to animate the scale of a bu ...
- Trafodion:Transactional SQL on HBase
Trafodion: Transactional SQL on HBase HBase上实时分布式事务处理 介绍 HBase的SQL能力一直不足.Phoenix缺乏Join能力,eBay提出的kyli ...
- Slick教程
Slick 编程(1): 概述 Slick 编程(2): 准备开发环境 Slick 编程(3): 基本查询 Slick 编程(4): 数据库连接和事务处理 Slick 编程(5): 数据库Schema ...
- java / C++ B+树代码
C++ 代码 #include <> JAVA 代码 package org.test.me.struct; /** * author: shuly * create: 2018-09-1 ...