Rumah pembangunan bahagian belakang Golang Gunakan go-zero untuk melaksanakan pengagihan dan penjadualan tugas teragih

Gunakan go-zero untuk melaksanakan pengagihan dan penjadualan tugas teragih

Jun 22, 2023 am 09:06 AM
Penjadualan go-zero Tugas yang diagihkan

Dengan perkembangan pesat perniagaan Internet dan volum perniagaan yang semakin meningkat secara beransur-ansur, jumlah data yang boleh dikendalikan oleh satu pelayan adalah jauh daripada memenuhi permintaan. Untuk memenuhi keperluan konkurensi tinggi, ketersediaan tinggi dan prestasi tinggi, seni bina teragih muncul mengikut keperluan masa.

Dalam seni bina teragih, pengagihan tugas dan penjadualan merupakan komponen yang sangat kritikal. Kualiti pengagihan tugas dan penjadualan secara langsung akan mempengaruhi prestasi dan kestabilan keseluruhan sistem. Di sini, kami akan memperkenalkan cara menggunakan rangka kerja go-zero untuk melaksanakan pengagihan dan penjadualan tugas teragih.

1. Pengagihan tugas teragih

Pengagihan tugas adalah untuk memperuntukkan tugasan untuk dilaksanakan kepada nod yang berbeza. Dalam persekitaran yang diedarkan, pengagihan tugas biasanya dilaksanakan melalui baris gilir mesej. Baris gilir mesej mempunyai ciri-ciri ketersediaan tinggi, tak segerak dan penyahgandingan, dan boleh menyelesaikan risiko dan ketidakpastian dalam proses pengagihan tugas dengan baik.

go-zero menyediakan sokongan untuk baris gilir mesej seperti rabbitmq dan kafka. Di sini kami mengambil rabbitmq sebagai contoh untuk memperkenalkan cara menggunakannya untuk mencapai pengagihan tugas teragih.

1.1 Pasang rabbitmq

Mula-mula kita perlu memasang rabbitmq Anda boleh merujuk kepada dokumentasi di laman web rasmi rabbitmq untuk pemasangan. Selepas pemasangan selesai, kita perlu mencipta vhost dan pengguna baharu dan menetapkan kebenaran.

# 创建 vhost
sudo rabbitmqctl add_vhost vhost-test

# 创建用户
sudo rabbitmqctl add_user user-test passwd-test

# 设置用户权限
sudo rabbitmqctl set_permissions -p vhost-test user-test ".*" ".*" ".*"
Salin selepas log masuk

1.2 Konfigurasikan rabbitmq

Seterusnya, kita perlu menambah konfigurasi berkaitan rabbitmq dalam fail konfigurasi:

[message]
    # 是否启用message
    enable = true
    # message类型,支持multi、nsq、kafka、rabbitmq
    type = "rabbitmq"
    # rabbitmq地址(IP:PORT)
    addr = "localhost:5672"
    # rabbitmq账号
    user = "user-test"
    # rabbitmq密码
    password = "passwd-test"
    # rabbitmq虚拟主机(默认值:/)
    virtualhost = "vhost-test"
    # 消息队列名称
    queue = "test-queue"
Salin selepas log masuk

1.3 Hantar tugas

dalam go-zero , kita boleh melaksanakan pengagihan tugas teragih melalui baris gilir mesej. Kami boleh menghantar mesej melalui baris gilir mesej, dan pengguna mesej akan mendapatkan semula mesej daripada baris gilir mesej dan melaksanakan tugas yang sepadan.

Di sini kami mengambil penghantaran e-mel sebagai contoh untuk memperkenalkan cara menghantar tugas:

func sendMail(ctx context.Context, req *types.SendMailRequest) error {
    // 将任务转为消息发送到消息队列中
    return message.SendMessage(ctx, "test-queue", &types.SendMailRequest{
        Email: req.Email,
        Title: req.Title,
        Content: req.Content,
    })
}
Salin selepas log masuk

Dalam kaedah ini, kami menukar tugas e-mel menjadi mesej dan menghantar mesej ke baris gilir mesej melalui fungsi SendMessage.

2. Penjadualan tugas teragih

Penjadualan tugas teragih adalah untuk menetapkan tugasan kepada nod yang berbeza dan menjadualkannya. Dalam persekitaran yang diedarkan, penjadualan tugas biasanya dilakukan melalui sistem tugas berjadual seperti cron.

Rangka kerja go-zero menyediakan pakej cronexr, yang boleh memudahkan penjadualan tugas. Kita boleh menghuraikan ungkapan cron melalui pakej cronexpr dan kemudian melaksanakan tugas yang sepadan.

2.1 Tambah tugas

Kami boleh menambah tugasan pada sistem tugasan yang dijadualkan melalui fungsi seperti AddFunc dan AddJob, contohnya:

func startSchedule() {
    // 解析cron表达式,每天凌晨1点执行
    expr, err := cronexpr.Parse("0 0 1 * * *")
    if err != nil {
        log.Fatalf("failed to parse cron expression: %s", err.Error())
    }

    // 添加任务
    cron.Schedule(expr, cron.FuncJob(func() {
        // do something
    }))
}
Salin selepas log masuk

Dalam contoh ini, kami menghuraikan awal pagi setiap hari Ungkapan cron dilaksanakan pada pukul 1, dan kemudian FuncJob telah ditambahkan pada sistem tugas yang dijadualkan.

2.2 Melaksanakan tugas

Sistem tugas berjadual akan memanggil fungsi yang sepadan dengan tugas untuk melaksanakan tugas. Kami boleh mengendalikan tugas dengan menulis fungsi pemprosesan yang sepadan, contohnya:

func handleMailTask() {
    // 监听消息队列
    message.ReceiveMessage(context.Background(),"test-queue", func(ctx context.Context, data []byte) error {
        var req types.SendMailRequest
        // 解析消息
        if err := json.Unmarshal(data, &req); err != nil {
            return err
        }

        // 发送邮件
        if err := sendMail(context.Background(), &req); err != nil {
            log.Printf("failed to send mail of %s: %s", req.Email, err.Error())
        }

        return nil
    })
}
Salin selepas log masuk

Dalam fungsi pemprosesan ini, kami mendengar baris gilir mesej mesej, mendapatkan mesej dan menghuraikan tugas. Kemudian panggil fungsi sendMail untuk menghantar e-mel.

3. Ringkasan

Artikel ini memperkenalkan cara menggunakan rangka kerja go-zero untuk mencapai pengagihan tugasan dan penjadualan. Melalui baris gilir mesej dan sistem tugas berjadual, kami boleh merealisasikan pengagihan dan penjadualan tugas dengan mudah, serta meningkatkan prestasi dan ketersediaan sistem.

Atas ialah kandungan terperinci Gunakan go-zero untuk melaksanakan pengagihan dan penjadualan tugas teragih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Gunakan go-zero untuk melaksanakan reka bentuk sistem penyewa berbilang dimensi Gunakan go-zero untuk melaksanakan reka bentuk sistem penyewa berbilang dimensi Jun 23, 2023 am 10:49 AM

Dengan perkembangan Internet, semakin banyak perusahaan mula berubah ke arah penyewaan berbilang untuk meningkatkan daya saing mereka. Sistem berbilang penyewa membenarkan berbilang penyewa berkongsi set aplikasi dan infrastruktur yang sama, masing-masing dengan perlindungan data dan privasi mereka sendiri. Untuk melaksanakan sistem berbilang penyewa, reka bentuk berbilang dimensi perlu dipertimbangkan, melibatkan isu seperti pengasingan data dan keselamatan. Artikel ini akan memperkenalkan cara menggunakan rangka kerja go-zero untuk melaksanakan reka bentuk sistem penyewa berbilang dimensi. go-zero ialah rangka kerja perkhidmatan mikro berdasarkan gRPC, yang berprestasi tinggi, cekap dan mudah dikembangkan.

