Learn Orleans 01 - 初探

Orleans的官方定義是「用於構建健壯的,可擴展的分佈式應用程序的跨平臺框架」。它是Actor模型的.NET實現。html

本章主要記錄一些基礎概念。git

Actor模型

Actor模型並非什麼新的概念,它由Carl Hewitt在1973年提出,Gul Agha在1986年發表技術報告「Actors: A Model of Concurrent Computation in Distributed Systems」。程序員

--https://blog.csdn.net/gulianchao/article/details/7249117github

Actor模型是一個概念模型,用於處理併發計算。它定義了一系列系統組件應該如何動做和交互的通用規則,最著名的使用這套規則的編程語言是Erlang編程

一個Actor指的是一個最基本的計算單元。它能接收一個消息而且基於其執行計算。後端

面向對象思想經過隱藏類的私有方法來實現封裝,僅容許外部調用公有方法來使用類。這一點在Actor中,給出了另外的理解。Actor外部僅能經過消息調用,Actor內部的實現對外不可見。併發

Actors一大重要特徵在於actors之間相互隔離,它們並不互相共享內存。一個actor能維持一個私有的狀態,而且這個狀態不可能被另外一個actor所改變。框架

光有一個actor是不夠的,多個actors才能組成系統。在actor模型裏每一個actor都有地址,因此它們纔可以相互發送消息。編程語言

一個Actor只能順序地處理消息,它經過Mailbox來存儲消息。分佈式

Actor概念被運用到許多知名語言和庫中,好比Erlang和Elixir, Akka (for the JVM) 和 Celluloid (for Ruby)。

-- https://www.jianshu.com/p/449850aa8e82

Orleans vs akka

orleans常與akka進行比較,它們之間的主要區別在於:

  • Orleans的主要重點是簡化分佈式計算,並容許非專家編寫高效,可伸縮和可靠的分佈式服務。
  • Akka是用於構建分佈式系統的工具包,它具備強大的功能,但同時也暴露了該領域的內在複雜性。

這兩個項目都打算成爲完整的解決方案,這意味着Orleans的第二優先級是容許有經驗的用戶更詳細地控制該平臺,並將其適應於普遍的用例,而Akka還提升了抽象級別並提供了簡化但很是有用的抽象。

另外一個區別是設計方法學:

  • 對於Orleans來講,指導性問題是「對於非專家而言,最天然,最容易的默認行爲是什麼?」 第二個問題是專家如何作出本身的決定。
  • Akka的指導性問題是「咱們能夠不妥協地提供最小的抽象是什麼?」 這意味着對咱們而言,「良好的默認設置」並非由用戶指望的結果決定的,而是咱們認爲用戶一旦理解了抽象就將對他們的程序進行推理時最有用的東西-熟悉自己並非目標。

對於生命週期管理

  • Orleans Grains沒有生命週期,沒法啓動或中止。所以,它們也不會失敗並沒有法從新啓動,所以Orleans不提供用於軟件故障處理的工具-故障處理方面着重於從硬件崩潰中恢復。

    另外一方面,「穀物激活」確實具備生命週期和相應的生命週期掛鉤,程序員可使用它們對激活或停用作出反應。

  • Akka Actor實現了完整的模型,包括定義的生命週期開始和結束,這些是顯式的操做。持久參與者支持將邏輯計算單元的生命週期擴展到正在運行的流程實例的生命週期以外。從新啓動Actor爲自動服務恢復提供了強大的手段。

自動建立

  • Orleans Grains會在須要時自動建立,這意味着激活初始化應謹慎對待其具備的外部可見效果-具備持久效果的初始化活動應設置爲客戶端調用的顯式接口方法。自動建立使用戶沒必要考慮須要建立穀物。
  • Akka Actor由其父母明確建立,並實施強制性的父母監督。這樣能夠精確控制什麼時候執行初始化動做以及建立哪一個確切的actor類。

……

總結與解釋

儘管Orleans和Akka的實現存在一些重疊,可是很明顯,二者都追求徹底不一樣的目標:

  • Orleans提供了一種編程模型,該模型無縫地集成到非分佈式方法論和程序員技能中,它能夠擴展到單臺計算機的範圍以外,而沒必要處理編寫分佈式應用程序的困難。這是經過作出一組實現選擇(例如基於請求的響應式樣式以及使用常規方法調用等的至少一次交付)並向用戶提供一組受限制的工具來實現的,這些選擇是基於使用時無需瞭解底層技術。從中能夠得出上面看到的全部含義,包括缺乏穀物的生命週期,這已被抽象化。

  • Akka爲建模分佈式系統(Actor模型)提供了一種很是簡單有效的抽象方法,並向用戶提供了該低級工具以及更高的抽象方法。理念是,用戶必須瞭解分佈式編程,才能在實現權衡方面作出本身的選擇,

-- https://github.com/akka/akka-meta/blob/master/ComparisonWithOrleans.md

成功用例

微軟Xbox中幾個核心遊戲的後端(Halo,戰爭機器4等等)是經過Orleans實現的,也就說明它應用於大型分佈式生產環境是有保障的。
-- https://www.zhihu.com/question/31472959

推薦博文:

http://www.javashuo.com/article/p-ouaqkaqs-kq.html
http://www.javashuo.com/article/p-yyckcnql-mk.html
http://www.javashuo.com/article/p-sytdrouz-mh.html
http://www.javashuo.com/article/p-uqfshkwl-mg.html
https://www.cnblogs.com/jzfan/p/orleans_demo.html
http://www.javashuo.com/article/p-eeiidoga-br.html
http://www.javashuo.com/article/p-vqwyzqef-mg.html
https://www.jianshu.com/p/449850aa8e82
https://blog.csdn.net/gulianchao/article/details/7249117
https://www.jianshu.com/p/141ea382d242

其餘資料:

https://dotnet.github.io/orleans/Documentation/index.html
https://github.com/akka/akka-meta/blob/master/ComparisonWithOrleans.md
https://www.brianstorti.com/the-actor-model/
https://en.wikipedia.org/wiki/Actor_model

相關文章
相關標籤/搜索