Memahami manajemen sesi dengan driver 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 driver di Amazon QLDB

Jika Anda memiliki pengalaman menggunakan sistem manajemen database 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 respon.

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 secara 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 yang berjalan secara aktif per sesi.

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

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

Siklus hidup sesi

Urutan operasi API Sesi QLDB berikut 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 total masa hidup 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 seumur hidup maksimum pada sesi untuk memastikan bahwa aplikasi klien tangguh terhadap kegagalan sesi.

Penanganan sesi di driver QLDB

Meskipun Anda dapat menggunakanAWS SDK untuk berinteraksi langsung dengan QLDB Session API, ini menambah kompleksitas dan mengharuskan Anda untuk menghitung commit digest. QLDB menggunakan commit digest ini untuk memastikan integritas transaksi. Alih-alih berinteraksi langsung dengan API ini, sebaiknya gunakan driver QLDB.

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

Gambaran umum sesi

Dalam versi driver QLDB (misalnya, Java v1.1.0), kami menyediakan dua implementasi dari objek driver: standar, nonpooledQldbDriver danPooledQldbDriver. Seperti namanya,PooledQldbDriver mempertahankan kumpulan sesi yang digunakan kembali di seluruh transaksi.

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

Pengemudi menyediakan tiga tingkat abstraksi:

  • Driver (implementasi driver yang dikumpulkan) - Abstraksi tingkat atas. Pengemudi memelihara dan mengelola kumpulan sesi. Ketika Anda meminta pengemudi untuk menjalankan transaksi, pengemudi memilih sesi dari pool 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 renang, dan pengemudi mengelola siklus hidup sesi. Jika transaksi gagal, pengemudi akan mencoba ulang hingga sejumlah upaya tertentu menggunakan sesi yang sama. Tetapi jika sesi menemukan error (InvalidSessionException), QLDB membuangnya secara internal. Pengemudi kemudian bertanggung jawab untuk mendapatkan sesi lain dari pool 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 driver abstraksi saja. Anda tidak memiliki kontrol langsung atas sesi dan transaksi individual (yaitu, tidak ada operasi API untuk memulai sesi atau transaksi baru secara manual).

Penggabungan sesi dan logika transaksi

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

  1. Pengemudi memeriksa apakah telah mencapai batas sesi-pool. Jika demikian, pengemudi segera melemparNoSessionAvailable pengecualian. Jika tidak, dilanjutkan ke langkah berikutnya.

  2. Pengemudi memeriksa apakah kolam memiliki sesi yang tersedia.

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

    • Jika tidak ada sesi yang tersedia di pool, driver membuat sesi baru dan menggunakannya untuk menjalankan transaksi.

  3. Setelah pengemudi mendapat sesi pada langkah 2, pengemudi memanggilexecute operasi pada instance sesi.

  4. Dalamexecute pengoperasian sesi, pengemudi mencoba memulai transaksi dengan meneleponstartTransaction.

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

    • JikastartTransaction panggilan berhasil, pengemudi dilanjutkan ke langkah berikutnya.

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

  6. Komit transaksi dapat memiliki satu dari dua hasil:

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

    • Komit gagal karena konflik kontrol konkurensi (OCC) yang optimis. Dalam hal ini, driver mencoba ulang langkah 4—6 menggunakan sesi yang sama. Jumlah maksimum upaya coba lagi yang akan dilakukan dalam kode aplikasi Anda. Batas default adalah4.

catatan

JikaInvalidSessionException dilemparkan selama langkah 4—6, driver menandai sesi sebagai tertutup 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 ulang. Jika demikian, ia mencoba ulang transaksi hingga jumlah upaya coba lagi yang ditentukan. Jika tidak, itu menyebarkan (gelembung dan melempar) pengecualian untuk kode aplikasi Anda.

Mengembalikan sesi ke kolam renang

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