1.2 Orleans 常见问题

<<返回目录

可用性

我可以在我的项目中使用Orleans了吗?

当然可以,Orleans使用MIT协议开源,NuGet包已发布在nuget.org上。

Orleans可以用于生产环境了吗?我听说这是一个研究性项目。

事实上,Orleans最初是做为微软研究院的研究项目,但自2011年以来它已经发展成为一种产品,并用于微软的生产环境。2015年公开发布后被其它公司使用。所以 Orleans 绝对可以用于生产,并为许多高可用性系统和云服务提供支持。

微软还会继续提供支持吗?

Orleans的源代码已经在GitHub上的MIT许可下发布。微软会继续在Orleans投资并接受社区对代码库的贡献。

定位

Orleans 是一个服务器产品吗?我要如何运行它?

Orleans是一个框架,可以帮助您构建应用程序。Orleans的应用程序可以在各种托管环境、云端或本地集群中运行,甚至可以在单台计算机上运行。应用程序开发人员可以在其目标托管环境中构建、部署和运行基于Orleans的应用程序。

Orleans可以运行在哪里?

Orleans 可以在任何可以运行.NET应用的环境中运行。在Orleans 2.0以前,它需要.Net Framework Full;从2.0开始,Orleans 符合.NET Standard 2.0,因此可以在任何支持.Net Core的环境上运行。

Orleans 是为Azure而创造

不。我们相信您应该能够以您需要的方式在任何地方运行Orleans。 Orleans非常灵活,并且有许多可选的提供程序可以帮助在云环境中托管它,例如Azure,AWS或GCP,或者在本地集群上。

奥尔良和其他Actor语言或框架有什么区别,比如Erlang或Akka?

虽然都基于相同的Actor基本原则,但Orleans向前迈出了一大步,并引入了虚拟Actor的概念,极大地简化了开发人员的体验,更适合云服务和大规模系统

微软有另一个Actor模型的实现(Azure Service Fabric Reliable Actors)我如何在两者之间做出选择?

Reliable Actors和Service Fabric紧密集成,以利用其核心功能,例如复制的群集内存储。 Orleans具有更丰富的功能集,不依赖于任何特定的托管平台,并且几乎可以在任何环境中运行。另外 Orleans 提供了一个可选的包,用于在Service Fabric中托管Orleans应用程序。

最后,应用程序开发人员会在Reliable Actors与Service Fabric的底层平台的紧密集成及Orleans灵活性间做出取舍。

设计

在我的申请中,Grain应该有多大或多小?

Grain 隔离模型使它们非常善于表示独立的状态和上下文。在大多数情况下,Grain 自然地映射到用户,Session,帐户等应用程序实体。这些实体通常彼此隔离,可以独立访问和更新,并公开一组定义明确的操作。这与直观的 “一个实体 - 一个Grain” 的模型相搭配。

如果应用程序实体封装太多状态,则可能使 Grain 太大而无法通过单个粒度有效地表示,因此必须处理对它的高请求率。即使单个Grain 通常每秒可以处理多达几千个普通的呼叫,但经验告诉我们,要警惕每秒接收数百个请求的单个Grain。这可能是Grain太大的迹象,需要将将其分解成一组较小的 Grain 可能更利于的系统稳定和平衡。

应用程序实体可能太小而不能成为一个Grain,如果这会导致其他Grain 与其持续交互,结果导致过多的消息传递开销。在这种情况下,使那些紧密相互作用的实体成为单个Grain的一部分可能更有意义,因此它们将直接相互调用。

你应该如何避免 Grain 热点?

粒度的吞吐量受其激活可以执行的单个线程的限制。因此,建议避免单个Grain 收到不成比例的请求或涉及处理对其他 Grain 的请求的设计。有各种模式有助于防止单个Grain 过载,即使逻辑上它是一个中心通信点。

例如,如果 Grain 是某些计数器或统计数据的聚合器,这些计数器或统计数据是由大量 Grain 定期报告的,合理的方式是添加受控数量的中间聚合物 Grain 并分配每个报告 Grain,使得负载或多或少均匀地分布在所有中间聚合器Grain 上,而这些粒子又定期将部分聚合报告给中央聚合器 Grain 。

单个Orleans集群可以跨多个数据中心运行吗?

奥尔良集群目前仅限于每个集群的单个数据中心。相反,从1.3.0开始,您可以考虑多集群部署,其中部署到不同数据中心的集群形成单个多集群。

在什么情况下可以发生脑裂(同时在多个Silos 中激活相同的Grain)?

