Apa yang seharusnya menjadi ruang lingkup pemeriksaan kesehatan untuk sistem yang menggunakan webapp?

13

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:

  1. Apakah cukup baik untuk mempertimbangkan layanan yang sehat jika sistem orkestrasi melaporkan bahwa tugas sedang berjalan?
  2. Atau haruskah kita secara manual melakukan ping ke setiap layanan?
  3. Atau haruskah ia melangkah lebih jauh dan berusaha memastikan bahwa aplikasi-web melakukan apa yang seharusnya dilakukan, seperti menampilkan halaman web?
  4. 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?
  5. 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?

Phil Winder
sumber
2
Jangan pernah percaya pada laporan status otomatis. Selalu periksa status sendiri. Trivia: Salah satu penyebab insiden Tree Mile Island adalah indikator "katup tertutup" yang sebenarnya hanya menunjukkan bahwa perintah "katup dekat" dikeluarkan , bukan karena katup itu sebenarnya ditutup .
Kilian Foth
@KilianFoth: pada catatan yang sama: Saya tahu sebuah perusahaan yang secara relijius dan menyeluruh menguji bahwa cadangan mereka berfungsi. Kemudian, suatu hari, mereka mengalami kegagalan disk bencana dan menemukan: pemulihan mereka tidak.
Jörg W Mittag
7
Saya pikir itu adalah pekerjaan orang yang meminta Anda untuk "menulis cek kesehatan" untuk menentukan apa yang mereka maksud dengan "kesehatan". Kalau tidak, itu hanya dugaan saja.
Jörg W Mittag
1
Saya setuju dengan komentar @ JörgWMittag, tetapi saya bahkan akan melangkah lebih jauh. Anda harus mendapatkan persyaratan Anda tidak hanya dari orang yang mengatakan kepada Anda bahwa Anda perlu merancang "pemeriksaan kesehatan", tetapi juga mencari tahu siapa orang atau sistem yang menggunakan data yang merupakan bagian dari pemeriksaan kesehatan dan mencari tahu apa yang mereka butuhkan atau bagaimana mereka membutuhkannya. Ini adalah persyaratan Anda yang akan mendorong desain Anda.
Thomas Owens
1
Saya mengklarifikasi ini sedikit dan memilih untuk membuka kembali karena saya pikir pertanyaan inti adalah pada topik. Memahami bagaimana mengidentifikasi apa yang harus dimasukkan dalam pemeriksaan kesehatan adalah hal yang sangat normal untuk desain perangkat lunak, bahkan jika jawaban sebenarnya adalah "meminta persyaratan" (atau variasi untuk itu).
enderland

Jawaban:

15

Ini sulit diterapkan karena definisi apa yang sehat

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:

Apakah cukup baik untuk mempertimbangkan layanan yang sehat jika sistem orkestrasi melaporkan bahwa tugas sedang berjalan?

Tidak, hanya karena suatu proses sedang berjalan tidak berarti itu tidak digantung, sama sekali tidak berfungsi, atau berbagai kemungkinan lainnya.

Atau haruskah kita secara manual melakukan ping ke setiap layanan?

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.

Atau haruskah ia melangkah lebih jauh dan berusaha memastikan bahwa aplikasi-web melakukan apa yang seharusnya dilakukan, seperti menampilkan halaman web?

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? ').

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?

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).

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?

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.

enderland
sumber
2

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!

gbjbaanb
sumber
Dalam sistem yang saya tulis, saya hanya meminta setiap layanan yang tergantung untuk informasi versinya. Jika merespons tepat waktu (2500 ms dalam kasus saya) maka itu dianggap "naik". Saya meminta mereka semua secara paralel, jadi waktu respons terburuk saya terikat.
TMN
1

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.

Robbie Dee
sumber