1. 程式人生 > >[RDMA] 高效能非同步的可靠訊息傳遞和RPC :Accelio

[RDMA] 高效能非同步的可靠訊息傳遞和RPC :Accelio

目錄

1. Introduce

Accelio是一個高效能非同步的可靠訊息傳遞和RPC庫,能優化硬體加速。 RDMA和TCP / IP傳輸被實現,並且其他的傳輸也能被實現,如共享儲存器可以利用這個高效和方便的API的優點。Accelio 是 Mellanox 公司的RDMA中介軟體,用於高效能非同步的可靠訊息傳遞和RPC庫。

2. Accelio 設計目標

Accelio提供了一個易於使用的,可靠的,可擴充套件和高效能的資料/訊息傳遞中介軟體,最大限度地提高現代CPU和網絡卡硬體的效率,減少將新的擴充套件應用程式產品推向市場的的時間。

3. Accelio Key Features

  1. 專注於高效能非同步的API 
  2. 可靠的訊息傳遞(端對端) 
  3. 請求/響應(交易)或傳送/接收模式 
  4. 提供連線和資源抽象到最大的可擴充套件性和可用性 
  5. 最大限度地發揮每個執行緒專用的硬體資源,多執行緒應用程式的效能 
  6. 旨在最大限度地利用RDMA,硬體解除安裝和多核CPU的優勢
  7. 支援多種傳輸選項(RDMA,TCP,..) 
  8. 服務和儲存叢集/向外擴充套件的原生支援 
  9. 小訊息合併 
  10. 簡單和抽象的API

4. Who can take advantage of it?

對那些高效的,高效能的,可靠訊息傳遞實現的應用,如叢集,橫向擴充套件塊/檔案/物件儲存,BigData和NoSQL應用程式,快速訊息匯流排等,感興趣的開發商可以使用。

5. Accelio 的結構示意圖

Accelio的主層分別是:
應用程式介面 - 提供易於使用的原語進行快速,可靠的非同步訊息佇列或RPC 
連線和會話管理 - 提供可靠的終端到終端的連線等端點,動態連線建立連線池,故障恢復和遷移/重定向 
可插拔傳輸層 - 使對映到不同的硬體或軟體傳輸實現

6. Accelio Integration With Other Applications/Projects

Accelio被用作高效能,低延遲,可靠訊息/ RPC庫的各種開源和商業產品,客戶專案 
支援多種繫結(Kernel C, User Space C/C++, Java, Python (future))。

7. 一個會話/連線建立流程

在建立連線到遠端端點,客戶指定遠端統一資源識別符號(URI)。URI包含首選傳輸方式,強制領先的IP地址和可選埠數目,以及可選的資源ID或名稱。