在正常操作期间,Orleans运行时保证每个粒子在群集中最多只有一个实例。唯一一次可以违反此保证的是当一个Silo在没有正确关闭的情况下崩溃或被杀死。在这种情况下,有一个约30秒(基于配置)窗口期,其中Grain 可能会在多个 Silo 中临时实例化。保证每个颗粒的单个实例的收敛,并且当该窗口期关闭时,将禁用重复激活。

您还可以查看Orleans的论文以获取更详细的信息,但是您无需完全理解它就能编写应用程序代码。您只需要考虑在编写应用程序时有两个actor实例的罕见可能性。持久性模型保证在这种情况下不会盲目地覆盖存储的写入。

如何使用

我该如何卸载一个Grain?

通常,不需要应用程序逻辑来强制停用Grain,因为Orleans 运行时自动检测并停用空闲的Grain以回收系统资源。让Orleans这样做更有效率,因为它会批量停用操作而不是逐个执行它们。在极少数情况下,如果您认为需要加速停用Grain,可以通过调用base.DeactivateOnIdle()方法来实现。

我可以告诉Orleans在哪里激活Grain吗?

可以使用限制性安置策略来实现,但我们通常认为这是一个比较高级的使用方式,需要慎重考虑。在这种情况下,应用程序将在不一定充分了解有关系统全局状态情况下,而去承担资源管理的负担。在Silo重启的情况下,这将适得其反,因为在云环境中可能会定期进行操作系统修补而造成应用重启。因此,特定的安置策略可能会对您的应用程序的可伸缩性以及对系统故障后的恢复能力产生负面影响。

话虽如此,对于应用程序确实知道应该激活特定Grain的罕见情况,例如,如果它知道谷物持久状态的位置,在1.5.0中我们引入了自定义安置策略和Directors

如何管理Grain版本,或添加新的Grain实现和接口?

您可以将具有新Grain或现有Grain的新版本的Silo添加到正在运行的集群中。

我可以从公共互联网连接到奥尔良 Silo 吗?

Orleans旨在作为服务的后端部分托管,从安全角度考虑,不建议将其Tcp端点公开在互联网上。通常采用WebApi的方式对外公开接口,对内在WebApi中使用Client连接Orleans Grain.

如果一个Silo 在我的Grain调用返回前出错了会发生什么?

如果在 Grain 调用过程中发生 Silo 故障,您将收到一个异常,您可以在代码中捕获并重试或根据应用程序逻辑执行其他操作来处理错误。因 Silo 失败所影响的 Grain 将在下次调用时自动重新实例化。Orleans Runtime 不会急切地从故障 Silo 中重新创建 Grain ,因为许多 Grain 可能不会立即或根本不需要。相反,运行时会单独重新创建此类 Grain ,并且仅在新请求到达特定 Grain 时才会重新创建。对于每种 Grain ,它选择一个可用的 Silo 作为新的主机。

这种方法的好处是恢复过程仅针对实际使用的 Grain 进行,并且在所有可用的 Silo 中及时传播,这提高了系统的响应性和恢复速度。另请注意,在 Silo 故障和 Orleans 集群检测到故障之间存在延迟。延迟是检测速度和误报概率之间的可配置权衡。在此过渡期间,对 Grain 的所有调用都将失败,但在检测到失败后,Grain 将在新调用时在另一个筒仓上创建,因此最终可用。

如果谷物调用执行时间过长会发生什么?

由于 Orleans 使用合作多任务模型,它不会自动抢占 Grain 的执行,但Orleans 会为长时间执行的 Grain 调用生成警告,以便您可以检测它们。与抢先式多任务相比,协作式多任务处理具有更好的吞吐量。但请记住,Grain 调用不应同步执行任何长时间运行的任务(如IO操作),也不应阻止其他任务完成。所有等待都应该使用await关键字或其他异步等待机制异步完成。 Grain 应该尽快返回,让其他 Grain 执行以获得最大吞吐量。

原文

Orleans 常见问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • 程序在运行过程中有时会莫名其妙出现代码的某些约束或者执行结果和理想状况不一样,正常逻辑怎么会出现这样的情况?到底发...
    BeckJin阅读 8,281评论 1 12
  • 持久化 当我们在集群系统中,一台机器向另一台机器发送一段数据,负责接收的机器在接收数据前突然宕机,就会造成数据丢失...
    mango_knight阅读 4,514评论 0 4
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,827评论 0 5
  • <<返回目录 背景 Orleans是微软开源的Actor模型开发框架。 Actor模型此模型解决了并发编程时对资源...
    _黑冰_阅读 4,045评论 0 4
  • Actor系统的实体 在Actor系统中,actor之间具有树形的监管结构,并且actor可以跨多个网络节点进行透...
    JasonDing阅读 3,334评论 2 6