Penerapan dan Pemeliharaan / Deployment dengan Ketersediaan Tinggi
DataFlux Func mendukung beberapa deployment untuk memenuhi persyaratan ketersediaan tinggi.
Artikel ini terutama menjelaskan cara menginstal dan melakukan deployment DataFlux Func dengan ketersediaan tinggi secara langsung di server.
- Untuk informasi tentang menginstal DataFlux Func menggunakan Helm di k8s, lihat Penerapan dan Pemeliharaan / Instalasi dan Penerapan / Helm Deployment
- Untuk informasi tentang penskalaan sistem DataFlux Func, lihat Penerapan dan Pemeliharaan / Arsitektur, Penskalaan, dan Batasan Sumber Daya
- Untuk informasi tentang proses eksekusi fungsi secara spesifik, lihat Pengembangan Skrip / Proses Eksekusi Fungsi
Saat memilih solusi ketersediaan tinggi untuk Redis, jangan gunakan Redis versi Cluster; Anda dapat menggunakan Redis versi Master-Slave
Jika sebelumnya Anda telah menginstal DataFlux Func menggunakan mode satu mesin, saat beralih ke deployment dengan ketersediaan tinggi, lihat Penerapan dan Pemeliharaan / Backup dan Migrasi / Migrasi Database untuk melakukan migrasi
1. Deployment Multi-Replika
Layanan Server dan Worker DataFlux Func mendukung deployment multi-replika untuk memenuhi kebutuhan ketersediaan tinggi dan penskalaan.
Umumnya, bottleneck efisiensi eksekusi fungsi terletak pada layanan Worker (yaitu kode Python), sehingga layanan Server hanya perlu menghindari single point of failure, sedangkan layanan Worker perlu menambah jumlah replika berdasarkan volume bisnis aktual.
Saat deployment multi-replika, pastikan konten file user-config.yaml pada semua layanan benar-benar identik, dan semuanya terhubung ke MySQL dan Redis yang sama, serta direktori sumber daya dipasang pada penyimpanan yang sama.
Selain itu, layanan Beat sebagai pemicu Tugas Terjadwal hanya dapat dan harus dijalankan dengan 1 replika; jika tidak, dapat menghasilkan tugas berkala ganda.
flowchart TB
USER[Pengguna]
SERVER_1[Server 1]
SERVER_2[Server 2]
WORKER_1[Worker 1]
WORKER_2[Worker 2]
WORKER_3[Worker 3]
BEAT[Beat]
REDIS[Redis]
USER --Permintaan HTTP--> SLB
SLB --Penerusan HTTP--> SERVER_1
SLB --Penerusan HTTP--> SERVER_2
SERVER_1 --Enqueue tugas eksekusi fungsi--> REDIS
SERVER_2 --> REDIS
REDIS --Dequeue tugas eksekusi fungsi--> WORKER_1
REDIS --Dequeue tugas eksekusi fungsi--> WORKER_2
REDIS --Dequeue tugas eksekusi fungsi--> WORKER_3
BEAT --"Enqueue tugas eksekusi fungsi\n(terjadwal)"--> REDIS
2. Deployment Utama-Cadangan yang Sepenuhnya Independen
Untuk saat ini, abaikan dulu apakah metode deployment ini termasuk 'ketersediaan tinggi' atau bukan; anggap saja kebutuhan deployment ini memang ada.
Deployment utama-cadangan yang sepenuhnya independen sebenarnya adalah metode penerapan 2 set DataFlux Func yang masing-masing independen (dengan Secret, MySQL, dan Redis di file konfigurasi user-config.yaml yang benar-benar sama).
Karena DataFlux Func utama dan cadangan berjalan secara independen, layanan Beat di server utama dan cadangan akan memicu tugas berkala di lingkungan masing-masing, yang akan menyebabkan tugas berkala terpicu ganda.
Untuk menghindari masalah ini, Anda dapat mematikan DataFlux Func pada node cadangan dalam kondisi normal, atau menulis penanganan untuk mencegah eksekusi tugas ganda di dalam Skrip.
flowchart TB
USER[Pengguna]
MAIN_NODE_SERVER[Server Node Utama]
MAIN_NODE_WORKER[Worker Node Utama]
MAIN_NODE_BEAT[Beat Node Utama]
MAIN_NODE_REDIS_QUEUE[Antrean Redis Node Utama]
BACKUP_NODE_SERVER[Server Node Cadangan]
BACKUP_NODE_WORKER[Worker Node Cadangan]
BACKUP_NODE_BEAT[Beat Node Cadangan]
BACKUP_NODE_REDIS_QUEUE[Antrean Redis Node Cadangan]
USER --Permintaan HTTP--> SLB
SLB --Penerusan HTTP--> MAIN_NODE_SERVER
SLB -.-> BACKUP_NODE_SERVER
subgraph "Node Cadangan - Nonaktif"
direction TB
BACKUP_NODE_SERVER --Enqueue tugas eksekusi fungsi--> BACKUP_NODE_REDIS_QUEUE
BACKUP_NODE_REDIS_QUEUE --Dequeue tugas eksekusi fungsi--> BACKUP_NODE_WORKER
BACKUP_NODE_BEAT --"Enqueue tugas eksekusi fungsi\n(terjadwal)"--> BACKUP_NODE_REDIS_QUEUE
end
subgraph "Node Utama"
direction TB
MAIN_NODE_SERVER --Enqueue tugas eksekusi fungsi--> MAIN_NODE_REDIS_QUEUE
MAIN_NODE_REDIS_QUEUE --Dequeue tugas eksekusi fungsi--> MAIN_NODE_WORKER
MAIN_NODE_BEAT --"Enqueue tugas eksekusi fungsi\n(terjadwal)"--> MAIN_NODE_REDIS_QUEUE
end