了解 Amazon 中的驅動程式的工作階段管理 QLDB - Amazon Quantum 賬本數據庫(AmazonQLDB)

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

了解 Amazon 中的驅動程式的工作階段管理 QLDB

重要

支援結束通知:現有客戶將能夠使用 Amazon,QLDB直到 2025 年 7 月 31 日終止支援為止。有關更多詳細信息,請參閱將 Amazon QLDB 分類帳遷移到 Amazon Aurora 郵政. SQL

如果您有使用關聯式資料庫管理系統 (RDBMS) 的經驗,您可能熟悉並行連線。QLDB不具有傳統RDBMS連接的相同概念,因為事務與HTTP請求和響應消息一起運行。

在中QLDB,類似的概念是使用中的工階段。工作階段在概念上與使用者登入類似,它會管理您對總帳之資料交易請求的相關資訊。使用中的工作階段是主動執行交易的工作階段。它也可以是最近完成交易的工作階段,服務預期會立即啟動另一個交易。QLDB每個會話支持一個主動運行的事務。

在中定義每個分類帳的並行作用中階段作業限制Amazon 的配額和限制 QLDB。達到此限制之後,任何嘗試啟動交易的工作階段都會導致 error (LimitExceededException)。

如需使用QLDB驅動程式在應用程式中設定工作階段集區的最佳實務,請參閱 Amazon QLDB 驅動程式建議配置對 QldbDriver 象中的。

工作階段生

下列QLDB工API作階段作業順序代表工作階QLDB段的典型生命週期:

  1. StartSession

  2. StartTransaction

  3. ExecuteStatement

  4. CommitTransaction

  5. 重複步驟 2—4 以啟動更多交易 (一次一個交易)。

  6. EndSession

工作階段過期

QLDB無論工作階段是否正在主動執行交易,都會在總生命週期 13 到 17 分鐘後過期並捨棄工作階段。工作階段可能會因為多種原因而遺失或受損,例如硬體故障、網路故障或應用程式重新啟動。QLDB在工作階段上強制執行最長存留期,以確保用戶端應用程式能夠抵禦工作階段失敗。

QLDB驅動程序中的會話處理

雖然您可以使用 AWS SDK直接與QLDB工作階段互動API,但這會增加複雜性,並要求您計算提交摘要。QLDB使用此提交摘要來確保交易的完整性。我們建議您使用驅動程式API,而不是直接與此互QLDB動。

該驅動程序提供了事務性數據API上方的高級抽象層。它透過管理SendCommandAPI呼叫,簡化在分類帳資料上執行 PartiQL 陳述式的程序。這些API調用需要驅動程序為您處理的幾個參數,包括會話,事務的管理,並在發生錯誤時重試策略。

階段作業集區概觀

在舊版QLDB驅動程式 (例如 Java v1.1.0) 中,我們提供了驅動程式物件的兩種實作:標準、非集區QldbDriver和. PooledQldbDriver 顧名思義,PooledQldbDriver維護跨交易重複使用的工作階段集區。

根據用戶反饋,開發人員更喜歡默認情況下獲得池功能及其優點,而不是使用標準驅動程序。因此,我們移除PooledQldbDriver並將工作階段集區功能移至。QldbDriver此變更包含在每個驅動程式的最新版本中 (例如,Java v2.0.0)。

驅動程式提供三個層級的抽象:

  • 驅動程序(池驅動程序實現)-頂級抽象。驅動程式會維護和管理工作階段集區。當您要求驅動程序運行事務時,驅動程序從池中選擇一個會話並使用它來運行事務。如果交易因為工作階段錯誤 (InvalidSessionException) 而失敗,則驅動程式會使用另一個工作階段來重試該交易。基本上,驅動程式提供完全受控的工作階段體驗。

  • 工作階段 — 低於驅動程式抽象的一個層級。會話包含在池中,驅動程序管理會話的生命週期。如果交易失敗,驅動程式會在使用相同工作階段嘗試指定次數的情況下重試。但是,如果會話遇到 error (InvalidSessionException),則在內部QLDB丟棄它。然後,驅動程序負責從池中獲取另一個會話以重試該事務。

  • 交易 — 抽象的最低層級。事務包含在會話中,並且會話管理事務的生命週期。工作階段負責在發生錯誤的情況下重試交易。工作階段也可確保它不會洩漏尚未提交或取消的開啟交易。

在每個驅動程序的最新版本中,您只能在抽象的驅動程序級別執行操作。您無法直接控制個別工作階段和交易 (也就是說,沒有可以手動啟動新工API作階段或交易的作業)。

階段作業集區和交易邏輯

每個驅動程式的最新版本不再提供驅動程式物件的非集區實作。依預設,QldbDriver物件會管理工作階段集區。當您撥打電話來執行交易時,驅動程式會執行下列步驟:

  1. 驅動程式會檢查是否已達到工作階段集區限制。如果是這樣,驅動程序立即拋出NoSessionAvailable異常。否則,它會繼續進行下一個步驟。

  2. 驅動程式會檢查集區是否有可用的工作階段。

    • 如果集區中有工作階段可用,則驅動程式會使用它來執行交易。

    • 如果池中沒有可用的會話,驅動程序將創建一個新的會話並使用它來運行事務。

  3. 驅動程序在步驟 2 中獲得會話後,驅動程序調用會話實例上的execute操作。

  4. 在會話的execute操作中,驅動程序嘗試通過調用啟動事務startTransaction

    • 如果工作階段無效,startTransaction呼叫會失敗,且驅動程式會返回到步驟 1。

    • 如果startTransaction呼叫成功,驅動程式會繼續進行下一個步驟。

  5. 驅動程序運行您的 lambda 表達式。這個 lambda 表達式可以包含一個或多個運行 PartiQL 語句的調用。lambda 表達式完成運行沒有任何錯誤之後,驅動程序繼續提交交易。

  6. 交易的提交可以有以下兩種結果之一:

    • 提交成功,驅動程序將控制權返回到您的應用程序代碼。

    • 由於樂觀的並發控制(OCC)衝突,提交失敗。在此情況下,驅動程式會使用相同的工作階段重試步驟 4-6。您可以在應用程式程式碼中設定重試次數上限。預設限制為4

注意

如果在步驟 4 到 6 期間擲回,驅動程式會將工作階段標示為已關閉,並返回步驟 1 以重試交易。InvalidSessionException

如果在步驟 4-6 期間擲回任何其他例外狀況,驅動程式會檢查是否可以重試例外狀況。如果是這樣,它會重試交易,直到指定的重試嘗試次數。如果沒有,它會將異常傳播(冒泡並拋出)到您的應用程序代碼中。

將工作階段傳回集區

如果InvalidSessionException在使用中交易過程中的任何時間發生,驅動程式不會將工作階段傳回集區。QLDB而是丟棄會話,驅動程序從池中獲取另一個會話。在所有其他情況下,驅動程式會將工作階段傳回至集區。