Elixir 分散式平臺

来源:https://www.cnblogs.com/wang_yb/archive/2018/05/15/9039255.html
-Advertisement-
Play Games

概述 分散式平臺的核心在於併發,容錯。 而 Elixir 的優勢正是在於對於併發和容錯的處理。 分散式模型 1. CSP(Communicating Sequential Process) 模型 :: 多個進程通過管道(channel)進行交互 2. Actor 模型 :: 每個進程管理自己的內部狀 ...


概述

分散式平臺的核心在於併發,容錯。 而 Elixir 的優勢正是在於對於併發和容錯的處理。

分散式模型

  1. CSP(Communicating Sequential Process) 模型 :: 多個進程通過管道(channel)進行交互
  2. Actor 模型 :: 每個進程管理自己的內部狀態,通過消息和外界交互

對於 CSP 來說,重點在與 channel,通過 channel 管理併發的任務,並不關心執行任務的執行者。 Actor 模型關心的是任務的執行者(也就是 Actor),每個 Actor 都是可以通過消息和外界交互,根據消息完成任務。

Elixir 採用的是 Actor 模型,golang 的併發是 CSP 模型。

併發

並行(concurrency)經常會和並行(parallelize)的概率混淆,併發是指同時發生,並行是指同時運行, 比如,在一個 4core 的機器上,併發的量可能上萬,但是並行可能只有 4。

Elixir 的併發是由 BEAM VM 來管理的,理論上,一個 BEAM VM 上可以創建 268,000,000 個進程,基本就可以當做是無限制。 一般來說,BEAM VM 都是通過少量的調度進程來管理大量的 processes Elixir 的併發進程之間不會共用任何東西(包括記憶體在內)。

容錯

對錯誤的處理方式,最普遍的就是 try/catch,這種方式對於單機的系統來說可以適用,但是對於分散式系統來說,存在不足之處:

  • 分散式系統涉及多個系統間的交互,try/catch 只能在單點上捕獲異常
  • 分散式系統中可能發生的錯誤往往很難重現,也無法預測,即使捕獲到異常,也很難預置處理方式,也就是很多異常會導致系統無法恢復
  • try/catch 機制一般都是捕獲錯誤,然後自己處理或者直接往上層拋異常,隨著系統的複雜,異常的層級也會越來越多

Elixir 中也有類似 try/catch 的機制,但是它的容錯性不是依靠這種機制來保證的。 Elixir 不是致力於去減少錯誤的發生,而是致力於提供一種機制去減少錯誤的影響,並使得系統能夠自己從錯誤中恢復。

Elixir 中通過進程樹來確保整個應用的可用性,少數幾個進程作為 supervisor,用來監管其他完成實際業務的進程。 如果進程出現問題,由 supervisor 進程負責重啟或者銷毀。

除了進程樹,對於分散式系統的容錯,Erlang 的理念是 let it crash 原因也就是因為在分散式系統中,很多的錯誤和環境相關,難於重現,並且很多時候在錯誤的基礎上恢復系統相當困難, 遠遠沒有直接重啟來的簡單有效。

當然,let it crash 不是 let everything crash,以下情況還是要處理:

-   對於關鍵性的進程,是絕對不能讓它 crash 的,比如有些主幹上的 supervisor
-   可以預期的錯誤,就要有對應的錯誤處理,不能什麼都靠重啟來解決
-   let it crash 是指把那些無法預期的錯誤交給 supervisor 來處理

OTP 平臺

OTP 平臺的分散式系統核心是 processmessage Elixir 本身也可以實現非常健壯的分散式系統,但是藉助 OTP 平臺上已經成熟的組件,可以更快的創建一個分散式應用

下麵是 OTP 平臺上提供的成熟組件:(各個組件的示例參考:http://www.cnblogs.com/wang_yb/p/5589257.html)

  1. agent
  2. GenServer
  3. GenEvent
  4. task
  5. supervisor

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前面的話 隨著移動互聯網的興起,不同設備的解析度相差較大,如果在不同的設置上顯示同一個頁面,則用戶體驗差。響應式網頁設計是一種方法,使得一個網站能夠相容多個終端,而不用為每個終端製作特定的版本。它使得一個網站可以在任何類型的屏幕上,都可以被輕鬆地瀏覽和使用。採用響應式設計,在不同設備中,網站會重新排 ...
  • 微信授權、獲取用戶openid-純前端實現——jsonp跨域訪問返回json數據會報錯的純前端解決辦法 ...
  • 1、事件:addEventListener('click', function(){}或者方法名字) 可以添加多個處理器,語法: 對應的有removeEventListener()。 2、阻止表單預設行為: preventDefault();當在事件對象上調用該函數 3、阻止事件冒泡: stopPr ...
  • 閱讀目錄: 1. ELK Stack 簡介 2. 環境準備 3. 安裝 Elasticsearch 4. 安裝 Kibana 5. Kibana 使用 6. Elasticsearch 命令 最近在開發分散式服務追蹤,使用 Spring Cloud Sleuth Zipkin + Stream + ...
  • 在整理模板方法之前,先來說點廢話吧。除了記錄學習總結,也來記錄一下生活吧。 我們公司的老闆在北京,老闆也會因為項目來公司,不過不是天天來。公司有個同事,只要老闆不在就天天遲到,而且一天比一天晚,經常來了公司沒多久,午飯的外賣就送到公司了。前幾天,外賣竟然比他還來的早(外賣11點半送到的),公司一個不 ...
  • 一、什麼是裝飾模式 裝飾模式(Decorator),動態地給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更靈活。UML結構圖如下: 其中,Component是抽象構件,定義一個對象介面,可以給這些對象動態地添加職責;ConreteComponent定義一個具體對象,也可以給這個對象 ...
  • 剛畫出來的,裡邊配的騷詞出自本人,夠騷吧! ...
  • Java反射, 修改欄位值, 實例化對象, 繞過構造器來實例化對象 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...