Qcon Scala

  1. Scala
    1. 译注
    2. 为什么反应式
    3. 反应式宣言 演绎
      1. 弹性
      2. 失败
      3. 推拉模式
      4. 不可控流量
    4. scala特性
      1. 函数式编程
      2. 递归优化
      3. Future Promise
    5. Akka

Scala

译注

Akka社区,认识作者,联系获得译注权

为什么反应式

反应式宣言:异步的 非阻塞 带回压的方式进行流程控制

原因:及时响应、应对失败、应对负载、应对输入

  1. 希望响应越快越好,延迟越低越好 =》 能够及时响应的系统
  2. 对失败做出反应,反应式设计模式,定义了失败处理方式 =》 预先规划失败情况
  3. 负载升高,系统也能应对 =》 对不同负载都能应对
  4. 调用可以看作消息的传递,组件之间有输入输出 =》 架构解耦 明确边界 统一结构成分和语义

事件驱动=》事件循环,能够做到异步非阻塞

事件驱动<=>消息驱动

消息驱动:使用消息取代函数调用,消费者可以是分布式的,

反应式宣言 演绎

弹性

  1. 传统模型
    • 单点瓶颈
    • 并发协调

减少依赖,增加必须的资源,分片

=》 反应式宣言之 弹性

设计上没有 争用点 和 中央瓶颈,得以进行组件的 分片 或者 复制,并在他们之间分布负载

失败

  1. 检验错误,是模块之间正常协议的一部分
  2. 失败,是正常协议无法继续履行的场景
  • 模块化分割系统,隔离失败
  • 明确所有权和层级系统,由拥有失败发生的模块的所有者来处理异常
  • 引入监督者和监督策略
  • 在多台硬件上进行复制,防止数据丢失

=》 反应式宣言之 回弹性

系统再出现失败时依然保持及时响应性的能力。

失败被限制在每个组件内部,在内部就进行隔离。

推拉模式

  1. 下游根据需求告知上游,然后获取相应数目的处理任务

推拉模式动态切换,按照处理能力来分配下流负载

=》 反应式宣言之 回压

不可控流量

  1. 排队队列 =》 根据下游处理能力,分配任务过去
  2. 中等负载,概率性入队
  3. 重等负载,拒绝入队

平滑流量

监控队列信息,并作出反应

-》 反应式宣言之 及时响应性

在处理范围内,给与及时响应

超过处理范围,入队-》概率入队-》拒绝入队

=》 反应时宣言之 消息驱动

异步消息传递,松耦合、隔离、位置透明

将失败作为消息委托出去的手段

监视消息流队列,在必要时应用回压

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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

csdn zhihu github