Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ular Tahan Lama: Membina Aliran Kerja Tahan Lama Kalis Peluru, Dipermudahkan

Ular Tahan Lama: Membina Aliran Kerja Tahan Lama Kalis Peluru, Dipermudahkan

WBOY
WBOYasal
2024-09-06 06:01:311033semak imbas

Durable Python: Building Bullet-Proof Long-Running Workflows, Made Simple

Dalam pembangunan perisian moden, mencipta aliran kerja teguh yang menyambungkan API daripada pelbagai perkhidmatan dan mengendalikan kedua-dua peristiwa segerak dan tak segerak adalah cabaran biasa. Pendekatan konvensional melibatkan penggunaan gabungan baris gilir, perkhidmatan mikro dan sistem pengurusan negeri untuk membina aplikasi berskala. Walaupun berkesan, seni bina ini disertakan dengan overhed yang ketara: menyediakan dan menyelenggara infrastruktur seperti baris gilir mesej, menjalankan pelayan atau fungsi lambda, mengurus keadaan dalam pangkalan data dan melaksanakan mekanisme pengendalian ralat yang kompleks.

Bagaimana jika terdapat cara yang lebih mudah, lebih dipercayai untuk mengendalikan aliran kerja yang berjalan lama tanpa perlu bersusah payah mengurus semua infrastruktur ini? Itulah matlamat Durable Python, untuk mencubanya, daftar ke Beta.

Masalah dengan Penyelesaian Naif untuk Proses Jangka Panjang

Bayangkan anda ingin memantau permintaan tarik (PR) dalam GitHub. Setiap kali PR baharu dibuka, anda ingin membuat saluran Slack khusus untuk perbincangan dan menghantar peringatan harian sehingga PR ditutup atau digabungkan. Ini kedengaran mudah, jadi anda mungkin fikir anda boleh menyelesaikannya dengan fungsi Python asas (ini ialah fungsi Python asas yang dihasilkan oleh ChatGPT):

@app.route('/webhook', methods=['POST'])
def github_webhook():
    data = request.json
    if 'pull_request' in data and data['action'] == 'opened':
        pr_number = data['pull_request']['number']
        pr_url = data['pull_request']['html_url']
        # Create a new Slack channel for the PR
        channel_id = create_slack_channel(pr_number)
        send_slack_notification(channel_id, pr_number, pr_url)
        # Periodically check the PR status and send reminders until it's closed or merged
        while True:
            time.sleep(3600)  # Wait for 1 hour before checking the status again
            pr_status = check_pr_status(pr_number)
            if pr_status == 'open':
                send_slack_notification(channel_id, pr_number, pr_url)
            else:
                break
    return jsonify({'status': 'ok'})

Coretan kod ini nampaknya mengendalikan tugas, tetapi ia hanya sesuai untuk senario "aliran gembira". Dalam aplikasi dunia sebenar, pendekatan naif ini kurang. Gelung sementara bergantung pada masa operasi pelayan berterusan, yang tidak dijamin. Proses boleh ranap, pelayan boleh dimulakan semula dan tiba-tiba, aliran kerja anda rosak.

Penyelesaian Dunia Nyata: Aplikasi Didorong Peristiwa

Pendekatan yang lebih dipercayai melibatkan membina aplikasi berasaskan peristiwa. Di sini, anda akan menggunakan baris gilir untuk mendengar acara GitHub, tugas cron untuk menghantar peringatan, pangkalan data untuk menyimpan keadaan PR dan saluran, dan fungsi untuk mengendalikan acara ini. Biasanya, persediaan ini berjalan pada infrastruktur awan, memanfaatkan perkhidmatan seperti AWS Lambda untuk penempatan dan pelaksanaan.

Walaupun kaedah ini boleh dilaksanakan dan teguh, kaedah ini juga memerlukan persediaan, penyelenggaraan dan kepakaran yang banyak. Menguruskan infrastruktur, memastikan masa beroperasi dan menangani keadaan ralat memerlukan sumber yang besar dan pasukan yang mahir.

Masukkan Python Tahan Lama: Kesederhanaan Memenuhi Kebolehpercayaan

Bagaimana jika anda boleh menggabungkan kesederhanaan kod Python naif dengan kebolehpercayaan reka bentuk tak segerak? Bagaimana jika Python boleh menjamin bahawa walaupun proses ranap atau pelayan dimulakan semula, proses itu akan diteruskan di tempat ia berhenti?

