Rumah >pembangunan bahagian belakang >Golang >Satu artikel untuk memahami penghantaran tamat masa bagi perkhidmatan mikro

Satu artikel untuk memahami penghantaran tamat masa bagi perkhidmatan mikro

藏色散人
藏色散人ke hadapan
2021-10-18 16:06:592445semak imbas

Mengapakah ia memerlukan kawalan tamat masa?

Masalah biasa dalam banyak senario kegagalan bertingkat ialah pelayan menggunakan banyak sumber untuk memproses permintaan yang telah melebihi tarikh akhir pelanggan Akibatnya, pelayan menggunakan banyak sumber tanpa melakukan apa-apa yang berharga kerja. , tidak bermakna membalas permintaan yang telah tamat masa.

Kawalan tamat masa boleh dikatakan sebagai barisan pertahanan yang penting untuk memastikan kestabilan perkhidmatan Intipatinya ialah gagal dengan cepat Strategi kawalan tamat masa yang baik boleh mengosongkan permintaan kependaman tinggi secepat mungkin dan mengeluarkan sumber dengan segera mungkin untuk mengelakkan permintaan terkumpul.

Penghantaran tamat masa antara perkhidmatan

Jika permintaan mempunyai beberapa peringkat, seperti terdiri daripada siri panggilan RPC, maka perkhidmatan kami harus menyemak sebelum permulaan setiap peringkat Tarikh akhir adalah untuk mengelakkan kerja yang sia-sia, iaitu, untuk memeriksa sama ada terdapat masa yang cukup untuk memproses permintaan.

Ralat pelaksanaan yang biasa adalah untuk menetapkan tamat masa tetap dalam setiap perkhidmatan RPC Pokok RPC yang dicetuskan akan mempunyai tarikh akhir mutlak yang sama ditetapkan. Sebagai contoh, tetapkan tamat masa kepada 3s pada tahap atas permintaan perkhidmatan A meminta perkhidmatan B. Perkhidmatan B mengambil masa 1s untuk melaksanakan Perkhidmatan B kemudian meminta perkhidmatan C. Pada masa ini, tempoh tamat masa kekal 2s 1s untuk melaksanakan Ini ialah Apabila perkhidmatan C kemudian meminta perkhidmatan D, perkhidmatan D mengambil masa 500ms untuk dilaksanakan, dan seterusnya, mekanisme penghantaran tamat masa yang sama digunakan dalam keseluruhan rantaian panggilan.

Satu artikel untuk memahami penghantaran tamat masa bagi perkhidmatan mikro

Jika mekanisme penghantaran tamat masa tidak digunakan, situasi berikut akan berlaku:

    Perkhidmatan A menghantar permintaan kepada Perkhidmatan B dengan set tamat masa Masa ialah 3s
  1. Perkhidmatan B mengambil masa 2s untuk memproses permintaan, dan terus meminta perkhidmatan C
  2. Jika penghantaran tamat masa digunakan, tempoh tamat masa perkhidmatan C hendaklah 1s, tetapi tidak penghantaran tamat masa digunakan di sini Jadi tamat masa adalah 3s diprogramkan dalam konfigurasi
  3. Perkhidmatan C terus dilaksanakan selama 2s Malah, tamat masa yang ditetapkan oleh lapisan atas telah tamat tempoh pada masa ini, dan permintaan berikut tidak bermakna
  4. Teruskan Permintaan perkhidmatan D
Jika perkhidmatan B menggunakan mekanisme penghantaran tamat masa, maka perkhidmatan C harus melepaskan permintaan itu dengan segera, kerana tarikh akhir telah dicapai dan pelanggan mungkin telah melaporkan satu kesilapan. Apabila kami menetapkan penghantaran tamat masa, kami biasanya mengurangkan sedikit tarikh akhir penghantaran, seperti 100 milisaat, untuk mengambil kira masa penghantaran rangkaian dan masa pemprosesan selepas pelanggan menerima balasan.

Transmisi tamat masa dalam proses

Bukan sahaja penghantaran tamat masa diperlukan antara perkhidmatan, tetapi penghantaran tamat masa dalam proses juga diperlukan Sebagai contoh, Mysql, Redis dan For perkhidmatan B, tetapkan jumlah masa permintaan kepada 3s. Ia mengambil masa 1s untuk meminta Mysql dan kemudian meminta Redis sekali lagi Masa tamat adalah 2s. Ia mengambil masa 500ms untuk melaksanakan Redis dan kemudian meminta perkhidmatan B. Masa tamat adalah 1.5s. middleware atau perkhidmatan akan menetapkan tamat masa tetap dalam fail konfigurasi Kita perlu mengambil nilai minimum masa yang tinggal dan masa yang ditetapkan.

Satu artikel untuk memahami penghantaran tamat masa bagi perkhidmatan mikro

konteks melaksanakan penghantaran tamat masa

Prinsip konteksnya sangat mudah, tetapi fungsinya sangat berkuasa, dan perpustakaan standard bagi go juga telah dilaksanakan Selain konteks sokongan, pelbagai rangka kerja sumber terbuka juga telah melaksanakan sokongan untuk konteks telah menjadi standard, dan penghantaran tamat masa juga bergantung pada konteks.

Kami biasanya menetapkan konteks awal pada lapisan atas perkhidmatan untuk pemindahan kawalan tamat masa, seperti menetapkan tamat masa kepada 3s

ctx, cancel := context.WithTimeout(context.Background(), time.Second*3)defer cancel()
Apabila pemindahan konteks dilakukan, seperti meminta Redis dalam rajah di atas , kemudian dapatkan baki masa dengan cara berikut, dan kemudian bandingkan tamat masa yang ditetapkan oleh Redis untuk mengambil masa yang lebih kecil

dl, ok := ctx.Deadline()
timeout := time.Now().Add(time.Second * 3)if ok := dl.Before(timeout); ok {
    timeout = dl}
Penghantaran tamat masa antara perkhidmatan terutamanya merujuk kepada penghantaran tamat masa apabila RPC dipanggil. Untuk gRPC Dikatakan bahawa kita tidak perlu melakukan pemprosesan tambahan gRPC sendiri. tamat masa, seperti yang ditunjukkan dalam kod berikut

grpc-go/internal/transport/handler_server.go:79

if v := r.Header.Get("grpc-timeout"); v != "" {
        to, err := decodeTimeout(v)
        if err != nil {
            return nil, status.Errorf(codes.Internal, "malformed time-out: %v", err)
        }
        st.timeoutSet = true
        st.timeout = to}
Penyampaian tamat masa ialah barisan pertahanan penting untuk memastikan kestabilan perkhidmatan Prinsip dan pelaksanaannya Adakah penghantaran tamat masa telah dilaksanakan dalam rangka kerja anda? Jika tidak, ambil tindakan segera.

Penghantaran tamat masa dalam go-zero

Dalam go-zero, anda boleh mengkonfigurasi tamat masa perkhidmatan Timeout dan api gateway melalui rpc dalam fail konfigurasi, dan ia akan menjadi Pemindahan automatik antara perkhidmatan.

Artikel sebelumnya menerangkan cara melaksanakan kawalan tamat masa Go yang menerangkan cara menggunakan kawalan tamat masa.

Rujukan

"SRE: Penyahsulitan Operasi Google"

Alamat projek

github.com /zeromicro/go-zero

Selamat datang untuk menggunakango-zero dan bintang/garpu untuk menyokong kami!

Disyorkan: "tutorial golang"

Atas ialah kandungan terperinci Satu artikel untuk memahami penghantaran tamat masa bagi perkhidmatan mikro. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam