Jadual Kandungan
Masalah yang disebabkan oleh evolusi seni bina
Beberapa cara untuk menyelesaikan masalah
Mekanisme dan pelaksanaan pemutus litar
Perpustakaan pemutus litar Node.js Matang
Rumah hujung hadapan web tutorial js Analisis mendalam tentang mekanisme pemutus litar dalam Node.js

Analisis mendalam tentang mekanisme pemutus litar dalam Node.js

Oct 18, 2021 am 09:53 AM
node.js pemutus

Artikel ini akan membawa anda melalui mekanisme pemutus litar dalam Node.js saya harap ia akan membantu anda!

Analisis mendalam tentang mekanisme pemutus litar dalam Node.js

Masalah yang disebabkan oleh evolusi seni bina

Apabila kami menggunakan seni bina CS tradisional, pelayan menyekat permintaan disebabkan kegagalan dan sebab lain, yang mungkin menyebabkan pelanggan permintaan pelanggan kehilangan respons, menyebabkan sekumpulan pengguna tidak dapat mendapatkan perkhidmatan selepas satu tempoh masa. Kesan yang mungkin daripada keadaan ini adalah terhad dan boleh dianggarkan.

Walau bagaimanapun, dalam sistem perkhidmatan mikro, pelayan anda mungkin bergantung pada beberapa perkhidmatan mikro lain dan perkhidmatan mikro ini bergantung pada lebih banyak perkhidmatan mikro lain Dalam kes ini, perkhidmatan tertentu boleh menyebabkan kesesakan hiliran keseluruhan pautan disebabkan oleh penggunaan sumber yang melata dalam sekelip mata (dalam beberapa saat), yang kami panggil "perkhidmatan runtuh". [Pembelajaran yang disyorkan: "tutorial nodejs"]

Analisis mendalam tentang mekanisme pemutus litar dalam Node.js

Analisis mendalam tentang mekanisme pemutus litar dalam Node.js

Beberapa cara untuk menyelesaikan masalah

  • Mod fius: Seperti namanya, sama seperti litar rumah, jika voltan talian terlalu tinggi, fius akan bertiup untuk mengelakkan kebakaran. Dalam sistem yang menggunakan mod pemutus litar, jika didapati panggilan perkhidmatan huluan lambat atau terdapat banyak masa tamat, panggilan ke perkhidmatan akan ditamatkan terus, maklumat akan dikembalikan terus dan sumber akan dikeluarkan. dengan cepat. Panggilan tidak akan disambung semula sehingga perkhidmatan huluan bertambah baik.

  • Mod pengasingan: Bahagikan panggilan untuk sumber atau perkhidmatan yang berbeza kepada beberapa kumpulan permintaan yang berbeza Kehabisan sumber dalam satu kumpulan tidak akan menjejaskan permintaan untuk sumber lain, menghalang satu titik sahaja. Ini adalah reka bentuk pemulihan bencana yang sangat tradisional.
  • Mod pengehad semasa: Pemutus litar dan pengasingan ialah kedua-dua kaedah pasca pemprosesan boleh mengurangkan kebarangkalian masalah sebelum ia berlaku. Mod pengehad semasa boleh menetapkan ambang QPS maksimum untuk permintaan untuk perkhidmatan tertentu Permintaan yang melebihi ambang dikembalikan secara langsung dan tidak lagi menduduki sumber untuk pemprosesan. Walau bagaimanapun, mod pengehad semasa tidak dapat menyelesaikan masalah keruntuhan perkhidmatan, kerana keruntuhan itu sering disebabkan bukan oleh bilangan permintaan yang besar, tetapi oleh penguatan berbilang lapisan lata.

Mekanisme dan pelaksanaan pemutus litar

Kewujudan pemutus litar adalah bersamaan dengan memberi kita lapisan perlindungan Apabila kestabilan panggilan tidak baik, atau panggilan berkemungkinan gagal, Untuk perkhidmatan dan sumber, pemutus litar boleh memantau ralat ini dan gagal permintaan selepas mencapai ambang tertentu untuk mengelakkan penggunaan sumber yang berlebihan. Di samping itu, pemutus litar juga mempunyai fungsi mengenal pasti secara automatik status perkhidmatan dan memulihkannya Apabila perkhidmatan huluan kembali normal, pemutus litar boleh secara automatik menentukan dan menyambung semula permintaan biasa.

Mari kita lihat proses permintaan tanpa pemutus litar: Pengguna bergantung pada ServiceA untuk menyediakan perkhidmatan, dan ServiceA bergantung pada perkhidmatan yang disediakan oleh ServiceB. Andaikan ServiceB gagal dalam masa 10 minit , untuk setiap permintaan Akan ada kelewatan 10 saat sebagai balasan.

Analisis mendalam tentang mekanisme pemutus litar dalam Node.js

