Arrow Flight RPC#

Arrow Flight 是一個 RPC 框架,用於透過網路高效傳輸 Flight 資料。

另請參閱

Flight 協定文件

Flight 協定的文件,包括概念上如何使用 Flight。

Flight API 文件

Python API 文件,列出所有各種用戶端和伺服器類別。

Python 食譜

在 Python 中使用 Arrow Flight 的範例。

撰寫 Flight 服務#

伺服器是 FlightServerBase 的子類別。若要實作個別的 RPC,請覆寫此類別上的 RPC 方法。

import pyarrow.flight as flight

class MyFlightServer(flight.FlightServerBase):
    def list_flights(self, context, criteria):
        info = flight.FlightInfo(...)
        yield info

每個 RPC 方法都總是會取得 ServerCallContext 以取得常見參數。若要指出失敗,請引發例外;Flight 特定的錯誤可以透過引發 FlightError 的子類別之一來表示。

若要啟動伺服器,請建立一個 Location 以指定要接聽的位置,並建立伺服器的執行個體。(字串將會轉換為位置。)這將啟動伺服器,但不會封鎖程式的其餘部分。呼叫 FlightServerBase.serve() 以封鎖直到伺服器停止。

# Listen to all interfaces on a free port
server = MyFlightServer("grpc://0.0.0.0:0")

print("Server listening on port", server.port)
server.serve()

使用 Flight 用戶端#

若要連線到 Flight 服務,請使用位置呼叫 pyarrow.flight.connect()

取消與逾時#

在進行呼叫時,用戶端可以選擇性地提供 FlightCallOptions。這允許用戶端設定呼叫的逾時或提供自訂 HTTP 標頭等功能。此外,用戶端 RPC 呼叫傳回的一些物件會公開一個 cancel 方法,允許提早終止呼叫。

在伺服器端,逾時是透明的。對於取消,伺服器需要手動輪詢 ServerCallContext.is_cancelled() 以檢查用戶端是否已取消呼叫,如果是,則跳出伺服器目前正在執行的任何處理。

啟用 TLS#

設定伺服器時,可以透過提供憑證和金鑰組給 FlightServerBase 來啟用 TLS。

在用戶端,使用 Location.for_grpc_tls() 來建構要接聽的 Location

啟用驗證#

警告

在未啟用 TLS 的情況下,驗證是不安全的。

可以透過實作 ServerAuthHandler 來啟用基於握手的驗證。驗證包含兩個部分:在初始用戶端連線時,伺服器和用戶端驗證實作可以執行任何需要的協商;然後,在之後的每個 RPC 上,用戶端都會提供權杖。伺服器驗證處理常式會驗證權杖並提供用戶端的身份。此身份可以從 ServerCallContext 取得。

自訂中介軟體#

伺服器和用戶端支援自訂中介軟體(或攔截器),這些中介軟體會在每個請求上呼叫,並且可以有限度地修改請求。這些可以透過子類別化 ServerMiddlewareClientMiddleware 來實作,然後在建立用戶端或伺服器時提供它們。

中介軟體相當有限,但它們可以將標頭新增至請求/回應。在伺服器上,它們可以檢查傳入的標頭並使請求失敗;因此,它們可以用於實作自訂驗證方法。

Flight 最佳實務#