Qcon Scala
Scala
译注
Akka社区,认识作者,联系获得译注权
为什么反应式
反应式宣言:异步的 非阻塞 带回压的方式进行流程控制
原因:及时响应、应对失败、应对负载、应对输入
- 希望响应越快越好,延迟越低越好 =》 能够及时响应的系统
- 对失败做出反应,反应式设计模式,定义了失败处理方式 =》 预先规划失败情况
- 负载升高,系统也能应对 =》 对不同负载都能应对
- 调用可以看作消息的传递,组件之间有输入输出 =》 架构解耦 明确边界 统一结构成分和语义
事件驱动=》事件循环,能够做到异步非阻塞
事件驱动<=>消息驱动
消息驱动:使用消息取代函数调用,消费者可以是分布式的,
反应式宣言 演绎
弹性
- 传统模型
- 单点瓶颈
- 并发协调
减少依赖,增加必须的资源,分片
=》 反应式宣言之 弹性
设计上没有 争用点 和 中央瓶颈,得以进行组件的 分片 或者 复制,并在他们之间分布负载
失败
- 检验错误,是模块之间正常协议的一部分
- 失败,是正常协议无法继续履行的场景
- 模块化分割系统,隔离失败
- 明确所有权和层级系统,由拥有失败发生的模块的所有者来处理异常
- 引入监督者和监督策略
- 在多台硬件上进行复制,防止数据丢失
=》 反应式宣言之 回弹性
系统再出现失败时依然保持及时响应性的能力。
失败被限制在每个组件内部,在内部就进行隔离。
推拉模式
- 下游根据需求告知上游,然后获取相应数目的处理任务
推拉模式动态切换,按照处理能力来分配下流负载
=》 反应式宣言之 回压
不可控流量
- 排队队列 =》 根据下游处理能力,分配任务过去
- 中等负载,概率性入队
- 重等负载,拒绝入队
平滑流量
监控队列信息,并作出反应
-》 反应式宣言之 及时响应性
在处理范围内,给与及时响应
超过处理范围,入队-》概率入队-》拒绝入队
=》 反应时宣言之 消息驱动
异步消息传递,松耦合、隔离、位置透明
将失败作为消息委托出去的手段
监视消息流队列,在必要时应用回压
scala特性
函数式编程
函数作为对象使用
高阶函数
不可变数据结构、引用透明和副作用、完善的类型系统
递归优化
伪递归 => 循环
Future Promise
异步非阻塞,Monad??
Akka
消息驱动,请求和响应都是异步消息
层级结构,上游层级管理子层级生命周期
监督策略,父重启子
位置透明性,分布式部署
Actor内部无并发,状态不可共享
Akka Stream,拓扑流
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wshten@gmail.com
文章标题:Qcon Scala
本文作者:KevinTen
发布时间:2019-10-19, 00:00:00
最后更新:2019-10-22, 09:14:33
原始链接:http://github.com/kevinten10/2019/10/19/Qcon/Qcon-Scala/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。