Pemisahan Service v1.9.0+
NocoBase ClusterEnterprise Edition+
Pengantar
Biasanya, semua service aplikasi NocoBase berjalan di satu instance Node.js. Saat fitur dalam aplikasi semakin kompleks seiring dengan bisnis, beberapa service yang memakan waktu mungkin memengaruhi performa secara keseluruhan.
Untuk meningkatkan performa aplikasi, NocoBase mendukung pemisahan service aplikasi ke node yang berbeda dalam cluster mode untuk dijalankan, sehingga menghindari masalah performa pada satu service yang memengaruhi keseluruhan aplikasi dan menyebabkan tidak dapat merespons request user dengan benar.
Di sisi lain, ini juga memungkinkan horizontal scaling secara terarah pada service tertentu, sehingga meningkatkan utilisasi resource cluster.
NocoBase dapat memisahkan deployment service yang berbeda untuk berjalan di node yang berbeda saat deployment cluster. Diagram berikut menunjukkan struktur pemisahan:

Service Mana yang Dapat Dipisahkan
Async Workflow
Service KEY: workflow:process
Workflow mode async, setelah dipicu akan masuk ke queue untuk dieksekusi. Workflow seperti ini dapat dianggap sebagai background task, biasanya tidak memerlukan user untuk menunggu hasil. Terutama untuk flow yang kompleks dan memakan waktu, dengan trigger yang banyak, disarankan untuk memisahkannya ke node terpisah untuk dijalankan.
Async Task User-Level Lainnya
Service KEY: async-task:process
Termasuk task yang dibuat dari operasi user seperti async import, export, dll. Pada kasus data besar atau concurrency tinggi, disarankan untuk memisahkannya ke node terpisah untuk dijalankan.
Cara Memisahkan Service
Pemisahan service ke node yang berbeda diimplementasikan melalui konfigurasi environment variable WORKER_MODE. Environment variable ini dapat dikonfigurasi dengan aturan berikut:
WORKER_MODE=<kosong>: Tidak dikonfigurasi, atau dikonfigurasi kosong, mode kerja sama dengan single instance saat ini, menerima semua request dan memproses semua task. Kompatibel dengan aplikasi yang sebelumnya tidak dikonfigurasi.WORKER_MODE=!: Mode kerja hanya memproses request, tidak memproses task apa pun.WORKER_MODE=workflow:process,async-task:process: Dikonfigurasi sebagai satu atau lebih service identifier (dipisahkan koma), mode kerja hanya memproses task dengan identifier tersebut, tidak memproses request.WORKER_MODE=*: Mode kerja memproses semua background task tanpa membedakan modul, tetapi tidak memproses request.WORKER_MODE=!,workflow:process: Mode kerja memproses request, sekaligus hanya memproses task dengan identifier tertentu.WORKER_MODE=-: Mode kerja tidak memproses request maupun task apa pun (mode ini diperlukan dalam proses worker).
Misalnya di environment K8S, Anda dapat menggunakan konfigurasi environment variable yang sama untuk node dengan fungsi pemisahan yang sama, sehingga memudahkan horizontal scaling untuk jenis service tertentu.
Contoh Konfigurasi
Multi-Node Pemrosesan Terpisah
Asumsi ada tiga node, masing-masing node1, node2, dan node3, dapat dikonfigurasi sebagai berikut:
node1: Hanya memproses request UI user, konfigurasiWORKER_MODE=!.node2: Hanya memproses task workflow, konfigurasiWORKER_MODE=workflow:process.node3: Hanya memproses async task, konfigurasiWORKER_MODE=async-task:process.
Multi-Node Pemrosesan Campuran
Asumsi ada empat node, masing-masing node1, node2, node3, dan node4, dapat dikonfigurasi sebagai berikut:
node1dannode2: Memproses semua request reguler, konfigurasiWORKER_MODE=!, dan load balancer secara otomatis mendistribusikan request ke kedua node ini.node3dannode4: Memproses semua background task lainnya, konfigurasiWORKER_MODE=*.
Referensi Pengembangan
Saat mengembangkan plugin bisnis, Anda dapat memisahkan service yang menghabiskan resource lebih besar berdasarkan skenario kebutuhan. Anda dapat mengimplementasikannya dengan cara berikut:
- Definisikan service identifier baru, contohnya
my-plugin:process, untuk konfigurasi environment variable, dan sediakan dokumentasi penjelasan. - Dalam fitur bisnis di sisi server plugin, gunakan interface
serving()untuk memeriksa environment, untuk menentukan apakah node saat ini menyediakan suatu fitur bisnis berdasarkan environment variable.

