没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
响应式编程(reactive programming)
响应式编程(Reactive programming)是种向数据流和变化传播的编程范式。通俗解就是在与外部资源交互时从传
统的命令式编码格转换为异步、阻塞、函数式的编码格;
电表格程序就是响应式编程的个。单元格可以包含字值或类似"=A1+A2"的公式,包含公式的单元格的值会依据其他
单元格的值的变化变化
常的使场景:
异步调常的处式:
Reactive Streams
种Jvm实现的对:
Reactive API
Types for
0..n elements
Types for
0..1 elements
Reactive Streams
types
Generation Support
RxJava 1 Observable
Single (1)
Completable (0)
2nd Limited back-pressure
Akka Stream 2
Source
Sink
Flow
Source
Sink
Flow
3rd
Reactive Streams +
actor fusion
Reactor Core 3 Flux Mono (0..1)
Flux
Mono
4th
Reactive Streams +
operator fusion
RxJava 2
Flowable
Observable
Single (1)
Maybe (0..1)
Completable (0)
Flowable 4th
Reactive Streams +
operator fusion
Reactor Core 3
前的主流reactive框架
线程模型对
传统的servlet:
reactive:
spring5 新特性:
Flux Mono
Spring Webflux
spring mvc实现:
reactive web:
Reactive data access with Spring Data
Spring Data 2.1 前持这个NoSQL数据库 Reactive connectors, MongoDB, Cassandra, Couchbase, and Redis;
PostgreSQL 已经有个可选的Reactive connectors;
MySQL and MariaDB 暂时还持;
nosql数据库貌似主流的持Reactive;
Asynchronous Database Access (ADBA) java.sql2 的个实现,前还是实验状态,
Reactive Relational Database Connectivity (R2DBC) Spring Data官维护的个新的框架;包括R2DBC SPI ,
R2DBC Client ,
R2DBC PostgreSQL ,知道未来会会持mysql版本;
spring data r2dbc:
jdbc vs rjdbc
同步CrudRepository包装成reactive模式
reactor中的同步调必须使Scheduler
性能测试对
测试具: Gatling
mvc-with-latency vs webflux-with-latency :
mvn gatling:test
-Dgatling.simulationClass=LoadSimulation
-Dbase.url=http://localhost:8091/
-Dtest.path=hello/100
-Dsim.users=1000
-Dtest.name=mvc-with-latency
mvn gatling:test
-Dgatling.simulationClass=LoadSimulation
-Dbase.url=http://localhost:8092/
-Dtest.path=hello/100 -Dsim.users=300
-Dtest.name=webflux-with-latency
测试数据如下:
mvc-with-latency:
由以上数据可知:
增加线程数确实可以定程度下提吞吐,降低因阻塞造成的响应延时,但是增加线程会带来多的内存消耗以及线程上下
切换成本;
对数据:
最后测试下20000户的情况:
Responsive: 可响应的。要求系统尽可能做到在任何时候都能及时响应。
Resilient: 可恢复的。要求系统即使出错,也能保持可响应性。
Elastic: 可伸缩的。要求系统在各种负载下都能保持可响应性。
Message Driven:消息驱动的。要求系统通过异步消息连接各个组件。
Live database queries
Mobile (Android)
Big Data
Real time analytics
HTTP/2
Callback
多层嵌套之后,容写出
回调地狱,严重影响可读性
Future
Promise模式解决回调问题
ReactiveX
响应式编程式解决回调问题
Coroutine
类似Go语的Goroutine式解决回调问题,因为多步暂停(suspend)和恢复(resume)所以性能会回调式
低。
Reactive Streams 是为持阻塞背压(backpressure)的异步流处提供标准.
Co-designed by Netflix, Lightbend, Pivotal, RedHat, Kaazing, Twitter ...
主流实现 RxJava2 ,RxJs ,Reactor3 , Java 9 Flow ...
四个标准接+个TCK测试验证具包
ServerHttpRequest ServerHttpResponse
同的服务引擎都有对应的reactive adapter
HttpHandler
传递相应的request response 到ServerWebExchage
WebHandler WebFilterChain WebFilter
完所有的filter 调WebHandler
HandlerMapping HandlerAdapter
RouterFunction
vs
Annotation
可以持多种写法: java类似
Webclient 种可替代RestTemplate跨服务通信式
可以组合各种同的API,在微服务中可以使
来个crud demo:
线程数是指jconsole 的峰值线程数
这没有统计webflux 线程数,因为对于运在异步IO的Netty 之上的WebFlux 应来说,其作线程数始终维持在
个固定的数上,默认固定的数等于CPU核数(*2) ;
随着户数的增多,吞吐基本呈线性增多的趋势;
95%的响应都在100ms+的可控范围内返回,并未出现延时的情况。
户在接近3000的时候,线程数达到默认的最值200;
线程数达到200前,95%的请求响应时是正常的(100ms多点点),之后呈直线上升的态势;
线程数达到200后,吞吐增幅逐渐放缓。
当所有可线程都在阻塞状态的话,后续再进的请求只能排队,从当达到最线程数之后,响应时开始上升.
由于作线程数扩倍,因此请求排队的情况缓解半。
mvc-with-latency 然是抗住的,fail;
WebFlux-with-latency 吞吐达到7000+ req/sec,95%响应时仅100ms左右;
资源评论
- j6106221062018-12-03就一篇翻译文档,要了5分,感觉有点贵了
- dylb19732019-08-01确实有些贵哈
oneF
- 粉丝: 0
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功