Andaikan kami mempunyai N Pengguna yang meminta perkhidmatan ServiceA dalam beberapa saat, sumber ServiceA akan digunakan kerana permintaan kepada ServiceB digantung, dengan itu menolak sebarang permintaan seterusnya daripada Pengguna. Bagi pengguna, ini bermakna kedua-dua ServiceA dan ServiceB gagal pada masa yang sama, menyebabkan keseluruhan pautan perkhidmatan runtuh.

Dan apakah yang berlaku apabila kami memasang pemutus litar pada ServiceA?

  • Selepas bilangan kegagalan mencapai ambang tertentu, pemutus litar akan mendapati permintaan kepada ServiceB tidak sah Pada masa ini, ServiceA tidak perlu meneruskan permintaan ServiceB, tetapi terus mengembalikan kegagalan, atau Gunakan data sandaran daripada Fallback lain. Pada masa ini, pemutus litar berada dalam keadaan litar terbuka.

  • Selepas tempoh masa, pemutus litar akan mula bertanya secara berkala sama ada ServiceB telah dipulihkan Pada masa ini, pemutus litar berada dalam separuh terbuka negeri.

  • Jika ServiceB telah dipulihkan, pemutus litar akan diletakkan dalam keadaan off Pada masa ini, ServiceA akan memanggil ServiceB seperti biasa dan mengembalikan hasilnya.

Analisis mendalam tentang mekanisme pemutus litar dalam Node.js

Rajah status pemutus litar adalah seperti berikut:

Analisis mendalam tentang mekanisme pemutus litar dalam Node.js

Ia boleh dilihat bahawa pemutus litar Beberapa titik teras adalah seperti berikut:

  • Tamat masa: berapa lama permintaan bertahan sebelum ia menyebabkan kegagalan

  • Ambang kegagalan : iaitu, pemutus litar mencetuskan litar terbuka Sebelum ini, bilangan kegagalan yang perlu dicapai

  • Cuba semula tamat masa: Apabila pemutus litar berada dalam keadaan litar terbuka, berapa lama masa yang diambil untuk mencuba semula permintaan, iaitu, masukkan keadaan separuh terbuka

Dengan pengetahuan ini, Kita boleh cuba mencipta pemutus litar:

class CircuitBreaker {
  constructor(timeout, failureThreshold, retryTimePeriod) {
    // We start in a closed state hoping that everything is fine
    this.state = 'CLOSED';
    // Number of failures we receive from the depended service before we change the state to 'OPEN'
    this.failureThreshold = failureThreshold;
    // Timeout for the API request.
    this.timeout = timeout;
    // Time period after which a fresh request be made to the dependent
    // service to check if service is up.
    this.retryTimePeriod = retryTimePeriod;
    this.lastFailureTime = null;
    this.failureCount = 0;
  }
}
Salin selepas log masuk

Membina mesin keadaan pemutus litar:

async call(urlToCall) {
    // Determine the current state of the circuit.
    this.setState();
    switch (this.state) {
      case 'OPEN':
      // return  cached response if no the circuit is in OPEN state
        return { data: 'this is stale response' };
      // Make the API request if the circuit is not OPEN
      case 'HALF-OPEN':
      case 'CLOSED':
        try {
          const response = await axios({
            url: urlToCall,
            timeout: this.timeout,
            method: 'get',
          });
          // Yay!! the API responded fine. Lets reset everything.
          this.reset();
          return response;
        } catch (err) {
          // Uh-oh!! the call still failed. Lets update that in our records.
          this.recordFailure();
          throw new Error(err);
        }
      default:
        console.log('This state should never be reached');
        return 'unexpected state in the state machine';
    }
  }
Salin selepas log masuk

Tambahkan fungsi yang tinggal:

// reset all the parameters to the initial state when circuit is initialized
  reset() {
    this.failureCount = 0;
    this.lastFailureTime = null;
    this.state = 'CLOSED';
  }

  // Set the current state of our circuit breaker.
  setState() {
    if (this.failureCount > this.failureThreshold) {
      if ((Date.now() - this.lastFailureTime) > this.retryTimePeriod) {
        this.state = 'HALF-OPEN';
      } else {
        this.state = 'OPEN';
      }
    } else {
      this.state = 'CLOSED';
    }
  }

  recordFailure() {
    this.failureCount += 1;
    this.lastFailureTime = Date.now();
  }
Salin selepas log masuk

Apabila menggunakan pemutus litar , hanya bungkus permintaan dalam kaedah Panggilan contoh pemutus litar dan panggilnya:

...
const circuitBreaker = new CircuitBreaker(3000, 5, 2000);

const response = await circuitBreaker.call('http://0.0.0.0:8000/flakycall');
Salin selepas log masuk

Perpustakaan pemutus litar Node.js Matang

