当前播放: 如何设计一个异步无阻塞的反应式编程框架?
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
合辑:新版短视频
Kafka某台broker IO阻塞,为何会导致发送方无法发送消息?
什么是C++中的The Rule of Three?
基于时序特性,如何构建一个时序存储引擎?
如何利用反射和泛型编程让你的Java代码更优雅?
C++中为什么move constructor需要加noexcept?
如何使用Postman做接口自动化测试?
给你点“颜色”瞧瞧
如何用Spark实现一个通用大数据计算引擎?
如何让你的Robot Framework飞起来?
如何透彻理解Selenium和WebDriver?
Spring Data JPA 如何进行复杂动态查询?
Spring Data JPA如何实现动态部分更新?
未来的编程语言长什么样?
高并发场景下锁的使用技巧(悲观锁/乐观锁/分布式锁)
为什么React组件要声明key?
为什么React不推荐使用Mixin?
如何设计一个高可用的配置中心?
如何通过代码技巧提升内存使用效率?
如何全面地改造Robust?
如何基于Netty构建一个简单的RPC服务?
Spring Boot中如何使用HTTP/2?
教你10分钟玩转Gradle plugin
如何深入理解Kube-Proxy?
如何深入理解Kubernetes架构?
如何使用和优化iOS中的WebView?
一个1000万资金重复支付的代码剖析
如何实现数据异构的多级缓存策略?
如何从 CRD 扩展开发切入Kubernetes源码学习?
如何更轻松简单地从源码编译部署Kubernetes?
如何设计并实现一个高可用的订单系统?
ZooKeeper的ZAB算法与Paxos的本质区别是什么?
微服务框架Apache ServiceComb的设计思想有哪些?
如何深入理解分布式事务TCC实现原理?
SSR 、CSR、预渲染、同构等首屏优化技术要如何选择?
如何利用ClassPath解决Java开发工程问题?
如何读懂Babel转换出的JavaScript代码?
大厂前端面试中经常提到的Promise要如何实现?
使用 Vue 开发小程序是怎么做到的?
为什么CSS要放在header底部,JavaScript要放在body底部?
前端Router是怎么实现的?
如何理解现代发布策略?以Kubernetes为例
JavaScript中如何封装一个具有自动失败重试功能的HTTP模块?
JavaScript中如何优雅地实现函数防抖?
服务发现技术是如何演进出来的?
HTTP/2能带来哪些性能提升?
如何快速对请求链路的关键点进行网络问题排查?
React 中如何实现模块的按需加载?
究竟要不要使用React Hooks?
TLS1.3原理以及在Nginx上的应用
如何利用有效的资源扛住618大促流量?

如何设计一个异步无阻塞的反应式编程框架?

李智慧 同程艺龙交通首席架构师

针对各个用户请求,传统的 Web 应用会创建一个线程,而在用户的请求服务周期内,整个线程都是完全独占的。任何引起请求操作的阻塞,都会导致整个线程的阻塞。

由于线程阻塞而导致的系统宕机,目前比较流行的解决方案就是限流、降级、消息队列异步化处理、动态扩容 Web 服务器集群规模等。那么,有没有更简单的办法,在编程框架层面就解决这个问题呢?

讲师介绍

李智慧,极客时间《从 0 开始学大数据》专栏作者,同程艺龙交通首席架构师、Apache Spark 源代码贡献者,长期从事大数据、大型网站架构的研发工作。曾担任阿里巴巴技术专家、Intel 亚太研发中心架构师、宅米和 WiFi 万能钥匙 CTO。有超过 6 年的线下咨询和培训经验,并著有畅销书《大型网站技术架构:核心原理与案例分析》。

展开
¥4.99 购买
开通VIP
28
登录 后留言

精选留言(4)

  • InfoQ_2db96aff555e
    似乎无法解决数据库连接池瓶颈问题? Actor模型好处就是减少了系统线程,从而减少了线程竞争和切换的开销

    作者回复: 是的,数据库连接的瓶颈属于外部资源瓶颈,程序自身是无法解决的。

    但是,使用异步的数据库连接组件,可以避免获得数据库连接,以及提交数据库请求后的阻塞等待,避免线程阻塞。

    2019-11-25
  • 柱子
    李老师好,nodejs是不是也是这个逻辑?

    作者回复: 还是有些区别,编程模型和实现机制都不太一样。

    2019-11-10
  • WL
    请问一下应用调用者在得到的及时响应只是一个类似处理中这样的结果,那调用这怎么拿到最终的应用处理结果呢?是通过接口回调的方式吗?

    作者回复: 在Flower里其实没有调用者这个角色的,每个Service完成自己的处理后,将结果发给下个Service处理,最后一个Service负责处理最终的结果,比如要输出http响应,那么最后一个Service可以通过Flower框架内置的web对象执行web.print(String)将String返回给客户端。

    2019-09-07
  • 加载中……
    李老师,请教个问题,各个异步的service之间如何保证消息可靠传递,比如有个流程有5个service处理,执行到第三个服务器重启了,后续就断了。

    作者回复: 传统的同步阻塞调用到第三个方法服务器重启了,后续也样断了。。。

    你想说的应该是事务完整性,前面两个Service已经更新了部分数据,第三个服务失败了怎么办?Flower的解决方案有两种,一种是将所有事务操作聚合到一个Service统一完成,这个通过流程编排就可以做到;一种是Service记录事务日志,根据日志完整性实现事务完整性,这个稍稍复杂一点。

    2019-09-06
收起评论
其他推荐
35:43
架构师的业务思维
陈辉 蘑菇街技术部架构师
试看
43:17
当 DDD 遇上 DCI(Data, Context, Interactive)架构模式
张晓龙 中兴通讯资深软件架构师
试看
33:11
领域驱动设计用语溯源
潘加宇 UMLChina首席专家
试看