HTTP服务异步化如何实现

发布时间:2022-05-14 11:12:12 作者: 来源: 浏览量(1189 )
摘要:随着业务的复杂,一个用户请求的处理过程,涉及多个对后端远程服务的调用。为了实现的简单,目前都是使用同步方式完成的,也就是在一个请求的处理过程中,会占用一个容器线程进行逻辑运算和同步远程调用。 解决方案 ...

 随着业务的复杂,一个用户请求的处理过程,涉及多个对后端远程服务的调用。为了实现的简单,目前都是使用同步方式完成的,也就是在一个请求的处理过程中,会占用一个容器线程进行逻辑运算和同步远程调用。

解决方案

 

异步化编程中闻名的Callback Hell,让不少同学望而止步。当业务复杂的时候,各种call back互相嵌套,使代码变得更加容易出错和不易理解。业内也有有不少框架提供了异步化编程支持,有以下三个思路:

 

纤程

 

纤程可以认为是轻量级的用户线程,脱离了OS的调度机制,在应用级别进行调度管理。由于它只维护了基本的执行栈信息,并不立即分配执行资源,因此,它可以轻松创建成千上万的纤程(受内存大小的限制),通过极少的线程完成对纤程的调度执行。这个方向的代表有微信团队开源的libco,以及在语言层面上支持的Go语言等。libco hook了底层IO相关的系统函数,通过底层IO事件驱动纤程的调度执行。

 

当遇到同步调用网络请求时,libco自动注册回调监听器,并让出CPU。而在IO事件完成或者超时候,自动恢复纤程,然后调度执行。它的实现机制决定了它非常适合依赖耗时IO服务的实现。承载了微信千万级调用的一个基石。不过遗憾的是,libco是一个高效的c/c++协程库,并没有在JVM上实现。

 

Quasar是在JVM之上实现了纤程机制,基本可以在Quasar的类库基础上,以同步的模式来编写异步的代码。在真正执行代码前,通过编译或者Instrument Agent的形式织入相关的字节码。从头起步引入纤程还是一个不错的选择。对现有项目的改造,需要对现有的线程类修改成纤程类,这需要改动我们底层非常多的中间件。另外业内公布的使用经验较少,后续可以持续关注它的发展。

 

以上就是小编对于HTTP服务异步化如何实现的解答。

 

扫一扫二维码,直接手机访问此页

扫码访问手机页面

【免责声明】本网站的部分文章信息(文字、图片、音频视频文件等资源)来自于网络,均是为公众传播有益咨询信息之目的,其版权归版权所有人所有。 本站采用的非本站原创文章及图片等内容无法一一与版权者联系,如果本站所选内容的文章作者及编辑认为其作品不宜供大家浏览,或不应无偿使用, 请及时联系我们删除,同时向您深表歉意!请发送邮件153462496@qq.com进行联系。

感兴趣吗?

欢迎联系我们,我们愿意为您解答任何有关网站疑难问题!

在线客服
嘿,我来帮您!