/伺服器端響應會話請求,下列選項之一: 
接受可選屬性的連線 
拒絕連線 
無縫地將連線重定向到一個不同的程序或實體
/
成功或重定向響應,客戶端建立一個或多個並聯連線到對端,將試圖重用現有的連線,以減少開銷。
/*會話和連線初始化流程
(1)開啟一個會話到遠端資源 
--例如“remote-ip:port/resource-name”
(2)伺服器端迴應,接受,拒絕或重定向 
--用“重定向”負載平衡或遷移資源穿過整個叢集(多個節點或程序) 
--伺服器提供一個portals列表(IPs+Ports) 
--每個portal識別port(IP),然後CPU/Thread去訪問 
--伺服器基於round/robin,Hash或者custom logic,可以載入平衡通訊通過多個ports/cores 
--建立連線(S)和傳送/接收郵訊息
--可以有多個連線(例如每個客戶端執行緒1個) 
--如果連線已經提供給遠端程序,可重用 
--故障/變化上的重建或遷移連線

8. 高級別傳輸流程 - 非同步請求/響應模型(Transaction Delivery API Model)

Accelio提供一個RPC-like的請求/迴應事務模式,或可靠訊息傳送/接收模式。

在事務模式中,發起方傳送一個請求,它包含專用應用程式的頭和指向輸入與輸出資料緩衝區的指標,允許零拷貝操作和RDMA。

當請求到達接收端時,它觸發一個回撥通知,基於該接收的應用程式處理該事務。當在接收端完成該處理時,它以返回的狀態和資料來發送響應。伺服器端可以非同步操作,併發出響應在其方便的時候,也就是,當所返回的資料是可用的。
發起方可以請求訊息到達確認。在這樣的情況下,接收方接受該訊息之後,一個確認訊息返回到發起方。該確認訊息可用於阻擋/同步操作和訊息跟蹤。

響應到達時,發起方被通知。在這個時候,發起方的資料緩衝區包含返回的資料,並且回叫應答指向原始請求。
如果傳輸失敗,同樣的傳輸被重新傳輸到已恢復或備用的連線上。

發起方可以要求中止/取消某範圍內的訊息(例如,請求超時)。接收方試圖中止操作(如果不執行他們),並以成功或失敗來反應。無論哪種方式,相關的響應不返回到發起方。注意,請求可以通過客戶端(無源)或伺服器(有源)端發出。
 

傳送/接收操作遵循相似的流程去請求/響應,唯獨沒有響應訊息。訊息從發起方傳送,引發回撥到接收端,使用可選的確認通知。

9. 本地多執行緒(多程序)支援

對於客戶端和伺服器端,Accelio支援全並行和多執行緒操作
--應用程式使用單個CPU核心/執行緒的時候的效能可以被限制
--當多個執行緒在使用同一個網路資源,需要複雜的狀態管理和鎖定,這樣會增加應用程式的開銷,並限制其效能和可伸縮性 
--Accelio支援全並行為客戶端和伺服器 
**每個執行緒可以被相關聯有獨立的硬體資源(QP的&個CQ)和事件迴圈,從而無需鎖定,並允許最大的並行 
**每個會話可以由多個並聯連線(每個關聯使用不同的CPU執行緒)組成 
**伺服器端可以公開多個portal(IP:port)為相同的資源/服務,每個port可以由不同的CPU執行緒和事件迴圈提供服務。

如下圖所示可以直觀Accelio的多執行緒支援

10. 記憶體管理

 --Accelio管理2種類型緩衝區 
**傳送/接收緩衝環的頭和小資料(通常4-8KB每個) 
**大的緩衝區為大型的IOs和RDMA 

--大緩衝區被應用程式的庫來分配和控制
--應用控制緩衝區: 
**需要預註冊記憶體緩衝區(使用reg_mr),並保證零拷貝 
--庫控制緩衝區 
**可能會在客戶端上有一個copy 
**接收端零拷貝(應用程式將得到一個指向接收緩衝區) 
**當做完時,請求應用程式來釋放緩衝區(用release_msg)

11. Accelio中的一些主要函式呼叫

Functionn Description
ctx_create/destroy Open thread context helping accelio to partition data without locks

ctx_run/stop Run the event loop in the context 
ctx_get_poll_params Return Accelio’s single file descriptor to add to external loop
session_create/destroy Create/destroy a session to a remote peer
connect/disconnect Open/Close a connection with a remote server/portal 
bind/unbind Bind/unbind a server portal with a URL (protocol:ip:port)
accept Accept incoming connection (server side)
reject Reject incoming connection (server side)
redirect Redirect a connection to a different node or portals or process
send_request/response Send a request/response message 
send/recv_msg Send/receive memory buffer (like sockets send/recv)
release_msg Release message buffers 
reg_mr/dereg_mr Register/deregister application buffers for app controlled RDMA

12. 非同步事件處理

高效能的應用程式使用非同步API來進行多個操作,並利用多種資源並行。 
•Accelio以下面的方式處理非同步事件: 
1,放置一個回撥在事件迴圈,該事件迴圈結合來自多個資源的事件。 
2,當一個事件,發出的一組操作,諸如從網路接收的訊息和寫入到磁碟。 
•Accelio內建了epoll的支援。應用程式提供的事件迴圈是可用的。 
•對於最低的訊息延遲,Accelio提供了優化事件處理,當一個事件迴圈處於空閒狀態(一個預定義的時間)時,其會結合忙等待池。

13. Accelio概述與總結

Accelio是一個開源的高效能,非同步,可靠訊息傳遞和遠端過程呼叫(RPC)的庫。對於遠端直接記憶體訪問(RDMA),TCP / IP和共享記憶體, Accelio優化硬體加速。 Accelio最大化訊息和CPU並行性,同時最大限度地降低CPU的爭用和鎖定。並行和非同步體系結構,無鎖定設計和零資料複製機制,提供每秒無與倫比的傳輸和頻寬效能,以及更低的延遲和CPU開銷。 Accelio保證終端到終端的事務傳遞和執行力,它支援事務請求 - 應答的通訊模型。 

Accelio通過提供內建的多路徑,實時會話重定向/遷移和叢集服務或儲存,解決了擴充套件性和虛擬化環境的挑戰。管理作為一種模組化的開源專案,Accelio無縫地延伸到新的功能,實現傳輸和服務。 

libxio(又名庫accelio)是一個位於RDMA之上的輕量級訊息傳遞庫。該庫為零拷貝訊息傳遞和無鎖定可擴充套件性,提供了非同步訊息傳遞設計。

Accelio是一種創新的API,它解決了一些現代計算機,網路和儲存系統主要挑戰,如: 
有效地利用多核心 
強大的橫向擴充套件 
降低硬體和軟體堆疊開銷 
減少通訊開銷和延遲 

Accelio提供了一個強大的,靈活的通訊和訊息傳遞層,從而使得應用程式擴充套件和中介軟體快速發展。它能夠整合性能,可用性,管理和安全功能於一體的實現,可用於多種應用。工作促進了Accelio開源社群,供應商可以專注於自己的應用程式的核心附加價值,與開發者在一個更大的社群分享他們的實現和體驗。

這個庫已經停止開發了,在github主頁的issue 部分開發者說由於公司中心轉移,這個庫不開發了,建議用別的庫。

相關推薦

[RDMA] 高效能非同步可靠訊息傳遞RPC Accelio

目錄 1. Introduce Accelio是一個高效能非同步的可靠訊息傳遞和RPC庫,能優化硬體加速。 RDMA和TCP / IP傳輸被實現,並且其他的傳輸也能被實現,如共享儲存器可以利用這個高效和方便的API的

訊息傳遞非同步任務

安卓中在子線成中更新UI會出現錯誤,為了確保UI顯示的正確性,必須統一管理這些更改指令。怎麼把子執行緒中的指令傳遞到主執行緒UI中,安卓提供了Handler訊息機制。 handler message void handleMessage(Messag

soap訊息傳遞處理(基於MessagePayload的方式)

package com.npf.client; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPBody; imp

【陌上軒客】技術領域涉獵Java、Go、Python、Groovy 等語言,高效能、高併發、高可用、非同步訊息中介軟體、快取與資料庫、分散式與微服務、容器自動化等領域; 興趣愛好籃球,騎行,讀書,發呆; 職業規劃勵志成為一名出色的伺服器端系統架構師。

陌上軒客 技術領域:涉獵Java、Go、Python、Groovy 等語言,高效能、高併發、高可用、非同步與訊息中介軟體、快取與資料庫、分散式與微服務、容器和自動化等領域; 興趣愛好:籃球,騎行,讀書,發呆; 職業...

非同步訊息傳遞技術的比較JMS、AMQPMQTT

訊息傳遞作為基本通訊機制已經在全世界成功運用。無論是人與人、機器與人還是機器與機器之間,訊息傳遞一直都是唯一常用的通訊方式。在雙方(或更多)之間交換訊息有兩種基本機制。同步訊息傳遞 非同步訊息傳遞 同步訊息傳遞在這種情況下使用,當訊息傳送者希望在某個時間範圍內收

同步訊息非同步訊息傳遞的區別?

在系統互動時候選擇同步還是非同步有時候很讓人困擾,希望通過閱讀這篇文章可以幫助更好的理解同步與非同步。 同步與非同步訊息的區別 1、同步訊息       同步訊息傳遞涉及到等待伺服器響應訊息的客戶端。訊息可以雙向地向兩個方向流動。本質上,這意味著同步訊息傳遞是雙向通訊。

Android 訊息傳遞之IntentIntentFilter的匹配規則

1.Intent概述及作用 Intent 是一個訊息傳遞物件,您可以使用它從其他應用元件請求操作。 詳見官方文件 主要功能如下: 啟動Activity: 通過將 Intent 傳遞給 startActivity(),您可以啟動新的 Activity 例項。I

RabbitMQ 訊息傳遞常用一些術語

0.寫在前面 RabbitMQ 是一個訊息代理:它接受和轉發訊息。你可以把它想象成一個郵局:當你把你想要投寄的郵件放在一個郵箱裡時,你可以確定收信人先生或女士最終會把郵件寄給你的收件人。在這個類比中,RabbitMQ是一個郵箱、一個郵局和一個郵遞員。 Rabbi

【stark_summer的專欄 】專注於開發分散式任務排程框架、分散式同步RPC非同步MQ訊息佇列、分散式日誌檢索框架、hadoop、spark、scala等技術 如果我的寫的文章能對您有幫助,請您能給點捐助,請看首頁置頂

專注於開發分散式任務排程框架、分散式同步RPC、非同步MQ訊息佇列、分散式日誌檢索框架、hadoop、spark、scala等技術 如果我的寫的文章能對您有幫助,請您能給點捐助,請看首頁置頂...

Go 微服務基於 RabbitMQ AMQP 進行訊息傳遞

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~ 介紹 微服務就是將應用程式的業務領域劃分為具有明確範圍的不同場景,並以分離的流程來執行這些場景,使得其中跨邊界的任何持久化的關係必須依賴最終的一致性,而不是 ACID 類事務或外來鍵約束。這

SpringCloud Stream 訊息同步非同步

1.非同步的形式有 通知:單向請求,只管傳送不關心結果。 請求/非同步響應:一對一的互動。請求的資訊不回立馬返回,而是過一段時間再返回結果。 訊息:利用訊息可以實現一對多形態的互動。 2.MQ的應用場景;非同步處理、流量削鋒、日誌處理、應用解耦 3.pom檔案引入架包依賴

Handler訊息傳遞機制(子執行緒中傳遞new Handler主執行緒中new Handle傳遞訊息

> 子執行緒中更新UI new Thread(new Runnable() {         @Override         public void run() {             Looper.prepare();          

同步方式的訊息傳送非同步方式的訊息傳送

通訊有兩類不同的基本方式: 具有依時性的同步方式以及與時間無關的非同步方式。訊息傳送中介軟體有許多不同型別, 它們分別都能夠支援一類基本方式的訊息通訊, 有時可以支援兩類方式。 根據定義, 同步執行的特徵為: 在兩個通訊應用系統之間必須要進行同步, 兩個系統必須都在正

linux下使用hiredis非同步API實現sub/pub訊息訂閱釋出的功能

本文轉載自連結:  最近使用redis的c介面——hiredis,使客戶端與redis伺服器通訊,實現訊息訂閱和釋出(PUB/SUB)的功能,我把遇到的一些問題和解決方法列出來供大家學習。        廢話不多說,先貼程式碼。 redis_publisher.

Android方便的訊息傳遞框架EventBus使用優化

一、EventBus的作用EventBus可以實現各個元件之間、以及各元件與後臺執行緒間的訊息傳遞,用來處理一些隨資料變化及時更新的介面十分方便,而且使用了EventBus後我們不用再獲得對方的引用即可

Webservice06---SOAP訊息傳遞處理(基於Message方式)

使用Message方式傳遞和處理SOAP訊息。 1.1、建立服務 private String wsdlUrlStr = "http://localhost:9999/ns?wsdl"; private String targetNameSpace

(安卓) 購物車二級列表,計算全反選 以及 EventBus(訊息傳遞

先看效果圖: MainActivity; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import androi

SOAP訊息傳遞處理(PAYLOAD方式)

/** * 訊息的傳遞和處理(PAYLOAD) * 通過負載來傳遞 */ @Test public void test03() { try { //1.建立服務(Service) URL url = new URL(wsdlUrl); QName sNa

理解訊息傳遞機制訊息轉發機制

訊息傳遞機制 在物件上傳遞方法叫做“傳遞訊息”(pass a message)。訊息有“名稱”(name)或“選擇子”(selector),可以接受引數,而且可能還有返回值。 在Object-c中,如果向物件傳遞訊息,那就會使用動態繫結機制來決定需要呼叫的方

soap訊息分析soap訊息傳遞處理(一)

WebService傳遞的時候實際上是傳遞一個SOAPMessage,我們來探究一下SOAPMessage的組成。 SOAPMessage由一個個的SOAP塊組成,這些SOAPPart被封裝到一個SOAPEnvelope(信封)中,信封中包括head和body。我們可以自