Gunakan go-zero+Vue.js untuk melaksanakan reka bentuk perkhidmatan API dipisahkan bahagian hadapan dan belakang Gunakan go-zero+Vue.js untuk melaksanakan reka bentuk perkhidmatan API dipisahkan bahagian hadapan dan belakang Jun 23, 2023 am 08:46 AM

Dalam era Internet yang pesat membangun hari ini, reka bentuk perkhidmatan API yang dipisahkan bahagian hadapan dan belakang telah menjadi idea reka bentuk yang sangat popular. Menggunakan idea reka bentuk ini, kami boleh membangunkan kod hadapan dan kod belakang secara berasingan, dengan itu mencapai pembangunan yang lebih cekap dan kebolehselenggaraan sistem yang lebih baik. Artikel ini akan memperkenalkan cara melaksanakan reka bentuk perkhidmatan API dipisahkan bahagian hadapan dan belakang dengan menggunakan go-zero dan Vue.js. 1. Kelebihan reka bentuk perkhidmatan API dipisahkan bahagian hadapan dan bahagian belakang Kelebihan reka bentuk perkhidmatan API yang dipisahkan bahagian hadapan dan bahagian hadapan terutamanya merangkumi aspek berikut: Pembangunan

Bagaimana untuk melumpuhkan ciri Click to Desktop Show dalam macOS Bagaimana untuk melumpuhkan ciri Click to Desktop Show dalam macOS Nov 23, 2023 pm 02:31 PM

Secara lalai, macOSSonoma menyembunyikan semua tetingkap aktif apabila anda mengklik pada kertas dinding desktop anda. Ini mudah jika anda cenderung mempunyai banyak fail pada desktop anda yang anda perlukan untuk mengakses. Walau bagaimanapun, jika anda mendapati tingkah laku ini menjengkelkan, ada cara untuk mematikannya. Sistem pengendalian MacOS Sonoma Mac terbaru Apple mempunyai pilihan baharu yang dipanggil "Klik kertas dinding untuk menunjukkan desktop." Didayakan secara lalai, pilihan ini amat berguna jika anda cenderung membuka berbilang tetingkap dan ingin mengakses fail atau folder pada desktop anda tanpa perlu meminimumkan atau mengalihkan tetingkap. Apabila ciri didayakan dan anda mengklik pada kertas dinding desktop, semua tetingkap yang terbuka diketepikan buat sementara waktu, membenarkan akses terus ke desktop. Setelah selesai, anda boleh lagi

Amalan aplikasi go-zero dan RabbitMQ Amalan aplikasi go-zero dan RabbitMQ Jun 23, 2023 pm 12:54 PM

Kini semakin banyak perusahaan mula menggunakan model seni bina perkhidmatan mikro, dan dalam seni bina ini, baris gilir mesej telah menjadi kaedah komunikasi yang penting, antaranya RabbitMQ digunakan secara meluas. Dalam bahasa Go, go-zero ialah rangka kerja yang telah muncul dalam beberapa tahun kebelakangan ini. Ia menyediakan banyak alat dan kaedah praktikal untuk membolehkan pembangun menggunakan baris gilir mesej dengan lebih mudah Di bawah ini kami akan memperkenalkan go-zero berdasarkan aplikasi praktikal dan amalan aplikasi RabbitMQ. 1.RabbitMQ Gambaran KeseluruhanArnab

Amalan go-zero dan Kubernetes: membina seni bina perkhidmatan mikro dalam kontena dengan ketersediaan tinggi, prestasi tinggi dan berskala tinggi Amalan go-zero dan Kubernetes: membina seni bina perkhidmatan mikro dalam kontena dengan ketersediaan tinggi, prestasi tinggi dan berskala tinggi Jun 22, 2023 am 09:26 AM

