Rumah >Tutorial sistem >LINUX >Seni bina perkhidmatan mikro—penyelesaian penutupan yang anggun

Seni bina perkhidmatan mikro—penyelesaian penutupan yang anggun

王林
王林asal
2024-08-07 18:47:02723semak imbas
Abstrak: Penutupan aplikasi yang anggun dalam seni bina mikroperkhidmatan terutamanya merujuk kepada keluar yang terancang dan lancar bagi contoh aplikasi (iaitu, tiada insiden yang perlu ditangani).
1 Pengenalan

Penutupan aplikasi yang anggun dalam seni bina perkhidmatan mikro terutamanya merujuk kepada keluar yang terancang dan lancar bagi contoh aplikasi (iaitu, tiada insiden yang perlu dikendalikan). Penutupan pelayan aplikasi terbahagi terutamanya kepada dua kategori: penutupan aktif dan penutupan pasif, yang mana penutupan aktif dan kebanyakan penutupan pasif boleh mencapai penutupan yang anggun. Jika aplikasi tidak ditutup dengan baik, situasi berikut akan berlaku:

  • Kehilangan data: Data dalam memori tidak disimpan ke cakera
  • Rasuah fail: Fail yang sedang ditulis tidak dikemas kini, mengakibatkan kerosakan fail
  • Permintaan hilang: Permintaan yang menunggu dalam barisan hilang
  • Respons hilang: Transaksi yang berjaya belum sempat membalas
  • Gangguan urus niaga: Transaksi yang sedang diproses ke keadaan perantaraan diganggu secara paksa
  • Perkhidmatan ini tidak di luar talian: perkhidmatan huluan masih akan terus menghantar permintaan penggunaan ke perkhidmatan hiliran

Matlamat peningkatan elegan perkhidmatan mikro kami adalah untuk mengelakkan situasi di atas, dengan itu mengelakkan beban kerja campur tangan manual dan meningkatkan kebolehpercayaan perkhidmatan seni bina perkhidmatan mikro.

2 senario penggunaan

Penutupan anggun boleh menyelesaikan senario berikut:

  • BUNUH PID
  • Aplikasi secara automatik keluar tanpa diduga (System.exit(n))
  • Gunakan arahan skrip untuk menghentikan aplikasi

Penutupan anggun tidak dapat menyelesaikan senario berikut:

  • bekalan elektrik terputus secara mengejut
  • Kemusnahan fizikal mesin
  • KILL-9 PID atau taskkill /f /pid
3 ShutdownHook

Penutupan anggun Java biasanya dicapai dengan mendaftarkan ShutdownHook (cangkuk) JDK Apabila sistem menerima arahan keluar, ia mula-mula menandakan sistem berada dalam keadaan keluar dan tidak akan menerima mesej baharu lagi, kemudian memproses tunggakan mesej, dan akhirnya memanggil sumber Antara muka kitar semula memusnahkan sumber, dan akhirnya setiap utas keluar dari pelaksanaan. Kes demo ringkas adalah seperti berikut (versi ringkas):

 <span class="hljs-comment">/**
 * 优雅停机处理方式
 * 
 * <span class="hljs-doctag">@author</span> lry
 **/</span>
<span class="hljs-keyword"><span class="hljs-selector-tag">public</span></span> <span class="hljs-class"><span class="hljs-keyword"><span class="hljs-selector-tag">class</span></span> <span class="hljs-title"><span class="hljs-selector-tag">Main</span></span></span>{

    <span class="hljs-comment">/**
     * 启动应用
     **/</span>
    <span class="hljs-function"><span class="hljs-keyword"><span class="hljs-selector-tag">public</span></span> <span class="hljs-keyword"><span class="hljs-selector-tag">void</span></span> <span class="hljs-title"><span class="hljs-selector-tag">start</span></span><span class="hljs-params">()</span></span>{
        <span class="hljs-comment">// 第一步:启动应用服务……</span>

        <span class="hljs-comment">// 第二步:注册JDK钩子</span>
        <span class="hljs-selector-tag">Runtime</span><span class="hljs-selector-class">.getRuntime</span>()<span class="hljs-selector-class">.addShutdownHook</span>(<span class="hljs-keyword">new</span> Thread(<span class="hljs-keyword">new</span> Runnable() {
            <span class="hljs-meta"><span class="hljs-variable">@Override</span></span>
            <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">run</span><span class="hljs-params">()</span> </span>{
                System.out.println(<span class="hljs-string">"The hook running..."</span>);
                <span class="hljs-comment">//第三步:调用停机处理</span>
                stop();
            }
        }));
    }

    <span class="hljs-comment">/**
     * 停止应用
     **/</span>
    <span class="hljs-function"><span class="hljs-keyword"><span class="hljs-selector-tag">public</span></span> <span class="hljs-keyword"><span class="hljs-selector-tag">void</span></span> <span class="hljs-title"><span class="hljs-selector-tag">stop</span></span><span class="hljs-params">()</span></span>{
        <span class="hljs-comment">// 停止应用前停机处理(如:注销服务、标记不接受请求等)</span>
    }

}

Kawalan tamat masa
Biasanya, keluar anggun memerlukan mekanisme kawalan tamat masa Jika pemulihan sumber dan operasi lain sebelum keluar tidak selesai sebelum tempoh tamat masa dicapai, skrip penutupan terus memanggil KILL -9 PID untuk memaksa keluar masa yang lama.

4 Perkhidmatan mikro ditutup dengan baik

There is no unified solution for graceful shutdown of microservices. Just grasp the core ideas and design:
Drainage → Baffle → Waiting for shutdown

But in a microservice architecture, we can follow the following recommended rules to design a graceful shutdown mechanism for microservices:

  • All microservice applications should support graceful shutdown
  • Prioritize deregistration of service instances registered in the registration center
  • The access point of the service application to be down is marked as a denial of service
  • Upstream services support failover of services denied due to graceful outage
  • Appropriate shutdown interfaces are also provided according to specific business

Graceful downtime of microservice applications is mainly divided into two types according to the different user roles:

    • Elegant shutdown design for microservice business applications:

Seni bina perkhidmatan mikro—penyelesaian penutupan yang anggun

    • Elegant shutdown design for microservice business applications
    • Graceful shutdown design of microservice gateway application:

Seni bina perkhidmatan mikro—penyelesaian penutupan yang anggunMicroservice gateway application graceful shutdown design

The graceful shutdown of other layers of equipment can be derived from the above two types of solutions, such as:

  • Upgrade the entire backend architecture, you can switch directly from DNS or Nginx
  • Upgrade the Nginx layer, you can switch directly from DNS
5 use cases

Among the open source products in the industry, many products use JDK hooks to achieve graceful shutdown, such as the following products:

  • Netty
  • DUBBO

Atas ialah kandungan terperinci Seni bina perkhidmatan mikro—penyelesaian penutupan yang anggun. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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