Reactor模型,Actor模型

背景

最近准备接手公司的消息系统,消息是系统是vert.x写的。突然觉得好懵逼,vert.x以前只听过名字,根本不知道是干啥的。然后开始了疯狂学习。此文是在学习vert.x过程中学到的知识。vert.x是一个reactor模型,actor模型。今天就给大家讲讲什么是reactor,actor模型。

传统模型

 

 

这种模式是传统设计,每一个请求到来时,大致都会按照:请求读取->请求解码->服务执行->编码响应->发送答复 这个流程去处理。服务器会分配一个线程去处理,如果请求暴涨起来,那么意味着需要更多的线程来处理该请求。若请求出现暴涨,线程池的工作线程数量满载那么其它请求就会出现等待或者被抛弃。若每个小任务都可以使用非阻塞的模式,然后基于异步回调模式。这样就大大提高系统的吞吐量。这样就引入啦

Reactor模型

参考资料http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf

简介

Reactor模型又称为Reactor设计模式,这个模式是从NIO中出来的,是一种基于事件驱动模型的设计模式。

Reactor中的组件

Reactor:请求的派发者。

Acceptor:Acceptor接受client连接,一旦有请求过来,则直接将请求发送给Reactor。

单Reactor单线程模型

 

从上图可以看出。这个模型没有区别阻塞任何和非阻塞任务,如果任务阻塞需要客户端等待最终的执行结果。

单Reactor多线程模型

 

这种模型就是现在成熟的Reactor模式。但是请求进一步增加的时候,Reactor会出现瓶颈。因为Reactor既要处理IO操作请求,又要响应连接请求!为了分担Reactor的负担,所以引入了主从Reactor模型。

多线程多Reactor模型

 

主Reactor用于响应连接请求,从Reactor用于处理IO操作请求。

Actor模型

简介

博主实在不知道怎么去描述Actor模型,这段内容摘抄http://jolestar.com/parallel-programming-model-thread-goroutine-actor

对没接触过这个概念的人可能不太好理解,Actor的概念其实和OO里的对象类似,是一种抽象。面对对象编程对现实的抽象是对象=属性+行为(method),但当使用方调用对象行为(method)的时候,其实占用的是调用方的CPU时间片,是否并发也是由调用方决定的。这个抽象其实和现实世界是有差异的。现实世界更像Actor的抽象,互相都是通过异步消息通信的。比如你对一个美女say hi,美女是否回应,如何回应是由美女自己决定的,运行在美女自己的大脑里,并不会占用发送者的大脑。

Actor特征

Processing – actor可以做计算的,不需要占用调用方的CPU时间片,并发策略也是由自己决定。
Storage – actor可以保存状态
Communication – actor之间可以通过发送消息通讯

Actor遵循规则

发送消息给其他的Actor
创建其他的Actor
接受并处理消息,修改自己的状态

Actor的目标

Actor可独立更新,实现热升级。因为Actor互相之间没有直接的耦合,是相对独立的实体,可能实现热升级。
无缝弥合本地和远程调用 因为Actor使用基于消息的通讯机制,无论是和本地的Actor,还是远程Actor交互,都是通过消息,这样就弥合了本地和远程的差异。
容错 Actor之间的通信是异步的,发送方只管发送,不关心超时以及错误,这些都由框架层和独立的错误处理机制接管。
易扩展,天然分布式 因为Actor的通信机制弥合了本地和远程调用,本地Actor处理不过来的时候,可以在远程节点上启动Actor然后转发消息过去。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值