|
|
51CTO旗下网站
|
|
移动端

2.3.6 Reliable Actors 开发

《Microsoft Azure 管理与开发(下册)平台服务PaaS》本书由世纪互联蓝云Microsoft Azure 开发技术支持团队的资深工程师们编写,主要阐述MicrosoftAzure PaaS 服务的开发应用,涉及计算服务、集成认证服务、数据存储服务、大数据服务等方面的内容。本节为大家介绍Reliable Actors 开发。

作者:世纪互联蓝云公司来源:电子工业出版社|2018-07-12 17:55

2.3.6 Reliable Actors 开发

Reliable Actors 是Service Fabric 基于虚拟Actors 模型实现的应用模型。Reliable ActorsAPI 提供了单线程的编程模型,并且Reliable Actors 是基于Reliable Services 的有状态服务来构建的,因此可以很容易借助它来实现高并发计算、高可用、高扩展性的应用程序。在详细介绍Reliable Actors 之前,先简单介绍下Actors 模型。

Actors 模型是并发编程中的一种常用模型,这个模型由Carl Hewitt 在1973 定义,由Erlang OTP (Open Telecom Platform) 推广。该模型最早是在Erlang 语言中被实现,后续很多其他语言也加入了该特性,例如Scala 等。在传统的并发编程中,为了线程安全,会使用同步的方法来保证同一个资源同时只能被一个线程进行写操作,这样即限制了程序的高并发性能,也容易出现问题。而Actors 模型是并发组件模型,通过组件的方式来定义并发编程的高级阶段,避免开发者接触多线程并发或者线程池等基础概念。Actors 模型是基于消息模型的,每个Actor 都是以单线程的形式执行,在同一时间只能处理单个消息,这也就避免了多线程争夺的问题,并且多个Actor 之间是可以进行通信的,如图2.3.6-1 所示。

Actor 本质上就是接受消息并处理消息的对象,它只负责接受和处理消息,其唯一的通信方式就是交换消息,Actor 提供简单统一的模型:

(1) 隔离计算实体;


(2) 相互没有共享数据;

(3) 没有任何地方需要同步;

(4) 消息不可以改变,发送出去的消息无法改变;

(5) Actors 内部有类似mailbox/queue,来存储组件接收到的多个消息。

目前构建Actors 模型的框架中较为出名的有AKKA。本书将不详细讲解此框架,如果感兴趣,可以通过Github 的AKKA 开源项目进行了解。

Reliable Actors 的实现是基于虚拟Actors,虚拟Actors 是微软基于Actors 模型提出的一套新的理念,在Actors 模型的基础上加入了其他功能,例如:

(1) Actor 在实例化后,始终存在,并且自动复制到其他节点;

(2) 不活跃的Actor 可以被垃圾回收或者被持久化;

(3) Actor 位置透明,任何节点都可以互相访问;

(4) 自动缩放。

微软.NET 的Orleans 就是基于虚拟Actors 理念实现的框架。Java 也有类似的开源框架Orbit。微软也基于Orleans 开发了很多的实际应用,例如:Halo 的服务器。

相对于Erlang 和AKKA 之类的基础Actors 平台,虚拟Actors 更加简单易用,而且功能更加强大。

在Service Fabric 中,Reliable Actors 是基于Reliable Service 应用模型实现的基于虚拟Actors 设计模型的应用程序框架,其本质是Service Fabric 的有状态Reliable Service,所以编写的每个Actor 服务,实际上都是已分区、有状态的Reliable Service。因此Reliable Service的大部分特性Reliable Actors 都支持。例如:

(1) 服务的生命周期管理;


(2) Reliable Actors 的分区和故障转移;

(3) Reliable Actors 的状态管理;

(4) Actor 之间的通信。

虽然Reliable Actors 拥有Reliable Services 的特性,但两者还是有差别的,如图2.3.6-2所示。在Reliable Service 中有状态服务会继承自StatefulService,StatefulService 是派生自StatefulServiceBase 类,在Reliable Actors 中也有ActorService,该服务也是继承自StatefulServiceBase,ActorService 与StatefulService 是同等级的服务。在Reliable Actors 框架中,默认提供了一个ActorService 的实现,也可以继承ActorService 实现自己的ActorService,类似于开发Reliable Service。这样可以在自定义的ActorService 中实现服务的备份和还原,所有Actor 通用的功能或者实现操作Actor 本身的服务,如查询某个Actor信息或者删除指定的Actor 等。Reliable Actors 应用在初始化时,需要将Actor 服务注册到ActorRuntime 中。这样Reliable Actors 框架就可以在运行时发现Actor 服务,如图2.3.6-2所示。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

网络管理员考试全真模拟试题与解析

本书是按照全国计算机技术与软件专业技术资格(水平)考试《网络管理员考试大纲》的要求,参照《网络管理员教程》及近年来考试试题编写的。...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