反应式编程框架设计:如何使程序调用不阻塞等待,立即响应?( 三 )


反应式编程框架设计:如何使程序调用不阻塞等待,立即响应?

文章插图
 
另一方面,Flower 对系统可用性也有较大提升,目前常见互联网应用架构如下图:
反应式编程框架设计:如何使程序调用不阻塞等待,立即响应?

文章插图
 
用户请求通过网关服务器调用微服务完成处理,那么当有某个微服务连接的数据库查询执行较慢时,如图中服务 1,那么按照传统的线程阻塞模型,就会导致服务 1 的线程都被阻塞在这个慢查询的数据库操作上 。同样的,网关线程也会阻塞在调用这个延迟比较厉害的服务1 上 。
最终的效果就是,网关所有的线程都被阻塞,即使是不调用服务 1 的用户请求也无法处理,最后整个系统失去响应,应用宕机 。使用阻塞式编程,实际的压测效果如下,当服务 1响应延迟,出错率大幅飙升的时候,通过网关调用正常的服务 2 的出错率也非常高 。
反应式编程框架设计:如何使程序调用不阻塞等待,立即响应?

文章插图
 
使用 Flower 开发的网关,实际压测效果如下,同样服务 1 响应延迟,出错率极高的情况下,通过 Flower 网关调用服务 2 完全不受影响 。
反应式编程框架设计:如何使程序调用不阻塞等待,立即响应?

文章插图
 
五、总结事实上,Flower 不仅是一个反应式 Web 编程框架,还是反应式的微服务框架 。也就是说,Flower 的 Service 可以远程部署到一个 Service 容器里面,就像我们现在常用的微服务架构一样 。Flower 会提供一个独立的 Flower 容器,用于启动一些 Service,这些Service 在启动了以后,会向注册中心进行注册,而且应用程序可以将这些分布式的Service 进行流程编排,得到一个分布式非阻塞的微服务系统 。整体架构和主流的微服务架构很像,主要的区别就是 Flower 的服务是异步的,通过流程编排的方式进行服务调用,而不是通过接口依赖的方式进行调用 。




推荐阅读