
文章插图
另一方面,Flower 对系统可用性也有较大提升,目前常见互联网应用架构如下图:

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

文章插图
使用 Flower 开发的网关,实际压测效果如下,同样服务 1 响应延迟,出错率极高的情况下,通过 Flower 网关调用服务 2 完全不受影响 。

文章插图
五、总结事实上,Flower 不仅是一个反应式 Web 编程框架,还是反应式的微服务框架 。也就是说,Flower 的 Service 可以远程部署到一个 Service 容器里面,就像我们现在常用的微服务架构一样 。Flower 会提供一个独立的 Flower 容器,用于启动一些 Service,这些Service 在启动了以后,会向注册中心进行注册,而且应用程序可以将这些分布式的Service 进行流程编排,得到一个分布式非阻塞的微服务系统 。整体架构和主流的微服务架构很像,主要的区别就是 Flower 的服务是异步的,通过流程编排的方式进行服务调用,而不是通过接口依赖的方式进行调用 。
推荐阅读
- 高效编程的11条规则
- 微信小程序开发,多端框架全面测评
- java多线程编程的核心——AQS独占模式原理解析
- Vue、React 和 Angular:该选择哪个框架?
- 基于springboot+shiro+freemarker的快速开发框架,代码免费分享
- TestNG Java自动化测试框架——分组测试
- Linux网络编程基础
- C++ socket网络编程——即时通信系统
- 什么是面向接口编程
- 嵌入式Linux编程 #define 宏的高级用法
