Memigrasikan pull queue ke Pub/Sub (Python)

Halaman ini menjelaskan cara memigrasikan kode pull queue dari Task Queue ke Pub/Sub. Pub/Sub kini merupakan cara yang lebih disukai untuk melakukan tugas pull queue di App Engine.

Jika aplikasi Anda menggunakan pull queue dan push queue, gunakan panduan ini untuk memigrasikan pull queue Anda ke Pub/Sub sebelum memigrasikan push queue ke Cloud Tasks layanan push queue baru. Sebaiknya jangan memigrasikan pull queue Anda setelah memigrasikan push queue ke Cloud Tasks karena penggunaan file queue.yaml yang diperlukan cenderung menyebabkan perilaku yang tidak terduga dengan Cloud Tasks.

Fitur yang saat ini tidak tersedia di Pub/Sub

Fitur Task Queue berikut saat ini tidak tersedia di Pub/Sub:

  • Pengelompokan berdasarkan tag
  • Penghapusan duplikat otomatis

Harga dan kuota

Memigrasikan pull queue ke Pub/Sub dapat memengaruhi harga dan kuota untuk aplikasi Anda.

Harga

Pub/Sub memiliki harga sendiri. Seperti halnya Task Queue, mengirim permintaan ke aplikasi App Engine dengan Pub/Sub dapat menyebabkan aplikasi Anda dikenakan biaya.

Kuota

Kuota Pub/Sub berbeda dari kuota untuk Task Queue. Seperti halnya Task Queue, mengirim permintaan ke aplikasi App Engine dari Pub/Sub dapat memengaruhi kuota permintaan App Engine Anda.

Sebelum bermigrasi

Jika Anda belum melakukannya, siapkan lingkungan pengembangan Python Anda untuk menggunakan versi Python yang kompatibel dengan Google Cloud, dan instal alat pengujian untuk membuat lingkungan Python yang terisolasi.

Bagian berikut membahas langkah-langkah penyiapan sebelum memigrasikan pull queue Anda ke Pub/Sub.

Mengaktifkan Pub/Sub API

Untuk mengaktifkan Pub/Sub API, klik Aktifkan di Pub/Sub API di Library API. Jika melihat tombol Kelola dan bukan tombol Aktifkan, berarti sebelumnya Anda telah mengaktifkan Pub/Sub API untuk project tersebut dan tidak perlu melakukan tindakan ini lagi.

Mengautentikasi aplikasi ke Pub/Sub API

Anda harus mengautentikasi aplikasi ke Pub/Sub API. Bagian ini membahas autentikasi untuk dua kasus penggunaan yang berbeda.

Untuk mengembangkan atau menguji aplikasi secara lokal, sebaiknya gunakan akun layanan. Untuk petunjuk tentang cara menyiapkan akun layanan dan menghubungkannya ke aplikasi Anda, baca Mendapatkan dan memberikan kredensial akun layanan secara manual.

Untuk men-deploy aplikasi di App Engine, Anda tidak perlu memberikan autentikasi baru. Kredensial Default Aplikasi (ADC) menyimpulkan detail autentikasi untuk aplikasi App Engine.

Mendownload Google Cloud CLI

Download dan instal Google Cloud CLI untuk menggunakan gcloud CLI dengan Pub/Sub API jika sebelumnya Anda belum menginstalnya. Jalankan perintah berikut dari terminal Anda jika Anda sudah menginstal Google Cloud CLI.

gcloud components update

Mengimpor Library Klien Cloud

Ikuti langkah-langkah di bawah ini untuk menggunakan library klien Python Pub/Sub dengan aplikasi App Engine Anda yang ada:

  1. Perbarui file app.yaml. Ikuti petunjuk untuk versi Python Anda:

    Python 2

    Untuk aplikasi Python 2, tambahkan versi terbaru library grpcio.

    Berikut adalah contoh file app.yaml:

    runtime: python27
    threadsafe: yes
    api_version: 1
    
    libraries:
    - name: grpcio
      version: latest
    

    Python 3

    Untuk aplikasi Python 3, tentukan elemen runtime di file app.yaml dengan versi Python 3 yang didukung. Contoh:

    runtime: python310 # or another support version
    

    Runtime Python 3 menginstal library secara otomatis, sehingga Anda tidak perlu menentukan library bawaan dari runtime Python 2 sebelumnya. Jika aplikasi Python 3 Anda menggunakan layanan paket lama lainnya saat bermigrasi, Anda dapat terus menentukan library bawaan yang diperlukan. Jika tidak, Anda dapat menghapus baris yang tidak diperlukan dalam file app.yaml.

  2. Perbarui file requirements.txt. Ikuti petunjuk untuk versi python Anda:

    Python 2

    Tambahkan Library Klien Cloud untuk Pub/Sub ke daftar dependensi dalam file requirements.txt.

    google-cloud-pubsub
    

    Lalu, jalankan pip install -t lib -r requirements.txt untuk mengupdate daftar library yang tersedia untuk aplikasi Anda.

    Python 3

    Tambahkan Library Klien Cloud untuk Pub/Sub ke daftar dependensi dalam file requirements.txt.

    google-cloud-pubsub
    

    App Engine otomatis menginstal dependensi ini selama deployment aplikasi di runtime Python 3, jadi hapus folder lib jika ada.

  3. Untuk aplikasi Python 2, jika aplikasi menggunakan library bawaan atau yang disalin, Anda harus menentukan jalur tersebut dalam file appengine_config.py, yang terletak di folder yang sama dengan file app.yaml Anda:

    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set PATH to your libraries folder.
    PATH = 'lib'
    # Add libraries installed in the PATH folder.
    vendor.add(PATH)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(PATH)
    

    File appengine_config.py di atas menganggap bahwa direktori kerja saat ini adalah tempat folder lib berada. Dalam beberapa kasus, seperti pengujian unit, direktori kerja saat ini dapat berbeda. Untuk menghindari error, Anda dapat secara eksplisit meneruskan jalur lengkap ke folder lib menggunakan:

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
  4. Impor library klien Python Pub/Sub di file apa pun yang menggunakan pull queue dari Task Queues API:

    from google.cloud import pubsub

Pub/Sub dan pull queue

Perbandingan fitur

Pub/Sub mengirimkan tugas ke worker melalui hubungan penayang/pelanggan. Langganan pull di Pub/Sub menyerupai pull queue di Task Queue karena pelanggan mengambil pesan dari topik. Tabel di bawah ini mencantumkan fitur inti untuk pull queue di Task Queue dan fitur terkait untuk langganan pull di Pub/Sub.

Fitur Task Queue Fitur Pub/Sub
Antrean Topik
Tugas Pesan
Pekerja Pelanggan

Untuk mempelajari arsitektur Pub/Sub lebih lanjut, baca Cloud Pub/Sub: Layanan Pesan Berskala Google.

Perbandingan alur kerja

Di bawah ini adalah perbandingan alur kerja standar untuk pull queue di Task Queue dan langganan pull di Pub/Sub.

Alur kerja Task Queue Alur kerja Pub/Sub
Anda membuat pull queue Anda membuat topik dan membuat pelanggan Anda (yaitu worker) berlangganan ke topik tersebut
Anda membuat dan menambahkan tugas ke dalam antrean Anda membuat pesan dan memublikasikannya ke topik
Worker menyewakan tugas Pelanggan mengambil pesan dari topik
Worker memproses tugas Pelanggan memproses pesan
Worker menghapus tugas dari antrean Pelanggan mengonfirmasi pesan
Masa sewa berakhir Topik akan menghapus pesan saat semua pelanggannya telah mengonfirmasi pesan

Membuat langganan pull di Pub/Sub

Anda dapat menggunakan langganan pull Pub/Sub seperti pull queue Task Queue. Langganan suatu topik tidak akan habis masa berlakunya dan bisa ada secara bersamaan untuk beberapa worker. Artinya, pesan dapat diproses oleh lebih dari satu worker yang merupakan salah satu kasus penggunaan utama untuk Pub/Sub. Untuk membuat ulang pull queue Task Queue sebagai langganan pull Pub/Sub, buat topik untuk setiap worker dan pastikan hanya worker terkait saja yang berlangganan ke topik tersebut. Hal ini memastikan bahwa setiap pesan diproses oleh tepat satu worker seperti dalam Task Queue. Untuk mempelajari cara membuat dan mengelola langganan pull, baca mengelola topik dan langganan.

Menghapus pull queue

Setelah memigrasikan pull queue Task Queue ke langganan pull Pub/Sub, hapus pull queue dari Task Queue menggunakan file queue.yaml Anda. Sebaiknya hapus setiap pull queue sebelum memigrasikan yang berikutnya. Hal ini akan mencegah aplikasi menduplikasi tugas yang diterimanya dari langganan pull Pub/Sub baru saat Anda memigrasikan pull queue lainnya. Perlu diperhatikan bahwa dampak terhadap kuota deployment App Engine Anda bisa lebih signifikan apabila menghapus pull queue Task Queue satu per satu, dibandingkan dengan menghapus satu deployment.

Setelah menghapus semua pull queue dari Task Queue, Anda dapat menghapus file queue.yaml dari deployment aplikasi Anda di masa mendatang.

Jika aplikasi Anda hanya menggunakan pull queue, hapus semua referensi ke Task Queue API dalam kode Anda. Jika aplikasi menggunakan pull queue dan push queue, Anda dapat menghapus referensi ke Task Queue API yang ada di dalam file yang hanya menggunakan pull queue, atau menunggu hingga Anda memigrasikan push queue, lalu menghapus referensi ke Task Queue API dari semua file.

Langkah berikutnya