Red Hat mencipta satu pelaksanaan pemutus litar Node.js yang sangat awal yang dinamakan Opossum, pautannya ada di sini: Opossum. Untuk sistem teragih, menggunakan pustaka ini boleh meningkatkan toleransi kesalahan perkhidmatan anda dan secara asasnya menyelesaikan masalah kegagalan perkhidmatan.

Alamat asal: https://juejin.cn/post/7019217344601948173

Pengarang: ES2049 / Looking for Singularity

Lebih lanjut pengetahuan berkaitan pengaturcaraan sila layari: Video Pengaturcaraan! !

Atas ialah kandungan terperinci Analisis mendalam tentang mekanisme pemutus litar dalam Node.js. 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)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu 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)

Artikel tentang kawalan memori dalam Node Artikel tentang kawalan memori dalam Node Apr 26, 2023 pm 05:37 PM

Perkhidmatan Node yang dibina berdasarkan bukan sekatan dan dipacu peristiwa mempunyai kelebihan penggunaan memori yang rendah dan sangat sesuai untuk mengendalikan permintaan rangkaian besar-besaran. Di bawah premis permintaan besar-besaran, isu yang berkaitan dengan "kawalan memori" perlu dipertimbangkan. 1. Mekanisme kutipan sampah V8 dan had ingatan Js dikawal oleh mesin kutipan sampah

Penjelasan grafik terperinci tentang memori dan GC enjin Node V8 Penjelasan grafik terperinci tentang memori dan GC enjin Node V8 Mar 29, 2023 pm 06:02 PM

Artikel ini akan memberi anda pemahaman yang mendalam tentang memori dan pengumpul sampah (GC) enjin NodeJS V8 saya harap ia akan membantu anda!

Node.js 19 dikeluarkan secara rasmi, mari bercakap tentang 6 ciri utamanya! Node.js 19 dikeluarkan secara rasmi, mari bercakap tentang 6 ciri utamanya! Nov 16, 2022 pm 08:34 PM

Node 19 telah dikeluarkan secara rasmi Artikel ini akan memberi anda penjelasan terperinci tentang 6 ciri utama Node.js 19. Saya harap ia akan membantu anda!

Mari bercakap secara mendalam tentang modul Fail dalam Node Mari bercakap secara mendalam tentang modul Fail dalam Node Apr 24, 2023 pm 05:49 PM

Modul fail ialah enkapsulasi operasi fail asas, seperti membaca/menulis/membuka/menutup/memadam fail, dsb. Ciri terbesar modul fail ialah semua kaedah menyediakan dua versi **segerak** dan ** asynchronous**, dengan Kaedah dengan akhiran penyegerakan adalah semua kaedah penyegerakan, dan kaedah yang tidak semuanya adalah kaedah heterogen.

Mari kita bincangkan tentang cara memilih imej Node.js Docker terbaik? Mari kita bincangkan tentang cara memilih imej Node.js Docker terbaik? Dec 13, 2022 pm 08:00 PM

Memilih imej Docker untuk Node mungkin kelihatan seperti perkara remeh, tetapi saiz dan potensi kelemahan imej itu boleh memberi kesan yang ketara pada proses dan keselamatan CI/CD anda. Jadi bagaimana kita memilih imej Node.js Docker yang terbaik?

Apakah yang perlu saya lakukan jika nod tidak boleh menggunakan arahan npm? Apakah yang perlu saya lakukan jika nod tidak boleh menggunakan arahan npm? Feb 08, 2023 am 10:09 AM

Sebab mengapa nod tidak boleh menggunakan arahan npm adalah kerana pembolehubah persekitaran tidak dikonfigurasikan dengan betul Penyelesaiannya ialah: 1. Buka "Sistem Sifat"; 2. Cari "Pembolehubah Persekitaran" -> "Pembolehubah Sistem", dan kemudian edit persekitaran. pembolehubah; 3. Cari lokasi folder nodejs;

Mari bercakap tentang mekanisme GC (pengumpulan sampah) dalam Node.js Mari bercakap tentang mekanisme GC (pengumpulan sampah) dalam Node.js Nov 29, 2022 pm 08:44 PM

Bagaimanakah Node.js melakukan GC (pengumpulan sampah)? Artikel berikut akan membawa anda melaluinya.

Mari kita bincangkan tentang gelung acara dalam Node Mari kita bincangkan tentang gelung acara dalam Node Apr 11, 2023 pm 07:08 PM

Gelung peristiwa ialah bahagian asas Node.js dan mendayakan pengaturcaraan tak segerak dengan memastikan bahawa utas utama tidak disekat Memahami gelung peristiwa adalah penting untuk membina aplikasi yang cekap. Artikel berikut akan memberi anda pemahaman yang mendalam tentang gelung acara dalam Node.

See all articles