Memandangkan skala Internet terus berkembang dan keperluan pengguna terus meningkat, kelebihan seni bina perkhidmatan mikro semakin mendapat perhatian. Selepas itu, seni bina perkhidmatan mikro kontena telah menjadi sangat penting, yang dapat memenuhi keperluan ketersediaan tinggi, prestasi tinggi, berskala tinggi dan aspek lain dengan lebih baik. Di bawah aliran ini, go-zero dan Kubernetes telah menjadi rangka kerja mikro perkhidmatan bekas paling popular. Artikel ini akan memperkenalkan cara menggunakan rangka kerja go-zero dan alatan orkestrasi kontena Kubernetes untuk membina ketersediaan tinggi, berprestasi tinggi

Gunakan go-zero untuk melaksanakan pengagihan dan penjadualan tugas teragih Gunakan go-zero untuk melaksanakan pengagihan dan penjadualan tugas teragih Jun 22, 2023 am 09:06 AM

Dengan perkembangan pesat perniagaan Internet dan volum perniagaan yang semakin meningkat secara beransur-ansur, jumlah data yang boleh diproses oleh satu pelayan adalah jauh daripada memenuhi permintaan. Untuk memenuhi keperluan konkurensi tinggi, ketersediaan tinggi dan prestasi tinggi, seni bina teragih muncul mengikut keperluan masa. Dalam seni bina teragih, pengagihan tugas dan penjadualan adalah komponen yang sangat kritikal. Kualiti pengagihan tugas dan penjadualan secara langsung akan mempengaruhi prestasi dan kestabilan keseluruhan sistem. Di sini, kami akan memperkenalkan cara menggunakan rangka kerja go-zero untuk melaksanakan pengagihan dan penjadualan tugas teragih. 1. Agihan tugas agihan Agihan tugas

Dari kemasukan kepada kemahiran: Menguasai rangka kerja go-zero Dari kemasukan kepada kemahiran: Menguasai rangka kerja go-zero Jun 23, 2023 am 11:37 AM

Go-zero ialah rangka kerja bahasa Go yang sangat baik yang menyediakan set lengkap penyelesaian, termasuk RPC, caching, tugas berjadual dan fungsi lain. Sebenarnya, sangat mudah untuk membina perkhidmatan berprestasi tinggi menggunakan go-zero, malah anda boleh pergi dari pemula kepada mahir dalam beberapa jam. Artikel ini bertujuan untuk memperkenalkan proses membina perkhidmatan berprestasi tinggi menggunakan rangka kerja go-zero dan membantu pembaca memahami dengan cepat konsep teras rangka kerja tersebut. 1. Pemasangan dan konfigurasi Sebelum mula menggunakan go-zero, kita perlu memasangnya dan mengkonfigurasi beberapa persekitaran yang diperlukan. 1

Penyelesaian komunikasi mesej perkhidmatan mikro berdasarkan go-zero Penyelesaian komunikasi mesej perkhidmatan mikro berdasarkan go-zero Jun 22, 2023 pm 05:19 PM

Dengan populariti seni bina perkhidmatan mikro, komunikasi antara perkhidmatan mikro menjadi lebih penting. Kaedah komunikasi RESTAPI yang biasa digunakan pada masa lalu mempunyai kekurangan berikut apabila perkhidmatan mikro memanggil satu sama lain: permintaan rangkaian yang kerap akan menyebabkan kelewatan dan kesesakan prestasi untuk permintaan frekuensi tinggi, sejumlah besar permintaan dalam tempoh masa yang singkat boleh menyebabkan kegagalan perkhidmatan; . Ranap; Untuk senario dengan jumlah penghantaran data yang besar, kaedah penghantaran berdasarkan protokol HTTP juga terdedah kepada ketidakcekapan. Oleh itu, berdasarkan baris gilir mesej (MessageQueue), perkhidmatan mikro

See all articles