作者:潘罡 (Van Pan) @ Microsoft

上一节我们谈到了Stateful Service。在Service Fabric中,Stateful Service是理解Micro Service的抓手。

在理解了Stateful Service的基础上,我们只需要记住:Actor是单线程模型Stateful Service,Stateless Service是无持久化Stateful Service。

Actor

Actor的基类是Stateful Service。

作为程序员,很快就能理解Actor具有Stateful Service的所有特性:数据持久化,事务,partition,replia 等等。

但是因为Actor是Stateful Service的扩展,因此它有一项Stateful Service没有的特性:单线程模型。

Actor应对于这样一个场景:某种共用数据,并且需要保证数据一致性。

举个例子:多个玩家合作在打Boss,每个玩家都是一个单独的线程,但是Boss的血量需要在多个玩家之间同步。同时这个Boss在多个服务器中都存在,因此每个服务器都有多个玩家会同时打这个服务器里面的Boss。

如果是Stateful Service,很难应对上面的场景。因为如果多线程并发请求Stateful Service,默认情况下它只会并发处理。这种情况下可能造成数据冲突。

但是Actor是单线程模型,意味着即使多线程来通过Actor ID调用同一个Actor,任何函数调用都是只允许一个线程进行操作。并且同时只能有一个线程在使用一个Actor实例。

同时,Actor实例的生命周期是由Service Fabric控制的。虽然调用过某个ID的Actor,但是Service Fabric依然可能会在长时间没有使用时回收这个Actor实例。

另外,Actor和Stateful Service一样,在发布前会定义好partition key和partition数量。当外部服务根据Actor ID来获取某个Actor实例时,Service Fabric会根据HASH算法返回对应的Actor实例。

Stateless Service

如果你已经理解了Stateful Service和Actor,那Stateless Service就非常好理解了。

Stateless Service没有partition,没有replica,也没有持久化数据。

唯一能控制Stateless Service的,是instance count。

也就是说,Stateless Service的不同实例就是跑在不同node上。

比如在发布时如果设置Stateless Service instance count是3,同时发布目标Service Fabric Node有5台,那Service Fabric就会随机选择三台node运行这个Stateless Service。

Stateless Service的典型场景是:Web前端

Web前端只需要负责接收HTTP request并调用后端服务获取数据并进行渲染。一般架构下,Web前端都是一些动态页面,不会持久化任何数据。

Web前端服务数越多,理论上就能处理更多的并发量。

希望以上的介绍,可以帮助你理解Actor和Stateless Service。

我们会在后续内容中介绍如何使用Actor和Stateless Service.

Service Fabric —— Actor / Stateless Service 概念的更多相关文章

  1. Service Fabric 群集在Service Replica过多的情况下报错问题

    首先 Service Fabric 群集是正常的,部署一些服务过后也能正常运行,但一旦部署的服务过多后,且每个服务不止一个Partition,就有可能让群集状态为Error,但其实服务还是在正常运行的 ...

  2. 拥抱Service Fabric —— 目录

    理解分布式 经典分布式系统设计 云时代分布式系统演进 Service Fabric基础概念 Node, Application, Service, Partition/Replicas Partiti ...

  3. Service Fabric是什么?

    题记:鉴于社区对Service Fabric有诸多误解,希望借本文能让大家正确了解Service Fabric是一个什么东西,算是给其正名. 术语与分类 Service Fabric不仅仅是容器编排器 ...

  4. How to deploy JAVA Application on Azure Service Fabric

    At this moment, Azure Service Fabric does not support JAVA application natively (but it's on the sup ...

  5. 重磅消息-Service Fabric 正式开源

    微软的Azure Service Fabric的官方博客在2017.3.24日发布了一篇博客 Service Fabric .NET SDK goes open source ,介绍了社区呼声最高的S ...

  6. Service Fabric基本概念: Node, Application, Service, Partition/Replicas

    作者:张鼎松 (Dingsong Zhang) @ Microsoft 在上一节中,为大家简明扼要的介绍了微软针对现代分布式系统在Azure上实现的相关服务组件.紧接上文内容,本节将为大家介绍Azur ...

  7. Service Fabric —— Stateful Service 概念

    作者:潘罡 (Van Pan) @ Microsoft 上节中我们谈到了Service Fabric最底层的两个概念,一个是针对硬件层面而言的Node Type和Node.另一个是Applicatio ...

  8. Service Fabric基本概念:Partition/Replicas示例

    作者:张鼎松 (Dingsong Zhang) @ Microsoft 在上一节的结尾简单介绍了Service Fabric中分区Partitions和复制replicas的概念,本节主要以示例的形式 ...

  9. Service Fabric学习-从helloworld开始(无状态服务)

    原先做服务器程序, 都是部署在xx云上, 也没理解云是个啥, 不就是个服务器(虚拟机)租赁商吗? 好吧, 其实这个是IaaS, 而接下来要学习的ServiceFabric(以下简称SF)是PaaS. ...

随机推荐

  1. php 数组去重

    php 数组去重 数组中重复项的去除 2010-07-28 15:29 一维数组的重复项: 使用array_unique函数即可,使用实例如下: <?php                    ...

  2. 2017秋-软件工程第十二次作业(一)-PSP总结

    [回顾]:回顾开学时的博客并回答相关问题 1.回想一下你曾经对计算机专业的畅想当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么?答:当初的决定是以前的事情,没有改变.经历 ...

  3. Daily Scrum8 11.12

    昨天的任务已完成. 今日任务: 徐钧鸿:个人作业 张艺:构建带有用户管理的框架,并将后端移植好的代码连结. 黄可嵩:完成搜索移植 徐方宇:研究httpclient如何运作,如何利用它实现服务器和客户端 ...

  4. 第二阶段Sprint冲刺会议4

    进展:主要实现调取手机摄像头录制,能够实现“开始”及“暂停”功能.

  5. angularJS1笔记-(19)-angular异步加载包的方式

    我们平时写的导入包的方式都是同步方式,有时候会显得过于卡顿,这样我们就可以使用异步加载的方式. script.js方式: 执行结果为: 异步加载还可以加载多个即为script([,,,],functi ...

  6. windows下的C++ socket服务器(3)

    int make_server_socket(int port) { WSADATA inet_WsaData; WSAStartup(MAKEWORD(), &inet_WsaData); ...

  7. Three.js入门篇(一)创建一个场景

    上一面讲述了向场景中添加物体对象.这一篇准备把每个功能点细细的讲述一遍,一方面是为了加深自己的理解.另一方面希望能够 帮助到有需要的人. 一.在学习WEBGL的时候,你应该先了解要创建一个WebGL程 ...

  8. WDS迁移注意事项

    先说背景:公司使用WDS来部署操作系统,目前DHCP和WDS都安装在同一台服务器上,但是此服务器已过保,所以筹划迁移,将WDS和DHCP分别迁移到两台服务器上.迁移计划是保持WDS暂时不动,DHCP先 ...

  9. [转帖]七牛云对HTTPS 的解释

     感觉对RTT 还有 建立连接的说明挺好的 转帖一下 学习   https://www.cnblogs.com/qiniu/p/6856012.html   序•魔戒再现   几天前,OpenSSL  ...

  10. Implement Trie and find longest prefix string list

    package leetcode; import java.util.ArrayList; import java.util.List; class TrieNode{ Boolean isWord; ...