Hari ini saya memiliki tugas untuk "menulis cek kesehatan" untuk layanan yang sudah berjalan lama yang merupakan sistem orkestrasi untuk menggunakan aplikasi web.
Saya mencoba untuk menentukan apa ruang lingkup pemeriksaan kesehatan itu, dan muncul pertanyaan-pertanyaan ini terkait dengan lingkup pemeriksaan kesehatan:
- Apakah cukup baik untuk mempertimbangkan layanan yang sehat jika sistem orkestrasi melaporkan bahwa tugas sedang berjalan?
- Atau haruskah kita secara manual melakukan ping ke setiap layanan?
- Atau haruskah ia melangkah lebih jauh dan berusaha memastikan bahwa aplikasi-web melakukan apa yang seharusnya dilakukan, seperti menampilkan halaman web?
- Apakah pemeriksaan kesehatan juga harus memeriksa apakah beberapa layanan dependen juga berjalan? Seperti database atau sistem orkestrasi itu sendiri. Atau apakah itu tanggung jawab pemeriksaan kesehatan lain?
- Dan yang terakhir, jika salah satu layanan dependen mati, dan aplikasi web kemudian gagal, haruskah aplikasi web melaporkan kesehatan yang buruk, atau apakah itu kesehatan yang baik, karena itu bukan kesalahan aplikasi web?
Saya tahu ini adalah 5 pertanyaan terpisah, tetapi semuanya berhubungan dengan ruang lingkup pemeriksaan kesehatan untuk layanan jangka panjang yang menggunakan aplikasi web, jadi saya pikir akan lebih masuk akal untuk membuat mereka dikelompokkan dalam satu pertanyaan.
Ini sulit diterapkan bagi saya karena saya tidak yakin definisi apa yang sehat, atau seperti apa pemeriksaan kesehatan standar untuk hal seperti ini.
Apa yang seharusnya berisi pemeriksaan kesehatan untuk layanan khusus ini?
sumber
Jawaban:
Anda menjawab pertanyaan Anda sendiri di sini. Definisi pemeriksaan kesehatan akan bervariasi, karena apa yang sehat bervariasi. Itu juga tergantung pada apa yang mengeluarkan cek kesehatan.
Pertanyaan yang bagus untuk ditanyakan kepada diri sendiri adalah, "dari sudut pandang si penanya, apakah layanan yang diperiksa berfungsi sebagaimana diharapkan?" Jika ini Anda, Anda harus mendefinisikannya. Jika itu adalah tim / layanan lain, Anda perlu mengidentifikasi standar / spesifikasi untuk pemeriksaan kesehatan.
Mungkin dalam organisasi besar, Anda akan memiliki semacam standar untuk apa yang harus dilakukan pemeriksaan kesehatan. Cari tahu itu.
Khususnya di sini, contoh webapp Anda berarti tidak boleh kembali sehat karena webapp tidak sehat. Tapi mungkin definisi Anda tentang "sehat" akan memasukkan ini sebagai "ok." Ini adalah bagian dari diskusi persyaratan di atas (sekali lagi, bahkan jika itu hanya kode Anda sendiri).
Rekomendasi saya dengan asumsi itu tidak ditentukan di tempat lain akan memiliki semacam kode status yang terkait dengan kegagalan yang berbeda. Ketika Anda meminta aplikasi web, itu mungkin mengembalikan kesalahan yang mengatakan "layanan dependen mati" dan klien Anda (atau apa pun yang melakukan pemeriksaan kesehatan) dapat mengetahui alasan klien mati.
Untuk pertanyaan yang diedit:
Tidak, hanya karena suatu proses sedang berjalan tidak berarti itu tidak digantung, sama sekali tidak berfungsi, atau berbagai kemungkinan lainnya.
Ini mungkin berhasil, tergantung pada cakupan fungsionalitas aplikasi Anda. Jika memverifikasi layanan merespons "Anda masih hidup?" ping maka ini mungkin semua yang diperlukan. Tetapi jika layanan dapat dengan mudah "hidup dan responsif tetapi tidak benar-benar berfungsi" maka mungkin Anda perlu memeriksa hal-hal lain juga.
Pemeriksaan kesehatan Anda perlu memastikan bahwa fungsionalitas yang diperlukan yang diharapkan berfungsi seperti yang diharapkan.
Jika kembali aplikasi Anda "sehat" dan tidak bisa melakukan apa yang perlu dilakukan, Anda mungkin juga menyingkirkan seluruh healthcheck karena akan memberikan hasil positif palsu (belum lagi bingung dengan sih dari orang yang mencoba untuk debug masalah - 'hey server web kami menunjukkan sehat, mengapa kita tidak bisa melihat halaman? ').
Ini agak tergantung. Jika layanan Anda bergantung pada layanan lain, sifat interaksi itu harus tercermin dalam API / panggilan jaringan yang dikirim ke sana di aplikasi Anda dan dimasukkan ke dalam cek kesehatan.
Misalnya, server web yang membaca dari basis data perlu memiliki informasi status tentang basis data yang dimasukkan ke dalamnya - atau aplikasi web akan macet jika panggilan API gagal. Anda dapat mengubah panggilan ini secara sepele untuk dimasukkan ke dalam cek kesehatan Anda.
Namun, jika layanan Anda mengirimkan acara ke konsumen yang mendengarkan, tanpa validasi apa pun, maka kurang penting bagi fungsionalitas aplikasi Anda bahwa konsumen masih hidup. "Sehat" ke aplikasi Anda mengirim pesan, tidak benar-benar menerimanya.
Pada dasarnya, jika layanan Anda perlu berbicara dengan layanan lain dan memverifikasi kesehatan mereka, masuk akal untuk setidaknya memiliki tingkat dasar pemeriksaan ini untuk pemeriksaan kesehatan layanan Anda. Ini seharusnya masuk akal secara konseptual mengingat apa yang baru saja saya katakan karena aplikasi Anda sudah akan menangani ini (atau crashing secara acak, saya kira).
Ini pada dasarnya dijawab di atas. Rekomendasi saya adalah meminta cek kesehatan Anda mengembalikan kode / pesan / apa pun yang memberikan informasi ini. Kedua informasi itu penting: bahwa layanan dependen yang dibutuhkan layanan Anda sudah mati dan akibatnya layanan Anda tidak akan berfungsi seperti yang diharapkan.
sumber
Umumnya pemeriksaan kesehatan berarti "apakah itu hidup dan merespons". Pemeriksaan lebih lanjut dari yang sangat terspesialisasi dan sepenuhnya bergantung pada penggunaan sistem. Apakah Anda bekerja ekstra untuk memeriksa apakah suatu sistem memproses permintaan dengan benar, itu terserah Anda, tetapi Anda harus melakukan hal-hal dasar terlebih dahulu - periksa apakah ada, periksa apakah ia dapat menerima permintaan dan akan mengembalikan respons.
Cara termudah untuk mengimplementasikan pemeriksaan kesehatan adalah dengan menuliskan perintah yang proses layanan gunakan dengan mekanisme yang sama dengan yang digunakan perintah lain, yang tidak melakukan apa pun selain mengembalikan pengakuan. Itu akan menunjukkan keabadian, dan bahwa sistem menerima dan memproses tanggapan.
Memeriksa sistem dependen bukan bagian dari pemeriksaan kesehatan, Anda harus tetap sederhana dan mandiri. Tambahkan cek kesehatan ke setiap layanan dependen secara bergantian. Dengan begitu Anda bisa mendapatkan daftar sistem yang berjalan dan sehat dan dengan mudah memberi tahu ketika ada yang buruk, yang mana itu!
sumber
Dalam pengalaman saya, layanan kritis cenderung memiliki fitur berikut:
Denyut jantung
Jika layanan berjalan secara teratur, ini hanya menulis baris ke file log atau semacamnya bersama dengan cap waktu untuk menunjukkan bahwa badan layanan menendang pada waktu tertentu.
Remah roti
Mirip dengan di atas, remah roti biasanya hanya dump nama metode (dan kadang-kadang parameter) untuk menunjukkan bahwa layanan memproses badan layanan seperti yang diharapkan dan keberadaan dalam aliran itu. Karena ini dapat menghasilkan lebih banyak output, ini biasanya dikontrol oleh file konfigurasi atau serupa sehingga mereka dapat dimatikan setelah layanan telah masuk.
Mungkin tergoda untuk menambahkan banyak hal lain seperti keadaan berbagai server, layanan, dan basis data dan sejenisnya. Sementara ini tidak diragukan lagi berharga, saya menyarankan agar tidak menulis sesuatu yang terlalu luas. Ini mungkin berguna untuk ketenangan pikiran Anda sendiri, tetapi perlindungan tersebut cenderung disalahgunakan begitu pihak-pihak yang bertanggung jawab atas berbagai titik sentuhan tahu bahwa mereka ada di sana. Sebelum Anda menyadarinya, Anda bisa menulis aplikasi diagnostik untuk seluruh perusahaan.
sumber