Memahami manajemen sesi dengan pengemudi di Amazon QLDB - Amazon Quantum Ledger Database (Amazon QLDB)

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memahami manajemen sesi dengan pengemudi di Amazon QLDB

penting

Pemberitahuan akhir dukungan: Pelanggan yang ada akan dapat menggunakan Amazon QLDB hingga akhir dukungan pada 07/31/2025. Untuk detail selengkapnya, lihat Memigrasi Buku Besar QLDB Amazon ke Amazon Aurora PostgreSQL.

Jika Anda memiliki pengalaman menggunakan sistem manajemen basis data relasional (RDBMS), Anda mungkin akrab dengan koneksi bersamaan. QLDB tidak memiliki konsep yang sama dari koneksi RDBMS tradisional karena transaksi dijalankan dengan permintaan HTTP dan pesan respons.

Dalam QLDB, konsep analog adalah sesi aktif. Sesi secara konseptual mirip dengan login pengguna — ia mengelola informasi tentang permintaan transaksi data Anda ke buku besar. Sesi aktif adalah sesi yang aktif menjalankan transaksi. Ini juga bisa menjadi sesi yang baru-baru ini menyelesaikan transaksi di mana layanan mengantisipasi akan segera memulai transaksi lain. QLDB mendukung satu transaksi aktif yang berjalan per sesi.

Batas sesi aktif bersamaan per buku besar didefinisikan dalam. Kuota dan batas di Amazon QLDB Setelah batas ini tercapai, setiap sesi yang mencoba memulai transaksi akan menghasilkan error (LimitExceededException).

Untuk praktik terbaik untuk mengonfigurasi kumpulan sesi dalam aplikasi Anda menggunakan driver QLDB, lihat di rekomendasi driver QLDB Mengkonfigurasi objek QldbDriver Amazon.

Siklus hidup sesi

Urutan operasi QLDB Session API berikut ini mewakili siklus hidup khas sesi QLDB:

  1. StartSession

  2. StartTransaction

  3. ExecuteStatement

  4. CommitTransaction

  5. Ulangi langkah 2-4 untuk memulai lebih banyak transaksi (satu transaksi pada satu waktu).

  6. EndSession

Kedaluwarsa sesi

QLDB kedaluwarsa dan membuang sesi setelah masa pakai total 13-17 menit, terlepas dari apakah itu aktif menjalankan transaksi. Sesi dapat hilang atau terganggu karena sejumlah alasan, seperti kegagalan perangkat keras, kegagalan jaringan, atau restart aplikasi. QLDB memberlakukan masa pakai maksimum pada sesi untuk memastikan bahwa aplikasi klien tahan terhadap kegagalan sesi.

Penanganan sesi di driver QLDB

Meskipun Anda dapat menggunakan AWS SDK untuk berinteraksi langsung dengan QLDB Session API, ini menambah kerumitan dan mengharuskan Anda untuk menghitung intisari komit. QLDB menggunakan intisari komit ini untuk memastikan integritas transaksi. Alih-alih berinteraksi langsung dengan API ini, sebaiknya gunakan driver QLDB.

Driver menyediakan lapisan abstraksi tingkat tinggi di atas API data transaksional. Ini merampingkan proses menjalankan pernyataan PartiQL pada data buku besar dengan mengelola panggilan API. SendCommand Panggilan API ini memerlukan beberapa parameter yang ditangani driver untuk Anda, termasuk pengelolaan sesi, transaksi, dan kebijakan coba lagi jika terjadi kesalahan.

Ikhtisar penyatuan sesi

Dalam versi driver QLDB yang lebih lama (misalnya, Java v1.1.0), kami menyediakan dua implementasi objek driver: standar, nonpooled dan a. QldbDriver PooledQldbDriver Seperti namanya, PooledQldbDriver mempertahankan kumpulan sesi yang digunakan kembali di seluruh transaksi.

Berdasarkan umpan balik pengguna, pengembang lebih memilih untuk mendapatkan fitur penyatuan dan manfaatnya secara default, daripada menggunakan driver standar. Jadi, kami menghapus PooledQldbDriver dan memindahkan fungsionalitas penyatuan sesi ke. QldbDriver Perubahan ini termasuk dalam rilis terbaru dari setiap driver (misalnya, Java v2.0.0).