AutoKitteh menangani cabaran ini dengan tepat dengan Durable Python. Menggunakan Python Tahan Lama, pengguna menulis kod Python sementara sistem memastikan bahawa jika proses dimulakan semula, ia terus berjalan dari titik yang sama. Walaupun terdapat had (cth., masa henti yang lama mungkin tidak sesuai), untuk kebanyakan kes penggunaan, penyelesaian ini berfungsi dengan sempurna.

Apa yang Ditawarkan Tahan Lama-Python

Durable-Python menjimatkan anda daripada mengurus keadaan secara manual, membolehkan anda menulis aliran kerja anda sebagai aliran berterusan dan bukannya mesin keadaan dipacu peristiwa, yang boleh mencabar untuk dibina dan nyahpepijat. AutoKitteh, sebagai infrastruktur, mempunyai baris gilir terbina dalam dan penyepaduan dengan aplikasi luaran dan API, menjadikannya mudah untuk membangunkan aliran kerja yang mantap dalam Python dengan cepat.

Bagaimana Ia Berfungsi

Tiada sihir yang terlibat—hanya kejuruteraan yang kukuh. AutoKitteh dikuasakan oleh Temporal, rangka kerja untuk membina aliran kerja yang tahan lama. Temporal memerlukan cara pengekodan khusus, termasuk pemahaman tentang determinisme, idempotensi dan konsep lain untuk memastikan kebolehpercayaan. AutoKitteh mengabstrak kerumitan ini, membenarkan pembangun menulis kod Python standard. Di bawah tudung, sebarang fungsi dengan kesan sampingan ditukar menjadi aktiviti Temporal. Sebagai pembangun, anda tidak perlu risau tentang butiran ini—hanya fokus pada menulis logik perniagaan.

Untuk butiran lanjut teknikal, rujuk dokumentasi AutoKitteh.

Adakah Ada Kos?

Sudah tentu, setiap abstraksi ada harganya. Di bawah hud, Durable Python merekodkan aliran aliran kerja untuk membolehkan pemulihan selepas kegagalan, yang memerlukan beberapa kos penyimpanan dan prestasi.

Durable Python direka untuk penyusunan API dan bukannya membina aplikasi data. Jika anda memerlukan aplikasi berprestasi tinggi, anda harus mempertimbangkan untuk membina penyelesaian tersuai. Walau bagaimanapun, jika anda ingin membangunkan aliran kerja yang boleh dipercayai dengan cepat dengan pembangunan dan pelaburan infrastruktur yang minimum, Durable Python mungkin merupakan pilihan yang baik.

Aplikasi Dunia Sebenar

Durable Python boleh digunakan pada pelbagai aliran kerja, terutamanya dalam domain yang kebolehpercayaan adalah penting, seperti:

  • Orkestrasi API - bina aliran kerja dalaman yang boleh dipercayai.
  • Automasi DevOps: Automatikkan saluran paip penggunaan atau automasi semakan kod dengan jaminan pemulihan daripada kegagalan.
  • ChatOps: Sepadukan dengan platform sembang untuk mengautomasikan pemberitahuan pasukan dan mengurus aliran kerja.
  • MLOps: Pastikan aliran kerja pembelajaran mesin yang berjalan lama diteruskan dengan lancar walaupun terdapat gangguan.

Contoh worflows boleh didapati di sini.

Kesimpulan: Kurang Kod, Kurang Kerumitan

Konsep Python tahan lama, dilaksanakan dikuasakan oleh AutoKitteh, memperkasakan pembangun untuk membina, menggunakan dan mengurus automasi aliran kerja yang boleh dipercayai dengan kod minimum. Pelaksanaan yang tahan lama dan pemulihan yang lancar dikendalikan di belakang tabir, jadi anda boleh fokus pada perkara yang benar-benar penting—logik perniagaan anda.

Walaupun terdapat banyak alat yang sangat baik untuk mencapai ketahanan (seperti Temporal dan Restate), Durable-Python menyediakan cara yang cepat, mudah dan kos efektif untuk mencapai hasil yang sama.

Atas ialah kandungan terperinci Ular Tahan Lama: Membina Aliran Kerja Tahan Lama Kalis Peluru, Dipermudahkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn