


Bina sistem penjadualan tugas berjadual peringkat perusahaan yang sangat tersedia berdasarkan Swoole
Dengan pembangunan berterusan industri Internet dan kemajuan teknologi yang berterusan, sistem penjadualan tugas berjadual menjadi semakin penting dalam pelbagai senario aplikasi peringkat perusahaan berskala besar. Perusahaan memerlukan sistem penjadualan tugas berjadual yang sangat tersedia dan mudah berskala untuk mengendalikan proses perniagaan harian secara kerap, seperti sandaran data, penghantaran e-mel, statistik biasa, dsb., untuk memastikan kestabilan dan kebolehpercayaan sistem. Artikel ini akan memperkenalkan cara membina sistem penjadualan tugas berjadual peringkat perusahaan yang sangat tersedia berdasarkan rangka kerja Swoole.
Swoole ialah enjin komunikasi rangkaian coroutine berdasarkan bahasa PHP, yang boleh menjadikan program PHP mempunyai ciri konkurensi tinggi dan prestasi tinggi yang sama seperti Node.js. Swoole menyediakan komunikasi rangkaian yang kaya dan fungsi IO tak segerak, yang boleh memberikan sokongan yang kuat untuk aplikasi peringkat perusahaan. Di bawah ini kami akan memperkenalkan secara terperinci cara menggunakan Swoole untuk membina sistem penjadualan tugas berjadual peringkat perusahaan yang sangat tersedia.
1. Idea Reka Bentuk
Apabila mereka bentuk sistem penjadualan tugasan berjadual, kita perlu mempertimbangkan aspek berikut:
1. Pengurusan tugasan: Bertanggungjawab mengurus dan menjadualkan semua tugas Tugas termasuk penciptaan tugas, pengubahsuaian tugas, pemadaman tugas, pengurusan status menjalankan tugas, dsb.
2. Pelaksanaan tugas: Bertanggungjawab untuk pelaksanaan tugas tertentu, termasuk memanggil kod logik perniagaan tertentu, merekodkan log pelaksanaan tugas, mengendalikan pengecualian tugas, dsb.
3. Penjadualan Tugas: Bertanggungjawab untuk memperuntukkan tugas kepada pelaksana yang sepadan mengikut selang masa dan peraturan yang telah ditetapkan.
4. Pemantauan tugas: Bertanggungjawab untuk memantau status berjalan semua tugas, menemui dan mengendalikan masalah yang tidak normal tepat pada masanya, dan memastikan kestabilan dan kebolehpercayaan sistem.
Berdasarkan idea di atas, kita boleh membahagikan keseluruhan sistem kepada lapisan berikut:
Lapisan penjadualan tugas: Bertanggungjawab untuk penjadualan dan pengagihan tugas, dan memberikan tugas kepada pelaksana yang sepadan.
Lapisan baris gilir mesej: digunakan untuk menyimpan maklumat tugas dan hasil pelaksanaan untuk meningkatkan keupayaan dan kestabilan pemprosesan sistem.
Lapisan pelaksanaan: Pelaksana tugas khusus, bertanggungjawab untuk melaksanakan tugas tertentu dan menulis keputusan ke baris gilir mesej.
Lapisan pemantauan: Pantau status berjalan keseluruhan sistem dan mengesan serta mengendalikan keabnormalan tepat pada masanya.
2. Seni Bina Teknikal
1. Penjadualan Tugasan
Penjadualan tugas ialah bahagian teras keseluruhan sistem, dan tugasan perlu dijadualkan dan diperuntukkan mengikut peraturan yang telah ditetapkan dan selang masa. Kita boleh menggunakan pemasa dan coroutine Swoole untuk melaksanakan fungsi penjadualan tugas. Mula-mula, kita perlu memulakan proses Swoole untuk melaksanakan logik penjadualan tugas berjadual:
$scheduler = new Scheduler();
$scheduler->add(function () use ($taskManager) {
$taskManager->assignTask();
}, '', SWOOLE_TIMER_INTERVAL * 1000);
Antaranya, $taskManager ialah objek pengurusan tugasan dalam fungsi assignTask()nya, kita boleh mulakan daripada Pilih tugasan yang sesuai daripada senarai tugasan dan berikannya kepada pelaksana yang sepadan:
fungsi awam assignTask()
{
$now = time(); foreach ($this->tasks as $task) { if ($task->nextExecTime == 0) { $task->nextExecTime = strtotime($task->cron); } if ($task->nextExecTime <= $now) { $task->nextExecTime = strtotime($task->cron, $now); $this->executeTask($task); } }
}
dalam fungsi executeTask( ), kita boleh meletakkan tugasan maklumat ke dalam baris gilir mesej dan tunggu pelaksana memproses:
fungsi awam executeTask($task)
{
// 将任务信息放入消息队列中 $this->queue->push($task);
}
2 >
Pelaksanaan tugas ialah satu lagi bahagian teras keseluruhan sistem Ia perlu memanggil kod logik perniagaan yang sepadan berdasarkan maklumat tugas dan menulis hasil pelaksanaan ke dalam baris gilir mesej. Memandangkan pengecualian mungkin berlaku semasa pelaksanaan tugas, pengendalian pengecualian perlu dilakukan semasa proses pelaksanaan dan log pelaksanaan mesti direkodkan. Kita boleh menggunakan coroutine Swoole dan fungsi IO tak segerak untuk mencapai fungsi pelaksanaan tugas berprestasi tinggi. Pertama, kita perlu memulakan beberapa sub-proses Swoole sebagai pelaksana tugas: untuk ($i = 0; $i < SWOOLE_PROCESS_NUM; $i++) {$worker = new Worker(); $worker->onWorkerStart = function ($worker) use ($queue) { while (true) { // 从消息队列中获取任务信息 $task = $queue->pop(); if (!$task) continue; // 执行任务 $result = $this->execute($task); // 将执行结果写入消息队列中 $this->queue->push($result); } }; $worker->listen();
{
// 调用业务逻辑代码 try { $result = $this->doTask($task); return $result; } catch (Exception $e) { // 异常处理 $errMsg = sprintf("Task failed: %s, error message: %s", $task->name, $e->getMessage()); $this->log($errMsg); return false; }
$server = new Server('0.0.0.0', 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP);
$server->on('receive', function ($server, $fd, $from_id, $data) use ($queue) {
// 将消息放入消息队列中 $queue->push($data);
$server- > start();
$this->queue->push($task);
$monitor->start();
{
// 注册信号处理函数 pcntl_signal(SIGUSR1, array($this, 'handleSignal')); while (true) { $cpuUsage = $this->getCpuUsage(); $memUsage = $this->getMemUsage(); $this->log(sprintf('CPU usage: %.2f%%, Memory usage: %.2fMB', $cpuUsage, $memUsage)); sleep(MONITOR_INTERVAL); }
其中,getCpuUsage()函数用于获取当前进程的CPU使用率,getMemUsage()函数用于获取当前进程的内存使用情况,handleSignal()函数用于处理信号并进行相应的处理。
三、系统部署
在系统部署方面,我们可以使用Docker容器化的方式,来实现系统的快速部署和迁移。首先,我们需要构建一组Docker镜像:
docker build -t task-scheduler:latest .
docker build -t task-executor:latest .
docker build -t task-queue:latest .
docker build -t task-monitor:latest .
其中,task-scheduler镜像用于运行任务调度进程,task-executor镜像用于运行任务执行进程,task-queue镜像用于运行消息队列进程,task-monitor镜像用于运行监控进程。
接着,我们可以使用docker-compose来启动和管理整个系统:
version: '3'
services:
scheduler:
image: task-scheduler:latest restart: always
executor:
image: task-executor:latest restart: always scale: 5
queue:
image: task-queue:latest restart: always
monitor:
image: task-monitor:latest restart: always
其中,scheduler服务用于启动任务调度进程,executor服务用于启动任务执行进程,queue服务用于启动消息队列进程,monitor服务用于启动监控进程。可以根据实际情况,调整服务的数量和启动参数。
四、总结
本文介绍了如何基于Swoole框架构建一套高可用的企业级定时任务调度系统,其中涵盖了任务调度、任务执行、消息队列和监控等方面。Swoole的高性能和异步IO特性,为企业级应用提供了强大的支持,能够满足各种大规模应用的需求。通过本文的介绍,相信读者可以更好地了解Swoole框架的应用和实践。
Atas ialah kandungan terperinci Bina sistem penjadualan tugas berjadual peringkat perusahaan yang sangat tersedia berdasarkan Swoole. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Menggunakan coroutine Swoole dalam Laravel boleh memproses sejumlah besar permintaan secara serentak. Kelebihannya termasuk: Pemprosesan serentak: membolehkan berbilang permintaan diproses pada masa yang sama. Prestasi tinggi: Berdasarkan mekanisme acara epoll Linux, ia memproses permintaan dengan cekap. Penggunaan sumber yang rendah: memerlukan lebih sedikit sumber pelayan. Mudah untuk disepadukan: Penyepaduan lancar dengan rangka kerja Laravel, mudah digunakan.

Cara menggunakan Swoole untuk melaksanakan pelayan proksi terbalik HTTP berprestasi tinggi Swoole ialah rangka kerja komunikasi rangkaian berprestasi tinggi, tak segerak dan serentak berdasarkan bahasa PHP. Ia menyediakan satu siri fungsi rangkaian dan boleh digunakan untuk melaksanakan pelayan HTTP, pelayan WebSocket, dsb. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Swoole untuk melaksanakan pelayan proksi terbalik HTTP berprestasi tinggi dan memberikan contoh kod khusus. Konfigurasi persekitaran Pertama, kita perlu memasang sambungan Swoole pada pelayan

Swoole dan Workerman kedua-duanya adalah rangka kerja pelayan PHP berprestasi tinggi. Terkenal dengan pemprosesan tak segerak, prestasi cemerlang dan kebolehskalaannya, Swoole sesuai untuk projek yang perlu mengendalikan sejumlah besar permintaan serentak dan daya pemprosesan yang tinggi. Workerman menawarkan fleksibiliti mod tak segerak dan segerak, dengan API intuitif yang lebih sesuai untuk kemudahan penggunaan dan projek yang mengendalikan volum serentak yang lebih rendah.

Proses Swoole membolehkan pengguna beralih Langkah-langkah khusus ialah: membuat proses pengguna;

Untuk memulakan semula perkhidmatan Swoole, ikut langkah berikut: Semak status perkhidmatan dan dapatkan PID. Gunakan "bunuh -15 PID" untuk menghentikan perkhidmatan. Mulakan semula perkhidmatan menggunakan arahan yang sama yang memulakan perkhidmatan.

Perbandingan prestasi: Throughput: Swoole mempunyai throughput yang lebih tinggi berkat mekanisme coroutinenya. Latensi: Penukaran konteks coroutine Swoole mempunyai overhed yang lebih rendah dan kependaman yang lebih kecil. Penggunaan ingatan: Coroutine Swoole menduduki kurang memori. Kemudahan penggunaan: Swoole menyediakan API pengaturcaraan serentak yang lebih mudah digunakan.

Swoole in action: Cara menggunakan coroutine untuk pemprosesan tugas serentak Pengenalan Dalam pembangunan harian, kita sering menghadapi situasi di mana kita perlu mengendalikan berbilang tugas pada masa yang sama. Kaedah pemprosesan tradisional adalah menggunakan pelbagai benang atau pelbagai proses untuk mencapai pemprosesan serentak, tetapi kaedah ini mempunyai masalah tertentu dalam prestasi dan penggunaan sumber. Sebagai bahasa skrip, PHP biasanya tidak boleh terus menggunakan kaedah berbilang benang atau berbilang proses untuk mengendalikan tugas. Walau bagaimanapun, dengan bantuan perpustakaan coroutine Swoole, kami boleh menggunakan coroutine untuk mencapai pemprosesan tugas serentak berprestasi tinggi. Artikel ini akan memperkenalkan

Swoole coroutine ialah perpustakaan konkurensi ringan yang membolehkan pembangun menulis program serentak. Mekanisme penjadualan coroutine Swoole adalah berdasarkan corak coroutine dan gelung peristiwa, menggunakan tindanan coroutine untuk mengurus pelaksanaan coroutine dan menggantung coroutine selepas mereka melepaskan kawalan. Gelung peristiwa mengendalikan peristiwa IO dan pemasa Apabila coroutine melepaskan kawalan, ia digantung dan kembali ke gelung peristiwa. Apabila peristiwa berlaku, Swoole bertukar daripada gelung peristiwa kepada coroutine yang belum selesai, melengkapkan suis dengan menyimpan dan memuatkan keadaan coroutine. Penjadualan coroutine menggunakan mekanisme keutamaan dan menyokong penggantungan, tidur dan operasi semula untuk mengawal pelaksanaan coroutine secara fleksibel.