Pengemudi menyediakan tiga tingkat abstraksi:

  • Driver (implementasi driver gabungan) - Abstraksi tingkat atas. Pengemudi memelihara dan mengelola kumpulan sesi. Ketika Anda meminta pengemudi untuk menjalankan transaksi, pengemudi memilih sesi dari kolam dan menggunakannya untuk menjalankan transaksi. Jika transaksi gagal karena kesalahan sesi (InvalidSessionException), pengemudi menggunakan sesi lain untuk mencoba kembali transaksi. Pada dasarnya, pengemudi menawarkan pengalaman sesi yang dikelola sepenuhnya.

  • Sesi — Satu tingkat di bawah abstraksi driver. Sesi terkandung dalam kolam, dan pengemudi mengelola siklus hidup sesi. Jika transaksi gagal, pengemudi mencobanya kembali hingga sejumlah upaya tertentu menggunakan sesi yang sama. Tetapi jika sesi mengalami error (InvalidSessionException), QLDB membuangnya secara internal. Pengemudi kemudian bertanggung jawab untuk mendapatkan sesi lain dari kolam untuk mencoba kembali transaksi.

  • Transaksi — Tingkat abstraksi terendah. Transaksi terkandung dalam sesi, dan sesi mengelola siklus hidup transaksi. Sesi ini bertanggung jawab untuk mencoba kembali transaksi jika terjadi kesalahan. Sesi ini juga memastikan bahwa itu tidak membocorkan transaksi terbuka yang belum dilakukan atau dibatalkan.

Dalam versi terbaru dari setiap driver, Anda dapat melakukan operasi pada tingkat abstraksi driver saja. Anda tidak memiliki kontrol langsung atas sesi dan transaksi individual (yaitu, tidak ada operasi API untuk memulai sesi atau transaksi baru secara manual).

Pengumpulan sesi dan logika transaksi

Rilis terbaru dari setiap driver tidak lagi menyediakan implementasi nonpooled dari objek driver. Secara default, QldbDriver objek mengelola kumpulan sesi. Saat Anda melakukan panggilan untuk menjalankan transaksi, pengemudi melakukan langkah-langkah berikut:

  1. Pengemudi memeriksa apakah sudah mencapai batas kumpulan sesi. Jika demikian, pengemudi segera melempar NoSessionAvailable pengecualian. Kalau tidak, itu melanjutkan ke langkah berikutnya.

  2. Pengemudi memeriksa apakah kolam memiliki sesi yang tersedia.

    • Jika sesi tersedia di kolam renang, pengemudi menggunakannya untuk menjalankan transaksi.

    • Jika tidak ada sesi yang tersedia di kolam renang, pengemudi membuat sesi baru dan menggunakannya untuk menjalankan transaksi.

  3. Setelah pengemudi mendapat sesi di langkah 2, pengemudi memanggil execute operasi pada instance sesi.

  4. Dalam execute pengoperasian sesi, pengemudi mencoba memulai transaksi dengan meneleponstartTransaction.

    • Jika sesi tidak valid, startTransaction panggilan gagal, dan driver kembali ke langkah 1.

    • Jika startTransaction panggilan berhasil, pengemudi melanjutkan ke langkah berikutnya.

  5. Driver menjalankan ekspresi lambda Anda. Ekspresi lambda ini dapat berisi satu atau beberapa panggilan untuk menjalankan pernyataan PartiQL. Setelah ekspresi lambda selesai berjalan tanpa kesalahan, pengemudi melanjutkan untuk melakukan transaksi.

  6. Komit transaksi dapat memiliki salah satu dari dua hasil:

    • Komit berhasil, dan driver mengembalikan kontrol ke kode aplikasi Anda.

    • Komit gagal karena konflik kontrol konkurensi optimis (OCC). Dalam hal ini, pengemudi mencoba ulang langkah 4-6 menggunakan sesi yang sama. Jumlah maksimum percobaan ulang dapat dikonfigurasi dalam kode aplikasi Anda. Batas defaultnya adalah4.

catatan

Jika InvalidSessionException dilemparkan selama langkah 4-6, pengemudi menandai sesi sebagai ditutup dan kembali ke langkah 1 untuk mencoba kembali transaksi.

Jika ada pengecualian lain yang dilemparkan selama langkah 4-6, pengemudi memeriksa apakah pengecualian dapat dicoba lagi. Jika demikian, ia mencoba ulang transaksi hingga jumlah percobaan ulang yang ditentukan. Jika tidak, itu menyebarkan (menggelembung dan melempar) pengecualian ke kode aplikasi Anda.

Mengembalikan sesi ke kolam

Jika InvalidSessionException terjadi kapan saja selama transaksi aktif, pengemudi tidak mengembalikan sesi ke kolam. QLDB membuang sesi sebagai gantinya, dan pengemudi mendapat sesi lain dari kolam renang. Dalam semua kasus lain, pengemudi mengembalikan sesi ke kolam renang.